One (programming) language for the rest of your life. Which one?
If you had to pick one single computer language to use from now until the end of time, which one would you pick? What qualities are you looking for? What are your programming goals?
If you like, you can specify a platform or libraries if they colored your choice of language.
86 comments
[ 3.0 ms ] story [ 115 ms ] threadIf I'm going to be stuck with only one language, I'd rather use a language where some things are harder than in other languages, rather than a language where other things are simply impossible.
However in the time that most people were writing compilers no common or popular computer had enough memory to run Lisp reasonably. Even 8MB were a luxury.
Now we have 2GB of RAM as the norm.
Probably Lisp or some other highly growable language.
And when people don't mention a specific implementation they usually mean CPython.
Yes, Edison (like all other telegraphers) must have cared a lot about telegraph key design, just as great hackers care about language design. I did not mean to imply otherwise.
What I was trying to say is that it's inconceivable that a hacker of Edison's caliber would use a single technology for his entire life, even in the (already extremely hypothetical) absence of external factors. That's because, within a handful of years, the hacker changes the tech to the point that it's no longer the same thing.
I would suggest that Edison not only cared a lot about telegraph design -- he cared so much that he took every aspect of the telegraph apart to see how it could be improved, and eventually developed the Edison telephone (http://encarta.msn.com/media_461551270_761563582_-1_1/Thomas...) along with a vast raft of other tech that was unknown in his youth.
What makes the question inane is that it assumes that "now until the end of time" is equal to or less than the lifetime of a computer language. It's not. Computer languages evolve so fast that nobody has ever stuck with one language throughout their lives. If external forces don't rewrite your language, you eventually rewrite it yourself -- you develop a bunch of libraries and restate problems in terms of them. And by "eventually" I mean "in weeks, rather than months or years" -- Steve Yegge rebuilt Rails in Javascript in less time than it took me to write this stupid post.
I suppose I could try to claim that I would be happy to be a Lisp programmer until the end of time. When someone accuses me of cheating by using Arc (which I hope to do, someday), I'll just claim that it's really Lisp. When someone needs a device driver written, I'll just claim that x86 assembly is really Lisp -- all I need to do is write the assembler in Lisp, yes? Or should I go for broke and claim that my "eternal language" is the native language of a Turing machine? It'll take me a long time to get back up to, say, Rails, but I've apparently been sentenced to spend the rest of my life at it, so why not bite off something challenging?
Today, Java has generics, which I haven't studied and therefore don't understand. I believe the consensus is that you can't really be a Java programmer without understanding generics, so -- oops! -- I'm not a Java programmer anymore. My knowledge is oh-so-2003.
Tomorrow Java may get closures -- the debate rages. If it does get closures, all the Java programmers will have to update their skills or fall off the wagon.
The other day I heard a guy on a podcast talk about his disastrous attempt to test-run Drupal 3.0 (god knows why). That software is about three or four years old. Apparently it doesn't work anymore. PHP and/or MySQL and/or Apache have evolved right out from under it.
The names of all the programming languages used today are at least 10 years old. Just as the name of the English language dates back to Chaucer's time and before. Have you tried reading Chaucer?
the thing is that innovations in languages don't happen tomorrow. Though when they do happen, an experienced progammer shouldn't have any difficulty in adapting in a new feature of a language that is added to supposly to add value.
Since you reffered to natural speaking languages its obvious that it seems natural, programming languages to take characteristics of other languages as it happens in real life that they take words from each other.
Quote from some guy at Continental. "It wasn't a memory leak, it was a memory faucet!"
In garbage collected languages leaks can be very hard to track down. And they do happen from time to time.
Lisp lets me turn pure thought into code, as it turns out a good percentage of my thoughts are pretty crappy. Haskell fixes that.
It's just a hypothetical question, so there's some room for interpretation :-) So I really thought more of it as "with which language would I start out".
In my case C++ would have a good chance for that (maybe I better change my nickname on ycombinator after getting out with this...). It's one of the few languages which does not confront me with any barriers between me and the system and I like that. I might take longer than with other languages for a lot of tasks, but I know that if something can be done with the computer then I can do it with C++. Also I have lot of experience with it (for example in implementing small parsers) and experience is certainly always an important factor.
But the most important factor would be the tasks I would expect to face from now on. Lets say I expect to work on some more games or similar virtual worlds. I already know c++ works for that (for me) so I would chose it. If I would expect to do server-side programming then it would be another language.
And since both C++ and Lisp are Turing equivalent you can implement each using the other.
Given that, if we're allowed to build other languages on top of our chosen language, then I too would choose a low level language like C or C++ (at this point I think assembly is too low level for most things)
The hardest part would be finding a reason to do that.
with C# compilers running on almost every platform. It can do old things like c & c++ can, and it has advanced string and memory management set up by default. c# has more control and ease of use than any other language i have played with.
If i need to consume a DLL i can do it through old ways like C methods, OLE, COM, or through new managed methods.
other languages are nice, but if i had to use just one from now and to forever, C# is the only language i see that has the ability to span the gap. Ruby, PHP, Perl, Lisp, erlang, Java, smalltalk, etc... do not seem as flexible across all of the needs to program both software and hardware.
C# can be used to program Dirext X, and OpenGL, it can be used to hack your GPU and to program your portable device. Mono runs on linux and so you can use C# in any embedded app.
I keep meaning to play with that, but I always seem to have something else (like work) that I need to worry about.
Analogy alert: I kinda see functional programming as like giving up smoking. It may hurt a bit at first, but it's much better for you in the long run, providing you don't annoy everyone by continually letting them know...
"Guy Steele" - now that is a name that demands greatness just by the force of the name.
So did a famous Soviet political leader.
Personally, if I had to choose one language right now, I'd probably choose Javascript, simply because the syntax is easy for a PASCAL/C/C++ user, and it still manages first-class functions, much like my first real (non-BASIC) language, which was PS-Algol (think Java reflection, first class functions, easy persistence, but in 1987, not 1997!)
Once Javascript gets a mainstream in-browser JIT, it may well become even more my language of choice than it is now.
Other than Javascript, Rich Hickey's Clojure, is a pretty good candidate. I love the syntax, and being able to work directly with the JVM libs.
Choices:
Hammer, Drill, Screw Driver, Saw.
Even if we commit for life to the best saw there is, we are excluding all future saw-innovations.
Nitpick: "for all intents and purposes".
And, no, you don't get French benefits.
because if I don't have ASM, I'm not going to get much of anything else done.
For instance, no matter how much I love PLT-Scheme, Haskell, etc if I chose one of them there'll come a time when I want to code on a new piece hardware and won't be able to because I cannot access the underlying memory registers.
But if you have to choose which hardware specific asm then that's even harder...
I'm sure you could say the same about C++ and Java, and probably a bunch of other languages. But that doesn't really say much about the language itself, only who uses it.
http://wiki.alu.org/Implementation
But you are certainly right that the number of implementations is irrelevant, as long as there is either one good open source one or 2+ commercial ones.
its DEAD.
quick application development...hmm. Some other language + framework would be more like it.
I like C++ or lisp.
Maybe you should tell the four vendors that keep producing new versions that Coldfusion is dead.
As to other languages/frameworks - did I mention that it needs to scale as well?