If I had more time, I would have written a shorter letter
I almost certainly have some form of anxiety that makes choosing between options that are important to me difficult.
When I say important, I don't mean like life or death or even anything that would appear important to an outside observer. I'm mainly talking about something internal to myself. Something along the lines of a value system or the way I perceive myself.
To complicate matters, the more we learn, the more options are available to us. How we weight our decisions becomes slightly more difficult as more doors are open to us.
This applies to many things but for the purpose of this article, I'll talk about something technical: learning to program and making choices as we learn more.
My first foray into programming was Java 1.0. I was a kid and had no programming experience. A programmer at my mom's work suggested I learn Java if I wanted to get into programming. At the time (1996?), Java had just come out and if I recall, this programmer actually did all his work in Perl so go figure.
My mom bought me a book at Costco and I remember the smell of the pages and the excitement of new opportunities. The book was Java Unleashed.
Needless to say I didn't get far. As a total noob, the book wasn't exactly a gentle introduction. Later on I purchased a book with CD that had slides to walk a person through it. This was the first breakthrough I'd had in programming.
I remember vividly one of the first programs I had ever written was a tiny calculator where I could enter how many hours I worked and it would guesstimate my take home pay after taxes and such.
I didn't necessarily progress too much in my knowledge because I was a kid. I learned just enough to do what I wanted and, being a self-learner, you have a tendency to only learn what you think is important and little else.
The point of the story above is that, due to my lack of knowledge and direction, the door to the world I wanted to enter was uncomplicated and provided for me (Just Learn Java!).
The steps were clear and progress was easy to track. Like a kid learning to ride a bike, success was easy to see and failure was obvious.
The decisions I needed to make were almost entirely the work of others. I just needed to follow what I'd been given.
As I continued in my technical journey, I added a few things to my knowledge. I dabbled a little in C to create a tiny game using Mode 13h. I started doing some web development in HTML which opened up more doors for me.
Probably the biggest and most pivotal decision of my technical life was the first time somebody introduced me to Linux. Up until then, I had been a Windows user and knew little else of other operating systems save MacOS. My friend's dad was a technician at Intel and we enjoyed discussing nerdy/electronic things. He sent me home with a boxed version of SuSE and you could say I was hooked from the first bash prompt I had ever encountered.
Sidenote: It was literally only a bash prompt. I couldn't figure out how to get a graphical desktop until I tried the slightly more friendlier distro Mandrake.
It's here where things get tricky. I was now a budding web developer doing small projects for myself and managing the website for our high school newspaper.
For reasons beyond my understanding, Linux strongly appealed to me and my decisions technology-wise became more complicated. My choice of technologies now depended on how I could use them for both Windows and Linux.
After high school, my knowledge of Linux and web development landed me entry level jobs writing Perl web applications. Later this shifted into doing Linux, Apache, MySQL, and PHP (LAMP).
While my knowledge was growing in various fields, the options were still pretty simple. You could get pretty far using just the LAMP stack and most of the tools you needed were provided out of the box.
Likewise, if I had decided to go a different route, say, with Microsoft technologies, they had their own "blessed" path that made the decision easier.
Fast forward more than a few years and I've worked across my different technologies: Drupal, Rails, and Python/Django.
The thing about gaining knowledge in a certain field is you also develop a sense for the things you don't like. You find things in your existing stack of choice that needle you and can range from annoyance to frustration.
This knowledge only comes after exercising a technology more thoroughly. The more invested into something you are, the more qualms you may develop regarding it.
Some people stop and live right here. They have their tools, they know them well, and they deploy them for every problem they encounter. This is a good thing and I find myself in envy of them.
Not that I don't also have my go to tools I reach for when I encounter a problem. Just that, due to curiosity or frustration, I'm always goofing around with things on the other side of the fence. What I gain is a broader knowledge of how others are doing things "out there". What I suffer however is always a "grass is always greener" situation.
The fact is, no toolset is going to meet every issue you throw at it. Also, some things are going to have a much more well developed solution in some aspects and be more underdeveloped in others. There are always trade-offs in these things.
To throw more anxiety on the situation, there's also other, often competing, things that factor into how we choose our tools:
As I've branched out into more areas and my knowledge has grown in a way that allows me to try new or more difficult things, I find myself hitting up against the same wall again and again: analysis paralysis.
My personal disposition makes it very hard for me to choose something when the act of doing so means NOT using the alternatives. Call it fear of missing out or fear of commitment, the issue is very real and often I end up in a cycle of not making progress in anything. I'm always second guessing my choice, or shortly after deciding and finding a feeling of peace, I'm enticed back into indecision when there's something new being discussed "over there".
It sucks. I don't like it. It's a problem that has prevented me from doing many things that I would like to do.
It's also not something specific to technology. I find this issue crops up in other areas of my life. Anything that could have potential value or matter in the long run is up for debate in my mind.
So what's the way out? I'm not certain. I've done best when I worried least about my tools and just focused on the project I want to build. When I don't put so much weight on my choices and focus on outcomes, I find I make better progress.
This is hard for me. I wish it was easier. I like to talk. A lot. Often talking is the primary way I sort through my feelings and thoughts on things. What this usually means is that my poor, non-technical wife knows WAY to much about my industry than she should. But she's patient. And a good listener.
I've recently decided to put some time into writing. Not so much to spare my wife, but to detail my thoughts in away I can review them later. In a hope that I can see patterns and not re-process things like I have a tendency to do.
What I hope to find as I grow in knowledge is a wisdom to navigate all of these open doors. The wisdom to seek what I'm interested in but also a pragmatism to temper my enthusiasm.
Previous Post: Jupyter and DevOps