I never thought I would write this. I used to love programming outside of work - and I still claim to. But I don't.
This isn't about how programming as a career drains interest in programming in general. I like my job and people often come to me when they need to debug complex failures, quickly coming up with heuristics for hard problems and structuring new code bases. I don't have any bottlenecks there.
Nor has my job been draining time from my personal life. I do find time, I still get excited about problems I want to solve. I do open up Emacs and start coding up new projects all the time. I just never finish.
When I was younger, I didn't care what others thought about me. When I was 19, sitting through 24-hour hackathons, I wanted to get to the solution. I didn't care that I was writing an extension for Gedit or cobbling up a website with JQuery/YUI and a backend with Flask. I had fun. Somewhere around this period, I started following HackerNews. I found new languages that people seemed to love - Haskell, and Common Lisp - world's completely new to me. And that is where my problems started. For the few years I was still in university, this still didn't matter. I still used whatever it took to finish what I started. Something changed when I joined work though.
I started judging myself for using inferior tools.
I no longer wanted my hobby projects to be done for the sake of a hobby. No! It had to be an art-form. I knew I could get things done in Python or C and it didn't charm me anymore. But so what? Everyone did.
I wanted to do something unsullied by average developer. I had to prove to myself that I wasn't an imposter. (And in doing so, I have now realized that I probably am one). I would almost instantly face analyses paralysis.
Should I pick Haskell? Oh, off I go setting up NixOS. Still, if I manage to start the project, 300 line in I would realize that Rust would have fit better. But then again, some time into Rust I would realize that I am unwrapping and cloning a lot - maybe I should just rely on the GC. Over to Common Lisp - realize it doesn't have the bindings I need. Switch to Go - see design warts all over.
I wanted to get this off my chest today - I am not a smart man. If I were, I would have realized that the goal wasn't ideological purity - no one is going to judge me for choosing language X over Y. No one cares if my one-star project on Github uses more clones and unwraps than it should. No one, but me.
I have made a decision. I am going to pick a tool and stick with it through thick and thin till December of this year. The language is Clojure. I realize that this post itself is me justifying a tool hop. I sound like I naively hope that Clojure would be a silver bullet that lets me have fun. But that isn't it. I am not seeking Clojure as a panacea. I choose it because I need to choose. One last time.
I thought about it long and hard and I enumerate them here for the next time my brain inevitably tries to get me into another tool-hop.
- Clojure lets me confront my prejudices: against the JVM and dynamically typed languages.
- It has a mature community that takes time with decisions and isn't driven by fads. This is something I need to definitely learn from.
- It isn't a language I use or will ever use at my current dayjob. So, there would still be something new to look forward to in the evenings.
- It is a complete language that can serve any type of hobby tool I want to develop - and yes, I intend to use ClojureScript as well.
- There is a fairly large library ecosystem - shouldn't sidetrack me often.
- It is a good mix of the exotic and pragmatic - that would keep me interested and still making forward progress.