
One (programming) language for the rest of your life. Which one? - watmough
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?<p>If you like, you can specify a platform or libraries if they colored your choice of language.
======
cperciva
C99. It can do everything I want, and while there are some tasks for which
it's not the ideal language, I can write my own libraries to supplement the
existing ones.

If 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.

~~~
Todd
Agreed. Not to mention that you can just write your own flavor of any language
you choose (most are already written in C). Plus, you've got til the end of
time, so the fact that it'll take a few years to write the first one shouldn't
be a problem.

------
__
C++. That way, I'll look forward to my death.

~~~
innernode
hahahahahaha :D made my night! thanks!

------
dag
Lisp, because it can consume any other language's functionality, which means
that I don't have to choose.

~~~
coffeeaddicted
Yeah, but if you use c or c++ you can implement a Lispinterpreter over the
weekend, so you'd have both. The other way round it's rather hard.

~~~
euccastro
_The other way round it's rather hard._

The hardest part would be finding a reason to do that.

~~~
mojuba
The reason would be to write a Lisp interpreter.

~~~
dreish
You missed the "other way round" part.

~~~
eru
No, he did not. The reason to write a C compiler / interpreter in Lisp is that
so you can then write an Lisp system on top of C and show off your 'uber-haxor
skillz'.

------
mechanical_fish
What an inane question. That's like asking Thomas Edison which brand of
telegraph key he'd like to use for the rest of his life.

~~~
pg
Bad example. People who send morse code (there are still a few) seem to care a
lot about which they use. And since Edison was famous as an an extremely fast
telegrapher, he'd probably be especially picky.

~~~
mechanical_fish
Oops, you've misunderstood me -- my telegraph post was, dare I say it, too
telegraphic.

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...](http://encarta.msn.com/media_461551270_761563582_-1_1/Thomas_Edison_Telephone_from_1911.html))
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?

~~~
eusman
computer languages evolve so fast? all languages used today are at least 10
years old

~~~
mechanical_fish
I wrote some Java code back in 2000, but then I stopped using the language. I
picked it up again in 2003 or so, and found that it had changed.

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?

~~~
eusman
never crossed with any of his writtings

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.

------
aaroniba
javascript: it's "like scheme with syntax", necessary anyway for cool web
apps, expressive, has closures, lexical scoping, and with Rhino you can access
any of the Java libraries (without writing Java code) and run it efficiently
on any platform (for server-side or desktop apps). It's really the do-it-all
language.

~~~
michaelneale
I think (and hope) you are right. Its not to ugly either (I guess depending on
how you "grew up"). Lisp for people who can't program without braces ;)

~~~
watmough
Oliver Steele has written a great functional programming library that adds
list comprehension and textural/literal lambdas to Javascript.

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...

~~~
michaelneale
Man I wish I had a name like "Steele".

"Guy Steele" - now that is a name that demands greatness just by the force of
the name.

~~~
pg
_Man I wish I had a name like "Steele"._

So did a famous Soviet political leader.

------
jdavid
C#

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.

------
gibsonf1
Lisp - for the sheer power and enjoyment of using it

~~~
ijoshua
If you give someone Fortran, he has Fortran. If you give someone Lisp, he has
any language he pleases.

~~~
parbo
But as coffeeaddicted said above: if you give someone C/C++, he can implement
a lisp interpreter easily and then have any language he pleases..

~~~
ijoshua
Given Lisp, I can implement a Lisp interpreter easily:

    
    
        (loop (print (eval (read)))

~~~
parbo
Yes, but can you write a standards-compliant C++ compiler?

~~~
davidw
Easily, because in bizarro-one-language universe, I also have an infinite
supply of monkeys. Hah!

~~~
euccastro
Put one monkey to work on C++ and assign the rest on Hamlet. Oh, and make the
C++ one use a typewriter too.

------
kirubakaran
If you had to pick one single tool to use from now until the end of time,
which one would you pick?

 _Choices:_

Hammer, Drill, Screw Driver, Saw.

~~~
brent
Poor analogy. These are, for all intensive purposes, tools for mutually
exclusive tasks. Programming languages are in general for the purpose of
writing programs. While they may different slightly in capabilities they are
for one purpose. A "better" (IMHO) analogy along those lines would being
choosing a handsaw, bandsaw, circular saw, or kitchen knife.

~~~
staunch
No insult intended:
[http://www.urbandictionary.com/define.php?term=For+all+inten...](http://www.urbandictionary.com/define.php?term=For+all+intensive+purposes)

~~~
brent
:-O Yikes. How embarrassing. No insult taken. I have pointed this out in
other's writing. Funny how easy it is to slip and type mistakes like this when
you're rushing out comments. Good catch...

------
michaelneale
Lisp - its not really a language to much as a meta tool to allow you to build
DSLs to solve your problem.

------
Zuider
Haskell - If I was in some timeless eternity I wouldn't have to bother with
monads. Otherwise if I get bored I might hack together a big bang with Lisp.

~~~
jfoutz
As tempting as lisp is, I think i have to throw my hat in the Haskell ring.

Lisp lets me turn pure thought into code, as it turns out a good percentage of
my thoughts are pretty crappy. Haskell fixes that.

------
ivankirigin
Blub. Why choose a lesser evil?

~~~
ijoshua
Whatever language, I just hope it comes with decent documentation.

~~~
ivankirigin
Blub's is the best, as far as I can tell.

------
ksamuel
Since the question specifically includes libraries, I would pick the language
with the best selection of useful libraries, and the largest community of
users actively creating new ones. For my money, that would be Java -- even
with all eternity to write my own libraries, I'd prefer have the option of not
doing so, so that I can focus my time on the areas where it is important to
roll my own.

------
Kaizyn
If I could only work with one language, then I'd have to say Forth. While I
don't know this one nearly as well as any of the others, this one allows you
to work at the assembly instruction level up through the level of abstraction
of languages like Python/Javascript. Lisp on LispMachine hardware would offer
you the same sort of advantages.

The C and D languages look like they might also be fairly good choices.
Everything else doesn't seem to give you the flexibility to go down to the
metal while also having the ability to move up to much higher levels of
abstraction.

------
rmason
Coldfusion. Name another language supported by three commercial vendors plus a
fourth open source version (smithproject.org)? My goal is simple - rapid
application development.

~~~
paulgb
"Name another language supported by three commercial vendors plus a fourth
open source version."

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.

~~~
BrandonM
Not to mention Lisp, which has no fewer than 8 commercial and 10 open source
implementations listed here:

<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.

------
henning
Do you have to stick with a single implementation (once you choose MRI you
couldn't switch to JRuby) or just the same language?

Probably Lisp or some other highly growable language.

------
entelarust
python

~~~
sriram_sun
cpython, jython, IronPython, pypy or stackless? :)

~~~
marcus
Those are implementations not languages, the language is the same language.

And when people don't mention a specific implementation they usually mean
CPython.

~~~
eru
You are right. Partially. As far as I know Stackless introduces some new
concepts.

------
fogus
I was half tempted to pick Python, but I suppose my true answer would be C.

------
jimbokun
Lisp.

------
cheponis
Verilog. You software weenies don't seem to understand that your fluffly
abstractions need to run on real h/w. So I'd rather have control at the lowest
level.

------
himanshu
I am still learning many things about python but I think it would be the one
language I would choose for the rest of my life.

------
sriram_sun
Don't Care! I know I'm going to cheat! :)

------
kirubakaran
What happens if I don't pick anything?

~~~
watmough
You will be forced to maintain poorly written C++ for the rest of your days.

Quote from some guy at Continental. "It wasn't a memory leak, it was a memory
faucet!"

~~~
emfle
The nice thing about C++ is that memory leaks are easy to fix. Valgrind is a
pretty bad-ass tool.

In garbage collected languages leaks can be very hard to track down. And they
do happen from time to time.

------
nreece
C# (with MS .NET on Windows, ASP.NET on the web, and Mono on *nix)

------
engtech
ASM

because if I don't have ASM, I'm not going to get much of anything else done.

~~~
tarkin2
I was going to chose this as well because eventually I'll want to interact
with new (and exciting) hardware. I think that's the overriding concern.

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...

~~~
boredguy8
That's easy: Motorola 68000

------
chaostheory
are you trying to start a religious flame war on yc news?

~~~
watmough
I don't know about Flame War, but I think it's an interesting question.

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.

------
rmason
@kajecounterhack

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?

------
kashif
Python till I die baby!! And then some...

------
mynameishere
Java, because I don't have a trust fund.

------
tuxiano
python in this world, lisp in paradise

------
dima
Erlang.

------
kajecounterhack
@rmason -- coldfusion?

its DEAD.

quick application development...hmm. Some other language + framework would be
more like it.

I like C++ or lisp.

