Tuesday, April 15, 2008

Am I asking for too much?

I am currently participating in a interesting thread on Matt Berther’s bog on my podcast. I commented on his post Blasting open source because I felt my podcast was not meant to pick on up source projects although part of it could be interpreted that way. So since then what I have been explaining is why I don’t see any innovation happening in software today.


Although I like .NET and Java I think there has been no real innovation in software in the last 30 years. The primary things I see as the backbones of what we use computers for are:


  1. Databases - CODASYL defined the standard for network databases in 1969 (RDMBS were first described by Codd in the 1960’s and 70’s at IBM)
  2. Word Processing - The Unix Concepts of text formatting for publishing came around in the 1970’s (as a matter of fact UNIX was first designed as a text editing and text formatting system). Although UNIX text processing is much more akin to HTML then WYSIWYG editors like MS Word
  3. Spreadsheets - First patented in 1971, VisiCalc was actually being distributed for the Apple II in 1979
  4. General Programming via high level Languages -
    a) Interpreted Languages (If you want the full deal Smalltalk was around in the 1970’s. Object oriented, dynamically typed and reflective)
    b) Compiled Languages (Cobol was created in 1959 and C in 1972)
  5. WIMP Interfaces - (Pioneered by the Xerox Alto in 1973)
  6. The Internet which started in 1969.

So if you take as a baseline of 1980 we have had these systems around for at least 28 years. Most have been around longer. Sadly I have been programming for 30 years so I have played with some of these at one time or another in my career.


Do I expect too much? I can’t help but see the feature set of these products though and say that on the whole the pace of innovation in computers disappoints me. Those advances we do see to have picked up come about more because of hardware advances then software advances. As Brooks says in No Silver Bullet

…the anomaly is not that software progress is so slow, but that computer hardware progress is so fast.

As I see it we continue to attack the accidents of software engineering. I quote from Brooks


If we examine the three steps in software technology development that have been most fruitful in the past, we discover that each attacked a different major difficulty in building software, but that those difficulties have been accidental, not essential, difficulties.

The three that he describes include:


• High Level Languages. Now this would include java and C#.
• Time Sharing.
Now this would be the entire concept or personal computers, laptops, PDA’s etc…
essentially ways to get the answer immediately.
• Unified frameworks. Here
he talks about UNIX, but you can also include in this the .NET framework and the
Java class libraries.

So my contention is that one of the reasons software innovation is so slow is we spend too much time reinventing what we have had since the 1970’s and not focusing on advancing the art of computer science. Am I wrong? So many of the things we see in the Open Source and Commercial World are clones of each other. Are we as developers taking the simple way out? Sure we can design a new enhanced WIMP interface, but that is because we already know most of the requirements except for that little tweak we are going to make? It is fun to do these kinds of projects because we don’t have to think about the hard stuff like requirements analysis, test cases and design. We just set down and code another build system, or IOC Container or OS.


We continue to attack the accidents because the essentials are so difficult. I was doing some reading on the System.Speech namespace in .NET and Natural Language Processing in general. One of the big things required to get these to work is to put together grammars for what we want the computer to do once it has recognized the words. The problem is almost no one is building the grammars. Why is that? Because it is hard. It would require us to step outside of the fun and simple things we do and take on some difficult tasks. The same thing could be said for coming up with systems that use common component architecture. How much simple would things be if we started building components and plugging them into applications. As David said in my Podcast, I want to drag and drop a CRM solution.


What does it take to get to these? We have to give up on some of the fun things we do and start attacking the essential problems in software development. Am I expecting too much? Are we as Software Engineers unable to tackle our discipline as a engineering science and start innovating again?


** Portions of this entry were posted a a comment on Matt’s blog ***

Monday, April 14, 2008

Founding Brothers

A friend of mine, Chuck Steffens, has convinced me to start reading Founding Brothers: The Revolutionary Generation by Joseph J. Ellis.  I must say this is a fascinating look at American history.  Specifically the time of the American Revolution and the founding of the republic.  I will do a book review in the next few days, but so far (up to chapter 3) it is a great read.

I downloaded it to my Kindle last night at midnight and started reading it.  The only thing I can say about the kindle is I am glad they don't have a ton of Computer Books available on it yet.  I would go broke every time I went to amazons web site. :-).  The science fiction and historical stuff us costing me a fortune.  On the plus side I have finally started to read Winston Churchill's series on World War II after having owned the books for years.

Tuesday, April 8, 2008

Google App Engine

I just ran into a reference for this.  It looks pretty cool.  Develop your application offline and then deploy it to the Google servers.  The man page is at http://code.google.com/appengine/

I have been meaning to play with Python and Iron Python.  I have just never had a reason beyond curiosity.  Now it looks like it might be worth learning.

Thursday, April 3, 2008

Mono 1.9 is Released

Mono 1.9 is released.  This is the last version before 2.0 which supports the entire 2.0 version of .NET on Linux.  This version also supports some C# 3.0 features including Linq to XML and Linq to Objects.  Very Cool
http://www.go-mono.com/mono-downloads/download.html


They have also released the Mono Develop IDE.  Full support in an IDE very similar to Visual Studio. 
http://www.monodevelop.com/Main_Page

Checkout the screen capture with their integration with NUnit

http://www.monodevelop.com/Image:Nunitmain.png

Tuesday, April 1, 2008

It is all about Portability...

As cell phones get more and more powerful, you wonder how soon they replace laptops.  Primary thing missing are good keyboards, mice, decent size monitors, better performance and memory.  The Windows CE development environment is there already.  So let's take a look at these one at a time...

  • Now I can get a 8 gig memory card from SanDisk for about $50.  This kind of makes me wonder.  How much document memory etc do you need?
  • Now for keyboards I can get any number of virtual keyboards although the support looks a bit shaky.
  • For Mice can I use any standard Bluetooth mouse?
  • Now here comes a projection system.  Is this a possible replacement for the monitor?

Mind you,  none of these are that great now, but with cell phone providers adding more and more content to the phone and revenue from voice communications stabilizing you will probably see cell phone providers going after any source of revenue they can find.  Of course I don't think I will see Visual Studio there anytime soon, but who knows?