Skip to content

Comment on How NASA writes 'perfect' software (1996)

Comments

"John Munson, a software engineer and professor of computer science at the University of Idaho, is not quite so generous. 'Cave art,' he says. 'It's primitive. We supposedly teach computer science. There's no science here at all.'"

I'll give him his clever phrase, despite being technically false. What we create with our knowledge of computer science (our programming) is not the same thing as computer science itself.

This is an interesting way to think about programming, though. Compare it, for instance, to metalworking. The craft itself, clearly, is distinct from the science of metallurgy, but at the same time they have evolved alongside each other. I wonder if programming and computer science will go through a similar progression. As metalworkers just were learning to manipulate metal, we bit-twiddled and hand-assembled; as metalworkers evolved their tools and meticulously forged their creations, we created compilers but still hand-coded our programs. The next big step in metalworking was the automation of their craft via factories; is this way code will go as well? Will we simply guide computers as they produce their own code? And what advances in computer science would be necessary for this to happen?

Edit: Please forgive me if my history of metalworking is slightly incorrect, I just realized I mostly pulled it out of my ass.

Pseudocode-to-realcode converter, or something vaguely like it.

Honestly, we are already on our way there thanks to the popularity of 'expressive' languages like Python, Ruby, etc. I don't think the transition will happen overnight or anything.

By 2050 we might end up just coding everything in a very powerful dialect of Lisp.

Well, obviously we're progressing in terms of the ratio of human work to computer work, but I was thinking of a program that, rather than taking actual algorithms, takes specifications, and not exact ones like Prolog and the like require--some sort of natural language processing/artificial intelligence kind of thing that understands something like "I want a Firefox extension that will automatically do...". Of course, it would have to have knowledge about different protocols/methods/algorithms/etc., and we'd have to give it that knowledge manually at first, and sometimes you'd probably have to work with it, especially in the development of new algorithms. There would probably still require some significant work to put a non-trivial program together, but it would mean a lot less learning UI libraries, putting together basic systems (I'm thinking of games especially here), etc.

This isn't to say you couldn't put together programs manually still, of course--it'll always be fun. But you could get rid of most of the tedious bits. Also, Lisp (or something Lisp-y) seems like the most likely candidate for putting code together this way.

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.