The Greatest Software Ever
soldack writes "Information Week has an piece on the 12 greatest pieces of software ever. It also notes some that didn't make the cut and why. Their weblog covers 5 others that didn't make the cut."
← Back to Stories (view on slashdot.org)
That was one of the first -- maybe the first -- 3D game on any platform. And this was first done on the TRS-80, with 128x48 black and white resolution! WOW! Now *that* had to have been one of the most important games... *EVER!* Who doesn't remember Deathmaze 5000?
The Unix Haters Handbook a great read.
Unix is probably the greatest bit of software ever, but "Unix" doesn't exist per se, it's almost like you could say, that it's had a long branching history, oh well, I can't fault him for his choice, I probably would have said the same as well...but seriously...
Excel is on the list? Not say, VisiCalc?.
Error 407 - No creative sig found
VMware? C'mon... is it because it was implemented on x86? It's not exactly revolutionary. Hypervisors in one form or another have been around since the 80s (anybody remember MVS?).
AIX? Got em
HPUX? Got 'em
Solaris? Got em...
No kidding. They put down BSD 4.3 just so they wouldn't get flamed into eternity. But they didn't know the real reason why UNIX (not BSD 4.3 in particular) was so significant. It was the first OS written in a high level language, which was designed to write an operating system (prior to this point operating systems were written in assembly language for speed). Missing this point makes this article look hopelessly trivial.
This article from Fast Company is coming up on ten years old and I've carried a bookmark for it since that time.
Read through it and see how much software you're aware of which is as capable as it is, the bug count, the lack of nights of old pizza, etc.
There are a lot of Earth-bound companies which write software on a large scale (source line count) which should take a page from what this article details.
Java is not now, and never was, a toy programming language. It's used by, among other things, cell phones, large web servers, and of course the annoying web applets you used to see everywhere before Flash stole their cookies. As far as I can see, it has few remaining technological drawbacks, the only big one left for me is how insanely ugly the language itself is. But that's not because it's a "toy" language, it's because it's an industrial-strength language, designed to force the programmer to program correctly, even if it takes 3 times the code and 10 times the time.
Java is not little. It's freakin' huge, when you count all the standard libraries. And the verbosity makes your programs even bigger.
Java may have been essentially interpreted in the past, but it isn't now. Don't believe me? Look up gcj. Even if you don't count a JIT as "compiled", I think gcj pretty much ends that argument.
Java is standard, it just depends how you count. It's not an open standard (yet), it's a proprietary one. Still, that's better than no standard, which is about where most implementations of BASIC are.
Java is not good for learning the basics. BASIC is much better for learning the basics. But have you ever had to sit through "Hello, World" in Java? That was my first Computer Science class in college, ever:Oh, and it has to be in a file called "Hello.java", or it won't work. Case sensitive, too. And, of course, they had to explain every last detail.
I would have quit right there, except I already knew some 5 or 10 languages when I came to class, including Java, so instead, I got to explain it to everyone else.
So what did you get right? Well, BASIC was popular, and Turing probably was, I don't know. And Java did indeed make the list, and like every language, it sees some use by novices and students, as well as trained professionals. But counting all of that, you don't really have much point.
Don't get me wrong, I hate the language as much as the next guy, and bytecode isn't as relevant as it once was (or may be soon). I'd much rather see C make the list -- after all, C is Unix and Unix is C. But then, the list seems pretty arbitrary -- no mention is made of Mosaic being bug-free, but VisiCalc doesn't count because it was buggy, and Excel makes the list because it's less buggy.
Don't thank God, thank a doctor!
I agree that it is simply amazing how few bugs there are in Tex. I do not think this is due to the fact that Knuth was paying people who found bugs. Rather, I believe the quality of TeX is due to Knuth's genius, and also not in small part to his idea of "literate programming".
There are better ways to put it, but in essence, literate programming means that you are supposed to write text that explains the algorithm or process; the code is like actions intersepsed in the text, but in a sense, the main product is the text, not the code.
I try myself to follow this style, having code that either reads obvious, or having large comment sections that explain what is going on, and all the background assumptions, so that the code is then obvious. It certainly had an influence on the amounts of bugs in my code, not to mention in my coworker's ability to understand what is going on.
In this respect, I believe a lot of OSS is sorely lacking. And the pity is that they lose developers in this fashion. As a personal story, some time ago I wanted to develop a plugin for Gimp to implement a particular effect, something I used to be able to achieve with a chemical darkroom. After three hours of staring at the code, and not being able to figure out for certain how to get to the pixels of an image, I gave up. I remember staring at hundreds of lines of C code, written in poor style, with very few comments (and what comments there were explained the obvious, instead of the background and the assumptions of the piece of code).
-
IBM's VM operating system. (1972) OS/360 was a nightmare, and not even the best OS of its era. Burroughs and UNIVAC were way ahead in operating systems in the late 1960s. VM, though, had paging, good security, hypervisor capability, and good performance. In the 1970s. And it's still in use.
-
Backus' FORTRAN compiler (1957) The first good compiler. Optimizing, even. Better code generation than anything running on UNIX prior to the mid-1980s.
-
QNX (1980) The first really good microkernel OS. Still in use, deep inside railroad signalling systems, machine tools, and nuclear reactor controls, where it has to work.
-
NLS (1967) The first system with a mouse, windows, and a GUI. It took a mainframe to make it go in 1967, but all the key ideas were there.
-
AutoCAD (1982) This is the program that replaced the drafting board. Huge increase in productivity. Ever ink in a drawing by hand? Redraw a drawing to make changes? Engineering companies used to have acres of people doing that stuff. No more.
-
Bravo (1974) The first what-you-see-is-what-you-get text editor. Multiple fonts. Ran on the Xerox Alto. The ancestor of all modern word processors.
Those are older examples, each a major advance over previous technology. As the technology becomes more mature, the advances become smaller, but more widely deployed.DOS more than Windows. If any Windows, Windows 95.
Windows had enormous business impact and created a software ecosystem, but it didn't really drive any TRENDS in computing.
DOS might get a mention because it was critical in brining the PC to everyman. But then, the same could be said for the Macintosh OS if DOS never caught on.
Here are the breakdowns of software and major influence/contributions:
12) Morris Worm - Internet Security
11) Page Rank - "Search" (Internet utility in general)
10) Apollo Guidance System - Fault Tolerant / Embedded Computing (also historical significance)
09) Excel - Profound effect on business, put power in the hands of many professionals.
08) Mac OS - GUIs
07) Sabre - The proof of concept of large-scale BI, CRM and other "Enterprise Systems"
06) Mosaic - The Web
05) Java - Popularization of VMs and distributed/network computing
04) System 360 - Operating Systems
03) IGR - Pure wizardry and human impact (although I might posit that TeX or the Orbitz boking system could go here too)
02) System R - _the_ database.
01) BSD Unix - The Internet
THIS THING CAN TURN ON A DIME, MACROSSZERO STYLE ALSO FUCK BETA, ~NYORON
Tell me about. I remember 20 years ago when young lady was just getting into email she ask me if a virus could be spread by email. I just laughed and said no, it would never happen. It would require that email readers have the ability to execute code passed to them, and nobody would be stupid enough to write a mail program that would do that. Execute code passed to it from anyone.
Supporting World Peace Through Nuclear Pacification
Are you employed as a J2EE programmer, by any chance ?
Yeah, but I could have never written that straight through. I just began with the "naive implementation" and started cramming patterns into it. Plus I needlessly referred to concrete classes via interfaces wherever possible like you're supposed to. (Otherwise I might be tempted to stray outside the bounds of the interface and use implementation specific features.) Singleton and Factory were both no brainers. Strategy, though, was what really turned the program flow into a mess.
I initially posted it in a BS slashdot comment but this code actually became famous. It's all over the web. It appeared in one of the Patterns books as a warning of what not to do. I got a free copy from the author after I found this code in his online draft. There are also C# versions around if you need a Hello World in your Microsoft shop.
I hope to improve my Hello World in the next versions with even more patterns. Ones I'm looking at include Mediator, Proxy or Bridge, and Decorator (maybe to replace "." with "!" at the end of strings or something obnoxious like that, so I can name an interface "Excitable"). There may possibly be room for Visitor and a few others. Command and/or Interpreter would be nice but Interpreter might require a significant amount of code- using a library is unacceptable in a project like this one. Although that code then might need some more PATTERNS to help it out because otherwise it's hard to think of stuff that these patterns should be used for except for earlier infrastructure to implement previous patterns! (This would make the Hello World similar to projects I have seen in real life.) Maybe a stack- I'll push a Noun onto it ("World") and an Interjection ("Hello") that knows how to modify a Noun operand. Then I'll feed the stack to the Interpreter which will generate a MessageBody. That would really make a nice mess of things. If things get too complicated I'll have to jam a Facade in there somewhere.