Throughout my career as a software engineer and technology leader, I’ve helped companies find and develop talent. The one constant: how unprepared most college grads are when entering the industry. The process of obtaining a Bachelor’s Degree exposes engineers to new ideas and most importantly, to how to learn. To gain real world skills, developers have to create and take control of their own curriculum.
Get real life software development experience
Internships are the best way to get real life experience. The tangibility of using real-world technologies, real-world data matched with real-world customers – creates a learning experience not found in a classroom. In the best internships, you are working as part of a team to solve customer problems – an experience that is invaluable regardless of the type of company you ultimately choose to work for or to start.
There are many things you will learn quickly in an internship in dynamic environments that will further your understanding. Agile development methodologies and using source code version control are two, as well as how to package, distribute and deploy a project. You might learn the best practices for writing unit tests and integration tests and load tests. You’ll get exposure to teamwork with a source management tool or a continuous deployment environment and learn how to operate with non-technical professionals as well.
If you can retain the big strategic picture and all of the steps to execute on it effectively – you’ll have the kind of valuable experience companies crave which you can learn during an internship. Those experiences help your resume stand out, with the promise of having an easier transition from school to career, simply because you’ll have less of a ramp-up period when you start your new job.
Be part of the community
Focus on a specific technology, language, or tech stack that has captured your interest and start attending the local meetups to both network and to learn how different technologies are progressing.
Another way to be part of the community and get experience is to contribute to Open Source projects. You’ll get experience working with teams, especially far-flung teams, and all of your work is public which enables future employers to evaluate your code. Two great projects I am happy to recommend which offer structure and guidance: Mozilla and Google Summer of Code.
Write tests and understand what coverage means
Get in the habit of writing tests every time you write code. When you have an assignment, first write unit tests to run the code you’ll write. This will prove whether the answers are correct, before you write code. Then, write the code. Build this habit early, and your life as an engineer will be much easier.
For whatever language you’re using, learn the test framework. During your interview, it’s likely the hiring manager will pose a problem and ask you to propose a solution. One way to make a big impression: Write out or at least talk about how you would test your solution. It’s a simple way to stand out in the interview process.
Learn to profile your code
In the real world, you will rarely work on code where you have full access to evaluate every method being called by all the relevant libraries. It’s important to learn how to find bottlenecks in your code because, as an engineer, you will spend a good amount of your time on this part of the job.
A code profiler runs your application and identifies “hot spots” that took some proportion longer to run, relative to other parts of your code. Many languages offer tools for code profiling. SQL queries can be analyzed using “explain” or query analyzer tools depending on your database. There are also end-to-end load testing tools. Regardless of the tool, learn how to run and evaluate the results of a profiler or some type of analyzer.
Get comfortable with ambiguity
There are no easy answers in business, no clear-cut solutions. The only solution is the one that you create. Sometimes, you try everything you know and you still can’t get something to work. That’s life. Being able to deal with uncertainty is one of the most important skills engineers can develop.
To understand if candidates are okay with truly not knowing, I ask open-ended, ambiguous questions. One question I often ask is, “tell me how the browser works.” My goal is to get more insight into their thought process. At other times, I’ll focus on the customer complaints: “A call came in stating its taking our homepage up to 30 seconds to load. What do you do and how do you investigate?”
Better yet, the question that really told us how potential candidates think was this question: “You’ve just hooked up a computer to the network. It’s not connecting to the internet. What do you do?” There is no right answer, but regardless of the candidates’ answers, we responded with “that solution didn’t work, the computer isn’t online.” If the candidate asked clarifying questions, we provided the most common case and kept the focus on troubleshooting the main issue. Perseverance, without frustration – well that’s a rare candidate to find.
It’s all good experience
Your career will be a lifelong learning process. There’s no doubt a job is in your future – as always it’s what you make the opportunities. With a strong foundation, an open mind and a robust toolset, you can thrive in any environment and adapt as technologies, languages and industries change.
This is an adapted version of a previous article by Augustina Ragwitz.