
The 3 Programming Languages you need to Know - mathgladiator
http://blog.mathgladiator.com/2010/11/3-programming-languages-you-need-to.html
======
jrockway
Meaningless. I do not have a thinking language or a bread and butter language
or a GTD language. I have apps (or tasks) that involve thinking, or are "just
programming", or are "just get it done".

Sometimes I write quick scripts in Haskell. Sometimes I write them in Perl.
Sometimes I write complex web applications in Haskell. Sometimes I write them
in Perl. I choose the language based on good libraries for the task I am
trying to achieve? I use Perl for network servers because libev performs
better than GHC's select-based threads. I use Haskell for things that need to
start up quickly. I use Perl for glue.

I don't think in Perl or Haskell or C or anything. I think in programming. I
often find a nice way to express what I mean in the language I chose. Some
problems look nicer in Haskell than in Perl. In the end, though, it's just
programming. And while the programming part is 90% of the work in creating a
working application, the other 90% is interacting with the outside world built
by other people. Elegant syntax and beautiful algorithms are meaningless if
you can't connect to the Foo server and get your data.

Incidentally, I always use C for libraries that need to be used my many
people. C is not my favorite langauge, but I've accepted that if I manage
memory correctly (client always allocates, data structures are structs with
foo_ok flags) and don't use cstrings, C is not that bad. You just kind of tell
the computer what to do, and it gets done. And then I can use it from Perl and
Haskell with only a few more lines of code. And you can use it from OCaml and
Python with just a few more.

~~~
loewenskind
>I don't think in Perl or Haskell or C or anything. I think in programming.

This is a good point, I tend to do this as well. I think up how I want to
attack the problem first and then how to translate it into the language I'm
going to use.

The only thing that sounds strange to me is that in every situation you end up
with either perl or Haskell. Is this a job constraint? I would think, for
example, that in certain cases Erlang might be the best choice if one is doing
work that lends itself to message passing, object database, etc.

Personally, after I've come up with how I'm going to do something I tend to
choose the language that will be the least amount of work (constrained by what
languages are an option of course, in the case of programming for dollars).

~~~
jimbokun
"The only thing that sounds strange to me is that in every situation you end
up with either perl or Haskell."

And C.

Perl sounds a little bit like his "get things done" language.

"I choose the language based on good libraries for the task I am trying to
achieve."

With CPAN, that is going to be Perl the most of the time, certainly much more
often than Haskell or C.

C sounds a little bit like his "bread and butter" language:

"Incidentally, I always use C for libraries that need to be used my many
people."

Not exactly the same concept, maybe, but the importance of working on a team
effectively is there.

I will have to take his word for it the jrockway does not have a Happiness
language. But Haskell is certainly a good candidate for one.

Maybe a better definition of a Happiness language is a Just for Fun language.
What language do you gravitate towards when you do not have a dollar
denominated task in front of you, but just want to have some fun on your
computer?

------
edw519
Hey you kids, get off my lawn!

    
    
      1960s:  
      Happiness Language:    Lisp
      Hack-it-out Language:  Assembly
      Bread and Butter:      COBOL
      
      1970s:
      Happiness Language:    Lisp
      Hack-it-out Language:  FORTRAN
      Bread and Butter:      BASIC
    
      1980s:  
      Happiness Language:    Lisp
      Hack-it-out Language:  C
      Bread and Butter:      QBasic
    
      1990s:
      Happiness Language:    Lisp
      Hack-it-out Language:  C++
      Bread and Butter:      Visual Basic
      
      2000s:
      Happiness Language:    Lisp
      Hack-it-out Language:  C#
      Bread and Butter:      PHP
    
      2010s:
      Happiness Language:    Lisp
      Hack-it-out Language:  Python
      Bread and Butter:      Ruby
    

[EDIT: Added "s" to change significance from year to decade.]

~~~
ced
Was there really a time period where BASIC and QBasic were bread and butter
languages? I thought they were toy languages, like Logo.

~~~
edw519
_Was there really a time period where BASIC and QBasic were bread and butter
languages?_

Yes. From the time they were introduced until today.

 _I thought they were toy languages..._

Don't kid yourself. I am aware of 3 different full blown enterprise packages
written in 100% BASIC. Inventory, accounting, production, order processing,
ERP, CRM, etc. still running multi-billion dollar companies all over the
world. Now here comes the good part...2 or them were written by 2 people and
the third was _written by one person_.

This thread started out a little in jest, but there is (and always was) a
moral to the story: You can write almost anything in almost any language. The
proficiency of the practitioner is way more important than the tool being
used.

~~~
ced
Good to know... but that's not the description of a "bread and butter
language", at least, not by the definition in the OP. Or else, Lisp, Haskell
and Prolog would all be BBLs! I wasn't around in the 60s to witness software
development, but when I think of a BBL today, I think: Java.

If you want to revise your history made in jest, I'd be curious to see the
result.

~~~
steveklabnik
No way, it's the exact definition:

> This is the language that you can use to keep yourself alive when life hands
> you lemons. This is the language that you know just in case you need to
> hustle yourself to provide for yourself and your family.

If you're the one dude who wrote an entire package that runs a billion dollar
multinational, you can pretty much charge whatever you want. It's like the
ultimate job security. Any changes have to be made through you.

~~~
ced
_If you're the one dude who wrote an entire package that runs a billion dollar
multinational, you can pretty much charge whatever you want. It's like the
ultimate job security. Any changes have to be made through you._

That's true regardless of the language.

~~~
steveklabnik
Absolutely. But that's why BASIC is his bread and butter.

~~~
ced
Ah, so that's where the confusion comes from. I thought that edw519's post was
about "The _typical_ bread-an-butter language in the 70's, in the 80's, etc."

I'd still be curious to know what were the _de facto_ languages to get a good
salary in the 60s, 70s and 80s.

------
SkyMarshal
One of the best related comments I've seen on this topic was by coffeemug a
few weeks ago:

<http://news.ycombinator.com/item?id=1747713>

 _"1. Be good. Be very good. Don't be the "front-end guy" or the "back-end
guy", or some other "guy". Once you know what you want to build, building
software is about five things: algorithms that solve your problem, programming
languages that express your algorithms, computer architecture that makes your
algorithms run efficiently on real hardware, the practical toolchain, and the
management of complexity of real software. So study algorithms, and then
graduate algorithms, and then advanced graduate algorithms. Do every challenge
problem online. Study programming languages to express those algorithms. You
can get away with three: C, Lisp, Haskell. Everything else is crud. ..."_

I interpreted that to mean that C, Lisp, and Haskell are best at expressing
the most difficult algorithms and concepts in computer science and software
engineering, while simultaneously giving one the conceptual understanding and
ability to quickly use easier languages like Python or Ruby for glue, utility,
etc.

~~~
silentbicycle
I'd suggest ML rather than (or as a complement to) Haskell. The pervasive
laziness in Haskell makes it rather unique - sometimes in a good way, but it
means that algorithms often don't translate well to non-lazy languages.

ML is just as good for algorithms & complex data structures (H-M+ inferred
static typing, pattern matching, etc.), and has optional laziness (in OCaml,
and IIRC as an extension to some SML implementations), but is usually easier
to translate to more conventional languages as necessary.

~~~
SkyMarshal
Thanks, that's good to hear. I'm working through the Little MLer right now.
Good intro, but I'd be interested recommendations for other good books on ML.

~~~
silentbicycle
_The Little MLer_, first and foremost - it seems to be the best intro to the
ML-style type system.

My ML experience has mostly been OCaml-flavored. The best OCaml book I've seen
is _Developing Applications with Objective Caml_ (In French, but a free
English translation is online at <http://caml.inria.fr/pub/docs/oreilly-
book/html/index.html>). It covers a slightly older version of the language,
but that mostly impacts libraries.

Andrew Appel's _Modern Compiler Implementation in ML_ and _Compiling with
Continuations_ are both great compiler books, which happen to use SML for the
code.

Joshua Smith's _Practical OCaml_ is bad. _Really_ bad. I was shocked. Avoid.

Chris Okasaki's _Purely Functional Data Structures_ is a great data structure
/ algorithm book, and uses SML (but has an appendix with Haskell versions).
Also quite good.

Finally, experience with Lisp, Prolog, and Haskell carry over to ML somewhat,
if you've used those.

~~~
SkyMarshal
Great list, thank you. I've been eying _Purely Functional Data Structures_ on
Amazon, good to have a HN testimonial on that one. Will add that to my
shopping cart for the next batch I buy.

I've also been looking at _Modern Compiler Implementation in ML_ , but have no
experience in compilers (no courses, work, anything). Should I read Aho first,
or is that one I could dive right into?

~~~
silentbicycle
> Should I read Aho first, or is that one I could dive right into?

I haven't read the newer edition of the dragon book, but MCIiML is a _much_
better starting place than the old dragon.

Relevant recent comments: <http://news.ycombinator.com/item?id=1820858> (on
parsing + how I feel about the dragon book)
<http://news.ycombinator.com/item?id=1822515> (more book, etc. suggestios)

~~~
SkyMarshal
Great, thank you!

------
CoreDumpling
I strongly suspect that these three are not intended to be mutually exclusive.

For me, Python has at some point or another been in each category, though at
most two simultaneously.

And for those of us who do web development, "bread and butter" can easily
include a half dozen languages or more. After leaving a project where I
personally (no joke) used AS3, Awk, C, C++, C#, Java, JavaScript, Perl, PHP,
Python, and SQL (sqlite, MySQL, and Postgres!) [1], my current position is
just a trivially "polyglot" mix of C++ and Java desktop apps. Before that, I
was constantly afraid that I'd forever be doomed to be a jack of all trades,
master of none, but now the majority of my time is gobbled up by languages I
don't like very much. Can't have it both ways...

[1] mostly by accident, as the powers that be could never make up their minds
about what they actually wanted

~~~
hartror
Yeah that was my answer:

Python Python Python

~~~
codefisher
Mine was similar, Python Python C/Java. Though there are half a dozen others
that I am perfectly comfortable with.

------
drblast
Lisp is my happiness language, and everything else isn't. So for me there are
really two types.

Every language that's not Lisp, while obviously inferior, usually has some
domain-specific use.

I do get a huge kick out of C and assembly when I get the chance to do
something low-level. It's a lot of fun to get in there and make something
totally non-portable that runs 1000 times faster than the equivalent C++
program.

Getting small things done quickly used to mean Perl, but recently I've started
to use Lisp for short scripts because Perl's built-in data structures are so
poorly implemented. Last week I was playing around with parsing huge volumes
of U.S. census data, which should have been Perl's bread and butter, but ten
lines into the Perl script I missed map and nested lists so I switched to Lisp
and was done in short order.

I've done a few things with Python, but nearly every design decision they made
early on rubs me the wrong way.

I like Javascript for the same reasons I love Lisp. I have a feeling I'd
really like Haskell if I could find the time to learn it fully.

And then there are the languages I consider to be abominations, like C++ and
Java. Still, they have some great IDE's and libraries which make up for the
language in some cases. I haven't gotten around to C# or F# yet. I don't know
if I want to.

There are so few honestly awful programming languages. I have been forced to
use a few, including Visual Basic for Applications, Matlab script, and a few
other proprietary domain-specific languages that I've long since forgotten.

So three languages? Pssh. Learn as many as you can, enough to complete a
useful project or two in each. After you do that, you'll realize that Lisp is
the best by far and you've wasted most of your time. But at least you'll KNOW.

~~~
loewenskind
I agree with much of what you've said but every language is not inferior to
Lisp. I would say Haskell is on par (in some ways superior).

The way I rate the power of a language is based on how many "patterns" you
need when using it. For example, I find Smalltalk an extremely powerful
language but it does have one weakness: dispatching on more than one type
requires a pattern (e.g. double dispatch, visitor, etc.). CLOS doesn't have
this limitation. But Lisp does have a pattern that Haskell doesn't have:
delayed evaluation. Every time you need it you have to reach for a closure or
a macro and each of these have design side effects (e.g. macros can't be used
as first class functions). Haskell doesn't have this problem because delayed
evaluation is how the language works by default.

~~~
nickik
Clojure has some lazy stuff but I agree that Haskell is better in some ways
but Haskell has no cool makro-system.

It comes down to static vs. dynamic.

~~~
plesn
Haskell has a cool macro system : template haskell. So it comes down to
typing.

------
cubicle67
Ruby Ruby Ruby

For some reason I feel this taints me with a stereotype that doesn't
necessarily fit, so (somewhat defensively) I'd like to preempt that by saying
I've been writing code for the last 25 years (give or take a year or two).
Also, I've never been to Starbucks and I don't use TextMate (but I do own an
aging MacBook).

~~~
hartror
I was under the impression that Ruby doesn't fit the kitchen sink aspect of
the list. It certainly is a bankable language right now, especially if you are
a web dev, and it seems to make lots of people happy. But my impression is the
library support is still in the growing stage compared to perl/python.

~~~
swombat
Ruby gems provide enormous amount of functionality. You can do almost anything
you want with Ruby, and even when there isn't a library to do exactly what you
want, there are enough supporting libraries for you to quickly write the
library you need.

~~~
hoggle
I concur writing new gems is a good idea as CPAN is often the only reason I
have to return to perl for some quick tasks. As CPAN is the grandfather of all
package management systems and probably of (inet) shared libraries too it is
perfectly clear why rubygems lacks the amount of available solutions to
certain problem spaces. Doesn't mean we cannot get there some day :) So I'd
say I. let's build more & sometimes better gems and II. use wrappers for C
libs where money/time constraints are too significant to DIY (e.g.
<https://github.com/ffi/ffi/wiki/Basic-Usage> ) Bottom line: try to share and
contribute whenever possible. Love your language diversity :)

------
djcapelis

      Fun: C
      Hack it out: BASH
      Bread and Butter: LaTeX
    

Welcome to systems research in academia.

~~~
utoku
Kind of funny in the sense that the bread and butter language of the academia
lacks a grammar.

------
endlessvoid94
Seriously, Python fits the bill for all three categories for me.

------
clinton
I like how MathGladiator managed to say something meaningful about programming
languages and mostly steer clear from inciting the language war the headline
implied.

~~~
stcredzero
Really? I took it as a "clever" hack for flattering everyone that actually
indicates the author has even more to learn. To wit: there's a lot more
relativism involved that one might expect at first inspection.

For me, Perl would be a "keep me alive" language. Yet I recognize that there's
a lot of truly esoteric and impressive stuff in Perl. My "bread and butter"
and my "hack it out" has been Smalltalk, which to a lot of people would be an
esoteric "happiness" language. As it happens, it's a language with substantial
libraries with which one can get some serious work done. Many languages have
played two or all three roles for many different people. Also, lacking a
"bread and butter" language is not a sign that someone has difficulty working
in teams. It can also be a sign that someone is very good at navigating career
pitfalls.

Often what a programmer thinks of a language and how they use it really says
more about the programmer than it does about the language.

------
vankap
No one language can keep me happy for a long time. So my happiness language
changes every year.

GTD - Python (Also my happiness language)

Bread and butter - Java (although that might change too given the recent
developments)

~~~
bigiain
My happiness language changes regularly too - at the moment it's Arduino's
cutdown c/c++ language. Since I got that bit of the hardware working it's
going to be Pocessing's java-a-like language next[1]. (A month or two back it
was Atmel assembler).

I find my "bread and butter" and Getting things done" languages are both Perl.

[1] Now I've got Arduino driven lasers-on-servos, I need to implement face
recognition on live video next...

------
thecombjelly
Actually a GTD language means that the Happiness/Bread-and-Butter language is
not powerful enough. If your Happiness/Bread-and-Butter language is powerful
enough, and you really do use it whenever you can, then you should know how to
either find all the libs that you need, or have hacked together the ones that
you can't find.

Second, the Happiness language should be your Bread-and-Butter language. If
you have a few years to work at learning a language really well, you should
devote it to the most powerful language that exists. If you make your Bread-
and-Butter language the most powerful language, and your Happiness language
the same, you will have a very large programming lever and will be able to get
the most done with the highest quality.

------
loewenskind
Happy: Lisp, Haskell, Smalltalk, Ocaml, Self, Newspeak, Erlang

Hacky: Lisp, Python, Bash, Ant

$$$ : C# at the moment, but this one doesn't matter much in practice. My
selling point is that with my language experience I can come up to speed on
most any language quickly.

Personally I think it's important to learn the most advanced (and pure to that
category as possible! [1]) language in each category to get the most tools in
your tool belt you can.

OO: Smalltalk (classic OO) and Self (prototype, changes a lot about OO), Lisp
(most advanced OO system I'm aware of and different than the rest) Functional:
Haskell and Ocaml (for functors).

[1] Multi-paradigm is good for practicality but gives you an easy out when
learning something new.

------
cageface
I'm a lot more interested in algorithms than in languages these days. I used
to be a big language aficionado but I get a lot more out of, for example,
teaching myself a new machine learning technique than picking up another
language now.

------
DanielBMarkham
Wow, the generalizations are running strong and swift with this article.

If I ever sit around wondering about what your "happiness language" is, you
guys all have my permission to throw a pie in my face.

Seriously, one can personalize and over-generalize these things very easily.
Programmers are famous for taking three examples and trying to build a
templated framework of reality around them. It's probably the worst stupid
people trick we have..

I love OCAML and F#, C++ and C#. I can tolerate Javascript and VB in a pinch.
I do databases and all sorts of web programming.

But no thanks. I do not need or have a happiness language.

------
kamechan
3 languages you need to know: 1) a functional language, 2) an imperative/OOP
language, 3) an interpreted language.

------
safij
I guess "Happiness language" and "Hack-it-Out" might overlap.

Happiness - LISP is becoming a BLISS!!

Hacky - Python :):)

Day Job - Very sadly :( :( .... JAVA!!

------
kapilkaisare
I use a combination of Python, Javascript and Lua. I use Lua with my
editor(Textadept), Python for most server side work and Javascript client
side. Am currently working on using JS server side as well.

Three languages is too limiting though - I plan to reintroduce Haskell and
Scheme at some point into the fold.

------
buster
Actually: no.

I don't get the reasoning behind this. If there should be some languages
everyone should atleast now, it would be one of each of these categories:

    
    
      hardware (asm or atleast some basic knowledge of how the thing works you program for)
      low-level (C, good base for procedural programming)
      high-level (java, good base for object oriented programming)
      script (.pl, .py, lua, etc.)
    

Somewhere in between there may be a functional languague (erlang, lisp,
haskell, etc.) but i, myself, never needed one. What really came handy overall
is to know some basic stuff (assembler) for insight in how stuff works, plus C
knowledge because the tools, libraries and languages you use are likely based
on C. Plus Java, because it's almost everywhere and some script language to
get things done ;)

~~~
vilya
Even if you never use it in directly, knowing a functional language can give
you a new way of thinking about how you structure your code in procedural or
OO languages. That can sometimes lead to more elegant code. Apart from that
detail I agree with you.

~~~
buster
Yes, i guess so. It's on my list of things to learn.

------
eliben
1\. Python (used to be Lisp) 2\. Python (used to be Perl) 3\. C++ and
occasionally Python

------
ryanwaggoner
I've got my bread-and-butter (PHP) and Python is rapidly becoming my Hack-it-
out / GTD language, but I don't have a happiness language. However, Python is
making me pretty damn happy...maybe that means I'm just a practical
programmer.

------
cowpewter
Happiness language: Actionscript 3

Hack-it-out: Python

$$$: Sadly at the moment Javascript (ugh)

I realize in the current 'zomg everyone hates flash' environment my choice for
happiness language might make people look at me a bit strange, but AS3 is
really a nice language. As ECMA dialects go I would rather write for the AVM
than the browser any day. And when I think in code, it's usually Actionscript.
Three years of hard-core Flex hacking will do that.

Python shows some signs of edging its way in as a replacement for my brain-
speak, but I sadly don't use enough in my job right now for it to take over.

------
devinfoley
Like others, for me these overlap a lot.

My happiness language isn't the one I think in. I think in Java, and a bit of
Javascript for functional programming. However, neither of these are very fun
for me. When I have spare time to hack for fun, I'm usually using Ruby or
Scala.

My GTD language is PHP, and Java when I need things PHP doesn't provide.

My $$$ languages are Java, PHP, Javascript, and Objective-C (iOS). All of
these are languages I'd rather not be coding in, but it's where the jobs are
mostly.

There is a lot of overlap there. I think it's because for me productivity IS
fun.

------
8ren
_Language you think in_ is constraining... unless your language is the best
that could ever exist. Of course, if you can only think in it, you couldn't
imagine anything better.

Mathematical notation might be a better language to think in than any
programming language; but even that is constraining - since mathematicians are
constantly inventing new notation, and many mathematicians think in pictures
or even... intuition.

Of course, he really meant _for coding_ ; I just wanted to note the bigger
picture.

~~~
bitwize
> unless your language is the best that could ever exist.

Mine is Scheme, so, yeah. :)

------
fleitz
Happiness: F#

hack it out: ruby

Bread and butter: C# / php

~~~
trezor
Working mostly with .NET, I'm really trying to get a grip on F# these days. I
have no ambitions on becoming as fluent as I am with C#, knowing pretty much
all the ins and outs of the language, but just good enough to fool around with
it and getting stuff done(tm).

You wouldn't happen to know any good recommendations for books/online
resources to get up to speed quickly? How did you get into the language to the
point that it's now your happy language?

~~~
fleitz
Like every language I learned to program in I had a project and then decided
to use that language with that project. I have to admit the first project was
killer, it took me a long time to even get the code compiling. But once I had
finished and looked at the lack of code I was sold that this was the way to
go.

There is a really cool tutorial on writing the game of life in 32 lines of F#
or writing the game of life that executes on the GPU using a similarly small
amount of code.

<http://tomasp.net/blog/accelerator-life-game.aspx>

Start with a small project and learn the language, once you have a quite
specific 'How do I do X?' question there are plenty of examples. I've never
been the type person who could pick up a language from a book.

If you're doing ASP.NET google for F# + MVC + NHAML. There is a great tutorial
for getting an ASP.NET project going in F#.

I'd say the primary thing that you need to learn for F# is how to convert
loops to recursive functions and vice-versa. Also, look into the pipe
operator, and figure out how to abuse the hell out of Seq.reduce and Seq.scan.

If you like LINQ and lambda's in C# you'll probably like F#, I'd say that's
what really got me interested, I ended up loving LINQ and lambdas and wanted
to know more about this whole F# deal. Using the pipe operator makes the whole
thing look much more pretty IMHO.

    
    
      [0..10]
      |> List.map (fun x -> x*x)
      |> List.reduce (fun a b -> a + b)
    

vs.

    
    
      Enumerable.Range(0,10)
       .Select(x => x*x)
       .Aggregate((a,b) => a+b)

~~~
gcampbell
Minor refactoring note, since F# seems to bring that out in me: you could
change the last bit to "List.reduce (+)". Or you could do the whole thing as
"[0..10] |> List.sumBy (fun x -> x*x)"

------
cactopi
1\. Euskara (Basque) 2\. English 3\. Mandarin

~~~
fiveo
I think people downvote you because the topic is about programming language,
not human language.

I have to agree with you though, knowing English and Mandarin are better (at
least for me) than knowing programming languages.

~~~
cactopi
Ha, actually my point was that human languages ARE programming languages.

But this just demonstrates the general sentiment of the community -
programming languages should only be thought of in one, narrow way.

Ok!

~~~
st0p
I don't want to turn this into a philosophical debate, but if what you are
saying is true (I hope not), the community is wrong IMHO.

Human languages defines what concepts we are able to think and reason about. I
believe that George Orwell showed this perfectly in 1984. By taking away a lot
of vocabulary, you are taking away a lot of ways of to express yourself. I
think that the term "expression" in regards to programming languages explains
why this is important.

I only know Dutch, English and Latin (plus just enough German and French to
get around when I´m buying a bread or asking for directions) so in no way I've
experienced how a language like Mandarin changes the way in which your
thoughts take shape. However, I did have the experience of playing around with
Haskell and Lisp (not saying I'm experienced or whatever, I've just toyed
around with them in my free time) and they did change some things of how I
percieve and think about code. I can´t write code in these languages where I
work, but just learning them (and learning their different, but just as valid,
viewpont on programming) has changed the way I think about some problems and
how I should solve some problems.

Language (whether it's human or programming) is all about expressing ideas in
the broadest sense of the word. Knowing more just let's you express more...

~~~
cactopi
How do those languages you mentioned as knowing (the human ones) fit into the
3 categories described in the original post?

------
greenlblue
Anything with first class functions works for me. I pretty much program with
closures and have no idea what classes and objects mean. Incidentally the
first language I really learned was Ruby but I fell in love with how it
handled blocks/lambdas and I haven't really looked back since.

~~~
hartror

        ... have no idea what classes and objects mean ...
    

I hope you don't have to look for a job with that resume!

~~~
greenlblue
Looked at any clojure, erlang, javascript, scala, etc. postings lately?
Objects and classes are out. Functional programming is in so I'm in good
company and you don't have to pray for me at night.

------
kaylarose
Happy: Ruby, javascript Hacky: Ruby, bash BnB: php, javascript, java

------
boyter
Happiness - Python or oddly PHP Hack it out - PHP for web or Python for
anything else Bread and Butter - C# and Java but I throw in Python to keep me
sane

------
nivertech
* My own DSLs

* Erlang,Python,Octave/Matlab,awk

* C/C++,Java,JavaScript,VBScript,PHP,bash

------
nickik
Clojure --> FUN! mmhh maybe bash for hacky stuff and VB to make money <\--
bäähh

------
Corrado
I guess mine would be:

Ruby - happy language

Perl - hacky language

Java - $$$ language

~~~
fiveo
I think you can get more $$$ with PL/SQL, T-SQL, or ABAP.

~~~
loewenskind
You'd be wrong. There is a lot of money in Java right now.

~~~
arethuza
I'm pretty sure the average ABAP developer earns a lot more than the average
Java developer - but it's a pretty specialized niche.

Of course, you'd have to paid a _lot_ to do it.

------
cgopalan
Happiness: Python, Scheme, Erlang Hack-it: Python Bread/butter: C#

------
nolite
Haskell

Python

C++

------
fragmede
Python, Bash, PHP

------
soitgoes
For me it's:

Perl - Hacking

C# - Bread and Butter

Python - Happy

Although, there's quite a bit of overlap.

------
mkramlich
C is the only language that there's a strong argument for it being a
fundamental language to know. Because almost every other language, OS and
device driver is written in it. Not everything, of course, but it's a huge
percentage.

I really _like_ some other languages other than C. But it's hard for me to
make as strong of a case for any other language as a "must know" language.

~~~
tetha
I think this difficulty to make a strong point towards a single other language
is that the area where languages excel are usually populated by multiple
languages.

Do you want to look at a good object oriented language? Take a look at one of
Python, Java, C#, Ruby and probably Perl with the right modules.

Do you want to take a good look at functional programming? Look at one of
Haskell, OCaml, SML or something along these line.

Do you want something to prototype rapidly? Python, Ruby, probably Scala.

Do you want web programming? Ruby on Rails, Django, PHP, one of those.

Do you want embedded programming? Well.. look at C. Or C++ with C embedded, as
some maniacs use it.

------
mkramlich
happiness+GTD+bread&butter = Python at the moment, thankfully

------
jijoy
Python Python Java .

