We’ve all heard that “knowledge is power”. We’ve been through job interviews where the questions focus on how a specific technology works, even questions about how a specific API is named. Is all of this enough to make us good software engineers?
The word Philosophy comes from Greek and it is composed of two other words: “philo” = <love of> and “sophia” = <wisdom>.
What would wisdom be? Isn’t it enough to learn yet another “cool” technology to do our job? When I was a young developer I loved intellectually challenged projects. I could not wait to work on one. I would just plunge into it, imagine the coolest possible solutions, write a lot of complex code, try to prove myself smarter and better than others around me. I would go that far as being blind to the needs of the business, milestones and schedules.
After years and with age different perspective arises. We are not in the business of writing software, we are in the business of making money. What matters is the outcome: software is a mean to an end, a tool we create for our clients and customers.
After being through many projects, some successful and some more or less failures, I learned something I haven’t found in any book so far, I learned to look for the answers to these questions: how can I use a specific technology in an efficient way? How can I design and write my code so in the future it will not be expensive to maintain? What is the bigger picture, can I see the forest or I’m blinded by the trees?
This attitude means that I need to understand more than just a simple API or the newest and the coolest technology. What I need is a new set of skills that makes us good software engineers; it is the wisdom of knowing the “patterns” of behaviors that could lead to success.
It is in fact what actually makes a good Software Architect. The smart developers who know the newest coolest technology have their place in a project; after all you do need someone to understand all the subtleties of a technology to do a good job. That’s not enough. You also need the Software Architect with the wisdom of seeing the bigger picture, someone to see how the pieces fold into each other to make a big project, otherwise a software application can end up being a pile of one million lines of code that does not scale, it is slow, is has memory leaks and in the end it is useless.
Knowledge may be enough and it could very well work for some small projects. When you spend tens of millions of dollars and years on a complex project, you cannot succeed without the wisdom of a good Software Architect.
Until that is well understood many projects will partially or totally fail while the Software Architects are caught between a rock and a hard place. To the business they are just brains on a stick: “yeah, we need you but we will make all the decisions without you”, to some developers they will seem useless because “this guy does not know all the subtleties of data binding in WPF”.
It is also said that normal people learn from their own mistakes while wise people learned from others’ mistakes. If you have a complex and an expensive project can you afford to make mistakes in order to learn from them?