Hacker Timesnew | past | comments | ask | show | jobs | submitlogin

I think the exact opposite is true: Programming is more scientific than most science. A biologist often spends months experimenting before invalidating a hypothesis. A programmer's hypotheses are proven wrong dozens of times a day. By failing so quickly and often, we build mental models of code that closely correspond to reality.[1]

Also, our experimental apparati are more powerful than anything in the analog world. We have debuggers that can stop time and examine every aspect of a running process. No other field gets such tools. In fact, I'm not sure I'd feel safe if other fields had debuggers. The chemistry-equivalent of a debugger is molecular nanotech. The physics-equivalent is omnipotence.

1. A side note: I have a hunch that this perpetual feedback loop of failure messes with our heads. There's a certain je ne sais quois about many who write code. It's not just programmers who notice it. A few months ago, I overheard two finance people talking about me. One said, "Geoff's kind of a weird guy, don't you think?" To which the other replied, "You haven't met many programmers, have you?"

Douglas Crockford seems to agree. From http://www.youtube.com/watch?v=taaEzHI9xyY#t=26m50s:

I think there has to be something seriously wrong with you in order to do this work. A normal person, once they’ve looked into the abyss, will say, “I’m done. This is stupid. I’m going to do something else.” But not us, ‘cause there’s something really wrong with us.



>By failing so quickly and often, we build mental models of code that correspond closely to reality.

Okay, but those mental models are not close to reality since in 'reality' all those models consistently break in production use. We write code to work on platforms which run on top of other platforms, etc and each of those platforms breaks in weird inconsistent ways. The cargo-cult mantras like 'ship often' , 'move fast, break things' that people love to blog about are all useless here. (Note that I don't care much for the business aspect. For me, shipping reliable software is infinitely more valuable than making money shipping junk) I propose we don't ship _at all_ unless the software can be 'certified' to run for atleast a year.

>We have debuggers that can stop time and examine every aspect of a running process.

Its okay if you find that impressive. As someone who ships multithreaded embedded/systems code which has to run for months/years without crashing I find most tools to be rubbish for helping me catch the really hard to find bugs. It does not matter (from my customers POV) that the bug was in the OS or hardware or whatever.

Maybe that is an 'impossible' standard to hold someone to, but that is exactly what I'm proposing.


There are specific sub-fields of programming (embedded systems, real-time operating systems, etc.) that focus more on provably-correct programs and shipping non broken code.

http://www.fastcompany.com/28121/they-write-right-stuff

> What makes it remarkable is how well the software works. This software never crashes. It never needs to be re-booted. This software is bug-free. It is perfect, as perfect as human beings have achieved. Consider these stats : the last three versions of the program -- each 420,000 lines long-had just one error each. The last 11 versions of this software had a total of 17 errors. Commercial programs of equivalent complexity would have 5,000 errors.


I've read it before. It is a great article. Those guys are far more smart and rigorous than what I can hope to be with my own work.




Consider applying for YC's Summer 2026 batch! Applications are open till May 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: