The Story Of Mel
catb.org
catb.org
and there it is:
hacker bigfoot ???
Thanks for the Librazette link and photo; that's awesome.
http://www.jamtronix.com/blog/2011/03/25/on-the-trail-of-a-r...
There's also the BlackJack for RPC-4000 manual written by Mel Kaye(!)
http://bitsavers.trailing-edge.com/pdf/royalPrecision/RPC-40...
More context: http://librascopememories.blogspot.com/2012/03/59-mel-kaye-l...
I did eventually manage to get in contact with Mel, but I scared him away, unfortunately. That's a story for another day... :-/
Tell us today! Tell us! Please?
Also interesting to note: that picture you found is from his first month on the job, yes? The "Welcome" section at the bottom of the PDF claims he just joined in July in "Engineering--Commercial," and the text above the picture says that the three instructors pictured (Hazlett, Behr, Kaye) will transfer to Royal-McBee payroll "as announced in the July Librazette." The July edition claims Hazlett, Behr, and Fred Flannel are the engineers to be transferred.
I did upvote, but that doesn't communicate our desire to hear the story. This is one of those rare situations where a "me too" post serves a legitimate purpose.
https://news.ycombinator.com/item?id=7282617
https://news.ycombinator.com/item?id=5758225
https://news.ycombinator.com/item?id=5643818
https://news.ycombinator.com/item?id=5395931
https://news.ycombinator.com/item?id=5269815
It used to be said that a compiler would never beat a programmer at assembly. Now we say the compiler is usually going to "do the right thing." I think there are two things going on here: 1) Our code generators are much better than they were in the bad old days. 2) Most people don't understand the ins and outs of their machines like Mel did (I certainly don't). This means that the compiler has "institutional" knowledge from a few really knowledgeable people and the rest of us just use that knowledge.
[1] see for simple example `imul` which has 5 different forms http://docs.oracle.com/cd/E19455-01/806-3773/instructionset-... . According to the intel optimization manual[2] the 16 bit forms suffer from "false LCP" stalls. The recommendation is to cast to 32 bit before preforming the `imul`.
[2] http://www.intel.com/content/dam/www/public/us/en/documents/... page 103 in the PDF. See also 506 for timings on the Atom architecture and 517 for Silvermont.
It's overall a good thing. It's what lets us do so much and have machines that are so fast. But it does imply a lot of necessary abstraction to get stuff done.
I've been in a few situations where I've seen core bits of code with glaring inefficiencies, but nobody even bothered to check them before, because we all trusted the group of people in charge of writing and maintaining that code. Turns out, those are "mere humans", just like the rest of us, and they can make mistakes too.
Probably still couldn't. But with gigs of ram, terabytes of hard drive space, and gazillions of flops of cpu time available, no one cares. No one can wait for Mel to optimize blackjack, your boss wants the new build 5-15 minutes after you've written the code, and that shouldn't take more than an hour itself.
It's not that the compiler got better than programmers... it just because cheaper. Hell, how many Mels are there out there anyway? Surely the number of people that clever and devoted to the bare metal of a CPU has never exceeded a few thousand people out of the entire population of Earth. Rarity makes them expensive, but it also means that shitty software shop in St. Louis or Tampa could never have such a person.
And since technology drives the economy, everything would crash if we had to rely on the availability of super-programmers.
Optimizing compilers are slightly better than they were long ago... but this isn't because they're all that impressive. We've just had thousands of monkeys pounding away over decades, hammering out one little optimization or another, and the storage to allow compilers to grow big enough to have a library of those to rely on.
At the extreme a sufficiently adept assembly programmer (which probably still exist) will still beat the compiler, given enough time, though that can be helped by the ability to reference the code the compiler is generating.
But the optimized handcoded routines take weeks to develop while a compiler would be done in less than a second. For almost all code, a programmer's time would be better spent on something else.
I also said that there still exist programmers who, given enough time, can probably beat the compiler. Certainly there are tasks where this is easier, but no one is getting it done in one second.
In some particular loops some hand written assembly is bound to outperform C code but overall it's an uphill fruitless battle.
For a philosophical discussion on this, see [1] and [2], both from PG, who actively advocates for a playful, prototype-first approach to coding, which more resembles a painter painting a picture than, say, a sociologist conducting systematic research. ([1] is a transcription of a talk by Don Knuth, [2] is Paul's own essay.)
http://idlewords.com/2005/04/dabblers_and_blowhards.htm
It's a very nice read, actually.
(You might remember Maciej from "The Internet With A Human Face"[1] / as the dude behind pinboard.in / etc.)
This is, of course, implying that an architect is also capable of "implementing" his solution (which should, strictly speaking, be an engineer's job), but you could also argue that you can devise a system where a hacker would write a functional prototype and then a software engineer would reimplement it rigorously, with specs, TDD or whatsoever. This is where the analogy starts being a little far fetched so I admit it's not the best one but I feel like an architect's thought process follows very closely a hacker's one.
Maciej's text is very nice, and I must say I'm stretched between PG's original text and this one right now. I guess I just to need it a little more thought and reread both of them :)
On a side note, I sometimes think about whether programming is really "just engineering" and if I'm just being delusional and just eager to call myself an "artist" because I love hacking. It's an interesting subject to ponder about, but I can't say I've made up my mind.
It's not uncommon for the best programs to have a bit of art inside them that make them work. Especially in high performance timing critical operations close to the hardware. Very few people work in those realms these days and these types of things aren't often necessary, but they're still beautiful and occasionally outright necessary.
I think that's a big part of why people like the story so much.
http://en.wikipedia.org/wiki/John_Henry_%28folklore%29#Legen...
I think you're right. How much time/money did that clever loop trick waste?
Best practice today is to waste computer time to save programmer time. It's absolutely right, too. In 99% of cases, computer time is plentiful and programmer time is scarce.
But that's the result of decades of hardware advances. Mel's computer had a clock speed measured in kilohertz and a memory access time measured in milliseconds. It might be literally a million times slower than what we're using today. The dirty tricks we shy away from today can be the only way to get some things done on hardware like that.
Finally, we're talking about the 1950s. The profession was pretty much brand new. Where do you think modern best practices came from? They're what came out of people finding out, by experience, what works and what doesn't.
I remember making 'games' (for some definition of the word game that you probably would laugh at today) on a KIM-1 in 6502 machine language (no, I did not have an assembler yet, that was a luxury) and that was a very advanced environment compared to what Mel was working with.
Computer time is only plentiful when you're not pushing the boundaries.
Definitely. But I think this is a pretty clear example of what doesn't work. "What, make a change? Sorry, nobody can figure out how to do that." So yay for Mel for doing what people thought couldn't be done, but let's never do it again.
The machine had only two registers: the accumulator, and the program counter. The only place you could use a pointer was in the address field of an instruction. In order to increment a pointer, you would load an instruction into the accumulator, add to it, and store it back. Best case, you could increment 67 pointers per second. Worst case, nine.
Mel's job, in this instance, was not to write beautiful maintainable code. It was to write a demo that would sell the machine to potential customers, rather than boring them to death.
† http://research.microsoft.com/en-us/um/people/gbell/computer...
I find this reaction confusing. Nobody is holding Mel up as an example for us to emulate in the specifics of how he worked.
It's like telling the story of Tex Johnson doing a barrel roll in the 707 prototype filled with VIPs, and someone comes along and interrupts with, "I'm surprised that people react positively. Doing clever tricks like these is NOT what a good pilot is supposed to do." He'd be right; airline pilots shouldn't be doing barrel rolls. But it's a pointless thing to say, because nobody is telling that story to convince airline pilots that they should be doing barrel rolls.
- It's only obfuscation if you have the luxury of solving it in another way.
- the times have changed (1956), but the methods have not
- sure, it may be obscure but it shows perfect control of the machine and the issue at hand
- agreed, it is not maintainable, but back then feature changes usually meant re-writes and people thought longer about what they wanted before they started building. Machine time was more expensive than programmer time.
- being clever is (to me at least) exactly what hacking is all about, finding a solution to a problem where you thought none existed. Ask yourself this: if Mel's code was so useless how come some hotshot didn't re-write it using 'best practices' and zero 'clever tricks'? The answer: likely because it could not be done. Mel delivered.
- the rebel in me likes Mels attitude towards management. Sure, if you're in management you'd hate him twice weekly but I note that Mel did not get fired, instead moved on to greener pastures
- I compare this with the way a jeweler would make his little works of art versus the way a production welder connects pieces of pipe. Mel is the jeweler, you'd rather we all just join pieces of pipe.
- I've gone through some of the assembly code for 80's video games and that stuff was full of tricks like this (and without it would never have gotten of the ground). Making a computer output the right results within the margin of error visible to the user when lacking the 'proper' resources is where creativity comes in. And in that case I'd much rather have a guy like Mel by my side than any number of {insert high level language of choice here} pushers because if it is at all possible guys like Mel will find a way.
Anyway, as you can see, we're likely not going to agree on this one.
Doing what you're "supposed to be doing" is not always what life is about.
People also love anti-heroes.
Also, it helps that the stakes are so low. Mel's optimized program cheats at Blackjack, and the protagonist is trying to make it cheat in a different way. We're not invested in his success, so we can enjoy his failure, and maybe even root for it. If the same story were set in the context of the Therac-25, it would be received very differently.
We are at the moment at a point where Hardware is (to a degree) cheaper than manpower. You might want to think that one cost can be traded in for the other, which often is the case, yet there are those moments were the assembler programmer might miss the asymptotically more efficient solution that saves magnitudes of time and situations were that Cache-Miss in one of the inner loops just kills performance (and maybe kills that startup because the Application just stalls).
While I would never ever want to work like Mel, I share the admiration for Mel's work and propose that "Best Practices" be renamed "Somewhat-Optimal Practices" in his honor.
Mel was a real programmer because he did the best with the limited tools of the day, but nowadays... "it was hard to write; it should be hard to read", while funny, is something to be avoided.
http://ed-thelen.org/comp-hist/lgp-30.html
The story referenced:
This was a new account and I suddenly found myself with -7 karma points. I had to consider if I should throw that account away or keep it and earn those points back.
I kept it and now have a little under 3k points. He still sounds ghastly!
"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."
Shop practices dictated that when you scheduled debugging time, you couldn't be bumped off as long as your program was still running.
This led some clever fellow to write a deliberate loop that kept his program "running" -- panel lights a-flashing -- while he fashioned a patch for the most recently noticed bug, which he could then dial in to the memory in-flight without losing his place in line.
When his ruse was discovered, he was chided for wasting lab resources, to which his response was: "Wasting resources? Nonsense! I used the optimising assembler!"
Lists him as still missing. He might very well still be alive but the clock is ticking, that librascope archive is full of 'in memoriams'. Tough to see all these pioneers pass away almost unnoticed.
Amen.
https://hn.algolia.com/?q=%22story+of+mel%22#!/story/sort_by...
well the photo of mel here in the comments is new to me so we'll see what happens...
And I'm not talking about reddit's 'infinite but disjointed sub-communities'...
HN might be some sort of local maximum atm, but more experimentation is warranted on these fronts.
The source is out there. https://github.com/arclanguage/anarki
> You're submitting too fast. Please slow down. Thanks.
fuckin thing won't even let you have a conversation ...