Jump starting a career in software development and design
While pursuing formal education in disciplines of software development and design, it’s daunting to think of what might be expected of you in your first job. Curriculum requires you to work on smaller isolated problems (writing programs, designing isolated interfaces), mostly on your own and you might often wonder what is it that you need to know so you can become part of a team.
We’ve been on the hunt for software engineers and user interface designers for the past year and I thought it would be worthwhile to share our point of view.
For anyone joining a team it’s all about understanding the rhythm at which group works. You are most likely going to join an existing project and be asked to work on simpler portions (while you get used to the tools and processes) before taking on heavier tasks.
Understand the tools you use
Software systems are complex organisms. When you venture out you are extremely focused on building your own application. It’s very easy to take for granted the tools and infrastructure you depend on to deliver your product. It’s thus very important to take time and understand the tools you use.
- Try your hand at compiling and linking a basic C++ program to understand how compilers work.
- Put together a Gentoo Linux distribution to understand how an operating system is built and installed on a computer.
- Explore in browser Web development tools to understand how the Document Object Model works.
- Most Cloud providers like Google Cloud Platform or Amazon AWS have free tiers for most of their service. Try and get a basic Web application running on their infrastructure.
- Buy an Arduino controller and get a basic Internet of Things device working
These are exercises that will allow you to explore what’s under the hood and assist your critical thinking.
Engineering work flow
Software engineering teams use version control (I am particularly referring to Git in this instance) to collaborate and keep an audit trail of what’s being pushed into the product. A product manager will rely heavily on using work flow such as pull requests, tagging to manage releases of the product.
Familiarising yourself with these concepts will allow you hit the ground running and fit right into the work flow. A good way to do get started is by using source control while working on university assignments.
In a world where infrastructure can be commanded by code, software engineering teams employ methods like Continuous Integration and Continuous Delivery to rapidly test and deliver product. A key habit that drives is Unit testing and all popular languages provide frameworks to test your code and is one of the best software engineering habits you can develop.
Leaving traces
Larger problems are broken down into smaller pieces. Systems are built over time and are worked on by multiple people. Whilst the most exciting part about problem solving is expressing your solution in code to see if it works, it’s rather important to document your thought process in line.
Languages like Python have very formal definitions of documentation which not only helps your work with others but can feed into automatic documentation generation with tools like Sphinx.
Approach
It’s important to get into the habit of solving problems properly rather than quickly. Spend the time upfront in thinking about a problem, research, discuss with your colleagues and come to an optimal solution. Software projects suffer immensely if poor solutions make it to market, specially on sensitive topics like security and privacy.
Portfolio
You are as good as your last project. Nothing can communicate your technical and organisational abilities better than a portfolio.
- An account and activity on Github or similar social coding circles
- Active contribution to your own and better still an existing repository (this is a little harder), demonstrate that you can tag versions, manage releases of your code
- Participation in open source project mailing lists
- Publish code snippets as Github Gist
- Maintain a technical blog of technical projects you’ve been involved in