106 comments

[ 2.8 ms ] story [ 160 ms ] thread
I actually find the simplicity of computing devices staggering and beautiful. If the earth was wiped out tomorrow, one would only need to remember what a turing machine is and how to make a semiconductor to rebuild them.

Also, the rant becomes too broad to have a point.

It's only simple and elegant on paper.

Computer Science is beautifully simple.

Computer Engineering is a gory mess.

What about computer engineering do you feel is messy? To me, it all comes down to basic physics, arranged rather elegantly.
And yet it took 50000 years worth of accumulated Homo sapiens thought to come up with a formalism describing universal computation and a model of the Nature accurate enough to understand semiconductors.
yes, trial and error is a lengthy process
"In theory, there is no difference between theory and practice. But, in practice, there is."

One of the interesting points raised in the article is that even if we had the tech to shine UV light onto plates of silicon, we'd need to reinvent a previous generation of computers so that we could design modern chips to fabricate.

Good luck with that.

Just making glass is going to take you a while.

Making semiconductors at a scale that you can start thinking of building a working computer will take you quite a bit longer.

It's simple in principle. It would be far easier to stuff a bunch of people in rooms with paper (assuming you could make that) and pencils (ditto) and have them execute your program.

Among other things, "how to make a semiconductor" is like that joke about how to make a million dollars: "First, you take a million dollars..."

You're going to spend years just bootstrapping your metal refinery to the point where you can bootstrap your machine shop to the point where you can bootstrap your chemical industry to the point where you can produce undoped silicon of sufficient purity to make a decent integrated circuit. Sure, maybe you can slap together a handful of cheesy transistors to rival the first-ever transistor (Google up the picture of the first transistor; it's hilarious; you can practically smell the hot glue wafting from that picture) but it takes a bunch of transistors to make a computer, and you'd probably like your computer to get through three whole clock cycles before melting.

You might actually be better off just recapitulating history by starting with vacuum tubes. You'll need to master glassblowing and vacuum pumps to build semiconductors anyway, and tubes have lots of handy uses. (You could build an oscilloscope, which you will also need.) But you'll need to bootstrap your metal wire industry (generators aren't that hard to make if you can get hundreds of continuous feet of insulated wire...) and note that you'd better be very careful until you've had time to bootstrap your plastics industry; there are scary stories from the early days of TV when they had high-voltage circuits but nothing to insulate the wires with but varnish and paper...

Jeri Ellsworth managed to make transistors in a pottery kiln, starting with modern wafers. She said it took three years of research and interviewing graybeards who were working on it in the 1970s. Makes me hope she wrote that stuff down.
That sounds about right.

But "build a transistor, given a wafer of pure undoped silicon" really is isomorphic to that joke about using a million dollars to make a million dollars.

The wafer is the hard part.

That's why I suggested making glass first, it's a good primer on the kind of gear that might one day lead up to the tooling you'll need to make silicon pure enough to make a transistor.

You'd be much better off choosing a road that leads via relays, that's just metalworking and some coating. Vacuum tubes would still be an order of magnitude easier than silicon.

Think sandy beach + pit mine, before you turn that into a working transistor you're going to be busy for a while.

> You'd be much better off choosing a road that leads via relays

One Portland State University professor built a relay computer, with an ALU:

http://web.cecs.pdx.edu/~harry/Relay/

Quite impressive to see it in action.

Thank you for that link. I took the liberty of re-posting it separately, it is one of the coolest things I've ever seen built. Besides the memory (and that would just add another couple of 10's of thousands of relays for a usable machine) that looks like the shortest direct path between 'man on a beach' and having a working automatic computer with a practical degree of reliability.
"practical degree of reliability" seems somewhat debatable; it apparently burns out components fairly often when running. IIRC it uses quite a bit more juice than it needs to, which might have something to do with it, so perhaps it could be made more reliable.
Relay contacts tend to spark when they engage each other. You can get rid of most of that sparking by adding diodes but that would be cheating (semiconductors again), to a lesser extent using small neon bulbs across the coils (that will still take them up to 90V though).

With 'practical' I meant that you would be able to run programs to completion for for instance numerical problems.

Vacuum tube computers suffer from different problems (such as tube filaments burning out) and I really wonder whether a well designed vacuum tube computer would be more or less reliable than a well designed relay based computer.

Vacuum tubes got awfully small in their final days but the voltages involved and the heat make me believe that relays would probably be more reliable, but likely also more expensive and much slower.

A capacitor will deal with the sparking -- they've been used (under the name condenser) in conjunction with points and mechanical distributors in internal combustion engines for years.

This all presupposes a memory of methods to create reliable electricity, though -- including rectification and filtering, if that memory involves alternators. A purely mechanical representation of computing would probably be more practical in a forced Iron Age reboot of society. A treadmill-powered version of Photoshop would be a bitch, of course, but number crunching (at the level needed for serious societal progress) would come fairly quickly.

The relay computer does use a capacitor: a huge 1F capacitor.
That's to stabilize the power supply, not to help with avoiding contact erosion.
Relays!

I'm ashamed I didn't suggest those first. One of life's most precious moments was touring the MIT Tech Model Railroad Club during the last year of their old switching system's operation. It was built around some old relay-based telephone switch the size of a couple of refrigerators, and the whole thing made these awesome clacking noises. It also emitted this constant, periodic metallic click, like a metronome, which I was told was the clock.

There are a few abstractions that can take you a long way towards understanding ... basically the standard computer engineering curriculum: TCP, Posix, C, the von Neumann architecture, digital logic.
In my opinion, though, a computer engineer is better served working in the other direction :) Or, perhaps, from both ends at once--that's how we did it at school, and it worked out OK.
http://www.homebrewcpu.com/

User/data segments, 16bit data operations, user/supervisor modes, address translation, mmio and DMA. 8meg address space, 128K per process. Runs Minix (Precursor to Linux).

200TTL logic chips. How quickly do you think you could build that? My bet, is if you had a dedicated group of people within 2 years you'd have a mhz computer again.

It's easier the second time around.

EDIT: http://www.holmea.demon.co.uk/Mk1/Architecture.htm Homemade apollo guidance computer http://klabs.org/history/build_agc/

TTL was several steps up from ordinary transistors, I don't see how that would be a valid shortcut. You'd still have to make silicon first, as well as a process to create integrated circuits. Simple ones, but still.
This comment is for all the decedent comments worrying about silicon wafers.

Computers were possible long before electronics, see Babbage.

Computers were built long before integrated circuits and silicon wafers, see Vacuum tubes.

The real problem is in people patenting ideas that are of dubious innovation. In fact, the patent office should negate patent applications if identical ones appear within months of one another. This is because it shows that there is no genuine leap of innovation that has occurred.
This doesn't quite work; some of the most creative, innovative ideas in history bubbled up from the collective unconscious in several minds at the same time. Just look at the number of nobel prizes that get split between people that discovered exactly the same thing at exactly the same time but completely independently.
You're misunderstanding the purpose of patents. They're not a reward to be granted for every useful invention. Patents exist only to be an incentive for innovation. In almost every case where several inventors are competing to get the invention ready to patent, there is enough natural incentive that the patent is not necessary. In those cases, granting a patent can just as easily slow down the pace of technological progress, by forcing every inventor that didn't get the patent to either stop working in that area or negotiate a patent license before they can continue working to improve the invention.
They give an incentive for innovation by granting the original inventor time to bring his invention to market before an established entity uses its existing resources to block him out. This model isn't very useful to software, but it works perfectly fine with cars and tractors and other things that take five years from concept to product.

One trivial improvement might be to split patents the same way that major research recognitions are split. If two people come up with something simultaneously and independently, why not give it to both of them?

You're both missing the very important compromise of patents.

The temporary monopoly patents give were and are understood to be harmful. But, they're less harmful than a world of trade secrets. Which is what we had, before patents. See: guilds.

So, we the public offer intellectual property. And, in return, the details of that property become public from the very beginning. And, after a few years, everyone has freedom and the instructions on how to make or do whatever.

Exactly. If the state of the world is that people can separately come up with the same "trade secrets", then there is a case against it being patentable.
And that is the fundamental fallacy. Trade secrets are far, far less harmful than patents. If you keep your work a trade secret, your customers still benefit and in the worst case you have at least done no harm. Patent trolls destroy far more value than they steal.
But anything coming from the "collective unconscious" would have been discovered, by definition, anyway, and should not be monopolized by any individual.
The patent system is an insanity in the 18th and the 19th century as it is now. You have the same old problem of dubious rent-seeking by entrepreneurs who should be focusing their energy on spreading their inventions, not restricting it.

The problem with the patent system is our failure to understand history, our tendency to focus on the present, and our tendency to repeat the same thing in the hope that it will works.

I think you can simplify that further: If you look at history, change which is not backwards is always good. There are fluctuations up and down, but the trend has always been for the better.

And yet at every point in history, most believed that change would be bad-- in fact, maybe we need to move backwards a little.

I understand what you're saying.

But what about people who have always believed change would be bad, and then been proven right on many occasions? We don't hear too much about people who predicted a negative outcome and when it came about, received just as much attention.

Was I the only one who was thinking: "Jeez, I've seen some of the code that runs these complex systems, and the really amazing thing is that they ever worked at all!" :)
No, everybody thinks that. I'm strongly reminded of my commentary on Ryan Dahl's rant a few weeks ago - http://news.ycombinator.com/item?id=3056534 - "Everybody can look at a simple thing like a submit form in a web browser, and sigh at the inefficiencies in the whole stack of getting what they type at the keyboard onto the wire in TCP frames, the massive amount of work and edifices of enormous complexity putting together the tooling and build systems and source control and global coordination of teams and the whole lot of it, soup to nuts, into a working system to do the most trivial of work."
The technology that civilization creates is only possible because humanity specializes. Humans aren't so smart by themselves, but we can do a lot of thing if humans possess specific knowledge.

For example, one guy specialize and dedicate his life to metalworking. If I try to know everything in the world, I could barely scratch the surface of what that guy learned.

People can even specialize in multidisciplines. They don't know as deeply as a specialist in a subject area but they know two area well and combine them into useful combination.

It would seems that today's problem is more about the limit of human beings' ability to store and synthesize information across vast disparate field. In other words, we generated so much knowledge, but so much is just kept there not being used.

Spaced repetition is a good example. It's a very powerful memorization technique, but it is not being used in colleges and schools, except those who discover it on accident.

It's also a timesaving tool in the programming profession. Instead of googling and wasting 5 minutes for answers to our programming problem, we can save 5 minutes for many common tasks we memorize. It won't save us from debugging woes but at least we get to the important programming problems faster.

There's also a storehouse of reliable information on self improvement written by psychologists who done experiment and research things like willpower and discipline, why it fails, and so on. Instead, we got distracted by techniques that seems to work but have no scientific basis, or we get distracted by self improvement gurus that have no idea what we're talking about.

We are specialists but we miss a ton of useful stuff that would be useful to our specialization. It's like missing a thousand useful book every year because you can never read them fast enough.

> There's also a storehouse of reliable information on self improvement written by psychologists who done experiment and research things like willpower and discipline, why it fails, and so on. Instead, we got distracted by techniques that seems to work but have no scientific basis, or we get distracted by self improvement gurus that have no idea what we're talking about.

That's a subject where I know that I can't tell the difference by myself - could you recommend some authors? I'd be happy to put in the effort into reading technical papers which haven't been re-written for a popular audience yet if the quality is higher, but I don't know where to look.

The only book I am studying right now is: http://www.amazon.com/Succeed-How-Can-Reach-Goals/dp/1594630...

It have citations and is written by a psychologist. However, I did not have a lot of time to compare notes between books written by other psychologists in the field.

The thing is, being a specialist means you don't spend much time scrutinizing what is wrong and not wrong in their studies or books in other fields. You sometime have to trust scientists for being scientific.

Try this book: "59 seconds" - http://richardwiseman.wordpress.com/59-seconds-think-a-littl... It presents practical advice based on research papers in the field.

A good book on brain hacks like the aforementioned spaced repetition is "Mind Performance Hacks": http://www.amazon.com/Mind-Performance-Hacks-Tools-Overclock...

And another good read is "Pragmatic Thinking and Learning": http://pragprog.com/book/ahptl/pragmatic-thinking-and-learni...

You can also try this site: http://lesswrong.com This is a good section to start from: http://wiki.lesswrong.com/wiki/The_Science_of_Winning_at_Lif... Be warned, though. The writing on this site is heavily influenced by AI research so it tends to be somewhat... Vulcan, which can can be good or bad depending on your preferences.

thanks for these links -- lesswrong is amazing.
thanks for these links -- lesswrong is amazing.
Yes! So can we stop pretending (through monetary and social credit) that for everything worth developing, it was just one guy acting alone?
Perhaps, but:

"A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects."

     -Robert A. Heinlein
http://elise.com/quotes/a/heinlein_-_specialization_is_for_i...
Why is this quote worth considering or insightful? What does it add to the discussion? Have you done half of those things? Did you really get anything out of it? Some insects specialize, some do not. One could just as easily say farming is for insects, or flying, or a multitude of other things. Just because several species of insects do something does not mean we should not.

This quote, along with a few others, seem to be always dropped into internet discussions with no context or explanation, and I never see them add to the discussion.

Sure, lots of us have done more than half of those things. Its supposed to be illustrative of how a person is a gadget for figuring out how to do whatever comes along, instead of being programmed for a particular life plan.

But you knew that. I'd have to wonder why the pedantic complaint?

Because you didn't say any of it. The quote is amusing; using the quote to contrast with the post it replied to adds much more. And personally, I got something entirely different out of the quote than you did, and I found the point of view you just explained interesting.
The quote doesn't substitute for a good response, though there's always the chance that someone hasn't seen it. However, the contrasting points of view seem useful.
Perhaps, but social insects like ants and bees show far less specialisation than humans do. They rely on the emergent behaviour of thousands or millions of essentially identical units.
The contrasting points of view seem useful. On the one hand, we need amazing specialists, to advance the state of the art in a field to a new level. On the other hand, we need amazing generalists, to find novel ways to put advanced technologies together, and to help bridge the gaps between levels of expertise. Slowly, the baseline level of knowledge goes up, and the depths of both specialists and generalists can encompass more.
Repeaters of that quote invariably neglect to mention that those are the words of a fictional character that lived to be at least two thousand years old.
It's an interesting and eloquent statement, and worth thinking about. There's no need to resort to ad-hominem attacks against whoever said it, no matter how fictional they might be.
I don't think you can call that an ad hominem attack. For one, he's not talking about the actual author of the quote (the writer), and for two... well, it's just not an attack at all.

I find it very relevant that a person who does all these things is a (fictional) character that lives for thousands of years; that means he has plenty of time to learn a lot about many different fields and trades. Normal humans don't have this luxury.

I've lived roughly half a normal lifespan and have accomplished most of that list myself. No need to live for thousands of years.

Methinks you've missed the point.

Sure I can. The argument was challenging the merits of the statement based on some quality of the entity that made the statement, not based on the statement itself. It's the very definition of "ad hominem".

You can argue that the sentiment expressed by the fictional character is impractical, as you do in the last part of your comment. I disagree with you, but that's neither here nor there.

There are plenty of fictional characters whose remarks are both widely quoted and found to be enlightening and/or inspirational to many.

Several are currently running for President.

It doesn't say "do it well", so yes - I have done most of those and think can do all of them ... poorly.

For every human to be able to plan D-Day, conn a sub around the world, design the Burj Khalifa, program like Peter Norvig -- that's going to be both unlikely and a waste of resources since it excludes building engines, harvesting, sculpture, and so many more aspects of what humans can do.

The main reason to learn new things is that it offers growth opportunities to having a fulfilled life. Sure, I can spend all my time specialized on one thing, but it wouldn't be as satisfying because a good life is about balance.
When you specialize, you will learn more indepth about your field. You don't stop learning.

Of course, a good life means humans must learn certain life maintenance skill and social interactions so that we can function and hopefully be happier overall.

Reminds me of "Nobody knows how to make a pencil":

http://alexbarnett.net/blog/archive/2006/11/18/Nobody-knows-...

It's the same thing at every human technology. And this in turn reminds me of Mostly Harmless, by Douglas Adams, where the protagonist finds himself in a simple rustic village. He is unable to reproduce any of the technology from his civilization and settles as a sandwich maker.

Reminds me of a thought I had about babies: How does that little bunch of cells grow into a living, breathing human being? Surely there isn't enough information in there to do that.

Answer: It can't, and it doesn't. Not without the mother.

(I have no idea if this is indeed true, but I like the loopyness of the idea).

And here I was thinking this thing called DNA carried the information.
Not all of it.
What's about egg donors or surrogate mothers then? Doesn't the baby turn out like their parents?
You can't bootstrap in a vacuum. For one, the baby will inherit the surrogate mother's bacterial line.
Nature is frankly amazing. Since it's "spider season" over here, I've been amazed at the fact that something as small as a spider can build something as complicated as a spider web. And that's putting aside all the biochemistry of creating the silk.

But I think in the OP, the amazing part is that it was build by human beings. It's something that humanity as a whole made and understands. But still, it's hard to comprehend all the layers involved…

I've understood this for quite awhile but have had a really hard time articulating it. This piece is a godsend.
We need a new human layer to truly make meaning and create value over all the technology.We need all this to come together to change our lives in ways that parallel the invention of the wheel and the computer.Its clear the next big thing is Personal webs!
Are you talking about APIs that work directly with our biology? Like, get/set data in the brain?
This article brings to mind "If Software Is Eating The World, Why Don't Coders Get Any Respect?" discussion - http://news.ycombinator.com/item?id=2919708

Perhaps by making technology a Black box, we unintentionally shielded those who deserve the credit (social and monetary) from receiving it. Maybe even allowed some grey-area experts from controlling an industry with ones and zeros at its core.

This is part of the things that I list under "human-built things I technically understand (more or less) but are still completely baffling if I stop and think about it".

Amongst these:

- same example with Google Instant: the fact that what I type goes to Google and back that fast and that I never get somebody else's page is pretty amazing;

- CRT monitors: a flow of electrons is bent with electric current to hit a specific point on the screen, for millions of dots at least 30 times a second and it never misses its targets; (leaving aside that we were able to get a constant flow of electrons in the first place…)

- car engine: fuel is injected, compressed, lit up in cylinders at 3000rpm to make a 4,000 vehicle move at 65mph and the engine barely ever have hiccups.

- cell phones: I'm driving in California and can talk to my Dad who is in a high-speed train in France. It works and you can't even notice a significant delay.

And there are obviously so many more things like these…

It's like this Louis C.K. bit about people who complain about being stranded 40 minutes on the ground before taking part of "the miracle of flight". We should spend more time amazed at when it works than pissed at when it doesn't.

For me it's plumbing. Flush the toilet, get rid of waste through a hidden underground network and it just works in the middle of a city with millions of people doing it every day.

It also gives me perspective of the enormous debt I owe to (hundreds of) thousands of people "just doing their job" for me to be able to sit where I am and do my part of it. Just from the vantage point of my office chair, the things that surround me have been touched my so incredibly many people during their production and delivery to here.

Plumbing is also one of those things that you don't really think about until something goes wrong with it (in my case, a backup ... ugh).
I think that's a red herring.

I mean, isn't that just the marvel of abstraction? I can show you how it works, on a basic level: See, it goes around like this. This connects here. That switch opens. This moves back, and that's the behavior that we're looking for. Easy.

Why is it that when that same thing happens a hundred times a second, the emergent behavior suddenly becomes mind-boggling? It's just the same thing, faster. You already understand it. Your brain cant work fast enough to see what's going on, but thats exactly why we built the machines: to translate very fast things into things slow enough to understand. The complexity of the speed is illusory.

It strikes me as like a small child, watching the cars go by-- Zoom! Zoom! Surely that is the most amazing thing that exists. But when she grows up, she learns that everything has a velocity, which has to be some number, so it might as well be high. The interesting things are still interesting, moreso even, when it's going very slow. Just going fast is kind of boring.

What's cool are the things that emerge when you abstract. You have a car, and you know why that works. The connection between gasoline and forward motion is straightforward enough. But as soon as you have three cars on a road, you have traffic, and that's something fundamentally new. And you can analyze the traffic, figure out how it works-- but can you see how traffic is fundamentally dependent on the behavior of gasoline? And gasoline on the behavior of a refinery?

And what happens when the refinery is run by people who drive to work? Now you have a recursive system. Can you still understand it? Maybe today. By tomorrow it will have changed itself. Can you understand the change?

What happens when you think you understand the change, so you make a prediction, but your prediction affects what happens, making you wrong? But you take this into account when you make your prediction, becoming right again, except now you're a part of the recursive system, and there will never be a right answer. Understanding has become impossible.

Now that's baffling.

(And not to get all political, but this is also why a properly functioning government is not merely a hard, but an intractable problem. No matter how much you know what you're doing, you can't control something that controls you... But that doesn't stop us from trying.)

>>But when she grows up, she learns that everything has a velocity, which has to be some number, so it might as well be high.

It's annoying how you say 'she' because it distracts me from your content into thinking about feminism.

You must get annoyed a lot.
To be perfectly honest, I find your comment well written but I'm not sure what you're saying. (I'm not trying to ignore your comment, there are just many things that I don't feel relate very much to mine. Plus, I've always been pretty bad at reading comprehension :))

So yeah, I'm not sure how this is a red herring. The point is that we take a lot of things for granted and even if each layer of how it gets to work the way it does makes sense, there's always a leap of faith to accept it will work at high speed/volume/scale.

It might sound extremely naive but another way I look at it is that it's… intriguing to see that all of this has been built by human beings. The same kind of beings that make silly mistakes, forget to buy milk, enjoy Jersey Shore… Sure it's built upon centuries of previous results and research, but it still ends up coming from one guy's brain at some point. There's such a gap between the mundane things we do (i.e. mainly the things for our survival) and all the technology and science…

For the electronic-related examples, that means we've been able to ride the speed of light extremely well, while also building components on a microscopic scale. And I find that remarkable for a bunch of (smart) animals.

Yeah, I kind of went off on a tangent there, I don't blame you for not getting all of it :P

I think what I was trying to say in the beginning is that while I understand how it feels like a leap of faith, I don't think it really is. Like when I include a library, on some level I'm assuming it will really function the way the API suggests. But I don't have to take that on faith; I can read through the code, and see what it's actually doing. The code itself is an abstraction of something else, but if I take the time, I can eventually reduce it to an understanding of what's happening on a transistor level. I can't see what's happening in the CPU, but I can understand it.

I can't hold the whole model of my code at a transistor level in my head, but that's the power of abstraction. I understand what's happening on each level on some scale, I understand how the levels interface with each other, so ipso facto I do understand the system as a whole. If it doesn't behave the way I expect, I can use that knowledge figure out why, whether it's because I made the wrong call or because there's a wire disconnected on my motherboard. It's not magical; it just seems that way when I don't pay close attention.

Which is, in fairness, most of the time.

>I think that's a red herring.

>I mean, isn't that just the marvel of abstraction? I can show you how it works, on a basic level: See, it goes around like this. This connects here. That switch opens. This moves back, and that's the behavior that we're looking for. Easy.

>Why is it that when that same thing happens a hundred times a second, the emergent behavior suddenly becomes mind-boggling? It's just the same thing, faster.

I don't think it's a red herring at all. Going faster is more complex, more interesting. A spark plug ignites an air/fuel mixtures, it pushes a piston, which pushes a connecting rod, which turns a crank. That's easy -- once. At 3000 RPM that's 50 times a second, that's not easy, that's complex. It requires timing.

I've hand packed fuel into a canister, ignited it, it goes boom, it moves metal. That's easy. But at 50 times a second it take precision. The spark timing from the distributor has to be right, the crank is connected via timing belt to the camshafts that control the opening and closing of the intake and exhaust valves. That timing has to be right. There's a computer constantly monitors the O2 content of the exhaust gases, so it can better control the air/fuel mixture. There's another sensor to listen for knocking caused by too little air, so it can retard the spark timing to compensate.

All this happens 50 times a second. It's far more amazing than me lighting a fuse and watching something go boom.

But when you dilate time 50 times, isn't it still interesting? Aren't the precise parts still precise? It's more interesting fast because the material properties change, the speed of the springs and the motion of the flame front becomes important-- but that's still fascinating even when you can watch it happen.

And you don't have to slow anything down to see that; controlled demolition, say, deals with the same sort of stuff on a large scale. When you're blowing up a building, what's happening in an individual explosive (hand packed fuel in a canister, with a dumb fuse...) too fast to see isn't important, but you need to pay close attention to the things that happen during seconds, perfectly human timeframes, because they become interesting and complex.

Watching a single revolution of an engine in slow motion, you witness a marvel of engineering taking place before your eyes. But for decades (centuries?) before we understood them, people built engines by trial and error, and watching one of them in slow motion would not have been impressive. It would look sloppy, imprecise, unrefined. Engines today are amazing precisely because they are well understood very slowly, and in practice it mostly works to just say "and then that happens over and over again and that's what pushes you forward."

That understanding is obvious on every scale, whether you're watching high-speed video or just hearing the engine note from outside. That's why I say that the interesting things are still interesting slowed down, and that "it's so fast!" is a red herring.

Sort of puts arguments about "leaky abstractions" in the appropriate perspective. Even assembly has a lot of turtles holding it up...
In fact on an x86 machine the byte code that programs are written in gets translated into a specialized micro code which is then executed.

So even assembly isn't the lowest language.

As Matt Ridley puts it in his TED talk ( http://www.ted.com/talks/matt_ridley_when_ideas_have_sex.htm... ) :

Nobody on earth knows how to build a computer mouse (all by himself).

Keep going and it gets simple again.

You put a bunch of leptons and quarks in a specific ordering and they start arranging other atoms in ways to help them understand their own specific arrangement.

That they can is why I think it is simple. in the sense of elegant.

I often try to explain this to friends, but in a shorter way:

Driving a car is essentially a controlled explosion taking place every second about three feet in front of your face—and yet this very dangerous and messy process "just works" for millions of drivers every day. We are more afraid of other cars than we are of the fireworks right in front of our face. That's pretty amazing.

This is similar to one of my favourite interview questions. I usually ask my candidates to explain everything that happens from the time they type an address in their browser till when the page they requested is rendered. You can find a lot about candidates with this question.
I have my 14 months old daughter playing right next to me. Two cells merged and there was life, giggles, tears, words, laughter.

Now, _that's_ dizzying.

As amazing as it is, it gets far more dizzyingly complex once you look at the biology underneath it.
In my opinion this post ignores the significant divide between the general understanding of hardware and software.

Most people have a general idea of how an internal combustion engine works, how their fridge works, how a tv works, hell, even about how a nuclear power plant works. Most people wouldn't know how to make any of these things, but it's not exactly a "dizzying invisible depth" either, and most people are capable of making informed decisions without being engineers.

When it comes to software however, most peoples understanding remains completely at the surface. I don't believe this is something we should accept as "normal", because this is exactly what leads to many of the issues our society is currently struggling with. Not just software patents, but many of the current security and privacy issues or the huge unemployment.

The general understanding of software was not, and still isn't part of peoples culture and education in the same way a basic understanding or hardware has always been. This significantly undermines the decision making on all levels of society, from government policy to personal choices. The patent mess is just a symptom.

Well, this kind of puts a new spin on the saying "any sufficiently advanced technology is indistinguishable from magic"!
I found this disheartening. Life is complex but its not unknowable.

One of those 'life choices' I faced when I entered college was whether or not I wanted to 'program' computers or to 'build' them. These would guide the choice of EE or CS degree. My father asked if people with EE degrees were allowed to program computers, I said of course they were. Then he asked if people with CS degrees were allowed to build them, and the answer was no they were not generally. So if I didn't know what I wanted to do, I should get an EE degree since then I could do either.

Turned out to be pretty sage advice and knowing how the computer does what it does really helps program it. Especially if you are trying to wring every erg of performance out of it. When I graduated with my EE degree (and a minor in CS) I was proud of the fact that I could write a database in a languge for which I wrote the compiler on a computer architecture that I designed using circuits that I understood down to the physics of the PN junctions that governed the behavior of semiconductors. (It really is math all the way down sadly)

That being said, I firmly believe the human brain has a limit (which may be case by case) of how much stuff it can hold at one time. And the notion of abstraction, especially modularization and testable components, makes complex systems possible.

This comes up in a variety of contexts. Sometimes I interview folks who can draw a nice architecture on the white board with boxes and arrows and such. So I ask them do go into one of the boxes, and lets draw that out in detail. And then those sub boxes I want to go into their detail as well. My goal is to understand that the candidate understands that 'boxes' are only a good way of thinking about something if you understand what the box is really modelling.

A good example of this is that naive people treat a hard disk drive like a box. It has a port you tell it to read logical block A or write logical block B and it does some magic and makes it happen. But really it screws up now and then, and it has very variable performance. So if you can't explain how you have accounted for these properties of your box then you're not thinking deeply enough about it.

Sometimes an 'architect' type (you know the type, Joel called them Architecture Astronauts as I recall) they dismiss your whole area of expertise as a box in their model. This can lead to some pretty dismissive thinking by the 'doers' in the crowd, but it is important to know that without abstracting that thing you're working on, the architect person wouldn't have enough brain capacity left over to see the 'bigger' picture. As long as their picture of your box is accurate, you should cut them some slack.

The bottom line for me is that it can be 'amazing' at how the complex system runs but words like 'mystifying' and 'dizzying' make me nervous. If you're a software developer and its 'mystifying' how your program can do what it does that is a problem you should address. There was an excellent pointer to 'what every programmer should know about memory' and there should be equivalents to 'networks', 'processor architecture', and 'disks'.

I simply could not get past the Groundhog-day intro.