Philosophy · 3 April 2013 · Ian Malpass

Advice to future software engineers

Software engineers write code for a living. It’s our job to make computers do what we need them to do, to take our ideas and the ideas of others about how the world can be made better with technology and actually make the world better.

There aren’t enough of us, so this is as much a sales pitch to you as it is words of advice.

Don’t aim to be a software engineer

While that doesn’t seem to be the best introduction to a sales pitch for software engineering, bear with me.

Aim to change the world. Change your world. Look at what could be made better through technology in your everyday life, in the streets and communities where you live.

It happens that computers are all over the place, and provide really useful ways to make the world better. Learning to code, learning how to wrangle these machines, means you have access to good sharp tools for making the world better. Even if you don’t end up being a full-time software engineer, you’ll know how these things work, and you’ll know how to use them where they’re useful.

But it’s quite possible you’ll find that software engineering is actually the career for you, and if you do, and if you’re smart, I’d like you to have a better purpose than just writing code. So aim high, and remember that code is a means to an end.

Start now

Malcolm Gladwell wrote the book Outliers about what factors contribute to success. One of the themes of the book is the “10,000 hour rule”—that it takes over 10,000 hours of practice to achieve greatness in any particular field. That’s ten years at 20 hours a week. That seems like a long time. It is a long time. But the good news is that you can be a good software engineer—and gainfully employed, at that—way before that. Even better, if you start coding now, you’ll get there sooner.

How to start?

One of the great advantages of software engineering is that it is a discipline you can learn by apprenticeship—you can learn by doing, and by making useful things.

With most programming languages you can start off with the basics and get progressively more proficient over time. Probably the easiest ones to start with are “scripting languages”, of which the most popular currently are Ruby and Python. Pick one of those and learn it. There are online classes and interactive web sites and all manner of books. Some are stranger than others.

You may be able to take classes in school, in which case you’re fortunate, but learn by yourself too. Yes, you’re busy. I didn’t say it would be easy, just worth it. Form a group with friends and learn together if you’d like—peer support is invaluable.

What to start on?

“Scratch your itches” is the usual advice, and it’s good advice. Find a problem you need solved, and solve it. When I was in high school, I wrote a program to test me on my vocabulary for my German class. It wasn’t pretty, but I learned a lot about programming and a fair bit of German vocabulary too. (Start small so you don’t get discouraged. “Make the next Facebook” is not the best first project.)

Don’t get discouraged. People will tell you that programming is easy and it is… once you know what you’re doing. Mostly. Except when it isn’t. Keep trying.

Once you get the hang of the basics, you’ll probably want to make something that other people can use. The web is probably the easiest platform to get started with. You’ll need somewhere to put your code—Google App Engine, Heroku, and Amazon Web Services all have free options for hosting code. You’ll want to learn HTML and CSS and maybe some JavaScript.

There’s a lot to take in—don’t worry, you can get a long way with some very basic understanding of many of the topics. Remember that you mostly care about function—“does my code do what I want it to do?”—rather than whether it looks pretty.

What if you get stuck?

Remember how I said that software engineering can be learned by apprenticeship? It turns out that there are thousands and thousands of software engineers out on the internet who all learned that way too. We can’t pay our debts to the people who helped us except by helping the next generation—you.

So, use Google. Type in the error message you’re seeing. Type in a description of your problem. It’s amazing how often people have had the same problem and have ask the question and got an answer. Use Stack Overflow and other sites. Just do your digging and your research well before you ask a question, to make sure it hasn’t already been answered (plus it’s a good way to learn).

Stand on the shoulders of giants (or even just really tall people)

There is all sorts of open source code that is free for you to use out there. Your language of choice probably has a lot of libraries (that is, pre-written chunks of code that do something useful) that will let you get further faster.

A lot of open source code is developed on GitHub these days. (Git is a Version Control System—a system that keeps track of all the changes you make to your code over time so you can undo your inevitable mistakes. Version control is worth learning, and not just for code: it’s the kind of tool you’ll like if you’ve ever deleted the best bit of a paper and had to type it out over again.)

Learn to fail

Don’t fail your high school classes. That would be bad. But learn to make mistakes in your code. Lots of mistakes. Try things, and work out why they went wrong. Don’t be afraid to build the wrong thing the wrong way—it’s all good practice, and you’ll learn why it was wrong and that means that the next things you build will be better.

Take Computer Science in college (or don’t)

If you want to program computers, it makes sense to major in Computer Science right? Well, it does if you want to do that. You’ll learn lots about computers, and you’ll do an awful lot of coding. It’s also probably the easiest way to get into internships with potential future employers.

But you can also get away with doing something else as long as you keep coding too. I majored in chemistry, but spent more time in the computer lab than the chemistry lab. A numerate subject is probably good—programming is mostly wrangling numbers and logic—but even that isn’t really a requirement. (I work for Etsy, where the chief executive officer and chief technology officer are both really technically-minded people, but are both liberal arts majors.)

The most important thing you can do is code. Code a lot. Code with other people—contribute to open source projects, share your projects with others. When I look to hire an engineer, I care much more about their “portfolio”—about the code they’ve written—than where they went to university or what they studied.

Learn to write

If you take one piece of advice from this post, let it be this: learn to write. The ability to communicate your ideas to others will aid you more than anything else you’ll learn, and make you more valuable to employers.

Get a job

There aren’t enough good software engineers to fill all the engineering jobs around. This is a good thing, if you’re aiming to be a software engineer. Be choosy. Pick a company whose work you care about. Pick a company that gives you good benefits and which respects you as a creative person.

Change the world

Go ahead. Let me know how you get on, and what I can do to help.