I, CodeMunger

I came in off the street into an Access/VB/SQL shop after a summer spent reading books about Excel macros. I was disappointed in myself for not being able to grok the O’Reilly book by itself and having to resort to a 21 days book, but functions were a new concept at the time and there was lots to play with. It was distinctly comforting to me then than Basic had not only survived, but was bolted onto the market dominating office suite of the day. (Yeah, I was nostalgic about buying magazines that had type-in programs in them.)

For months I frantically coded during the day and read programming books when I went home. Early on I realized that one of my first assignments was so impossibly designed that the 60+ year old lady that would end up using it would never be able to master it. Very close to the go-live date, I proposed changing the design to use a tree-view control and a streamlined approach… my boss grudgingly agreed and I ended up finishing it on site with the client’s big cheese smoking a stinky cigar while looking over my shoulder.

Later on a comp-sci student came to work with us. He was a very slick middle-eastern guy; always wore nice suits. He did okay around the shop, I guess… but one night I get a call from him to please come over to the university lab. He needed help with a class assignment. It was pretty lame, but I managed to fix it for him in ten minutes or so. It felt weird bailing guys like this out. I was a faker… a charlatan. No training and no education… just a few months job experience.

Fast forward to now. I get to work with guys that have Master’s Degrees. Woo-hoo. But I can’t relate to them, somehow. I’m always flirting with some new idea… and I’m never content unless I have some crazy mad-scientist scheme being developed in some obscure folder on my hard drive. And these other guys… they just never have anything technical they want to talk about. There’s never a technique or idea or tool that they get excited about and have to discuss over lunch. They’re are actually content with the status-quo… which is strange given how annoying and unreliable things can be. And if I go off on some technical tangent… there’s actually someone around that’s going to call me a nerd. Dude: we’re computer programmers. We code for a living. Aren’t we nerds by definition?!

I guess not. We… as a group… are something else entirely. We’re all CodeMungers.

A CodeMunger has no need to master Data Structures, Classic Algorithms, or Regular Expressions. A series of nested for-next loops and a slew of global and local variables are all he needs to calculate anything.

A CodeMunger has no need to really ever design applications or tools. The framework/library of his tool set has solved most of the problems he’s going to come up against… and he generally works in large existing programs anyway. He can learn everything he needs to get the job done by imitating the existing code base. Everything else that could possibly matter has been covered by an article on a site like the CodeProject.

A CodeMunger has no problem with maintaining 50 near-identical forms… each with redundant GUI and data-access code. A CodeMunger is irritated if the forms rely on subroutines that exist in other modules. A CodeMunger is lost if he has to track down a subroutine that’s inside a separate class.

A CodeMunger has no problem maintaining identical or near-identical versions of the same form or report in different applications.

A CodeMunger does not have the influence to convince the team to fix an architectural flaw even if he manages to notice one. The team is lucky to be using any form of source control as it is… and there are no regression tests to speak of. In this environment, he cannot make a case for the business value of eliminating design debt.  The CodeMunger knows that if he trys anything “fancy” that the rest of the team will protest the complexity of such abstraction.

A CodeMunger is content. Even if there are things about his existing tools that annoy him, he accepts them as just being part of the background reality. They’re just the way things are.

Yeah, it was all exiting at first– just to be able to say, “I write database applications” when strangers asked, “so, what do you do?” I remember all of the whining when .Net was released. It was very stressful trying to keep a job post 9/11 while getting up to speed on the new thing. C# 2.0 was a big deal to me because a simple change to the language resulted the elimination of a couple hundred lines of code in a pet project. (Now I study Lisp because I want to experience that again and again.  Expressiveness is the crack cocaine of programming.) The .Net Framework 3.0 was a complete bust, though. I’ve just got no interest in screwing around with a byzantine object model that doesn’t address something I’m trying to do right now— and that may or may not be here three years from now. But now that I have to maintain applications that exist on both COM and on varying flavors of .Net… well… it’s really just not fun anymore. Every time I have to wait for any one of five IDE’s that I use to load up I get bitter. Every time I have to wait for a file dialog I get angry. Every time the application freezes because of some stupid process or useless GUI, my blood pressure goes up that much higher.

But those things are all superficial compared to the pain of being a CodeMunger. Well… not so much being one… but being aware that that’s what I am… and that that’s what I’m surrounded by.

I don’t know what the next step is. I suspect that too many comp-sci departments have a hand in creating this herd of CodeMungers… but Eugene Wallingford’s blog is comforting. They don’t all have to be that way. (Man, I wish I could get into that Compilers course somehow….) Until my options become clearer, there’s always On Lisp, Paradigms of Artificial Intelligence, and the Stucture and Interpretation of Computer Programs to keep me company…. Maybe the world has no use for yet another BiPoler Lisp Programmer, but I feel I must at least try to go beyond the bag of tricks I picked up “on the street.”


8 Responses to “I, CodeMunger”

  1. Jeff Ober Says:

    I know how you feel. I started off with a degree in Spanish and a job in tech support, and learned Perl to help with system administration. It’s not easy to learn advanced programming concepts after having your head mangled by Perl.

    People go into CS programs and the first thing they learn is OO and then Java (after learning how to turn the computer on). Very few people go into CS with the hacker mentality, and those that do tend to either stay on and get tenure or go and create a start up with Paul Graham.

    The only thing I regret about my lack of official CS training is math. CS gives you plenty of math, and it’s difficult as anything to learn Lisp if you don’t already know what a Fibonacci sequence is.

  2. lispy Says:

    Lisp is generally taught like Mathematics.

    Most early chapters in Lisp books have you write common Lisp commands with a small subset of functions. This is like highschool Geometry.

    The later chapters in Lisp books then demonstrate how everything you’ve done is far was really the “long and tedious” way… and show you that it can be done with cheap one-line tricks. This is like college Calculus courses.

    Advanced Lisp tricks are such that any detailed explanation will lose 90% of its readers by the second bullet point. This is like Upper Level math classes or proofs explained to people from varying mathematical fields.

  3. Miklos Hollender Says:

    I’m in a similar position – working as a CodeMunger during the day while exploring functional etc. programming during the night – but I think if you are unhappy you are either overlooking something really important or your workplace and tools are worse than mine.

    Let’s see my example. I’m working with the Microsoft Navision ERP system. In this environment, adding a button to a form that f.e. generates a purchase order line for every product of a given supplier takes about 5 minutes. Maybe 10 if you are tired. That includes “testing” (trying it out once and shrugging and thinking “if it’s wrong they’ll tell me soon enough”). And any non-programmer with a bit of algorythmical sense can learn it in six months. Example: http://navitips.blogspot.com/2006/04/sustainable-navision-customizations_20.html

    For this reason, most Navision programmers aren’t from a programming background. I graduted from business school just like most of my coworkers, started working as an analyst and got gradually into programming, and I often say that this thing isn’t about computers as at all. It’s about designing an information system and 60 years ago I’d have had happily designed the same system for filing cabinets instead of computers. So we don’t have analysts above us: we are the analysists, and we rarely see our project managers who are busy selling new projects. We have nothing between the users and us. So I go to a client, and what happens that f.e. there is this ongoing project of tuning some shop floor reports, the manager prints it out, points out some modifications to be done, goes away, and comes back in an hour asking is it done. Meantime, at least three times other users come, ask questions, ask error messages to be explained or fixed and so on. I rarely get more than 10-15 undisturbed minutes to solve a task, and all the design must be made on-the-fly, during coding. What is even more interesting is that the users are nontechnical, they don’t understand concepts like fields or tables, they just see thingies on a form and thingies on a report and they want that thingie so and so. So in this 10-15 minute hacking runs I have to silently come up with the design changes, make decisions on my own, implement them, and then implement what they actually asked for on the UI. And if this is not enough, in a large ERP system, you need to have a lot of alarms installed into your head, because if the users ask you to change say, the way the run times of shop floor machinery is stored, it can affect inventory value, which can affect the general ledger, and you can end up auditors chasing you with an chainsaw. So you have to be always aware what requests must be refused and alternatives offered.

    So from a pure programming point of view, CodeMunging can be boring, dull, and not challenging. It doesn’t give you much ego, I agree.

    It’s the design part of it that makes it really challenging – making crucial design decision while you are punching the keyboard as fast as you can. This gives you all the ego you want. Obviously, as you don’t really have time to think, you have to use intuition and sixth sense. And if you do and most often it turns out to be right, you feel like a wizard, something like Gandalf. And this feeling, this uber-ego I think beats any ego you could have had from hacking LISP at MIT in 1980. However smart hackers are, they are just thinkers. And thinking is easy. We don’t have time to think – in all these on-the-fly designs, we must trust our instincts and our instincts must be right. That’s something much more than being smart and gives much more ego. I honestly feel like a Jedi knight – it’s so much like fighting blindfolded and still hitting target most of the time. This is why I think if you are unhappy, you either don’t understand this or should switch to another CodeMunging job. Check out Navision – there is quite a shortage of Navisionistas in America as well (I’m in the UK)

  4. Raj Says:

    Very well written and summarizes feelings I have had for a while…But please dont loose hope – there will be a resurgence soon (the rebels will be destroying death-star)

  5. Jim Thompson Says:

    Advanced Lisp tricks are such that any detailed explanation will lose 90% of its readers by the second bullet point. This is like Upper Level math classes or proofs explained to people from varying mathematical fields.

    Yes, and most people have real trouble with the form of expression of both. Far too many people ‘blank’ on the symbols used by math(s). The public’s rejection of Lisp is similar. Look at the complaints about parenthesis, s-expressions, etc.

  6. Jakob Says:

    This is exactly what I expected to find out after reading the title o.us poetry. Thanks for informative article

  7. diogo Says:

    HA! Math finally gets its revenge. Lousy programers don’t need it, true. But if you want to be anything different from a bottom-feeding crawling slimey thing, you need some math.

  8. Because Java Programmers can Suck, too « Learning Lisp Says:

    […] more class than that. (The language forces them too. Heh.) But there are ways of introducing such CodeMunging in all languages, however fastidious they might be. It’s worse, though, when it’s […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: