I was recently asked for advice on taking a first step in to the real programming world. After studying software programming, how do you make that transition to actually work as a software developer? To make that transition, you need to make yourself attractive to an employer. When I interview for National Instruments, I’m essentially looking for 2 things: personality and talent.
Personality isn’t quite the right word, but it’s what came to mind quickly. I want to know if you will fit into the group. Are you someone who will require micromanaging or will you be largely self directed? How do you respond in the face of challenges? Do you give up too quickly and do you know when to ask for help?
We evaluate this by asking questions about your experiences in the past. The best way to prepare for this is, wait for it, have experiences to talk about. You get this by working on real projects, whether it be for work, school, or self-interest. There is no faking it here. If you don’t have any experience, it is going to be impossible to answer these questions.
If you really don’t have any experience and you can’t get a job, then you need to create your own experience. More on that in a second.
We are also looking for people with a passion and talent for writing software. I’ve been asked many times about what language I’m looking for. My answer goes something like languages are merely a tool for communicating an idea. The hard part is the idea.
We look for talent by doing technical problem solving. We’re not doing anything tricky here by asking for domain specific knowledge or that you know some little trick that makes a problem easier to solve. We’re looking to observe your thought process in action.
Talent is hard to learn (and some people will say impossible), but you can give yourself a hand with experience. At the very least, experience will teach you if you have any talent, and if not, try something else.
You may have seen a bit of a trend here. Whether looking for personality or talent, the one thing that will help you the most is experience. But isn’t that a catch-22 situation? How do you get experience if you can’t get a job? This is hard in many industries, but it isn’t true for software development. Professional experience can be harder to get, but you can get experience all on your own. You have no excuse for no experience.
When I wanted to learn more about back-end web development, I wrote my PHP-based blogging engine. It wasn’t pretty, but it worked. When I wanted to learn more about mobile development, I wrote an Android to automatically turn on and off my ringer based on a schedule. It isn’t pretty, but it works. When I wanted to learn about accessibility and the web, I tried to make this website accessible. In every case, I wasn’t trying to solve new problems or do anything innovative; I just wanted to learn, and the efforts gave me experience. All it required was some time.
If you want to gain some experience on your own, how would you select a project? Where do you start? As an interviewer, I’d be looking to identify what you contributed. An individual or small group project is better than a large project where I can’t identify your contribution. I’d also be looking to see something challenging. Topics like multi-threading, algorithms, AI, user interface, performance are all interesting for positions I interview for. I’d also be looking for something you completed. It doesn’t have to be perfect, but it should work, so pick something not too small to be trivial but not too large that you’ll never have anything to show for it. The last question would be, does it have to be relevant to the position I’m applying for. The short answer is no, but it doesn’t hurt either. If you want a job as a web developer, choose something that will give you experience in that domain. If you want a job as a C++ developer, choose something that will give you experience in that domain.