Are universities out of date with current software development practices?
Recently I had a discussion with some of the developers at work about our time at university, more specifically about what modules we studied that turned out to be mostly useless. Some of the guys mentioned assembly language, others about programming languages that have since become as extinct as the dinosaurs. Out of the list one subject stood a cut above the rest and brought out shared smiles across the room... Unified Modelling Language (UML).
During my time at university I remember meticulously creating UML diagrams to fully describe what I needed to create in the next phase of development (in those days waterfall was the first methodology we learnt).
Another use of UML diagrams is on-going documentation. In its usual form this is a model residing on a case tool. The idea is that keeping this documentation helps people work on the system. In practice it often doesn't help at all. – Martin Fowler
Little did I know that once I was out in the real world and with agile being all the rage, most companies work on the basis of having as little documentation as possible. Some would even say documentation is counterproductive to working in an agile environment.
So if this is the case why are university’s putting so much emphasis on UML? In my opinion it’s all down to cost. UML is fairly straight forward to learn and in turn especially since it’s all done on paper its straight forward to teach. This is a bit of a shame considering documentation takes up roughly 2% of my time at work throughout a year. Personally it would have been more useful to learn how to setup environments, deployment process, or simply more programming languages. Problem is this required licencing!
Don’t get me wrong UML does have some uses if the documents produced are actually looked at and updated regularly. However the situation in which the need arises is rare, especially in smaller companies where a team’s development output can be greatly reduced if time is spent documenting.
Today good development practices encourage creating self-expressive code, if you require comments to describe what’s happening perhaps you should start refactoring to make it more self-explanatory. For new starters learning a system should also be supplemented by shoulder surfing and peer programming sessions. Proper handover should also be organised to ensure expertise’s on the project is maintained is maintained within the team.
So you happen to be a student reading this, learn UML to get the marks but remember and keep in mind, it’s not going to be your most important skill.