

Ask HN: What language do you recommend I learn? - C1D

Hello,
I'm looking for a new language to learn and don't know what to choose. I've been looking at Ruby, Haskell, Lisp and Go. I'm interested in a language that will increase my skills at programming, that will be fun to learn, challenging and will result in nice looking code.
Thanks :)
======
support_ribbons
I know that you asked for a new programming language to learn.

But if you want to increase your skills as a programmer I think that learning
algorithms and data structures that you don't know is better for your
development than learning new programming language ( this book is a good one:
<http://en.wikipedia.org/wiki/Introduction_to_Algorithms> ) .

While learning hard algorithms and data structures you will also learn how to
think in a new ways. Also I recommend reading about concurrency and parallel
programming ( general texts, nothing language specific ).

This will help you in writing better code in any language and also in
understanding code written by others.

------
C1D
Hey. I just found the book Seven Languages in Seven Weeks. I guess I could
study that and select a language that I enjoy and master it. It goes through
Haskell, erlang, scala, io, prolog and ruby.

------
evanx
Javascript is great fun to play with in one's browser - you can edit, and
reload and voila :)

Recently i've been playing with the HTML5 canvas, drawing sequence diagrams
and network diagrams programmatically - and can't remember when i last had so
much fun programming - took me back to my teenage years and my first programs,
drawing "graphics" on those cathode ray tubes ;)

Being a biased Java developer, i would otherwise recommend Groovy.

------
bjourne
You can't go wrong with Factor: <http://factorcode.org/>. It's so different
and totally out there that you will definitely learn something new. Plus, it's
practical. :)

------
bayesianhorse
All of these are valuable to learn. Except maybe ruby, which is a cute
language, but slower than Python, less principled than Haskell and has less
history than Lisp.

------
tjr
What languages do you already know?

~~~
C1D
Python, C, C++, node.js/JavaScript, PHP and C#.

~~~
jfaucett
By "know" would you say for example you can use well function pointers in c
and other advanced topics in all the languages you list? for example can you
tell me what this does?

    
    
       int add1To2(int (*adder)(int, int)) {
        return (*adder)(1,2);
       }
    

Im just asking because I think theres a lot to be gained by actually digging
deep into the internals of languages you already work with or use. I'm doing
this with ruby right now reading through Matzs source. Anyways, Id suggest
ruby since its my personal favorite :)

~~~
C1D
The programming languages that I could say I know fully are PHP, node and
python. I only studied some basic c and c++ so no, I can't explain your
example. Also thanks for suggestion about ruby.

------
dakrisht
Well, you know C (and variants) so learn Objective-C

Also Ruby or Python.

------
feralmoan
Erlang, Scala

------
6d0debc071
Uhm, if you've just been learning languages as your way of learning to program
I'd actually recommend that you go and look at an open source project or write
a significant program yourself. Learning how a large project works, especially
if you're trying to work on it with others, will teach you a lot. I'd also
recommend you look out some books on problems that computer programs are used
to solve rather than just picking up another couple of languages - learning
about relational databases for instance is... yeah. It's more the theory side
of things and some of it's awesome but I'm not sure you'd run across them
picking up languages here and there.

That aside, most of the languages you seem to know are - by and large -
imperative. I'd recommend you learn a functional language like Haskell or Lisp
because that's a different way of looking at things. It will teach you about
functional abstraction which is a really good way to get to the heart of a
problem and avoid doing the same pattern over and over again in different bits
of code. Some of the things you can do in functional languages are incredibly
beautiful.

Ruby ought to make you really familiar with learning how to use other people's
code and has an incredibly friendly community, at least as programming goes =p
Learning to use other people's code is a big thing in programming - as a
general rule, never program your own version of something unless you think you
can do it better in some way, their interface is awful, or you want to know
how it works.

~~~
C1D
Thanks for that. I will go look at some large scale open source projects and I
will take a look at some functional programming languages. I'm will also look
at relational databases. Thanks.

------
claudiug
java/groovy/scala/haskell/clojure/python no php

------
happy_dino
Scala.

