The Greatest Invention in Computer Science

I would have gone with binary. It might actually be the first application of computer science to solve the fundamental programming difficulty with electronics. Binary makes it possible!

I don’t even consider “the routine” to be an invention.
It’s as simple as GOSUB. As simple as CALL. As simple as PUSH IP, JMP XXXX (and then POP IP).

I mean come on. Sequentially ordered instructions - the “JMP” instruction to redirect flow - a “RET” instruction to return from whence we came. Pretty obvious, even if hindsight IS 20/20.

If you’re going to allow “the subroutine” to be an invention, why not “code”? Why not “variables”?

The greatest invention ever in computing is: copy/paste.
Clearly.

I came here to opine that compilers are the greatest invention in computer science but everyone beat me to it. Although I sometimes miss programming in 6502 Assembly…

What about C#? Published in 2000 I think.

I think the compiler, not the asembler. We had cpu, we had patch cords
and machine lang/asm but what really changed it all the the compiler it made the computer language possible.

as any husband will tell you the longest routine ever written is the private why_you_are_wrong() routine… invented by women a long time ago, it is still being wrtitten, and takes an infinite number of arguments. Furthermore, it only ever has one result… a string - ‘Yes, Dear’

As to who invented the routine, or at least the idea, I believe that is credited to Ada Lovelace, for use on Babbage’s Analytical Engine (the original vaporware in our field). Something like that was also used on Jacquard (sp?) Looms, which led to the invention of Paisley patterns, for instance, which were too difficult to do on manual looms.

Gee, does no one cover the invention of programming, anymore? It was just a couple of days of non-tested material, but it did give a nice historical basis for things.

@Will

Although most APL was interpreted, there have been some compilers for it and the derivative J language. Most of the compilers used some intermediate source (C/C++) rather than a direct executable compilation.

http://en.wikipedia.org/wiki/APL_(programming_language)#Compilation
http://www.chilton.com/~jimw/apl85.html

However, my APL example was truely misplaced, since my initial APL experience in college was interpreted. This specialty language was not compiler enabled. I appologize.

Its really very default to keep track the single Programming language, Because day by day the new programming language are getting introduced , So developers need to update their skills in new domain in order to become a successful developer. These are the language i learnt up to now

  1. C
  2. c++
  3. java
  4. PHP
  5. Javascript
  6. Ajax
  7. Adobe AIR

I’d argue for the debugger being the single greatest invention.

Does no one ever read any further than the title and first sentence of Jeff’s posts?

The point of his post, as I interpret it, was not to prompt a lengthy discussion whether the the routine was in fact the greatest invention in Computer Science (which is a quote from Steve McConnell, not some random assertion Jeff just came up with).

The point was to make you think about what an important concept a routine represents, how fundamental it is to programming and how we still manage to misuse and abuse this simple building block by not thinking enough about the basics.

Amen, brother!

IMHO, competent use of this feature has become increasingly uncommon. Part of the reason, I think, is that modern editors and IDE’s have made “copy-paste” programming far too easy. Combine this with short attention spans (also an increasingly common phenomenon), and you have a big mess. In one case, a coworker put together a unit-test program that had approx ~1200 occurrences of the (almost) exact same code sequence, each one blithely pasted from the previous. Makes you wonder…

For those of you wondering about how to create good routines, there is still no better guide than the following:

Reliable Software Through Composite Design (Paperback)
by Glenford J. Myers (Author)

(Yes, the mention of tapes, etc. makes it sound a little dated. But this is the seminal work in terms of defining coupling, cohesion, and all the other things that go into making good routines. Plus, you can get it real cheap).

Jeff - this post definitely highlights the need for a post on “What does Computer Science mean to you?”. I would LOVE to read the comments on such a topic.

Several people here assume CS is theoretical and claim turing machines / lambda calculus are the most important inventions. Likewise, several people including you see CS as more about programming, and say routines are the most important. Some have blurred the distinction between CS and computer engineering and state that the microprocessor is the most important invention. But the ones that make me cringe the most, are those who treat CS as purely user/business oriented and say the mouse was the most important invention.

@higgs: “You can’t write code (at least useful code) without jz or jnz” – You should examine both OISC (for laughs) and “The Program Counter Security Model” (for an arguably important real-world application of straight-line code).

@Hoffmann: You should check out any RISC processor, and then benchmark your code with and without the needless pre-optimizations, and then shut up.

@Jeff Atwood: Didn’t you mention the blog post “Design Patterns of 1972” last year? It’s certainly required reading for anyone interested in today’s post.
http://blog.plover.com/prog/design-patterns.html

(My “greatest inventions of CS” nominees: The compiler; the subroutine; the pointer; the hash table; type theory; Union-Find.)

The question of this article is a bit silly. There have been many important, paradigm-shifting inventions in the short history of CS and the subroutine is merely one of them.

As other commenters have pointed out, there are a number of inventions that you could put right next to the subroutine on a list of the X most important developments in computer science. I don’t think any 1 thing would take the cake.

-Variable Scoping
-Compilers
-Interpreted Languages (Java and .Net)
-Data Structures (classes)
-Standardized GUI Elements (small-w windows)
-Subroutines
-The Mouse

… I’m sure that I’m missing half a dozen important ones, and I’m deliberately leaving off stuff like the microchip (why not the vacuum tube?)

Personally, my favorite invention is interpreted languages. To me, interpreted languages are like icing on the cake (which is the compiler).

Esotericly, a routine goes back to before 1725. The Jacquard Loom used stringed together cards that repeated a pattern. But The wikipedi states it’s partially based on a paper tape loom from 1725. The wikipedi does mention it was based on a music organ. So a wheel or paper roll of a music box is a repeating set of instructions, is it a routine?

There are also very old brass machines (some toys) that also can be said to be programmed (cams and wheels) to repeat a performance several times. So whats a routine?

Maybe if I say “binary numeral system” over and over again people will agree with me.

How about “digital”? :open_mouth:

From Wikipedia: “Owing to its straightforward implementation in digital electronic circuitry using logic gates, the binary system is used internally by all modern computers.”

ALL MODERN COMPUTERS. Bam! None of this other stuff is used in ALL modern computers. You specialists, all with your specialist ideas.

(Don’t take me too seriously, just enjoying the discussion here) :slight_smile:

You said: ‘It is, after all, the single greatest invention in computer science.’

While the routine was a great milestone on the journey that exploits abstraction to improve software development, the next invention, which built on top of the routine, also brought about a revolution: the polymorphic message send, also known as ‘dynamic dispatch’, took the idea of calling a routine whose location (provider) is specified at compile-time, and extended it to allow programmers to invoke a routine with a signature that is specified at compile-time, but whose location (provider) is specified at run-time. Object Oriented programming allows an object to send a message to another object which is only known by the fact that it provides a method implementing that message. The resulting flexibility, ‘one message, many methods’, gave us a way of realising the A HREF="http://en.wikipedia.org/wiki/Open_Closed_Principle"Open-Closed principle/A.

I reckon the greatest invention in computer science is the GUI. This has enabled non computer gurus the world over to actually use the things, giving us programmers something to do.