Weston Ludeke

Don’t Learn a Programming Language. Learn Software Engineering

Published (updated: ) in code.

A master and his apprentice. via @rankandfiledostoevsky on Unsplash used under a Creative Commons license.

Aspiring programmers who are looking to eventually build a career as a Software Engineer frequently ask which programming language they should select to learn (Ruby? Javascript? Python?). They often get lost in the weeds, endlessly debating minutiae about which language is best to begin their learn-to-code journey. 

Noobs who’ve never previously written a single line of code also sometimes get caught up worrying about which programming language is popular and if there are enough jobs available in a given language. While these aren’t unimportant and useless things to think about, I believe they’re irrelevant at the beginner stage of the learning journey.

Instead of being overly worried about which language is the best to learn, I recommend aspiring developers take a step back and think about things at a more macro level. Don’t try to become a “Javascript Developer”; instead reframe your focus to become a “Software Engineer”. The former is someone good at using only one tool. The latter is a master craftswoman who has the foundational programming knowledge to be language agnostic, that is, to be able to use any language or tool in her toolbox to accomplish a given goal or task.

Do you want to become an expert at hammering a nail into a block of wood? Or, do you want to learn how to build an entire house from the ground up? The former is someone whose ability is limited to only the capabilities of that one tool. The latter has the higher-level conceptual knowledge to pick up new tools on the fly and will use whichever tool is best to get the job done.

Instead, an aspiring developer who has written next to zero lines of code should be more focused on learning software engineering by initially selecting one language to learn at the start and learning that language very deeply. Learn that one programming language so well that there are (almost) no surprises with the language left. Once you’ve mastered that first language, including its syntax, quirks, and oddities, it will be much easier to pick up a second language.

Higher-Level Thinking

By having a more limited mindset that is focused on being just a “Python developer” for example, if you come across an awesome job opening at a cool company that is hiring Ruby developers, you’ll be mentally counting yourself out for those roles and you won’t even bother considering applying.

Instead, be someone that knows the fundamentals of software engineering so deeply that you have the confidence to be able to learn any additional programming language as needed. This person would see a job opening asking for experience in a language they have no experience with and will still send an application. They would do this knowing that they’d be able to articulate to the company’s hiring team that they have no doubt in their ability to quickly learn the syntax of the new language, or any additional languages as needed.

Instead of worrying about which programming language is popular, think about how to learn the higher-level skills that help make a great software engineer great: Learn how to write detailed pseudocode before you start coding up a new application. Learn how to break down complicated problems into smaller chunks so you understand everything that’s happening in an individual function or across an entire application line-by-line. Learn how to read a language’s official documentation. And finally, learn how to ask questions on forums like StackOverflow the right way so you receive helpful responses from more experienced coders.

Programming languages come and go in popularity, and frameworks and libraries change even faster. If your knowledge isn’t siloed into one language, your career hopefully won’t be limited as the tech industry rapidly shifts and evolves away from the existing languages you know. You’ll still have the fundamentals of Software Engineering to carry over to new languages that you’ll be learning in the future. 

Okay, But What Language Should I Choose?

Now that I’ve mentioned that total beginners shouldn’t even worry about the popularity of a language, they still need to use some other criteria to select a language to learn. At this stage, the aspiring developer likely doesn’t have the confidence yet that they’ll ever have the capabilities to ever become a professional developer. It still seems like a huge, insurmountable mountain to climb.

Instead of focusing on the popularity of a given language, I recommend instead focusing on selecting a language that is known for being relatively easy for complete beginners to learn. From the research I’ve done over the years, if you’re considering a career in web application development, both Python and Ruby are generally considered beginner-friendly languages for total noobs. However, don’t take my word for it: Create a free account on a site like Codecademy and play around with a few different languages and see which syntax style you like the best.

Learn the Basics, Then Master The Fundamentals

Once you’ve chosen your first language, and played around with a tool like Codecademy to learn some basic syntax, you can then choose to learn even deeper if you’d like to become a professional developer.

A few years ago, I learned some basic HTML and CSS, followed by dipping my toes into Ruby and Javascript. Even though I knew some syntax, I could still barely do much in either language. I did some digging and researched some different online resources to continue my journey to become a paid software engineer. After testing out various learning options like FreeCodeCamp, The Odin Project, and a few Udemy courses, I eventually found the program which would change my life, Launch School.

One of the biggest reasons I enrolled at Launch School was because of the program’s focus on teaching the fundamentals of software engineering. The program has completely shifted my mentality to think at a higher level using the concepts outlined earlier in this article. It’s helped me reframe my thinking from, “I’m learning the Ruby programming language” to “I’m learning Software Engineering using the Ruby language”. See the difference? 

Launch School’s core curriculum has two tracks, one for Ruby and one for Javascript. When I enrolled in the program in January 2020 I chose the Ruby track as I thought it was a little easier for me to understand given that I had so little prior programming experience. Interestingly enough, even though Launch School calls it a “Ruby track”, in the latter portion of that track students also learn the Javascript programming language very deeply (perhaps it should be called the “Ruby and Javascript track”?).

While there are some differences in the syntax and built-in methods between the two languages, the higher-level programming concepts and problem-solving skills that I learned using Ruby earlier in the curriculum are very similar to those in Javascript. When I finished the Ruby portion of the core curriculum and began the Javascript portion of the curriculum, I was able to quickly adjust because Launch School had already taught me many of the fundamentals of Software Engineering. I already knew how to read through the official Ruby documentation, how to break down complicated problems into smaller pieces, and how to utilize resources such as StackOverflow and different technical blogs when I get stuck. Because of this, when the curriculum forced me to use Javascript, I was able to apply those fundamentals to the Javascript language and merely had to pick up the nuances of how the syntax differed between the two languages.

This mental model of learning the fundamentals of Software Engineering is incredibly useful as I know those foundational skills apply to any other language I may want to learn in the future (such as Python, Java, Golang, etc).

Final Thoughts

If you’ve read this far and are still looking for someone to tell you which Launch School track to take, my advice is: If you have no prior programming experience or very little experience, do the Ruby track. The Ruby track is two courses longer than the Javascript track, but you’ll have the benefit of learning both Ruby and Javascript, and you’ll hopefully have a deep enough understanding of the fundamentals of programming to be able to learn some of the similarities and differences between the two languages, which will help you become a better developer. If you’ve already learned one language before and/or if you’ve already worked as a web developer in the past, go ahead and do the Javascript track. Remember, this is just my two cents, other students or staff members may tell you otherwise.

Note: This is a very opinionated post from someone who is only a student and who has never formally been paid to write a single line of code (as of April 2023, I’m almost finished with Launch School’s core curriculum). I reserve the right to change my mind on this topic in the future. Also, should you ask twelve different professional software engineers for their opinion on this topic, you’re likely to receive fifteen different opinions. So, don’t take my word for it; go out there and do your own research.

Hopefully, this post helps newbies start thinking about the topic in a different way than they ever have before.

Resources:

Learn the fundamentals of Software Engineering at Launch School: launchschool.com

Bradfield CS founder Oz Nova writes more about this very topic on his blog: https://blog.bradfieldcs.com/in-2017-learn-every-language-59b11f68eee