In Code Complete Steve McConnell looked at core values for programming some fifteen years ago and came up with this list:
- Intellectual honesty
- Communication and cooperation
And two that McConnell said don’t matter as much as you might think:
I’m doing a talk for INETA (see note) called “Rethinking Object Orientation” which looks another book of the time – Grady Booch’s Object Oriented Design. Our world has changed so fundamentally that the ideals and focus presented in Object Oriented Design have changed, and that’s the core of my talk (the new things that matter). I think the same is true of core values - we need to rethink them.
Rethinking does not mean discarding. That chapter of McConnell’s book is still a good read every year or so. Rethinking means considering in today’s context. I’ll share my thinking but I need a huge caveat here: I rethink my core values and allow them to evolve as I learn and grow.
From OpenSpace.com, comes this:
Open Space Technology runs on two fundamentals: Passion and responsibility. Without passion, nobody is interested. Without responsibility, nothing will get done…If passion isn’t aroused, not much is going to happen, and responsibility will never have a chance.
Just Open Space? What about relationships? What about business? What about code? What about you?
Passion and responsibility must be part of our core values. What should we be passionate about and among the hundreds of possible responsibilities, where should we focus our energy?
Those are the good questions, and thinking about them led me to understanding a few more core values:
- Individual knowledge and skills
- Community knowledge
We must openly and directly stand on the shoulders of giants and acknowledge this to move ahead. One of the most difficult things in acquiring and maintaining individual knowledge and skills is that the body of community knowledge is so immense. If we do not constantly strive to better both, we will not succeed in writing meaningful software.
If we return to McConnell’s list, many features do not seem to be as important today.
For example; it’s popular to announce pride in being a lazy programmer. Not one person that I’ve heard say that was actually lazy. Looking for efficiency is not lazy. And laziness leads to the worst aspect of our industry: Ctrl-C/Ctrl-V.
Learning new things is important, but curiosity needs to be tempered with an enormous amount of responsibility. If you spend 80 hours a week learning new things, and you are brilliant, you will still not keep up with all the new advances in our industry.
Other things from McConnell’s list seem even more important today.
Humility is hugely important. It is why I’ve run crosswise of people that just pissed me off because they believed they had the “true answer.” There is no true answer, everyone is learning, and thank god we have 9-5 programmers.
Honesty is essential. It has always been essential. If you are in a programming environment where it is not OK to say “I don’t know” and “I was wrong”- run away. The environment is too toxic to survive.
I disagree with McConnell that experience and persistence are not as important as you might think.
If you read all of what McConnell says on experience, it’s clear he means is that simply counting years isn’t enough. Of course requesting five years of VB or C# experience is stupid. If you’ve been writing 1.0 code for five years, you have far, far less value than if you have one year embedded in generics, lambda expressions, LINQ, and the new libraries (WPF, WCF, Silverlight, etc).
But, the lack of respect for experience is holding our industry back. People are rediscovering things that have already been done. The act of rediscovery is exciting and sometime new thinking on old problems emerges. Alongside that, we lose the nuances that have already been uncovered. I am not espousing this as a gray haired old woman pouting that you’re not listening to me (a future blog post perhaps). I learn from people in this industry that are half my age but more experienced in some things. Those of us that are old, however, sense the fundamental truths. Unless we can ever write those in a book, which seems unlikely, both technology experience and long term passionate involvement in our industry have much to teach us.
I have the privilege of learning from my sons. My older one is a brilliant coder who grew up intimate with this industry. I told him once what I thought were important characteristics in a programmer – he said “nope, your wrong. The only important characteristic in a good coder is stubbornness.” I do not believe it is the only important characteristic, but it is an important one. In today’s world, we slog through code. We spend months or years on the same project. We debug in convoluted systems. While we sometimes need to find another way to solve a problem that is easier, it takes stubbornness in believing that problem will be solved to find the other route. And learning any technology takes patience and tenacity.
Those are my views. Take some time to consider your core values as a programmer. Take some time to see if those core values contribute to your programming life being what you desire.