I teach software design at some of the largest and most well-funded companies on the planet. My classes cover concepts and practices that most developers are not aware of. I do draw on other people’s work—lots of other people—but I synthesize it in new ways and give practical examples from my own experience as a developer. I’ve seen time and time again that how we think about things can have a huge impact on our effectiveness. My job is to help developer become more effective by thinking about problems differently.
Interestingly, I find that what distinguishes a good developer from a truly great one is not just being smart. Sure you have to be smart to be a developer but there is much more to it than that. Development requires many skills and many kinds of intelligence. We must have discipline, knowledge and a huge amount of creativity. We also need communication and people skills because we don’t build software in a vacuum; it is a collaborative effort.
Writing software requires imagination and visualization abilities like visual artists. It also requires a good understanding of how we use language to abstract concepts. You don’t need to be a great writer or speaker to write code but you do need to be able to think abstractly, at least if you want to write good code.
Like any discipline, software development is an art in its highest form. If you prefer to think of yourself as a craftsman or a hacker or whatever, that is fine. It really doesn’t matter to me. What does matter to me is that we love what we do in all its diversity and that we are on a journey of constant learning and improving our skills.
Every field has beginners, journeymen and masters. I personally believe that the masters of software development engage in some of the most complex work that humans can engage in. I know that doctors and lawyers make more money than we do and, at least in the case of doctors, can provide more value (saving lives) but I believe that to be a truly great software developer takes a range of skills that requires a lot of diversity.
You don’t have to agree with me on this and I certainly believe that there is less consistency among developers than doctors or lawyers but they have been at it for longer and have systems that support them such as some form of required apprenticeship, standardized training and testing to verify that training plus pier reviews. We in software are still figuring it all out, mostly on our own.
My only points are that because we are still figuring it all out it takes a great deal of courage to be a developer and a willingness to be constantly learning new things and unlearning our outdated habits. Not everyone is cut out for software development. I believe that those of us who do it well love the challenge and let’s face it—the world needs people like us. So I think we deserve to give ourselves a pat-on-the-back in true appreciation of how far we have come in such a short time, both individually and as an industry. Thank you and let’s keep going!