Skip Navigation LinksHome > View Post

The Future of Programming

There's been a lot of buzz about this article recently: Microsoft's Top Developer Prefer Old School Coding Methods.

I will fight you if you try to take away my text editor," said Don Box, a Microsoft distinguished engineer

"Do people want to draw pictures to program? Sure, I guess," continued Box, who works on creating declarative languages and tools for Microsoft. "But if you grew up programming when I did, you did it in text. And I think we lose that at our peril."

"Graphical programming environments are usable when they are useless, but unusable when they would be useful," said Jeffrey Snover, another Microsoft distinguished engineer and creator of Microsoft's PowerShell scripting tool for Windows. "When there are five things on the screen, you can burp that out. But when there are 500 things, graphical programming is completely unusable. You zoom in and zoom out and you lose all context. I think it's just smokin' dope."

Surprisingly, to me at least, this article got a mixed reaction. Personally I've always embraced this notion, specifically, that Visual Modelling isn't how I'd want to code. I previously suggested I'm not even that attached to creating UIs with a visual modelling tool (in If you can't beat XAML, improve it)!

When programming, a developer is communicating his intent to the computer and we communicate best through language. We're really good at text and language - we start practising at an early age and most of us are fluent in a couple of protocols - mine include English (just), C#, XAML and a tiny weeny bit of German (un peu :D). Language seems the most natural way to communicate and there aren't many examples where this isn't the case in the non-computing world either, with physical engineering drawings being the most notable exception.

So why don't we code in English? There can be no room for interpretation or ambiguity in computer code. Computers don't do ambiguity. We have the same challenge in the legal profession who do 'code' in their mother tongue. But the output here, legal documents and terms and conditions are ridiculously verbose. Therefore, in my opinion, what we have in code is a short-hand for very clearly stating our intent without ambiguity. This works great for me and I wouldn't swap that for visual modelling.

I should be clear that I'm not saying we're done. I think there's lots of room for improvements to languages and runtimes.

In terms of my development productivity, I believe the biggest thing holding me back right now is the physical human computer interface, not the languages. I dream of a time when speech recognition is good enough that I don't need my keyboard when coding anymore (although noise in a busy office might be a new problem). Languages would need to be optimised for this new input type and other NUI (natural user interface) ideas would need to mature as well (touch, eye tracking) to support this concept but that's where I think the big gains are to be made for developers. Not visual models.

Imagine being told that, from today, you can only communicate with your colleagues through the medium of drawings. No thanks. Don't get me wrong, I am never happier than when I'm in front of a whiteboard but the illustrations are only there to support and reinforce what I'm actually saying, which is nearly always in words ;)

Tags: C# Programming

Josh Post By Josh Twist
12:27 PM
05 Jan 2010

» Next Post: The Binding you wanted from day one in WPF
« Previous Post: The SOA Manifesto

Comments are closed for this post.

Posted by Siderite @ 05 Jan 2010 10:06 PM
I have been thinking about programming interfaces for a while, including something like voice recognition. I was imagining something like writing the code, but speaking the "words". But then I realised that it would be stupid, for many reasons. First of all, the code is hardly voice readable. If you have ever tried dictating code to someone else you know what I mean. It's completely cumbersome. Then there is the human factor. You can't talk to the computer in an office, you would bother everyone else.

I totally agree that typing will not go away until we connect the computer to the brain directly and the graphical IDEs pretty much suck.

I do disagree, though, with the view that graphical IDEs are not good by default, specifically when you have a large page. I believe that a huge thing full of controls that you have to zoom in to understand is just bad design. Most of us use encapsulated behaviour, like controls and such. The problem, therefore, lies in the fact that the IDE is trying to render everything, not just the page or just the control you are working on. I agree that I have no general solution for this, though.

Other things that crossed my mind:

Programming on a mobile, what would the interface look like? Forget Visual Studio and large screens (and visual IDEs).

Collaborative real time source editing (like being able to create or change code in the same time with others and see their changes as they happen). I agree that it wouldn't work for actual coding, but maybe something like a planning stage or prototyping.

The only thing I believe is better than the current paradigm in programing editors is to be able to affect changes on your application while it is running. Obviously a lot of the work we do is in the debugger; what if we could change the UI, change the code, go back and forth in the execution threads while the app is running? You wouldn't need a visual programming environment, you have your app. You run it, you don't like what it does, you change what it does on the spot. You place a button, you see how it looks, you click on it, nothing happends, you "edit" your app and add a click event, you click on the same button and now it works.
I have no idea how to implement something like this, but it would add an order of magnitude to productivity.

Posted by Robert @ 06 Jan 2010 2:28 AM
lol, un peu is french! :)

Posted by Josh @ 06 Jan 2010 2:31 AM
Yes, that was a joke - hence the ':D'


Posted by msfclipper @ 03 Jan 2011 4:54 AM
Try Programming Without Coding Technology

General purpose visual(Graphical) programming langauge ... but practical for developing Complex & Large software ... it's better and productive than writing code using code editor ... it's not limited and you are free to develop any kind of software

Posted by Luiz Felipe @ 29 May 2011 9:14 PM
"Obviously a lot of the work we do is in the debugger; what if we could change the UI, change the code, go back and forth in the execution threads while the app is running? You wouldn't need a visual programming environment, you have your app. You run it, you don't like what it does, you change what it does on the spot. "
Have you tried the visual basic compiler/debbuger?
The vb support for this was always the best.
I remenber chosing vb over delphi decades ago based solely on debugger, i dont need no four diferent types of visual command buttons (wtf, i hate pascal sintax also).
Then csharp get some pretty good debbuger similar to vb. except for generics.
But the visual designer never supported this behavior in same extent as vb/cs compiler.
I think will be cool if we can change xaml with program running on the fly. will be awsome when this happens, if this happens.

Sory my poor english, i am poor in portuguese (my main languague) also (perhaps even poor). I can say that i learned to code first than to write. even now i dont know how to write correctly.

© 2005 - 2014 Josh Twist - All Rights Reserved.