What Programming Language Should I Learn?
Read on if: you want to get a coding job now and/or have a coding career later
So you’re not satisfied with being a consumer of technology and want to become a producer, too? Or you’ve heard about the boom of tech job opportunities and you think this might be a way to make a good living doing something that challenges you? Or you’re already skilled in some other area but believe an ability to code would help you further your cause/hobby/business?
Those are all radically-different reasons for learning to code and will lead you down very different paths when choosing a language.
Is This Your First Language?
I believe that with persistence, adequate resources and a learning mindset, anyone can learn any language and be successful coding in it. Having said that, all languages are not created equal. I can’t tell you how many people have told me over the years “Yeah, I did some programming in college, but then I took a C++ class and I quit.”
Some languages were designed to be easy to learn: Python are Ruby are good examples. They don’t have too many cryptic bits of syntax and are both powerful general-purpose languages that can accomplish many of the things you might want to code.
Other languages don’t care much about ease of use on the part of the user: they make themselves easy for the computer to understand. Most of the C-based languages fall victim to this: C, C++, Java.
Then there are languages that seem to be designed explicitly to keep people out by being incredibly odd and full of bizarre (though powerful) concepts. Haskell, Clojure and Erlang are examples of these. Don’t get me wrong: once you’ve figured these languages out you can do amazing things, but they’re certainly not a good place to start.
JavaScript (the only language that runs in a web browser and therefore the most wide-spread language in the world) strangely has a foot in every one of these camps. Some of it is delightfully-easy to use, especially when combined with the jQuery library for interacting with the browser. It’s also surprisingly-elegant and powerful, but there are odd corners that cause all sorts of obscure bugs for the unwary. If ever there was a bipolar programming language, JavaScript is it. The JS community is equal parts love and loathing, sometimes by the same coder on the same day!
What Do You Want To Do With It?
If you simply want to explore programming and expand your mind, pick a language that looks fun and has a vibrant community around it. If you’re not getting paid, you won’t want to spend much (or anything) on learning resources, so choose something with lots of free ones. Three that come to mind and are all reasonable “gateway” languages are JavaScript, Python and Ruby.
If you want to code in support of your cause, your business or your hobby, you’re probably talking about getting a site up on the web, so try Wordpress if you’re planning a blog and HTML/CSS/JavaScript if you’re planning a full-blown site. An actual web application will require a back-end (i.e., code that runs on the web server instead of your user’s browser) solution as well, and currently JavaScript, Python and Ruby are reasonable choices for this, too.
Freelancing is an option, if you like to hustle and interacting with new people. Most of the freelancers I know set up blogs or web sites for smaller companies that want one but don’t want to hire a full-timer to build/maintain it, so all the previous choices are perfectly valid. There are some freelancers that contract to build bigger apps using tools like Rails, but the blog/web site avenue is probably an easier on-ramp.
If you want to work in a small business such as a startup, you are clearly a risk-taker, so I’d suggest finding a bunch of startups that are doing interesting work you’d like to be involved in, then find out what technologies they’re building their business around. Some startups (well, businesses of any size) can fall prey to the “we only hire rockstars” mentality. Avoid these, which will be easy since they only tend to hire their friends anyway. But some startups have a “build, don’t buy” mindset when it comes to coders and are willing to hire you as a junior dev and then make sure you level up rapidly. Just make sure they don’t intend to work you to death in the meantime. Startups will likely be more receptive to (or even started by!) graduates of the new hacker schools and dev boot camps.
Very large companies tend to be more conservative with their language choices, relying on “proven” languages that aim themselves at the enterprise, typically Java and .NET. However, this is changing, especially with so many web-based companies dominating the landscape. While both of those languages can be used to build the web, they are by no means the default choice, so keep an open mind and do your research before committing.
And of course I have to mention the exploding “mobile app” community: over 50% of all internet activity is conducted over mobile, and that’s only likely to increase. Many people build apps that run either on iOS (which is transitioning from Objective C to Apple’s Swift language) or Android, which uses Java. Apps built on one will not run on the other, so choose wisely. Also, this may be the most glutted area of coding, with millions of apps fighting for attention in the respective app stores, so consider that carefully before jumping into the ring because it seems like “the obvious choice”.
No Silver Bullets
An important side note is that there is no “guaranteed good choice”. If the company you want to work for doesn’t use the language you learned, it doesn’t matter if it’s “the industry standard”. For my current job, I decided to use an obscure-but-promising language which has become popular in the subsequent 5 years (Ruby). I was lucky that my boss didn’t care about what I used as long as I got the work done, which is unbelievably-valuable. Full disclosure: this is the only job I’ve ever had where I got that luxury. :-)
Also, as I mentioned in the section on mobile app development, make sure to consider the “talent pool” of the language. If there are 1,000 Java jobs and 100,000 Java coders, that’s not a promising equation. It’s like trying to use the restroom at half-time of the football game. The same is true of picking only enterprise companies to work for “because they’re a safe bet”. Smaller companies get a much smaller pool of applicants, so they might be a better option for someone trying to break in. Even if they go under in a year, then you’ll be looking for a job with a year of professional experience!
Who Can Help You Learn It?
The rise of hacker schools and dev boot camps offer an opportunity for immersive learning in one set of technologies or another, but being such a new situation your mileage will likely vary, even presuming you have the funds and the available time to dedicate the weeks and months required to cram all that information into your brain.
If that’s not an option (which it isn’t for many of us), learning languages simply must become your new hobby. I define a hobby as anything you do that steals time from the tasks you are required to do in your daily life, like hold down a job, raise children, cook, clean, etc. I chose that word specifically, as well. You can’t find time, you can only steal time, and the more things you are willing to let slip (TV, exercise, socializing, Twitter), the more learning you can do.
So presuming you’re on your own, what resources are available? It’s tempting to buy a 700-page “Java In 30 Days”-type book and slog through it, but I’ve never managed to complete one of those monsters and you’re really only getting one person’s thoughts on the subject. Instead, I diversify my sources and leverage all of the following:
- Following/interacting with knowledgeable people on Twitter
- Local user groups in your area or language (my local Ruby group didn’t have a training program, so I started one!)
- Locate relevant podcasts like The Ruby Rogues and JavaScript Jabber
- YouTube (search on the language/tech you’re looking for: many conference videos here)
- Confreaks (a goldmine of videos from conferences you couldn’t afford to go to)
- Tech blogs
- Stack Overflow (the clearinghouse for questions and answers about everything tech)
- Ebooks from PragProg and O’Reilly (cheaper and easier to get hold of than “dead-trees” books. PROTIP: these are often cheaper on Amazon than directly from the publisher’s website, though the publisher typically gives you free updates when they fix errata)
- Mailing lists (Peter Cooper is a great source of these)
The community that comes with the language you choose will impact your quality of life on a daily basis, so give it serious consideration and do your best to be the sort of member that benefits everyone and moves the entire tech community forward.
OK, I’ve Made My Choice: Now What?
No matter what you’ve decided on, it’s important to realize that this is not your language, it’s your first language. Times change: I’ve written production code in Cobol, Informix, Perl, Java, C++ Ruby and JavaScript in my career and I’m constantly learning new languages, frameworks and paradigms. Partly because I enjoy it, partly because it forces me to think in new ways, but mainly because the world doesn’t stand still. What seems the “obvious” choice today may seem quaint in five years. Also, the more tools in your toolbox, the more options you have, both for solving problems and for moving on to better things when your current situation becomes unbearable.
Being a lifelong learner is the only way to have a sustained career in tech: if you can learn to love learning, you can do this job. Two tremendous resources in the “learning to learn” genre are The Pragmatic Programmer and Pragmatic Thinking and Learning, both from the Pragmatic Programmers.
Takeaways
- Pick a language that helps you learn it, not one that actively hinders you
- Match your language choice with the arena you want to enter
- Leverage many different types of resources: don’t just buy one book.
- Whatever you choose, it’s only your first language. Keep learning.
- I believe in you