Over the past few years I found myself training several fresh computer science bachelors and introducing real world software engineering to them.
The easy cases were those who came by with a submissive approach and accepted just about any methodology I suggested. The hard nuts could be divided into multiple groups, but the hardest of them all were those who thought that design is unnecessary.
I’ve seen several pieces of fresh meat who thought that there is no real reason to model your application into classes, modules, components or layers. They’ve learned how to program in C back in college, and were certain that once you have a requirement you can start writing lines and lines of code.
Personally, I don’t feel comfortable giving orders to people on such issues. I can’t just force them to design, because I think you must believe in what you do and if you get an order from your boss to design, you will do it poorly and without putting your heart into it.
I’ve tried several approaches to convince these tough nuts, from lectures on different kinds of ilities to giving them small projects and changing requirements upon completion.
These seemed to have little effect as my students had quickly forgotten or ignored them. They insist that they can develop just about any application in a single class.
The best way I’ve found to open up their eyes was using what I refer to as the tree & wind analogy:
I simply take a student to the nearest window and point at the nearest tree, I ask him what kind of behaviour he sees. I tell him I see a tree, who’s leaves are being blown away by the wind. I try to make him understand that even in nature, there is no such thing as “just logic” and there is no behaviour in the world that is not related to an object.
Usually, after understanding this they start listening.