Don’t Learn a Programming Language. Learn Software Engineering
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.
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.
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.
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?
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).
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.
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