j From arizona!noao!rutgers!cs.utexas.edu!uunet!jtsv16!geac!mnetor!utzoo!sq!msb Thu Dec 14 00:51:39 MST 1989& Article 275 of alt.folklore.computers:N Path: arizona!noao!rutgers!cs.utexas.edu!uunet!jtsv16!geac!mnetor!utzoo!sq!msb" >From: msb@sq.sq.com (Mark Brader)" Newsgroups: alt.folklore.computersE Subject: Re: Old as dirt #2: Mel and the drum-memory computer follies   Summary: Reposted in proper form. Message-ID: <1989Dec12.085528.14602@sq.sq.com> Date: 12 Dec 89 08:55:28 GMT References: <ZA+12*@rpi.edu>" Reply-To: msb@sq.com (Mark Brader) Distribution: alt $ Organization: SoftQuad Inc., Toronto
 Lines: 265    C I was very sorry to see that the person who posted the story of Mel C did not do so in its proper form, and with no author credit either. B It had been reformatted as if it was prose rather than free verse,B and now the ending is spoiled for anyone who was seeing it for the first time.   C This is the way Ed Nather posted it.  (More precisely, it's the way # Matt Crawford reposted it in 1987.)       @      A recent article devoted to the *macho* side of programming-      made the bald and unvarnished statement:   2                 Real Programmers write in Fortran.        Maybe they do now,       in this decadent era of=      Lite beer, hand calculators and "user-friendly" software #      but back in the Good Old Days, +      when the term "software" sounded funny @      and Real Computers were made out of drums and vacuum tubes,,      Real Programmers wrote in machine code.;      Not Fortran. Not RATFOR. Not, even, assembly language.       Machine Code.5      Raw, unadorned, inscrutable hexadecimal numbers.       Directly.  /      Lest a whole new generation of programmers 0      grow up in ignorance of this glorious past,#      I feel duty-bound to describe, .      as best I can through the generation gap,&      how a Real Programmer wrote code.      I'll call him Mel,       because that was his name.   H      I first met Mel when I went to work for Royal McBee Computer Corp.,8      a now-defunct subsidiary of the typewriter company.&      The firm manufactured the LGP-30,1      a small, cheap (by the standards of the day)       drum-memory computer,(      and had just started to manufacture#      the RPC-4000, a much-improved, 4      bigger, better, faster -- drum-memory computer.      Cores cost too much, &      and weren't here to stay, anyway.D      (That's why you haven't heard of the company, or the computer.)  1      I had been hired to write a Fortran compiler =      for this new marvel and Mel was my guide to its wonders. %      Mel didn't approve of compilers.   /      "If a program can't rewrite its own code," !      he asked, "what good is it?"         Mel had written,       in hexadecimal,9      the most popular computer program the company owned.       It ran on the LGP-30 2      and played blackjack with potential customers      at computer shows. $      Its effect was always dramatic./      The LGP-30 booth was packed at every show, &      and the IBM salesmen stood around      talking to each other. 0      Whether or not this actually sold computers'      was a question we never discussed.         Mel's job was to re-write,      the blackjack program for the RPC-4000."      (Port?  What does that mean?)(      The new computer had a one-plus-one      addressing scheme, '      in which each machine instruction, &      in addition to the operation code+      and the address of the needed operand, F      had a second address that indicated where, on the revolving drum,&      the next instruction was located.      In modern parlance,6      every single instruction was followed by a GO TO!.      Put *that* in Pascal's pipe and smoke it.        Mel loved the RPC-4000 (      because he could optimize his code:-      that is, locate instructions on the drum *      so that just as one finished its job,7      the next would be just arriving at the "read head" +      and available for immediate execution. (      There was a program to do that job,      an "optimizing assembler",       but Mel refused to use it.   4      "You never know where its going to put things",=      he explained, "so you'd have to use separate constants".   8      It was a long time before I understood that remark.'      Since Mel knew the numerical value       of every operation code, )      and assigned his own drum addresses, 8      every instruction he wrote could also be considered      a numerical constant.8      He could pick up an earlier "add" instruction, say,      and multiply by it,'      if it had the right numeric value. 6      His code was not easy for someone else to modify.  -      I compared Mel's hand-optimized programs E      with the same code massaged by the optimizing assembler program, !      and Mel's always ran faster. =      That was because the "top-down" method of program design       hadn't been invented yet,*      and Mel wouldn't have used it anyway.=      He wrote the innermost parts of his program loops first, #      so they would get first choice 2      of the optimum address locations on the drum.D      The optimizing assembler wasn't smart enough to do it that way.  .      Mel never wrote time-delay loops, either,$      even when the balky Flexowriter>      required a delay between output characters to work right.-      He just located instructions on the drum 9      so each successive one was just *past* the read head       when it was needed;8      the drum had to execute another complete revolution"      to find the next instruction.8      He coined an unforgettable term for this procedure.,      Although "optimum" is an absolute term,4      like "unique", it became common verbal practice      to make it relative: *      "not quite optimum" or "less optimum"      or "not very optimum". 0      Mel called the maximum time-delay locations      the "most pessimum".   ,      After he finished the blackjack program      and got it to run, *      ("Even the initializer is optimized",      he said proudly) 7      he got a Change Request from the sales department. ,      The program used an elegant (optimized)      random number generator5      to shuffle the "cards" and deal from the "deck", 3      and some of the salesmen felt it was too fair, (      since sometimes the customers lost.*      They wanted Mel to modify the program9      so, at the setting of a sense switch on the console, 9      they could change the odds and let the customer win.         Mel balked.)      He felt this was patently dishonest,       which it was,D      and that it impinged on his personal integrity as a programmer,      which it did,      so he refused to do it.%      The Head Salesman talked to Mel, 3      as did the Big Boss and, at the boss's urging,       a few Fellow Programmers.,      Mel finally gave in and wrote the code,#      but he got the test backwards, .      and, when the sense switch was turned on,1      the program would cheat, winning every time. !      Mel was delighted with this, :      claiming his subconscious was uncontrollably ethical,%      and adamantly refused to fix it.   9      After Mel had left the company for greener pa$ture$, .      the Big Boss asked me to look at the code5      and see if I could find the test and reverse it. ,      Somewhat reluctantly, I agreed to look..      Tracking Mel's code was a real adventure.  7      I have often felt that programming is an art form, -      whose real value can only be appreciated .      by another versed in the same arcane art;.      there are lovely gems and brilliant coups>      hidden from human view and admiration, sometimes forever,'      by the very nature of the process. ,      You can learn a lot about an individual&      just by reading through his code,      even in hexadecimal. (      Mel was, I think, an unsung genius.  #      Perhaps my greatest shock came :      when I found an innocent loop that had no test in it.      No test. *None*. 2      Common sense said it had to be a closed loop,8      where the program would circle, forever, endlessly.6      Program control passed right through it, however,#      and safely out the other side. +      It took me two weeks to figure it out.   7      The RPC-4000 computer had a really modern facility       called an index register.6      It allowed the programmer to write a program loop-      that used an indexed instruction inside;       each time through, %      the number in the index register 2      was added to the address of that instruction,      so it would refer#      to the next datum in a series. 0      He had only to increment the index register      each time through.       Mel never used it.   D      Instead, he would pull the instruction into a machine register,      add one to its address,      and store it back. 3      He would then execute the modified instruction       right from the register. ;      The loop was written so this additional execution time       was taken into account --'      just as this instruction finished, 7      the next one was right under the drum's read head,       ready to go. $      But the loop had no test in it.  '      The vital clue came when I noticed       the index register bit,)      the bit that lay between the address 4      and the operation code in the instruction word,      was turned on--+      yet Mel never used the index register, "      leaving it zero all the time.1      When the light went on it nearly blinded me.   .      He had located the data he was working on      near the top of memory --<      the largest locations the instructions could address --*      so, after the last datum was handled,)      incrementing the instruction address       would make it overflow.#      The carry would add one to the H      operation code, changing it to the next one in the instruction set:      a jump instruction.2      Sure enough, the next program instruction was      in address location zero,-      and the program went happily on its way.   &      I haven't kept in touch with Mel,7      so I don't know if he ever gave in to the flood of 7      change that has washed over programming techniques        since those long-gone days.      I like to think he didn't.       In any event,7      I was impressed enough that I quit looking for the       offending test,-      telling the Big Boss I couldn't find it.       He didn't seem surprised.        When I left the company, ,      the blackjack program would still cheat-      if you turned on the right sense switch, )      and I think that's how it should be.       I didn't feel comfortable/      hacking up the code of a Real Programmer."     9          -- Source: usenet: utastro!nather, May 21, 1983.      Reposted by  --  E Mark Brader, SoftQuad Inc.,		"For want of a bit the loop was lost..." 5 Toronto, utzoo!sq!msb, msb@sq.com				 -- Steve Summit     