In college (if not earlier), developers learn the basics of programming—but not everybody finishes learning the other things that developers are expected to know, such as version control and how to manage projects. I’d like to present a “primer” on these other things, so you can include them on your résumé and mention them as frequently as possible in job interviews.
Source and Version Control
Version control is a fundamental part of any software project. If you don't know how to use version control software, you're going to have a much harder time landing a job. The idea is simple: Version control keeps track of your source code changes over time; at any moment, you can go back and retrieve an earlier version of the file, either for comparison or because you want to go back to that previous version. There are entire books and sites written about version control, including features such as branching, merging, and more. You'll want to take time to learn about it and practice using it, because you will most likely be asked about it in an interview. Although git
seems to be the most popular version control option out there, there’s also Subversion
and Microsoft’s Team Foundation Software, which integrates into Visual Studio. And speaking of Visual Studio…
IDEs and Other Build Tools
Most students learn the basics of Integrated Development Environments (IDEs) in college, because you can't really avoid them when learning to program. While good text editors help developers manage files, IDEs typically go further, letting them build executable files and debug through the source code. In the past, the line between text editor and IDE was usually clear, but today the line has blurred a good bit. There are many different IDEs out there. A couple to explore include Eclipse
, and Microsoft’s free editions of Visual Studio. Aside from IDEs, you’ll want to make sure you know how to configure and use other build tools, such as ant
, as well as the ancient one that won’t go away, make
Text editors are either standalone or integrated into an IDE. You need to know your way around a text editor, how to quickly move around a code file, how to use copy/paste and auto-indent, and so on. You also need to know more than just one text editor, because at some point you’ll likely need to edit code when you don’t have access to your favorite IDE or editor. You’ll have to log in to a command line and use a command-line editor such as vim
. If you know how to use these, you’re less likely to get stuck. But do you mention text editors on your résumé? Knowing them is so basic that you’re expected to know them—it’s akin to a carpenter mentioning on their résumé or C.V. that they’ve held a hammer before. Some employers might also question your programming skills if your résumé includes too much focus on basic tools such as text editors—but it’s your call.
Even if you plan to only program for Windows for the rest of your life, you still really need to know your way around Linux, because in all likelihood you'll have to use Linux for some situations. For example, your Windows server might have to connect to a mysql installation on a Linux server. You should know how to log into a Linux system and use the command line; know the basic commands for manipulating files and directories; and understand security, including the different types of logins, and what rights different users can have. Learn what sudo is and how to use it; know how to set a file's attributes, especially for executable files; know how to “source a file,” and how to specify the command the file uses in the first line using two characters. I’ll offer another caveat here: If you're applying for a programming position, you probably don't want to devote too much of your résumé to your knowledge of the Linux command line. But a quick mention is probably good.
Programmers often don't care much about system administration, but you really need to know the basics. Today, that includes cloud and virtualization techniques, so learn how to spin up a server on a cloud host such as Amazon EC2 or DigitalOcean. You should also know how to get the server up and running, how to create user accounts, how to set up firewalls, and how to install software. For example, learn how to create two cloud servers, connect them using virtual networking, install a database on one, and connect to that database from your own code on the other. This is another area you don't need to be an expert, but the more you know, the better off you'll be. When you're on the job, you'll be doing a fair amount of minor sysadmin tasks.
Comfortable in Other Languages
When I was just out of college, I was proud of the fact that I had learned around 10 programming languages in school, and I thought that employers would be astounded when they saw my résumé. It didn't occur to me that every single college graduate also learned that many languages, or that employers would be skeptical that a 22-year-old could be a seasoned expert in all those languages (I wasn't). Different jobs have different requirements, and so I can't speak specifically about which programming languages to list on your résumé. However, dabbling in multiple languages can prove a big plus, as it shows that you're not afraid to embrace other technologies. If you do list those “dabbling languages,” make sure to clearly state that your experience is minimal; you don’t want to be grilled in an interview, only to stumble.
Software development is more than just grinding out code; you need to have worked in many different areas. As usual, the best way to find out what you need to know is to spend time with those who’ve been there. Help out on open-source projects, and learn from others as best you can.