Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.2 9/18/84; site ucsfcgl.UUCP Path: utzoo!watmath!clyde!burl!ulysses!allegra!mit-eddie!genrad!decvax!ucbvax!ucsfcgl!arnold From: arnold@ucsfcgl.UUCP (Ken Arnold%CGL) Newsgroups: net.lang Subject: Turing the first? Message-ID: <428@ucsfcgl.UUCP> Date: Mon, 28-Jan-85 01:15:06 EST Article-I.D.: ucsfcgl.428 Posted: Mon Jan 28 01:15:06 1985 Date-Received: Tue, 29-Jan-85 07:08:20 EST References: <8900018@uiucdcsb.UUCP> <18218@lanl.ARPA> Reply-To: arnold@ucsfcgl.UUCP (PUT YOUR NAME HERE) Organization: UCSF Computer Graphics Lab Lines: 69 Summary: (I'm not sure this is the right news group, but I can't think of a better. I'm sure at least seven people will think of at least twelve better ones, though.) So that you don't have to wait until the end to decide whether you care, I am herewith nominating Alan Turing for "World's First Hacker". No, no, NO, I am NOT re-opening the question of whether "hacker" is a good or bad term. I just think that (either way) he is the first person who fits this term in computer programming. I have been reading the latest biography of Alan Turing ("Alan Turing: The Enigma"; Andrew Hodges; Simon & Schuster). I came across the following section in the description of Turing's creation of ACE, one of the first digital computers, and (as you shall see) the first in one rather unusual aspect. Alan set out a way in which conditional branching could be done without needing the logical control to hold more than one 'address' at a time. It was not the best technical solution, but it had the merit of a brutal simplicity. Suppose that it were wished to execute instruction 50 if some digit D were 1, and to execute instruction 33 it it were 0. His idea was to 'pretend that the instructions were really numbers and calculate D x (Instruction 50) + (1 - D) x (Instruction 33)' The result of this calculation would be a instruction which would have the effect that was required. The 'IF' was effected not by hardware, but by programming. It was a device which had led him to mix up data ... with instructions. This in itself was of great significance, for he had allowed himself to *modify the stored program* [original emphasis]. An explanation follows of Van Neumann's machine which allowed program modification only to step through a list of numbers. The Turing approach was very different. Commenting on this feature of modifying instructions, he wrote in the report: 'This gives the machine the possibility of constructing its own orders ... This can be very powerful.' ... He dwelt in particular upon the question of doing arithmetic in floating-point form, and showed how the mere addition of two floating-point numbers required for a while instruction table [program]. He wrote some tables of this kind. MULTIP, for instance, would have the effect of multiplying two numbers which had been encoded and stored in floating-point form, encoding and storing the result. His tables made use of the 'very powerful' feature of the machine, for he had it assemble bits of the necessary instructions for itself, and the execute them. Turing, it would seem, invented self-modifying code, the hacker's best friend. Now, admittedly he was working on a mercury loop memory storage system with all sorts of memory limitations we wouldn't wish on a toaster oven, and he surely needed this kind of flexibility, but this seems to be the first creation of a tool no self-respecting hacker would be without. In the history of computing, can anyone think of an earlier person whose creations make them proper holders of this label? By the bye, I have been generally quite impressed with this book, although its detail is quite overwhelming at times. It's been certainly worth my time; it might be worth yours. -- Ken Arnold ================================================================= Of COURSE we can implement your algorithm. We've got this Turing machine emulator...