What Do Programers Do All Day?
In the past few years, i've been wondering why software engineering is so cumbersome and time consuming. Usually, something that's conceptually trivial, something you think can be done in 10 minutes, ends up hours. In the past few years, i tried to write a account of it whenever this happened to me. See these essays:
- A Exhibition Of Tech Geekers Incompetence: Emacs whitespace-mode
- A Emacs Frustration (blogger package)
- Emacs Spell Checker Problems
- A Record of Frustration in IT Industry
- Hunspell Path Pain
- The Complexity And Tedium of Software Engineering
- Mac OS X SSH Session Disconnection
- Graphics Programing Pains
- Software Dependency Complexity: Fink, Unison
- URL Percent Encoding and Unicode
- URL Percent Encoding and Ampersand Char
- AutoHotkey Path Problem; Windows Shortcut Path
- Unix zip Utility Problem
(and it is quite time consuming to document this experience. Each essay above usually takes 4 hours to write.)
In all the above cases, they are typically about installing a package, setting a preference, compress a file, get spelling checker to work, setting a environment variable. If you know the technologies well, usually you'd imagine it's just 5 to 10 minutes job. But in each case, i ends up spending hours or half of a day.
In the past week, another 2 such situation happened. One is renaming a file in Subversion (svn) by changing a letter case of a file. See the problem described here: http://groups.google.com/group/ergoemacs.
The other problem is about writing a script to zip up a directory. See: Unix zip Utility Path Problem.
You might have worked in the software industry as a programer for years. Sometimes, you might wonder, “what i've actually been doing in the past few months?”. In a day job situation, half of the time is spent on meeting and communication and other miscellaneous, non-nondescript stuff. Perhaps you actually get to code only for 1/3 of your working time. Of that time, a large part, probably more than half of the time, is probably spent on getting something conceptually trivial to work, among the hacks, spaghetti code, non-existent documentations, problem in tools, etc.
As a programer, i think intuitively we think that programing is actually writing new functions, new libraries, something that doesn't exist before. But i think in reality, more than half the time a working programer spend daily on coding, is actually about fixing stupid problems, working around tools, using knowledge about the environment and past experiences.