Effective Software Engineering
When I first started my career, I had a degree in Computer Science from the school of Engineering thus I was an Engineer. In fact, I was a Programmer. There are some key differences between Programmers, Computer Scientists and Software Engineers.
Programmers can master a programming language. With the advent of scripting languages e..g Java Script, PHP, just about anybody can be a programmer. For small projects, a group of programmers can be effective. For example, I love how the AppStore has enabled programmers to bring goods to the marketplace without having to worry about engineering. The Apple Engineers built a framework that allow Programmers to ignore a huge amount of details. Very cool. Programming is a necessary but insufficient skill for a Software Engineer.
A Computer Scientist seeks new knowledge. This area has been in a drought in my opinion. While there have been some advances on the edges in the last twenty years e.g. Watson, nothing fundamental has been invented to help the Software Engineer. I’m talking about something transformational like LED televisions compared to CRT. Being a Computer Scientist is also a necessary but insufficient skill for a Software Engineer.
A Software Engineer takes a variety of skill sets like programming, project management, architecture, computer science, testing, etc and combines them to Create. This combination of skills is the hallmark of Engineering in general and Software Engineering in particular.
My rant about the industry is that we have way too many Programmers and Computer Scientists. The Programmers are just too small scale to contribute greatly. The Computer Scientsts are so busy thinking about Doing It Right that they don’t contribute greatly either. The Software Engineer uses a practical attitude that balances the demands of each project.
I call this balancing act Effective Software Engineering. I’ll be expound on the various facets but here are some bits:
- Mastery of Programming
- Strong Computer Science ability
- Blending skills to achieve success
- Understanding that time and budget constraints exists on every project
- Planning for the future even when under pressure
- Grasping Business goals and constraints
- Leadership ability
IMO, Software Developers and other IT personnel should strives to be Effective Software Engineers.