Friday, December 26, 2008

Software Engineering Culture, a little background

The knowledge worker culture as we know it today began with the acceptance of the UNIX (AT&T) operating system in the 1980’s. The software language C(1) that was built to run the UNIX environment is the root of our modern systems.

In the late 1980’s modern database systems were completed, and added support for a common extraction language (Structured Query Language, SEQUEL developed by IBM) and support for Open Database Connectivity (developed by Microsoft) was added in the very early 1990’s. OS2, a joint project of IBM and Microsoft, which morphed into the Window NT family was started in the late 1980’s and released in 1993 was the final fundamental step that completed the move to the modern computer era. By 1995, with protocols like TCPIP, HTTP, OLE we had a platform that significantly resembles the modern age of software.

Most of the people that I know in the industry spent 1989 through 1996 developing data retrieval code for Windowed based GUIs. From 1996 to about 2001, 2002 the industry scrambled to implement web sites and web applications, with out much knowledge about their tool sets. So from 2002 to today, we have been cleaning up the mess we made in the late 1990’s.

So when people talk about the pace of change in software, I am taken aback. We have had two decades to get used to the current environment. The last big change in the industry came with Microsoft’s release of the .NET framework in 2001(we'll talk about SOA later, it came before this, and does have a large paradigm shift grade impact), and that was a shift that took the code base back to the Object Oriented Programming Ideals(2) of C. What .Net represented was not so much a rethinking of software, but a nanny system that forced bad programmers to correspond to established best practices.

The problem with having an idea of the changes in software is that the code changes from year to year, as better version (revisions) of software are released, not that the paradigm of development has changed. Add the fact that computer systems have immensely complexity, to this and it could appear that every thing has changed, when we are only discovering what we did not know last year (but really should have).

So, that almost unanimous statement that “Change” is part of IT culture is something that I always wince at, when I hear it. The only universal changing thing in IT is knowledge-workers abandoning their respective employers for better opportunities.

So what is the Zeitgeist of IT Culture, what are the traits that we share? Unfortunately I will need to weed out those people who write code as only their job, and talk only about Software Engineering Culture.

  • Need for constant process improvement. “If I am not improving things here, I can just go somewhere else that I can make a difference.”
  • Control over their own personal sovereignty. “If you don’t like it, I can just leave.”
  • Aggressive negotiating skills. “I got five hits today on my monster resume.”
  • Need to achieve to their own level of quality. “You don’t own quality, we all do.”
  • Aggressive self-study program. “I will implement that new third party software in three days, I will learn it on the fly.”
  • Consistent desire to implement new ideas. “Check out this recursive function I made!”
  • Desire for a comprehensive solution to problems. “We need to fix the underlying problem, not just patch the patch.”


(1). C was a class based language with support for functions, it spawned C+, C++, and Java and is the basis for Microsoft.NET
(2). With some very cool API features and Visual Studio 2008 has a great code editor, but it still is a direct descendant of C.

1 comment:

Gareth said...

A note on the pace of change, currently we are undergoing a large sea-change with the way that our user community is using online tools. I expect to be posting quite a bit on the innovations of sharing in the future.