So you’ve finally decided that you want to be a software engineer ! You've also found the right school to get trained in software engineering. But is that enough to guarantee that you’ll be able to successfully launch your software development career ? !!!
That was a rhetorical question of course. No, it’s not – just going to a good school does not guarantee that you’ll be able to secure a “good” software engineering position when you graduate. I know this, because I had a full time job offer from Microsoft a year before I graduated college. And I’ve talked to a lot of successful software developers working in Microsoft, Amazon, Facebook and Google about how they prepared themselves for the life after college. Below is the summary of things that came out of those conversations and my own experience. If you do them, you’ll greatly amplify your chances of not only having a job before you graduate but also having a significant amount of choice in where you work – yes, I’m talking about multiple job offers from some of the best companies.
1. Get Internships at the right company: It’s a chicken & egg story – you can’t get a job without experience and you can’t have experience without getting a job first. If you’ve done your due diligence while selecting your school , this will go a lot easier. If your school does not offer good Co-op / internship programs, it’s going to be a little harder but you should still do everything you can to grab an internship.. This might involve applying online at companies, looking in the job board at your college for opportunities , talking to college alumni through the alumni association, applying to government internship programs like NSERC Canada . If you cannot land a paid internship, it’s also OK to take up volunteer positions related to software development/ Information technology at your local YMCA or Church etc.
With regard to internships, quality counts more than quantity. When I was in my third year of college, there were two internship offers I was trying to decide between – one was a 3 month internship from Microsoft doing Windows Search Engine development in C++/COM and the other one was a 16 month internship from Bell Canada doing java development. I was more inclined towards the Bell Canada one because at that point in my life money was tight and a 16 month paid internship would have been the ticket to buying a car and those electronic gadgets like Xbox that I could not afford. I also did not know any C++ COM programming while I had already written thousands of lines of code in Java. But my father and the career counselor at University Of Toronto convinced me to take the Microsoft position because of the Company reputation and nature of work (Platform software development vs run of the mill application development). I still remember my career counselor saying “ You should go somewhere where you get 3 months of experience in developing software ; not somewhere you get one month of experience 3 times over”.
2. Pay close attention to specific classes: There are a few classes that you’ll need to pay special attention to – they are the following in order of importance : Data Structures and Algorithms, Software Design Patterns, Operating Systems, and Networking & Distributed systems. The reason being most of your interview questions (if you’re applying at a large company like Google or Microsoft) will be based on these. At these companies expect to get approximately 80% of your question related to straight up data structures and algorithms and the other 20% on some network and operating system concepts. So focus on not only getting good grades in these courses, but also really understanding what’s going on under the hood. Most interview questions will not be a straight up “Implement a Binary search” but rather a problem like “Find the last occurrence of an element in a sorted array with O(1) space complexity”.
3. Prepare for tech interviews from Day 1 of College: Don’t wait to start preparing for interviews until the internship application or summer job application timeline arrives. That is usually too late. The first thing you should do as soon as you get to college is visit your University’s career office / website and get a list of companies who usually hire students there for summer jobs and internships. Check out the requirements of at least 15-20 such job posts from previous years posting ( if still available) and note down the requirements. Figure out the skill set (E.g. Java, HTML/CSS etc.) that shows up most often in requirements. If your school curriculum will not cover the skill set, try to get that knowledge yourself (I’ll talk about how to do this below).
Also, it is advisable to get a copy of a programming interviews book when you buy your first set of textbooks. I personally recommend Data Structures and Algorithms Made Easy in Java for 1st year students because it introduces concepts like a tutorial style textbook . You might not understand everything that’s going on , but you’ll have a decent idea of the material that you’ll be expected to know. Study this and even if you understand 40% of the material in the first half of the book, you’ll be way ahead of your classmates. The other benefit you’ll have is that when you do take those algorithms and data structures courses, you’ll probably do really well in them.
4. Get Certifications: This becomes critical if you’re applying to small company or startup , who usually look for specific a skill set. The previous year’s job descriptions or research on the company website should tell you the technology stack your target company is using. Once you identify the technology stack (Java, .Net etc.), try to get at least an entry level certification in that area. It might help you get your foot in the door. Here’s what I did – during my 2nd year, I found that all of my college courses in University of Toronto were taught in C/C++ . However, the companies that I was planning to apply to were all java shops – so I ended up getting the “Sun Microsystems Certified Java Programmer” certification. The interviewer was fairly impressed that I had the certification while still being a second year student. He did not ask me any Java related questions and instead focused on design and testing questions. I got the job offer at the end of the interview. Contrast this with the experience some of my classmates who applied for the same position had; they were drilled on the intricacies of Java threading for over an hour. The key thing to understand here is that the interviewers were really concerned if the person they’re going to hire really knows Java or will they need to train that individual before he becomes productive. Most small companies do not have the budget to train new hires and expect you to hit the ground running.
It is worth mentioning that when I interviewed at Microsoft for an internship, the certificates I had had no bearing on the hiring decision. The decision was based purely on the outcome of the daylong interview. This is very typical of large companies who actually have the resource to train you. All they want to know is if you have the ability to solve problems and learn fast.
5. Create a Portfolio of your work: The biggest fear an interviewer has is hiring someone who cannot code. Getting good grades in computer science courses or getting certifications does not mean that the individual can actually build a system end to end. I’ve personally seen a few cases where we hired someone for an internship based on his interview results and the person was really bad when it came to actual coding. This is a scenario everyone wants to avoid. What can you do to alleviate this fear in your interviewer ? Simple – you just show them that you not only have the ability to ace interview questions, but can also build complete software systems. There’s a number of ways to do this – you can create a website that provides some sort of service, or create an Android or iOS app or even contribute to an open source project in GitHub. The goal is to open your laptop or phone in an interview and give a live demo of the product you’ve built and then show the interviewer your design and source code.
So you might ask, “wow that seems like a lot of work to get certifications , create a portfolio and contribute to open source– if I have time to do only one , which ones should I pick ?”. Fair question – I’d say if you were to do only one thing, creating your own app or website that provides some sort of service is more beneficial than getting certifications or contributing to open source. With certifications, the interviewer still doesn’t know if you can build an end to end system. And with open source, it’s usually difficult to ascertain your exact contribution to the project. But if you have your own app or website, the interviewer knows it’s all you !!!
6. Finally, Learn to use the debugger : I’ve had interns who’re in their second year of university and still debug via printf() statements. Not only should you be comfortable with using a basic debugger inside the IDE like Visual Studio or NetBeans, you should also be familiar with using various tools like Filemon, Process Explorer and Fiddler to assist with debugging. Many developers spend about 40 percent of their time debugging their own code, someone else’s code or customer issues – so don’t be surprised if you get a question on a tech interview where they ask you to debug a problem instead of coding up a solution. 🙂
So now you know the recipe to avoid that vicious loop of “No job without experience and no experience without job”. But knowing the recipe will only get you so far – you have to execute it. Even if you implement one of these strategies diligently, I can promise you that you’ll be much better positioned that your classmates ( fellow competitors) in getting the internship or job of your dreams and launching yourself into a successful career.
All the Best!!!
P.S. Have a question on your unique situation ? Feel free to ask in the comments section or send me an email at [email protected]