For novel ideas about building embedded systems (both hardware and firmware), join the 35,000 engineers who subscribe to The Embedded Muse, a free biweekly newsletter. The Muse has no hype and no vendor PR. Click here to subscribe.
By Jack Ganssle
No One Likes GUIs
An email from a development tool vendor contained the interesting statement "no one likes GUIs, anyway". This is from an outfit that sells cross compilers, all of which run on Windows and Mac platforms, the very nexus of GUI-ness. Does this comment stem from user feedback or some vague notion of preferences of embedded developers?
Surfing various USENET groups turns up plenty of griping developers who feel a GUI is nothing more than a protective shell for the clueless. But USENET has more than its share of the boorish and irascible; though posts can be informative and interesting they're often nothing more than strong opinions, very loudly uttered.
Is a GUI-based development environment a prophylactic for the clueless? Or is it indeed a valuable tool that increases productivity? Hunting around the `net I found plenty of unsubstantiated claims of productivity boosts (mostly from tool vendors), but nothing with numbers.
Me, I love a GUI. There's nothing like a big monitor with multiple open windows. In Windows, a quick ALT-TAB switches me from the editor to the compiler to the linker. When the email bleeps a half-second toggle shows me how I can be longer, debt-free, a babe magnet, or pals with a Nigerian minister (http://www.scambusters.org/NigerianFee.html). Slashdot (www.slashdot.org) lurks under one window, my Daytimer (http://www.chaossoftware.com/) beneath it.
So is the GUI more productive... or a very efficient way to maximize distractions? A recent article (http://www.sdmagazine.com/documents/s=821/sdm0308f/) in Software Development magazine suggests that context switching between projects costs 40% of your productivity. so perhaps the question becomes: "is a GUI an anti-productivity tool"?
I do miss the simplicity of a Make file. Every GUI-based integrated development environment has its own way to manage projects. All are complicated. Most litter files randomly around the hard drive. Backups become difficult, as does porting the development environment to another machine. The worse tools are those that monkey with the Windows Registry. Portability goes to zero. Frustrating surprise interaction between programs thwarts progress.
It's tough to impossible to script automatic operations - especially automated tests - with most GUI-based tools. Scripting's a breeze with command line interfaces.
Though I love the GUI tools, there's nearly always a Linux C Shell window open on my desktop. Gentle Wife shakes her head in dismay at the flow of cryptic commands. But via various pipes, redirections, links, and regex hacks I can do almost anything to a set of files. I find myself using Windows tools for routine operations and the C Shell for the complex.
The old saying about UNIX is that you can do anything with it. but you must be an expert to do anything at all. GUIs promised to make computing possible for the masses and easier for the rest of us. Which do you prefer for firmware development?