This is an early version of a chapter from Your First Year in Code, a book of practical how-to and advice for new developers. If you're considering a career in software, check it out at https://leanpub.com/firstyearincode.
I occasionally get a message from a brand-new developer who's overwhelmed by all the technologies and choices that exist in the world of software development. Where do you even start? Some of these devs have seen job advertisements like the following:
This is for a standard, mid-level web development position. It lists 14 specific technologies, alludes to many more, and if that weren't enough, it has an "etc." Even as a senior software engineer at a billion-dollar company, I'm not sure what that "etc." refers to. Maybe I could Google it:
Oh, great. 16 more technologies. If I were brand-new to this, I'd be thinking, "you mean I have to learn 30 different programming languages just to get a mid-level job?" And then I'd throw up my hands and apply for a job in something less demanding, like brain surgery.
Let's put that fear to bed: no, you don't have to learn 30 different programming languages, now or ever. You need to learn one. Then you need to learn a few tools that are commonly used with that language. That will get you a junior position. Afterward, you've got options: get better and better with the languages and tools you already know (you might call this the "expert in the room" route), or learn several more (the "startup engineer" route). Either route will let you advance your career and make more money, and neither is necessarily better than the other, but you'll probably find that you strongly prefer one of them.
So where should you start?
Make a list of technologies you're considering. Then pick one. If there's a company you want to work for and they recruit heavily for one of them, pick that one. Or if you know what you want to build, pick the tech that goes with it (Java for Android apps, Swift for iOS apps, JavaScript for the web, and so on). Alternately, go with your gut. Or flip a coin, or roll a d20, or pick one out of a hat. There's no "best" technology. What's important here is that you commit. Spend time getting to know the technology, building simple projects with it, reading articles about it, finding GitHub projects that use it.
Some people start second-guessing themselves after a day or two with a new technology, so they switch to a different one, and then another one, and then another. This is like learning to say "Good morning" in 50 different languages. It's a party trick, not a marketable skill. Don't let yourself do this. Even if you spend five years with something and decide it's not for you, it's not a total loss; 80% or more of the skills you've learned will transfer neatly to your next technology. The consequences of choosing the "wrong" technology are tiny.
If you don't know a programming language yet, I recommend starting with JavaScript, Python or C#. All of these are extremely popular and in high demand. If you already know JavaScript, learn a utility tool like Lodash and a web framework like React or Vue, or learn Node.js and a server-side framework like Express or Hapi. If you know Python, learn a data science library like NumPy or Pandas, or a web framework like Django or Flask. If you know C#, learn ASP.NET MVC to build web applications, Xamarin to build native apps, or Unity to build video games.
Once you've picked a technology, the best thing you can do is start a project. Think up something simple you want to build, then work toward it a step at a time, learning what you need to learn as you go along. Once you finish it you'll have a nice portfolio piece, along with the confidence of knowing you can see a project through from start to finish.
I promise, as long as you don't go out of your way to choose strange and obscure technologies, anything you choose can lead to a successful career. There are plenty of jobs out there.
If you need any extra validation or help deciding what to learn, you can always reach out to me via Twitter (@isaacandsuch) or email (mentoring@isaaclyman.com). Good luck!
Top comments (14)
There's even a few jobs in many obscure languages, with very little competition for them. ;)
Kidding aside, great advice in your article!
True! Not a lot of people gunning for that ALGOL role any more. But I've heard you can make big money if you're the person that gets hired.
Fun fact: on my running list of things to learn is my "Mothertongue" project - a goal to gain basic proficiency in twelve of the foundational languages from whence we get nearly all modern programming: Ada, ALGOL, ASM, BASIC, C, COBOL, FORTRAN, Lisp, Pascal, Prolog, Smalltalk, and TeX.
(Presently debating whether to include SNOBOL in that mix...)
Did a bit of Googling, shocked to learn that some of those languages are still actively maintained and coming out with new versions.
Rather amazing, isn't it? This is why I've said languages rarely die...
Retraction of an Obituary
Jason C. McDonald
P.S. Here's something of a family tree of programming languages if you're interested.
Fun idea - mind if I chip in?
Skip COBOL. Skip TeX too (even typesetting by Knuth is still typesetting). Add in APL - now there's an artisinal language. Should add a stack based language too - Forth or Factor.
And start with Lisp - Common Lisp. Get that under your belt and you may be hooked for life, then Scheme.
Common Lisp is having something of a renaissance at the moment - no better time to try it.
After I posted, I was doing more research, and already decided to add APL and Forth (the predecessor to Factor, IIRC), as well as SNOBOL. So, I'm now up to 15 languages on that list. :)
However, I have no intention of skipping COBOL, simply because being able to read COBOL source can be incredibly useful in maintaining or upgrading legacy systems.
As to TeX, I know it's for typesetting, and not coding...but I also happen to be a typesetter as well. ;)
At any rate, I'll make sure Lisp is high on the priorities!
I am wondering, my 9 yr old son is passionate about coding, what is the first thing he should learn and learn well? He is talking about Linux, all this is foreign to me, so is this something I should let him download and play on, is it easy to learn and start coding on?
Easy? No, but never underestimate a motivated 9-year-old. It doesn't matter what he learns as long as he's interested in it. The next generation of programmers is kids who started on video game mods and LEGO robots.
Linux, if you haven't looked into it yet, is an operating system (like Windows or OSX) so he'll most likely need his own computer to install it on. I installed Linux on my parents' computer when I was about 12 and accidentally broke it for about a week.
I'd be happy to answer any questions he has about this stuff (with your permission of course).
I agree that FP for a newcomer might be hard to learn, but with the biggest alternative being OOP, it may still be the best option :/
There is no single answer especially as people have different backgrounds. First there's a big difference between big corps and startups, and inside big corps between different services (for example a bank trading department is often very demanding whereas elsewhere it may feel like they live in prehistorical age). There's also a big difference between the hypes and the realities. Hot things are hot only for people who are at the top of shininess because as it is new, not many big companies are transitionning to it, so it's only technology startups these startups are more harsh as for recruitment process. Last but not least, it often boils down to whom you know ;)
It does come with the idea of learning "concepts" instead of technologies. Technologies can come and go like the tides.
I have sound knowledge in Python and Django
Nice article!
I also usually recommend C#, Javascript, and python for the same reasons.
I often add to start first with C# as it is a strongly typed language.