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.”