What they don't teach you at institutes of technology – how to be smart
I am slowing down a bit this year. For many years I have made more than ten around-the-world trips and lots of local traveling, but this year I have made only eight. J During this time, I have given a dozen keynotes and more than fifty other kinds of talks. I am often invited to universities or institutes around the world, and I have been offered professor jobs, surprisingly even in Sweden. Thus, I feel I have quite a good understanding of what they teach you about software.
Interestingly, most professors in software have never built any useful software. This is natural since they have grown up in the academic world where software engineering is not as fine as computer science. Of course, this is not true for professors in your part of the world, but elsewhere. J Thus, most professors can’t possible teach in software engineering with any passion.
As a consequence new ideas about software engineering have come from practitioners around the world. The best ideas come from practitioners with an appreciation of science, people that agree with Kurt Lewin: "There is nothing as practical as a good theory". Examples of good theories were Newton’s laws, and Einstein’s relativity theory. Most research represents useless theories. Of course, this is not true in your part of the world. J
Personally, I adopted this motto thirty years ago and it has been leading my work all these years: components, use cases, Objectory that became RUP, SDL and UML, and now practices. Many other people such as Kent Beck and Ken Schwaber have made similar contributions. This is the true essence of software engineering and it stands on a sound theoretical basis, meaning it can be explained so others can understand it and practice it. But, very few universities teach it and even fewer do it well. As I said, this is of course not true for universities in your part of the world. J
However, these exceptional institutes that teach you software engineering practices don’t teach you how to be smart when working with these practices. And this is fine. I am happy if they teach good practices, but to provide real value, each practice needs to be applied in a smart way. The software industry has the capability to help itself in this regard, but I really don’t see that happening.
Smart is about being agile, but it is also about doing the right things, the right way. You can become smarter through training one practice at a time. However, without experience your alternatives are too many and only a few of them are smart. Experience is of course something you can get sooner or later, but it takes time if you must learn by your own mistakes. This is where the utilization of what we call “smart cases” becomes essential. We have a large number of smart cases that relate to working with people, teams, projects, architecture, modeling, documentation, testing, process, outsourcing, and many more.
Each smart case has a key motto for how to be smart, for example:
· People: Software is developed by people, not by process and tools.
· Teams: A software team is like a sport team with all needed competencies to win.
· Project: Think big, build in many steps.
· Architecture: Start to build a skinny system, add muscles in later steps.
· Testing: Whatever you do you are not done until you have verified that you did what you wanted to do.
· Documentation: Focus on the essentials - the placeholders for conversations – people figure out the rest themselves.
· Process: Don’t throw out your baby with the bathwater: start from your existing way of working, find your pain points and change one practice at the time.
And on it goes.
All of this to say, we should learn software engineering practices at school. We should shorten the time to get experience of practices by collecting reusable smart cases. We have started this. We hope others will contribute. I think that would be smart by the industry. J