As my mentor Scott Bain says, “We should always be mentoring and mentored.” This is especially true in the software industry, where things change so rapidly.
I feel fortunate that I'm a part of the agile community. I learn so much at conferences, from my colleagues, and when working with clients. The software industry is constantly changing, so I constantly have to keep up. Fortunately, I can draw on the wisdom of my colleagues, and they can draw on my wisdom. Getting to actually speak with them about the latest things they’re working on is definitely a fast path to learning.
The other aspect of learning I get to partake in that I find extremely valuable is the learning I get to do from my students. The people I teach are the top software developers on the planet, so I always learn a tremendous amount whenever I teach a class.
One of the most important and valuable forms of learning I get to do is when I teach. If you've ever done any teaching, then you know tthe best way to learn something is to teach it to someone else. There's something about the process of making a learned skill explicit by describing it to someone else that gives us deeper insight. It's like other parts of our brain are hearing these ideas for the first time, and it deepens our own knowledge tremendously. I learn so much by teaching classes that I'm always excited to go back and teach more—it can become addictive.
The software industry needs more teachers and mentors. Good programmers are offered careers right out of college, so many aren’t motivated to continue on for their master’s degrees or Ph.D. As a result, there is a serious shortage of professors who teach software development in schools around the world. This has been a problem for decades.
Most of the content taught in schools is severely outdated, sometimes by as much as twenty years. There are some exceptions, but interestingly, the software curriculums in several developing nations are far superior to many of the curriculums in colleges in the Western world. This is just one of the things that is seriously broken about the software industry.
The software industry has been growing by leaps and bounds for decades. “Uncle Bob” Martin says that the number of software developers in the industry doubles every five years. If that's true, then that means that the average experience level on a team is about two and a half years.
No wonder it seems that our industry is constantly reinventing the wheel. With such a huge and constant influx of developers to the software industry, it becomes difficult to establish standards and practices. Anyone can hang a shingle on their door that says they’re a programmer and get work, but what is the core knowledge that programmers should have?
We hire for programming language skills or framework experience, but these are the kinds of things that any developer should be able to pick up quickly. We should be hiring based on talent rather than skills.
We should be teaching developers about the software lifecycle and how to write code that can be maintained and extended more easily. These critical skills are best learned on the job, which is why mentoring can be so valuable.
Although our education system is sort of letting us down, there are individuals in the software field who are pushing the state of the art and significantly advancing our industry. Many of these individuals are associated with the agile movement.
Within the agile movement, there is also a core set of technical practices I find exciting. Extreme Programming, design patterns, software craftsmanship, refactoring, and much more have become important concepts in software development. These ideas raise our level of professionalism and reduce our failure rate. Many of these ideas are still leading edge and haven't reached a larger audience.
They say that about half of the professional programmers in the industry are self-taught; they didn't go to school for computer science. I've worked with thousands of professional software developers, and I find that developers who have been self-taught are every bit as well prepared as developers who received some kind of a computer science degree. Perhaps they’re even more prepared, because I often find that people just graduating from college and computer science programs have to unlearn a lot of the bad practices they picked up in school and replace them with better practices that are actually used in the industry.
I hope that this will change in the future and that computer science curriculums will become more relevant to people entering our industry. For now, perhaps the best way to learn is from someone who understands what we want to learn about. If you can find someone who has the knowledge you want to acquire, then find some way to learn from them. It’ll be well worth it.