Application System Design and the Software Engineer: Do We Need an Advanced Developer Classification?
I'm sitting here looking at my bookcases, with all their different technical books on ASP.NET, SQL Server, Internet Information Services, C#, .NET Framework, JavaScript, WebForms, Win Forms, Windows Presentation Foundation, Windows Communication Foundation, creating websites, and so on. These are just a few of the possible technologies that might be needed to develop a computer application. (And that's not even addressing the aspect of client desktop development versus server application development. Today people seem to specialize in either client-side or server-side development.)
A New Software Engineering Title
I keep thinking about an old saying: "Know more and more about less and less until you know everything about nothing." Such a great expanse of technologies exist today that software engineers who try to keep up with the whole ever-changing spectrum end up watered down in any one discipline. Thus, engineers are forced into specializing in one area, which presents another problem: How can we design complex applications that require in-depth understanding of all of these technologies and how they work together?
So what's the solution? I believe we need a new breed of software engineers who have the breadth and depth of knowledge to communicate with the different specialists and grasp how the various disciplines must work together to create a complex software application. The field of electrical engineering includes a Systems Engineer classification. I think that software needs an equivalent: System Software Engineer. (The title Senior Software Engineer is already in use, but it can apply to someone who is simply senior in a particular discipline.) A System Software Engineer would designate someone who is reasonably savvy in languages, operating systems, databases, software modeling, and so on.
Equivalent Book Titles
Looking through the technology books available online or at bookstores, I can't really find a good basic applications book showing how to use the different technologies from front to back. A lot of great books are available on any given technology, but very little in the total integrated use of all the software packages to create new, very sophisticated applications. We really need at least one that delineates the API collections of the various subsystems and how they integrate. The title of the book might be something like "Application System Design with Today's Technology."
Maybe I'll have an opportunity to put together such a book, as the starting point for the new role of System Software Engineer. It would need to include a good discussion of Microsoft's great Visual Studio 2010 development tool. The discussion could even focus around Visual Studio's many smart wizards that help us to integrate subsystems to solve a given application-development problem. (I mention Visual Studio because it's one of the major software development tools in use today.)
Essential Qualifications for the System Software Engineer
The study of business intelligence suggests that a person who has worked in a particular discipline for at least 10 years could be classified as an expert. I think a System Software Engineer would need a decade of experience in application design and at least a master's degree in computer science. The master's degree could be offset with 15 years of experience and at least a bachelor's degree in computer science. (The experience should not be what we find too often: one year of experience in 15 different areas.)
Big companies quite often pigeonhole a technical person into a very repetitive role. I can certainly understand their point of view, but it's not a good situation for the engineer. Maybe in those cases we could lower the technical requirements for entry to an associate's degree or a technical school degree, and still get the job done for the company.
In this global environment, and with the current level of technical competition, it's important not only to create Senior Software Engineers, but to develop to a larger extent this new breed of System Software Engineer. One constant issue in the technical ladder of a company is compensation. Traditional engineers of all types top out much faster than other types of management in a company. That situation has improved, but it needs to be even better to inspire the dedication and training required of a System Software Engineer. Far too often, lack of earning potential has led good Senior Software Engineers to go back to school to earn a master's degree in business. Of course we need some technical people in business management, but it shouldn't be caused by a limitation on their income.
I'm looking forward to seeing much more discussion of the need for the new title of System Software Engineer, with more capabilities in complex software design. I hope that this discussion comes from both industry and academia.