Subject: Re: what makes a production quality programer? (was  Re: New Lisp ?)
From: Erik Naggum <erik@naggum.net>
Date: Sat, 29 Dec 2001 02:43:01 GMT
Newsgroups: comp.lang.lisp
Message-ID: <3218582578762837@naggum.net>

* marc@oscar.eng.cv.net (Marc Spitzer)
| From someone who is not a production quality programmer:
| 
| what is one?

  First, someone who knows the language well and who does not fight it, and
  therefore can read it painlessly and effortlessly and who can also write
  correct code in it, considering all specified implications of the code.

  Second, someone who specifies his own functionality with at least as much
  precision as the language specification and codes accordingly.

  Third, someone who knows the implementation and the tools he uses well
  and uses them to their fullest.

  Fourth, someone who can deal with upgrades just as effortlessly and does
  not remember things past after they have changed.

| how do I become one?

  You internalize the specification of the language you use and subjugate
  your desires for what the language should be like to what it really is
  when you are using the language.

  In other words, a production quality programmer is one who has figured
  out that the language and the tools he is using are just as real as his
  physical reality when he is using them to shape and build something new
  within that reality.  Those who believe in magic, in wishful thinking, or
  in rebellion against physics are not good engineers.  Similar failure to
  understand the computing environment one lives in leads to broken code
  and a serious lack of trustworthiness in both code and programmer.

  In my view, a successful computing environment is one which lends itself
  to exactly the same kind of hard science as physics, like the hardware,
  but which becomes malleable if you go from "user mode" into "god mode".
  The distinction between "god mode" and "user mode" is precisely where you
  accept what is for what it is, instead of trying to change it before you
  use it.  The ability to relinquish the "power" that comes from changing
  the computing environment in order to live in it is fundamental to one's
  ability to live in the software creations of other people.

  In "user mode", you look at something and decide whether to use it or not
  according as it fits your desires and wishes.  In "god mode", you look at
  something and decide how to change it to fit your desires and wishes.  It
  should be obvious that trying to change something that is not changeable
  must lead to serious frustrations -- like wanting the specification of
  either language or application to be something else -- and that these
  frustrations lead to extremely low quality code with random behavior,
  depending on whether the programmer's wishes du jour were met or not.

///
-- 
  The past is not more important than the future, despite what your culture
  has taught you.  Your future observations, conclusions, and beliefs are
  more important to you than those in your past ever will be.  The world is
  changing so fast the balance between the past and the future has shifted.