Over the years, I’ve toyed with the idea of writing a series of posts aimed at young programmers.
My advice will be aimed at aspiring programmers, students, and programmers who are just starting out.
I’m going to skip the part in which I motivate you by telling you why learning to code is a great idea and akin to acquiring a super power.
In this series, I’m just going to assume that you’re interested and highly motivated in becoming a programmer. If you’re not, find your “why” first. The why is more important than the how and you’re going to need both in order to succeed.
My tips are going to be presented in a more or less random fashion, as I don’t have a pre-arranged list that I’m working from. I’m certain that I’ll come up with more as we go along.
I’m going to number them here nevertheless so that it’s easier to reference them in discussions.
Tip #1: Specialize in something
Last year I interviewed over 100 candidates for IBM. Most candidates were students from elite universities and were by all accounts, impressive young people.
University had opened them up to a wide variety of topics in computer science. The logic behind such an approach is sound. Syllabuses are intentionally designed to prepare students to think like a computer scientist, and to expose them to as much computer science as they can cram into four years.
The idea is to show students what’s out there so that they can then decide what interests them so that they might pursue further specialization academically or on the job.
The downside of this approach is that unless you do independent work in your spare time, you might graduate with very little code under your belt.
More importantly, you’ll simply be a bundle of potential. You could specialize in anything you want to. You could become a good programmer, but you haven’t likely reached that point in either case yet.
There are certainly companies willing to hire you on the basis of that potential. I mean, you graduate from an ivy league school, with top grades, and naturally there will be big companies who are interested in you.
To widen your job prospectives, however, I suggest that you specialize on your own.
The market will pay you for the value you bring to it. This is true whether you are an employee, freelancer, or opt to launch your own startup.
This is why I fully respected, appreciated, and even hired candidates with plenty of potential and not much experience. My favorite candidates, though, remained those who independently developed a keen interest in a particular area of the information technology world, and learned as much as they could in parallel to their more formal studies.
This tip could very be easily phrased as, “Be useful at something”. If I hire you to do something, it really helps if, on top of having the potential, you also have a degree of experience and expertise in that something, that will aid us in developing your skills further.
To date, there are still students around the world who graduate and come to the market with very little knowledge regarding things like the command line, any editor that isn’t an IDE, who have no idea what git is, and whose memories of subjects (e.g., web development) they touched upon a couple of years back are often hazy at best.
Whether you’re a student or not, my first tip is, therefore, to become useful at the creation of a particular type of product.
Here are some examples of “stacks” you can specialize in:
- Learn how to develop Android apps
- Learn how to develop iOS apps
- Learn how to develop web applications with Rails
- Learn how to do data science with Python (or R)
- Learn how to hack hardware
No matter what you choose, try to become experienced enough so that you have an essential understanding of the lingo, best practices, and challenges of that particular type of development.
Once you’ve determined the type of software you want to build, it becomes much easier to focus your efforts towards what needs to be learned, what books should be read, and what code you need to write.
Want to become an Android developer? Learn Java, then how Android apps are built (you’ll have to become well acquainted with Android Studio and the SDK).
Speaking of Android, I’m particularly reminded of one of the best performing students from my LEADing to Africa summer internship in San Francisco.
My L2A summer interns
Not only he had a comparable foundation in computer science to that of other students I’ve interviewed, but he had also taken the time to independently learn enough Android to be “useful” (or dangerous, depending on who you ask :)) on that front.
You could ask him to create a fairly complex Android app, and he’d know how to approach it and make it happen in a reasonable timeframe. That’s adding value to the market.
Be like that student. Be a mile wide, and an inch deep, but specialize enough in something to be useful.