We started our first Mined Minds training group two years ago. Now we are in our seventh training session, with another thirty students having joined us in their coding journey. What have we learned during this time about what makes a successful new programmer? They all tend to show the following five characteristics.
People self-select into our training. Especially in the early cohorts, participants didn't know what to expect. They were curious, and this gave them an advantage. Curiosity is crucial if you are to become a successful software developer. It is what drives you to want to really understand how everything works. It is what gets you experimenting with new languages and frameworks. It's what pushes you to not just solve problems, but to find the problems that need solving.
If you like to understand how things work and don't just accept magic or that things are true because it is the way it has always been done, then you have one of the characteristics of a successful programmer. Curiosity may have killed the cat, but it also made the developer.
With a little bit of practice and understanding of the fundamental concepts, writing code is the easy part of programming. The real skill is identifying the code that we should be writing, and that means understanding the problem that we need to solve, and finding a way to tackle it. This computational thinking - breaking down a problem into component parts that others, including computers, can understand - is key to having a successful career as a software developer.
Work through this tutorial on coding the laundry cycle to see if you have what it takes.
Many people come to us with the perception that programmers work mostly on their own. Whilst you can code solo and choose to spend many hours at a time locked up in your basement, the people who most successfully transition into a career as a programmer do so by working and learning with others.
Our training program is hands-on and project-driven from the start. We mob program a lot, with everyone working together on a single code base so that we can learn and explain concepts together. One of the early exercises in the course is to write a random pair generator, and we then use this to assign pairs for all the other exercises. Working together means that we see other approaches to solving problems, we find bugs earlier, and we build a collaborative working environment where success is based on the team rather than the individual.
When we run information sessions about our training, we tell people that they will fail a thousand times a day. Whilst the comment is a little tongue-in-cheek, the reality is that as software developers things don't always work. If it was easy and always worked, the job would have been automated away already. To be succussful we need to learn from all these failures, and use the knowledge that we gain by failing to find a solution.
Very early on in our training we introduce and practice test driven development (TDD). Taking this approach reinforces the benefits of failing. We write a test that fails, and then write the minimum code to make it pass. Quite literally, we can fail a thousand times per day in our path to success.
Setting out on a path to learn how to code can be daunting. There are plenty of resources out there to help you, but often when you try to understand one thing you find you need to understand a thousand other things first. Beyond that, the industry is constantly changing, with new languages, frameworks, and libraries to work with all the time. Nothing is constant, so you'll need determination and a drive to continually learn in order to be happy in the industry.
In our training we focus on teaching the fundamentals, since everything else changes anyway. We don't make things easy, because if we just show you how to do something relevant today you won't be well placed for the work of tomorrow. If you just want a job, don't be a software developer. If you want an interesting and challenging career then it might just be for you.
There are huge opportunities for software developers, and the field is still relatively young with plenty of opportunities for people to shape the future of the industry. If you have the characteristics described above then learning to code could lead you to a lasting and lucrative career.