The Most Important Tool in a Software Developer Toolbox
There’s only one “best practice” which is truly the best. What’s important it applies in every situation we could possibly face. It says: You should always use your brain.
Not methodologies, techniques, languages nor frameworks solve our every-day problems. They are solved by our brains. Therefore, we should pay a particular attention that we use it all the time. I don’t mean we should rediscover the wheel. Obviously, we should be lazy in a positive meaning. But even if we rely on the work of the biggest figures in the software development community, we should be constantly open-minded and asses methodologies, techniques, languages and frameworks.
It leads to the statement that a brain is the most important tool a software developer can use. Should we know then how it works (or try to know)? Should we develop it and train?
In my opinion, the answer is yes. Like with every tool.
But I was curious how other developers see it. Especially, the prominent ones. I’d asked Ward Cunningham, Andy Hunt, Guido van Rossum, Dave Thomas, Kent Beck, Grady Booch, David Heinemeier Hansson, Ron Jeffries and Jeff Atwood few questions about how they learn, if the knowledge about human brain is important for them, and what’s the best way to become a great software developer.
Books
Firstly, they recommended reading good books. Jeff Atwood pointed me to his article explaining why programmers should read books. They also named a few books worth to read: Structure and Interpretation of Computer Programs, The Mythical Man-Month, The Art of Computer Programming, Smalltalk Best Practice Patterns, Refactoring: Improving the Design of Existing Code, Patterns of Enterprise Application Architecture. Of course, there’s a lot of other interesting positions. The point is that reading makes you a better developer.
Techniques
Personally, I speed up the process of gathering knowledge by applying learning techniques. I love Tony Buzan’s work. For instance, mindmapping. I use it to organize knowledge, solve problems and summarize books content. Almost all software engineers who answered the question about tools and techniques use mindmapping in someway too.
Interesting approach was described by Guido van Rossum. He said:
One thing I try to do is to do “meta-learning”. That is, I try to get beyond “I learned that this works” or “I learned that that didn’t work” and realize “a general approach to solving problems like this is likely to be successful (or not)”.
I’ve been learning similar techniques at a creativity training. I’ve also experienced that creativity isn’t something only geniuses have. All of us can benefit from it.
How brain works
I was also interested if they studied how the brain works. And whether they use this knowledge during learning. I wasn’t surprised that most of developers I’ve asked see this topic as an interesting area. Nevertheless, some of them do not use this knowledge in a conscious way when they’re learning.
I have to quote Andy Hunt here. He answered:
Yes, that’s why I did a lot of research and ended up writing the Pragmatic Thinking & Learning book. I gained a lot of insight as to how our brains work, and I use that daily to be better at creativity and invention.
There’s a lot fascinating resources in the subject of human mind. I might write a post about them one day. Nevertheless, I highly recommend Andy’s book. It’s written by a developer and it’s a fantastic starting point in studying this area. It also presents a lot of useful tips and techniques. It’s the one book, I think, every developer have to read.
Becoming a great software developer
Everything above could be extremely helpful. But few I’ve asked do not use any tool or technique. And are not interested in brain internals. Still, they’re great. So what’s the pattern.
Paring, coding, reading others code. Generally speaking, learning by practice is something emphasised by most frequently in the answers. I’ll end this post with Kent Beck’s words:
Really my most effective strategy is just to program as much as I can.