One of the most important concepts one must understand when entering the IT industry is the fact that Computer Science is different from Software Engineering.
I hold a degree in Computer Science, and like most fresh graduates, once I stepped into the corporate world, I immediately found out that what I have been studying for 4 years has almost nothing to do with real-world software development. For example, the theories in computing that we have studied in college are rarely applicable in real-world applications. Even the approach to programming itself that was taught to us in college was fundamentally flawed – we were never taught how to program in groups, or to program with maintenance in mind.
College teaches us to build dog houses. The real world wants us to build skyscrapers.
So here we arrive at the problem: the misconception that Computer Science knowledge is enough to develop good software. And here’s where Software Engineering steps in.
Without going to much into the technical details, we can look at “engineering” as simply the application of science to practically solve problems. Civil Engineers use Physics to create structurally sound buildings (i.e. structures that won’t collapse and kill people). Electronic Engineers also use Physics to build consumer electronics (i.e. devices that don’t blow up and kill people). Chemical Engineers use Chemistry to process chemicals into more useful ones (i.e in plants that don’t blow… you know the drill).
Steve McConnell (my favorite author in the industry), in his book Professional Software Development, uses Physicists to show why making scientists do engineering stuff is a bad idea. In the book, he asks you to imagine what would happen if a person with a PhD in Physics would be asked to “design electrical equipment for commercial sale”.
While the physicist would probably be able to design a working prototype of the device, it is not likely that he will take into account the factors that come in when designing commercial products.
- Will the device be robust enough to withstand day to day use?
- Will it pass safety standards?
- Is the cost of materials and production low enough to produce profit?
As you can see, the problem here is almost the same as the problems I encountered above when I started building real-world applications.
By now the importance of Software Engineering knowledge should be clear to you. If you’re a software developer, it is your responsibility to study the various aspects of SE to improve the quality of your work.
If you’re a manager, not only is it your responsibility to be familiar with the organizational and processes side of SE, it is also your responsibility to train new employees in SE. I would even have to go as to say that you must make them unlearn (brainwash?) some of the “unhealthy” practices that they have learned in college.
As SE (along with Project Management) is my primary focus nowadays, expect to see me post more SE stuff here in the future.