An e-mail from a development tool vendor contained the startling 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 e-mail bleeps, a half-second toggle shows me how I can be longer, debt-free, a babe magnet, or pals with a Nigerian government minister. Slashdot lurks under one window, my Daytimer beneath it.
So is the GUI more productive or just an efficient way to maximize distractions? A recent article 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?
Jack G. Ganssle is a lecturer and consultant on embedded development issues. He is conducting a seminar about building better embedded systems on December 5. Contact him at . His website is .
Your article addressed my pain eloquently. Having been a user interface designer forover twenty years I have learned to avoid using the “G” acronym. I've noticed thatprogrammers who don't understand user interfaces love to say “goo-ey” with acondescending tone and then move on to “the real application.” This is reallyfrustrating for me because I've written enough back end and communication code toknow how hard it can be, but almost none of my many colleagues have ever understoodhow hard it is to design and code a good user interface. All they seem to understandis that they don't want to bother coding one.
Their attitude, along with having a BFA and a BSEE, have caused a lot of conflict inmy career. I've struggled mightily to unite art and technology but I'm pretty muchready to throw in the towel. Your article explains why. I myself prefer a commandline interface for most things. I have used IDEs for C, C++, and Java and found themconvenient for some things, but way overblown especially when it comes to graphics. Inever use graphic layout tools. When I develop a Java user interface, I code it fromthe ground up using snippets of code that worked for me in previous projects. I mustagree that for many projects, using make files and scripts makes more sense.
On the flip side, just a few weeks ago I was coaching an old friend who is learningJava. He's been in the game as long as I have and is a great C programmer. I sent hima few command line scripts to compile simple Java applications. He really had a hardtime getting them to work even though he's written very elaborate make files for Cprograms. The other day he called me and told me he downloaded one of the many freeJava IDEs and now he's off and running just fine thank you very much.
After twenty years of all this flipping and flopping, all I know for sure is, thereis no way I would try to sell a computer application to non-programmers without auser interface built with friendly visual, aural, and tactile components.
Coders seem to forget three things. It was coders who wanted something better whocoded graphic user interfaces in the first place. Even a command line is, to somedegree, graphic. There may come a time when explicit programming and programmers arenot all that necessary to develop most products.
– Mark Martino
Man this one really pulls at my heart strings! I started out on Unix, being bornand raised at Bell Labs there was no other alternative (in a lot of ways, I stillfeel that way!). As a result, I grew up with ls, grep, find, awk, sed, vi, etc…These tools are priceless.
Windows eventually showed up and the two VERY different environments proceeded tomove forward. Windows was destined to be “user friendly” and Unix was destined to be”a better operating system”. This sounds a bit sarcastic, but its close to accurate,and boy wouldn't it have been nice if they could have merged ideals!! Both goals arevery important, but each camp focused primarily on only one. Over the years, Unixhas gotten more user friendly and Windows has gotten more robust.
Anyway, through all this grew two distinct “operating modes”: console mode and guimode. I gotta tell you, in the early days of Windows (pre win32), I didn't evenstart it up, I just ran DOS. The majority of the work I was doing was writingfirmware, so all I needed was the ability to edit and compile code. Who needs a GUIfor that? Note: slight (but not too much) sarcasm intended!!
As years progressed, Windows began to stay up for more than 30 minutes at a time andthe resolution of the monitors made it feasible to have multiple console windows upon one screen. Plus laptops made the Windows environment quite portable. I washooked. I bought a PC running Windows… and immediately installed the MKS toolkit! Now I had the best of both worlds… I could “click” on stuff, but still run find,grep and awk!
So, that kinda tells you where I am with the basic GUI as a desktop environment. Icouldn't live without it. There's no denying that NT, W2000 and XP are fairly stableand they present nice working environments. I don't particularly like givingMicrosoft a positive plug, but hey, after working on it for 25 years, they were boundto get it right sooner or later!
I like being able to double-click on a .pdf and have Adobe Reader automatically openthe file. I constantly use Word, Powerpoint and Netscape email. However, if you toldme that I couldn't run Cygwin BASH in console mode (as a window), then I wouldquickly turn my back on all this junk. Fundamentally I want a solid set of tools(Unix certainly provides that) for developing code.
This leads to the next “GUI”… IDEs. In a word… YUK. I agree with all of yourpoints: – I still use make files – I depend heavily on scripts – I want to know thatI can archive my source and build environment and get it back in two years withoutfear that the OS no longer supports the IDE. – Etc, etc…
I'll choose a makefile, vi/emacs, ctags and cscope over these development IDEs anyday. With make I can insert any sequence of steps into my build process, and I caninvoke it by simply typing “make something”. I don't have to click 15 buttons andbecause I can script it, I can walk away until it finishes. Personally I use a viclone combined with ctags (exuberant) and cscope (sourceforge, formerly AT&T). Thisallows me to quickly browse large trees of source code without ever needing a mouseclick. I can organize the code as I choose and I know where everything is. I happento perfer this.
Bottom line: I like the mix. I do 98% of my work on a PC running something greaterthan or equal to NT (NT, W2000 or XP). These are reasonably solid platforms. Thefirst thing I install is Cygwin. I get access to WORD, so I don't need to deal withTROFF, but I can also use make, vi, ctags & cscope. It just doesn't get any betterthan that!
– Ed Sutter
I wanted to comment a bit on your GUI article and give you my view.
I consider myself a fairly productive embedded programmer and I got that way becauseI learned the ins and outs of a specific toolset and I can now apply that toolset towhatever problem I am given to do. There are several difficulties withvendor-supplied IDEs. First of all they contain a lot of tools which are integrated,but those tools are rarely the best. Secondly, you have a steep learning curve foreach GUI. Also as you stated in your article each vendor has a certain view of howthe project should be organized and if you want to organize your project differentlyyou are out of luck. Its funny how each vendor thinks their product is the center ofthe project universe, So, while I would think of an RTOS to be just a replaceablepart of the overall embedded OS (which will include custom drivers, a BSP, boot code,etc), the RTOS vendor makes it the center of the project and relegates the rest ofthe application to subdirectories of the RTOS. Yeah, like this code organizationmakes it easy to upgrade the RTOS.
So I stick with emacs as an editor and gnu make (with associated unix tools) as amake environment. I first used emacs back on a CPM-80 system (to edit and assembleZ80 code), migrated to the PC under DOS, migrated to the VAX under VMS, migrated toSUN and X-windows (as well as LINUX), and now to Windows XP as a host system. In allthese cases I know I can use emacs and I have no learning curve. The gnu shell toolsand gnu make also work on multiple operating systems and I am now using them happilyon Windows XP. Again, my productivity was high from the beginning. Most GUI editorsdon't even come close to the toolset I get with emacs (and cscope as a x-referenceindexer) and I can still switch windows to read my email (no, I don't use emacs toread mail).
I agree with your scripting comment. For the past 3 jobs, I have found that thecompanies use SCM tools which are very powerful, but not well adapted to the project.It has been easy to write shell scripts to create a much more powerful and productiveworking environment. In fact I have found it crazy that companies spend all thismoney on a tool such as ClearCase, when some of the free tools are so good and eventhe really expensive ClearCase needed just as much customization to make itproductive. By the way, how many of these IDEs come with SCM interfaces? Emacs does!
One frustration that I have is that I usually still have to learn a debugger GUI. Inthe embedded world, I am usually working with some sort of emulator and thesecompanies will insist on coming up with their own GUIs each time. Even WindRiver hastwo different GUIs depending on what product you buy. Two different emulatormanufacturers who both use Microtec's XRAY as the base for their UIs, wind up withvery different looking GUIs. It's frustrating from a user point of view and whileeach one has its strengths they all seem to have some weaknesses as well.
So in conclusion I have to say that I find vendor supplied IDEs to be a waste of timeand an impediment to productivity. I find that they are usually aimed towardsnon-embedded programmers in order to prove how similar embedded work is to Windowsapplication programming. In fact embedded programming is much more similar to UnixKernel hacking and I doubt any of the kernel hackers use an IDE. That being said, Iam trying my hand at some Java PC programming in my spare time and I am very happy touse an IDE there (even though emacs is available). I like the IDE because I don'tknow the language and the libraries well and the on-line help and code-generationtools help me a lot.
I'm sure you got a lot of comments on this article. It's almost like coming out andsaying which editor is best. Flame bait 😉 .
– David Haas
If your the type of person who can remember all thecommand line options for each software tool, then a GUI is a waste of time. For me,I like having an editor with dialogs which pop up and let me choose the build optionsby a simple click. Nothing takes longer than skimming through a help file lookingfor the correct syntax of the command line and each option.
– Edward Handrich
My experience is that when I'm using the command line, Icould better concentrate on what I want to get done, because there is only a simpleblinking cursor waiting for my input, and nothing else on the screen that could drawmy attention away. On the other hand when I've just installed a new software tool orso, with a nice GUI then I'm able to explore the product very fast. As always thefirst thing I do after I've installed it, is going to the menu option “Options” or”Preferences” and see what's possible with the software. That's also great. headline: No One Likes GUIs
– Maarten Verhage
The first good programming editor I ever had was Brief (withthe EditMaster addins), which was DOS-based – ie, a console-type application. It wasgreat, and I learned the hotkeys to make me most productive. But these days I useCodeWright, a Windows-GUI update – still with the same Brief hotkeys plus a few Iretain from WordStar. And it's fantastic – I couldn't even suggest how to improveit. Particularly for the amount of information I can have attached to a tab peekingout behind the one window at a time I'm working on, so I can QUICKLY flip to amulti-file grep view (choice of the last 5 greps), or the other project files, or theclass browser, or… I sympathize with the “I can type it faster” mentality, but noone on a command line can beat me using CW with the power of hotkeys to achieve thatnon-mousy speed of access.
– Tom Brennan
I suppose this is like asking whether or not you drive astick or automatic! My answer is kind of like Jack's: it depends. Certainly, I preferthe simplicity of the GUI, but much of the reason why is that I don't use my softwaretools all the time. I do a lot of hardware design, paperwork, production support,etc. and only occasionally do I actually write software. Also, I work exclusivelywith 8-bit uC's, so the actual compliler input is relatively simple. I used to useDOS, but quite honestly, once Windows 3.1 came out, I pretty much stopped, except forvery rare occasions where I needed to do a batch file or something similar. Timemarches on, and we all want to hang on to things with which we're familiar, buteventually, even the GUI will be gone, replaced by direct neural interface orsomething!
– Dave Telling