The end of dumb software
sethgodin.typepad.com
sethgodin.typepad.com
Your addressbook does not automatically hook up with trusted friends to update because you just glossed over about five or six Certifiably Hard Problems such as a) proving identity, b) disambiguating names, c) trust, and d) doing it all with a GUI which will not cause a big-thinker-no-technical-skills-marketing-consultant to say "Why do the freaking engineers make it so I need a PhD in graph theory to use my freaking address book? How hard does an address book need to be? I put a name in once, I type it again, it comes back out? Sheesh, do your jobs, people!"
There are tradeoffs with every kind of software. That little screenshot he posted is beautiful; time spent making a program beautiful is time not spent making it functional.
The ability to run these little utility programs on the command line is a great virtue of Unix, and one that is unlikely to be duplicated by pure GUI operating systems. The wc command, for example, is the sort of thing that is easy to write with a command line interface. It probably does not consist of more than a few lines of code, and a clever programmer could probably write it in a single line. In compiled form it takes up just a few bytes of disk space. But the code required to give the same program a graphical user interface would probably run into hundreds or even thousands of lines, depending on how fancy the programmer wanted to make it. Compiled into a runnable piece of software, it would have a large overhead of GUI code. It would be slow to launch and it would use up a lot of memory. This would simply not be worth the effort, and so "wc" would never be written as an independent program at all. Instead users would have to wait for a word count feature to appear in a commercial software package.
http://adam.shand.net/iki/library/in_the_beginning_was_the_c...
Sorry, Seth.
And compared to 1998 when the article you cite was written, normal people also have supercomputers sitting in their living rooms where time to launch for 1,000s of lines of code is instant, for all intents and purposes.
We have APIs, Flash, Silverlight, WPF, Java and many, many more to take away the pain of writing GUI code.
"time spent making a program beautiful is time not spent making it functional"
Try telling that to all the people who bought an IPhone. It's time to man up and accept the fact that a good UI and hence UX is essential to modern programming.
But feel free to go on living in 1998. I see the appeal, you get to point at your emacs screen and do the old 'all I see now is blonde, brunette, redhead...' ;)
Stuff like this is all through the Symbolics Lisp machine OS. Any object that could print itself out to a stream of text automagically got a hot-link back to an "inspector" of itself in any text window it printed itself out to. Not any GUI programming was necessary, but text utilities were part of that GUI navigation. (The magic of "around" inheritance in MOP.)
We have low expectations of OS today, which were formed in the days of green screen machines that were many orders of magnitude slower, had many orders of magnitude less memory, and where you had to count every byte. We have low expectations of GUIs, formed by GUIs designed when machines struggled to run them.
This problem has been identified decades ago, years of research have gone into it, and some solutions have been identified. Granted, most solutions are not workable, precisely because they try to be too smart, which ends up not working either.
But just saying "why is my meeting scheduled at 2am?" or "why doesn't it recognize names?" or calling out "This is the end of dumb software!" is being dumb yourself. Seth could've at least done a little bit of research.
Word is the first example that comes to mind (for myself, and many people). One such situation is they way that git just punts on hard merge decisions - coming up with accurate heuristics for complex merging is very difficult, but the programmer responsible for the merged content can usually make the decisions easily. This frees git up to focus instead on storing and propagating those decisions well.
But we do notice when it changes acronyms and other things in a way that makes us ctrl+z the auto-correct.
Preferences like this need to be tended by operating systems. If I tell one text editor widget about "Smalltalk," there's no reason why all of them across the system shouldn't know about it.
It is on OS X. (Leaving aside software that implements its own spellchecking, of course.)
I actually thought Microsoft's Clippy was a really good idea in principle; where they went wrong was in giving Clippy's options the appearance of a modal dialog, which people thought they needed to respond to. Also, screen resolutions were typically lower so Clippy took up an undue amount of visual real estate, to the point of being intrusive. But the context-sensitive task helper is now seen on many applications, as is some kind of anthropomorphic assistant on many web pages.
If you understand the end-user's mental model, your biggest gains will be from sales and marketing.
What he is suggesting is just absurd. If it actually did do what he wanted, he'd get pissed off like the guy the other day who got mad because apple's time machine automatically deleted some year old backups of his system to make room for the latest backup.
For instance, what is the difference, really, between using address book data that's entered entirely manually by the user, and data that may have been partially synchronized from somewhere on the web? As long as it ends up in the format the program expects, it can appear "smart". The program itself doesn't need a sync feature, as long as something can sync that understands its formats.
So the issue, to me, is that programs just need more open data formats, and there need to be more handy services (like sync programs) that deal with those formats.
In fact, more and more desktop applications ARE web applications, they just don't use a web browser as a client. I suspect that Godin is a little bit off the curve here, and the moment is going to shift back toward the desktop (AIR and other sorts of things) where developers can build rich applications without having to hassle through the browser compatibility issues that can cripple teams.
Every time I see dumb software (which is just about every day), my juices get going with all kinds of ways to do it better.
I became a programmer because I thought it would be fun and a nice living.
I remain a programmer because there is still so much to do. And thanks to dumb software, there probably always will be.
Second issue can be handled as an option: "all my appointments are in business hours."
Maybe Seth Godin wants that infamous paper clip back: "I see you are drafting a letter. Let me help..."
however, the sad thing about article is that it shows Seth does not understand software development. There is no people who make "desktop" vs "web" software. Mostly this is the same group of people: software developers, and we all are alike - only difference is the delivery platform.
And the specifics of the selected delivery platform does not provide any qualitative difference for code that runs on it. Basically: you can make crappy desktop apps, and crappy web apps. The address book does not become good magically, because it is rendered as HTML page.
To finalize my point, the default state of software is "crap". Anything else must be engineered on top of the underlying "crap". The "why my software does not do (blindingly obvious) thing X" articles are amusing (function as bug reports, or invent insightful features), but are orthogonal to actual development of software, unfortunately.
Software will continue to slowly evolve, there is no qualitative leap coming.