I once had a conversation with Bill Gates. Yes, in person, face to face. And while I will not go into the whole meeting he said a couple of things that I continue to think about on a regular basis. One of them is that he suggested that development tools have gotten more and more powerful but at the same time that has made it harder and harder for students and other beginners to use them. I think that anyone teaching programming using tools like Visual Studio and Eclipse and the various markup languages that seem to be growing in power and complexity daily would agree with this. This has spurred the growth on simpler tools such as Alice, Kodu, Scratch and IDEs for beginners like Small Basic, BlueJ and Greenfoot. These are great learning tools but I wonder if they keep beginners, and by that I mean hobby programmers as well as students, away for the main stream of programming. Away from the really cool stuff.
Today when you think about programming apps for phones you have three options: iPhone using Objective-C, Android using Java and Eclipse with add-ons (Or App Inventor about which I will say more later) or Windows Phone using Visual Studio (C#, C++ or Visual Basic). Your user interface is likely to be drawn using some sort of markup language that is probably going to have its own learning curve. In my humble opinion it shouldn’t be this way!
Many years ago I worked with an operating system called TRAX. It’s so obscure not that I can’t even find it in Wikipedia. Why bring it up now? Because back 30 years ago this operating system used a mark up language for describing a user interface that was much like the ones we are using today. Where is the progress? Oh sure today we have some drag and drop capability and I love getting started that way using Visual Studio for Windows Phone and Windows 8 apps. But a lot of modifications seem to have to be made in the code. Sure I can do it. I have almost 40 years of experience writing code and messing around in mark-up languages.
As long as I have been programming which is about 40 years now people have been talking about programming getting easier and easier to the point where one day everyone would be able to program. It seems as though we went so far with that (remember Visual Basic 6.0 and earlier?) and then started backtracking. Now Visual Basic .NET was a huge step forward in power but we lost something in ease of use. Control arrays which I thought was one of the most powerful features in VB 6.0 were still doable in VB .NET but it took a lot more work that had to be coded by hand.
Moving from Windows Forms in earlier versions of Visual Studio to Silverlight and HTML5 today again seems like a bigger step backwards in ease of development than it is step forward in power. I’m not sure I understand the motivation behind it either. Who is pushing for this sort of thing?
Now a word or two about App Inventor for Android. I did a throw down event where we demonstrated development of apps for iPhone, Windows Phone (my part) and Android. I have no doubt that the App Inventor demo “won” for many definitions of won. I like to think I was second – Objective-C is weird looking to me. But with App Inventor one has a domain specific (phone in this case) version of a drag and drop block programming language (it builds on work at MIT that went into Scratch) that makes it easy to do very powerful things very easily. The demo made ME want to start developing for Android! Why can’t we have more of that sort of thing?
Why can’t we have domain specific blocks for more types of apps and applications? Why can’t we have more work in developing block languages that make it easy to avoid syntax and create more WYSIWYG user interfaces? Oh sure the professional programmers will sneer at it and stick with their powerful tools that make them feel like the elite – or is that l33t? But why not open development to the rest of the world?