First, I’d like to say welcome. You’ve chosen a great industry and profession in which to pursue a career. We software developers are changing the world. We are changing the world with a unique form of creativity, and that is something to keep with you while continuing to challenge yourself throughout your career. So welcome. I think you’ve made a fantastic choice.
I recently asked my Twitter and LinkedIn followers what their advice for junior developers might be, and I have gathered responses from a wide range of professionals. From those that are only a few steps ahead of you, to others at the very top of the industry. Some of these people are likely to be the people that are your leaders and the people that make hiring decisions.
“Everyone is ‘Junior'”
The most common response, in one way or another, was to remember that everybody is a junior at something. Everybody, including those professionals at the top of the industry.
All software developers should be learning something new, all of the time. I am considered an expert in a number of development practices, yet I have recently picked up a project in which I am learning to programme in Angular JS. Something I have never done before.
This constant learning is part of our discipline and it differentiates us from many other industries. It is true of other industries too, but I think that it is more true of ours. This, in many ways, is the real essence of what we do. So this is always true. Keep on learning!
Not Knowing the Answer
This leads to my first, and potentially the most important piece of advice. It’s OK to say ‘I don’t know’. Nobody knows everything. Software development is a vast and extensive thing. There are so many technologies and disciplines that nobody in the world is an expert at everything.
More than that though, “not knowing” is fundamental to what we do. We are always creating something new, and exploring ideas that are new to us, and sometimes to the world. It takes a little while to learn this, but not knowing isn’t something to be embarrassed about, in fact, you will spend your career not knowing.
I like to apply scientific-style thinking to software development, after all, if software really is about “not knowing” then we need to learn to be really good at learning, and humanity has no better approach to learning than science.
Failure is ALWAYS an Option!
One of the key lessons in science is to proceed in a series of experiments, validating our guess as we go. This means that you shouldn’t be afraid of failure. Failure is where we learn our most valuable lessons. Focus on what is in front of you right now and apply effective learning techniques to solve those problems.
Try not to become overwhelmed by the complexity or the size of a task. Take it one step at a time. If we want to minimize the danger of making a mistake, then we want to be able to make those mistakes on a small scale. Dividing our work up into small, controlled, units of progress allows us to see whether it is worth taking that next step or not. Does this change move us forwards, or is it a step backwards?
Choose Your Own Boss
A good mentor can guide your path to learning, so look out for somebody who can fill that role. I put it like this, choose your own boss. This won’t necessarily be your boss by hierarchy, but somebody you can look up to, learn from, and call on for help.
If you are in the process of interviewing for jobs, try to recognise where you might be best supported as a new developer. Make sure you show up to interviews with your own questions on that topic. A good team and organisation will have no problem with you questioning the support system that they provide. Whether you are currently in a position of work or making applications, take yourself and your career seriously. Evaluate your best routes for success and take them.
Learn by Playing
Not only should you think about your professional progression, but take time to recognise what you really enjoy about writing code and developing software. Play with software. Do things for yourself.
I started my fascination with software by creating games and then went on to develop other silly things for my own entertainment. I actually have a video on YouTube about the dumbest things I’ve ever programmed (Watch here: https://bit.ly/Top5DumbCode).
They might have been dumb, but they provided significant entertainment to myself and coworkers around me. There’s no better avenue for success than enjoying what you do.
Focus on the Fundamentals
The fundamentals of software development do not change. Which means they are more important than any tool, language or framework. Those fundamentals are where the real skill of a developer lies, so focus on the fundamentals.
When you are starting out you will inevitably have a strong focus on learning the tools of our trade, but be careful. The tools that really matter aren’t all obvious. Sure you need to know the language, dev environments and frameworks that you are using. However, over the course of your career, these will come and go. The real tools are more foundational.
It is unfortunate that recruitment doesn’t always work this way. Recruitment often works by having checklists of tools and technologies, rather than recognising the problem-solving techniques that are the real heart of our industry. This is particularly true when recruiting junior developers. As it’s hard to demonstrate your capability, let alone potential, so many organizations resort to these simple check-lists.
This is, of course, a poor way to go about recruitment, but it is often the approach taken by many firms. Remember, that this is not what makes you a great software developer. A long list of tech in your Resume or CV doesn’t make you good at software development.
Learn the Skills to Compartmentalise Problems
My final piece of advice goes back to the idea that it is ok to say, ‘I don’t know’. The human brain is limited by capacity, there’s only so much stuff we can genuinely understand, and these days, we build software systems far beyond that capacity. We need ways to manage that complexity.
As developers we need to become experts at the techniques of compartmentalising problems and our solutions to them. Take that idea seriously!
Compartmentalise and create ‘modular systems’ to divide up any problem into pieces that are more manageable. Related ideas in you code should be close together, this is called Cohesion.
Each piece of your code should be focussed on achieving one thing. Use separation of concerns as a tool to help you to create better designs with better Modularity & Cohesion. Value the readability of the code that you create, and do what you can to make your code easy to work on. Seek out examples of good code, and maybe bad. Be opinionated about what makes good code good!
One of my favourite descriptions of “Good Design” comes from Kent Beck:
“Good design is moving things that are related closer together and things that are unrelated further apart”
Enjoy the Journey
I am attempting to do a small part in helping with your learning on my YouTube Channel…
and My MailList, where I regularly publish useful guides on ideas and practices that seem important to me…
I hope that these pieces of advice can be helpful to you. Take time to appreciate the journey. Look to where you can best succeed and work on a career that can leave you feeling truly fulfilled. And I shall say it again. Welcome. You’ve made a great choice.
For more top tips and advice for junior developers watch my YouTube video here!