The Codist - Programmerthink

I Am a Programmer

Posted: 07/07/2010, Perm Link Readers: 623


  • I am a programmer, not a coder, not a software engineer, not a warm body.
  • I am not a Java programmer, a C++ programmer, a PHP programmer, a Web programmer, a game programmer; I am all of these but still just a programmer.
  • My first full program was a simple carnival in Basic via timeshare on a teletype with a paper tape reader, but the programming style I came up with is still with me.
  • I am a programmer, not an architect or lead or designer or a PM or a BA or the guy with the final word on shipping a product to 100,000 people on floppy disks or the company President but I've been all of those, often at the same time; but always a programmer.
  • There hasn't been a month in the last 28 years I haven't written code.
  • I love to work with people who can teach me something and let me teach them something, and especially mentor the inexperienced.
  • I can't stand people who talk big and let everyone know they are God's Chosen Programmer but ship crappy code or even ship nothing at all. Real Programmers ship!
  • Over the years I've learned that not all new technologies, methodologies, systems, tools, and frameworks are worth using; if they make things work better or faster or make me more productive then I'm excited to use them but most aren't worth it.
  • Simple is always better, more is rarely worth it and anything too complicated to understand is useless.
  • Other than one CTO/CIO who was really an architect and programmer, all the CTO/CIO's I worked with/for were clue-free morons at best. One was so bad he only believed vendors but never his employees.
  • A good PM tries to understand the technology and the business, keeps everyone informed and acts as a BS umbrella. Most of the ones I've worked for didn't do any of these; the worst took all the glory and blamed the programmers for anything that went wrong. The best PM I ever worked with was an ex-marine.
  • I've had one company die out from under me, one layoff the entire US division's employees and one told me to leave when I wouldn't quit because I insisted on doing what the CTO wanted and not the architecture team. I started two in my early days.
  • I've been on several architecture teams and generally it was a miserable existence.
  • I don't think I'm smarter than average, but I will answer to being creative and having imagination. I think I can learn anything and be productive quickly. I am a programmer after all.
  • I like working on the impossible or things no one has ever done before, i.e. "where no one has gone before". I fear no program.
  • I hate bugs and hate giving code to anyone, even testers or other programmers, if it doesn't work correctly. Shipping code to 100,000 people on floppies teaches you to get it right.
  • The most important things about a program are having it do what the customer needs, work correctly as much as possible, be easily maintainable/extensible and be productively written. If the environment has something in it that doesn't contribute to these then I want to get rid of it.
  • A desire to fix broken things is one of my strengths and a weakness. I try to make things better, but people who made them worse usually don't like it much.
  • I do work for a game company with little money because I love the product and want to make it better. Sometimes I think I am pretty dumb here.
  • I hate interviews as people never read my resume, my blog, or even know my name and then decide they need to see if I am really a ditch digger. No one ever asks details about projects I have done and list on the resume. I always ask for details from the resume as you can't fake talking for an hour about something that takes 2/3s of a page and occupied a lot of your life.
  • Sometimes I wish I had gotten a PhD. in Computer Science instead of piddling around in Chemistry.
  • If I ever lost everything and wound up living under a bridge, I'd be the only homeless person with a computer, because I am a programmer.
Tags: programming
Cássio Marques 07/07/2010 21:02

Very nice post! Congratulations

Dave Aronson 07/08/2010 06:53

Perhaps you didn't mean it that way, but when you say "I am a programmer, not a coder, not a software engineer, not a warm body" it "sounds" to me as though you mean "software engineer" as something "less" than a programmer. Or do you perhaps just mean it's something different, same as a CIO, CTO, architect, lead, designer, PM, BA, President, or GWTFWOSAPT1POFD?

One of the problems our whole industry faces is a lack of definitions. (Or rather, too many, like the old joke about standards.) What exactly do you mean by "software engineer" versus "programmer", and for that matter the others?

Here are my working definitions off the cuff:

Coder: translates detailed specs, usually containing the algorithm (or at least reference to a well-known one), into some particular computer language. Rarely writes tests; but usually manually tests that it works with a few normal inputs. Bottom rung, with little to no independent thought required (or usually even allowed), and little care for code quality. "Code-monkey".

Programmer: translates less-detailed specs, usually consisting of the primary goal(s) and other desired features, into a program, possibly in his choice of language, and usually with his choice of algorithms. Usually performs a design phase on his own. May also design the product as a system of programs cooperating. Usually does not participate in formal testing; may write his own low-level tests (unit, functional, integration), but still usually not. Here we start to see significant independent thought and creativity, and more awareness of "quality" issues.

Software Engineer: Gathers and documents requirements (unless a Requirements Analyst does that), estimates schedule (or at least gives significant input on that to a Project Manager), performs high and low level design, usually (but not always) participates in the actual construction of the software itself. Generates any needed technical documentation (mainly, design docs and possibly test plans, maybe also user docs). Often participates in the architecture (see below). The better ones usually write assorted low-level tests, at least for the code they wrote themselves. May help formal QA/testing team write and run higher-level system/acceptance tests. Lots of independent thought, with others depending on it both up and down the chain of command; much greater responsibility.

Architect: Mainly performs very high level design, aka architecture, often resulting in a system consisting of multiple programs, especially if they run on multiple machines. May also participate in normal HLD and maybe even some extent of LLD. Usually does not participate in the actual construction or testing of the software itself, but may helo the Q/A team figure out what things need to be tested. Often retains "overall vision" responsibility for a product.

Developer: A newer term (I don't go back QUITE as far as you, but further than most of my colleagues), that I would place somewhere between Programmer and Software Engineer.

Tester: obvious.

Analyst: catch-all term for other people somehow involved in the process. Usually more involved in figuring out what the software should do and whether it does it, rather than building it.

Stanley 07/08/2010 08:40

Very good post. I agree with a lot of them, based on my experience.

Codist 07/09/2010 13:27

Oh I just meant that I call myself a programmer, which is the first term I learned when I started programming. You're right, the names all all overloaded and confusing and thus I chose one to call myself. :-)

Dan 07/21/2010 11:02

I am a programmer because I build my own solutions to problems. I analyze and re-analyze until I am sure I have started to become fanatic. I de-bug my applications, even when I am not formally part of the testing crew. I am a programmer, because any other job would drive me insane!

Great post! I have not been in the field nearly as long as you (actually I only have 5 years experience), but I can relate to the pride that you show in your work. Good programmers lead to great programs!