Ask HN: What language do you recommend I learn?

4 points by C1D ↗ HN
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 :)

17 comments

[ 4.9 ms ] story [ 56.1 ms ] thread
java/groovy/scala/haskell/clojure/python no php
What languages do you already know?
Python, C, C++, node.js/JavaScript, PHP and C#.
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 :)
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.
(comment deleted)
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.
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.
(comment deleted)
Well, you know C (and variants) so learn Objective-C

Also Ruby or Python.

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.

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

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.