This is why you should program for fun instead of just for money. Sure its fun creating some interface for an API. Sure its interesting to figure out a problem some customer is having. Sure, it can be rewarding to create a new system as part of your companies product. But you know what is really fun? Creating something from scratch. Sculpting it. Refactoring it. Trying things. Cutting things. Learning things. Exploring new ideas. All of the stuff that typically doesn't fit well when money is involved.
If you really want to reconnect with the pure art of programming, just start a hobby project. Burn that candle at both ends. Grind through the self doubt. Grind through the challenge. Just keep perusing that 1 idea. If you finish it, you created your own little universe. If no-one sees it, who cares? Art is a form of expression and so is programming.
A word of advice that you might or might not need to learn on your own: Don’t let all the habits from work creep in—dependencies, tooling, code style, neat documentation, multi-platform support, proper commit messages—and most importantly, any notion of "MVP" or "feature creep". Try to make an effort to get side tracked while you’re side tracked, do things that you couldn’t justify doing at work, the stuff no user would notice, the polishing that you’d always postpone, or the massively overengineered spec-compliant OAuth server in your personal book library.
Nobody can judge you for it. There’s no deadline to meet. So what if it’s never finished? It’s cathartic to go as deep into the rabbit hole as you want, a freedom that your day job probably not grants you, and thus all the more valuable.
At least I realized I loose interest in my side projects the moment they become a chore, and then I remember to tell Dependabot to go to hell again.
This is so true. It’s good to be reminded of it. Doing these kind of things is what keeps me interested in the field.
These days I was interested in messing around with something different and went through rabbit hole of running FreeBSD in a VM. In an objective sense, it never had any purpose, neither I have any specific goal with it. From an outsider perspective, it’s all just a waste of time.
But it’s these little things — getting obsessed about making some random thing work (or trying until I’m convinced it won’t) — that makes me do things I normally wouldn’t, and I end up learning unexpected things on the way. I’m now trying to map the holes in my terminal and UNIX tools knowledge just because of that, and it led me to read more details about UNIX history, GNU history, watch videos on these things, look for blogs etc. You never know where something like this will lead you to.
>> At least I realized I loose interest in my side projects the moment they become a chore
Unfortunately, any reasonably complex side project eventually becomes work. It's still useful to keep grinding, as it builds perspective on why things are built the way they are, even when you have "freedom" to to implement them any way you like. What you don't have is infinite time though so if you wanna actually be able to use the darn thing, you have to settle for an imperfect design which soon enough will start to show it's limitations but instead of rewriting, you keep duct taping if because something that just works today is infinitely more business valuable than perfect tomorrow. Particularly when you realized from experience that tomorrow still won't be perfect, just late.
For clarification, I'm talking about building an automated trading system. And to get an idea of the complexity involved, just take a look at the "order" class in Interactive Brokers API. If you thought (side, price, quantity) is what defines an order, you're being naive: https://interactivebrokers.github.io/tws-api/classIBApi_1_1O...
Also even when you start with a mindset "I don't need all of this, my stuff will be simple", as I said, over enough time, use cases pile up and your original "simple" design either has to give way or become "useless".
I think it's an incredibly spoiled perspective that anything that becomes a chore is no longer fun or worth doing. Practicing piano is a chore. Repeating the same piece, the same finger movements for an hour or two isn't necessarily fun. But it is satisfying at the end of the day and it is fulfilling. Fun isn't necessarily the goal. I can spend hours banging my head against the wall while trying to build a piece of software. It can be tedious, frustrating, and tiring. It's rarely "fun". But in the end, it's satisfying and it's fulfilling and tomorrow I'll do it again because I want to.
> you keep duct taping if because something that just works today is infinitely more business valuable than perfect tomorrow.
See, that’s exactly what I was arguing against. Side projects are allowed to be for fun, they don’t need to have business value at all! Not everything you do needs to be a hustle. Doing something for the sake of doing, not achieving, is a great way of honing your skills while relieving stress. Human minds are not built for KPIs, but experiencing the progress of making something to your own design.
What you are working on seems genuinely useful, and if that gives you joy, all props to you. I however advocate for programmers that find joy in programming to work on a project far removed from any economic value, and just focus on the act of creating.
> But you know what is really fun? Creating something from scratch. Sculpting it. Refactoring it. Trying things. Cutting things. Learning things. Exploring new ideas. All of the stuff that typically doesn't fit well when money is involved.
All my programming happens in the context of art (computer music and media art). I do all the things you describe while (indirectly) earning money with it. If you build something that you deeply enjoy, money won't take that joy away. I guess it's just hard to find this kind of satisfaction in typical corporate jobs where you're just a replacable wheel in the machine and your code will be replaced in a few years anyway.
We can forgive a man for making a useful thing as long as he does not admire it. The only excuse for making a useless thing is that one admires it intensely.
If you really want to reconnect with the pure art of programming, just start a hobby project. Burn that candle at both ends. Grind through the self doubt. Grind through the challenge. Just keep perusing that 1 idea. If you finish it, you created your own little universe. If no-one sees it, who cares? Art is a form of expression and so is programming.