Every time I would start to get into a programming language, a nagging feeling would arise. I would start to wonder about the value of the language.
“Am I wasting my time learning a “dead” language?”
“Will this help me find a job?”
“Is this the kind of language that will teach me bad habits?”
“Is this the right language for beginners?”
The last question is the most interesting to me because I was still thinking of myself as a beginner even after a few years of programming. I didn’t understand what was wrong with me. I felt that I knew so much about programming because I had all this exposure to so many different languages and programming paradigms. I knew all the basic data structures and algorithms. I understood recursion and how compilers work. But, in all my time programming I had never really built anything. I had never really completed a significant project. Every time, that nagging feeling got in my head before I even got a strong grasp on how to use the language in the real world.
I would go to the internet for a hefty dose of confirmation bias and discover someone saying exactly what I was worried about; I should in fact be learning some other language.
So, I would switch languages. I would buy a new book or two and be on my way down what I now thought was the correct path. This is the one that I’m going to master and I’m going to finally get that programming job I’ve been talking about for years.
I did end up getting a few interviews for software developer positions. Notably, I lucked into an interview for a software developer position at Google (which I bombed horribly and am thoroughly convinced that had I known about PEDAC back then I would have at least passed the first round). But, after that interview I knew it was just never going to happen. I ended up getting a pretty good business analyst job and stopped programming for a while. I was tired of the constant feeling of spinning my wheels and not understanding why.
One of the most valuable things I have learned working through the back-end portion of Launch School’s core curriculum is to ignore the Fear of Missing Out. I’ve seen it mentioned on Slack several times, and in fact discussing topics outside of the core curriculum is typically discouraged in most of the Slack channels. At first, I thought this seemed a bit strict. What’s the harm in talking about some topics that Launch School students might find useful later on? But over time, I think I’ve come to understand. There is a proper point on your learning path for being introduced to certain topics. Sometimes, seeing those things too early can make you wonder if maybe you’re missing out on something. Maybe, you will decide you need to focus on that topic because it seems important, even though you’re not ready for it. Then you might hit that wall, like I did. Repeatedly. After a while of beating your head against that wall, you might just give up, like I also did.
I am more comfortable with Ruby after 8 months of working through the core curriculum than I have ever been with any language I’ve learned. I am confident that I could use the language to complete just about any project I could think of. I have never felt that way about a programming language nor have I felt as confident that I could learn another language in a very short amount of time with very little fuss.
There have been several times where I started to think that maybe it would be beneficial to start messing around with another language in tandem with the core curriculum, but I have made a conscious effort to refuse to scratch that itch. I was probably an extreme case of someone suffering from FOMO, but Launch School’s Mastery Based Learning approach and my decision to just stay the course has broken that bad habit.
So, back to the question that inspired me to write this. Do I think that the person who is weighing switching tracks has been given bad advice? No, not necessarily. It might be useful advice. But, I believe that the advice is being directed towards the wrong audience. As we work our way through Launch School’s curriculum, we shouldn’t be concerned with what language we will eventually use on the job. In fact, I’m pretty confident that when it comes time to worry about that, learning how to be useful with a new language could probably be completed over the course of a weekend.
Over the years, there have been a few occasions where someone would ask for my advice on how to learn programming. My answer was usually far too complicated, giving them multiple options and trying to explain the pros and cons of each option. I’ve since realized that my answer to this question may immediately be putting FOMO right into people’s heads before they even start. I think that the advice that inspired me to write this article could have the same effect. Now, my advice is to just pick any language and start building stuff, or find a program that fits your goals like Launch School and stick with it.
The philosopher Voltaire wrote something like “…the best is the enemy of the good”. In my experience, this applies to most endeavors. In the past few months, I’ve been dabbling with astrophotography. It’s a difficult hobby and I made the mistake of buying some gear that I wasn’t quite ready for because I was dissatisfied with my images after comparing them to others on the internet. Jumping ahead like this caused quite a bit of frustration and ruined a few nights of clear skies for me (which are more rare than you’d think). Fortunately, I was able to overcome these new challenges, but a quick look at forums for used astronomy equipment will demonstrate that it’s easy to get in over your head and give up.
I captured the image below without the aforementioned fancy gear.
Compare that image to my (so far) only successful attempt with the fancy gear. For this image, I used a guide-scope and an additional camera to allow for autoguiding, which theoretically should allow for longer exposures. It also greatly complicates the process.
I personally feel that the image created with the simple gear is more impressive. More importantly, I feel like I learned more while using the simple gear because I was focused on the fundamentals of the hobby.
The tools you use don’t matter that much until you’ve really nailed down the fundamentals. Once you’ve done that, figuring out how to use other tools will be a relatively simple task.