Subject: Re: what makes a production quality programer? (was Re: New Lisp ?) From: Erik Naggum <email@example.com> Date: Sat, 29 Dec 2001 02:43:01 GMT Newsgroups: comp.lang.lisp Message-ID: <firstname.lastname@example.org> * email@example.com (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.