Poll: Which programming language do you plan on learning next?

27 points by prakash ↗ HN

113 comments

[ 0.26 ms ] story [ 134 ms ] thread
I think it's awesome that I've only just begun to learn python and there are all these other languages out there for me to check out.

I haven't even heard of half of these, so I know what I'm doing the rest of the day.

C#, F#. MPI isnt a language, it's a || programming comm library
Objective C
I missed that one, seems to be really popular now thanks to the iphone.
unfortunately. Mixing Objective-C and C and your code looks a little bit frankestein-ly, and it is impossible to avoid. The messaging pass part of Object-C is no near as elegant as erlang.
I'm not familiar with Erlang - can you give an example?
to get started: http://en.wikipedia.org/wiki/Actor_model

The actor model is a very powerful conecpt. It will become more and more revelant as multiple cores, concurrency, and scalability become more and more important.

I think that Facebook successfully used Erlang for their chat system.

Made my first foray into ObjC this weekend; my goal is to create some iPhone/Touch apps.
Objective-C here, too. It's kinda cool because I get to re-learn C at the same time.
I started diving into it 4 months ago for fun. At first, I didn't like its syntax style. In case anyone is wondering, this is what I'm talking about:

object.message(arg1, arg2) vs. [object messageOne:arg1 Two:arg2]

But now I'm really enjoying it and working at it full time.

Difficult to make a meaningful choice when only two of the options (Lisp and Ruby/python) have any familiarity to me at all.
(comment deleted)
Smalltalk
I'm currently reading a book about Smalltalk - does that count?
Why just read the book? Download Squeak - a bit far from the mainstream expectations, but it's free in the best sense. Or you can get VisualWorks Non-Commercial. (There's a very under-appreciated ASP-like web app framework in VisualWorks!)
I actually found Squeak to be a bit non-intuitive and lurid, but I have played with VisualWorks and Dolphin, to try & get a feel for Smalltalk, but I never really got my head round how things worked.

Having a book handy means I have something to turn to the next time I give it a go.

True, Squeak has bad UI color choices. Also, it's a "Burn The Diskpacks" environment. They aren't going to kowtow to any conventions -- they just want to innovate. If you can go with the spirit of that, there's some brilliant stuff in there!

Smalltalk is radically different in a fundamental way when it comes to your relationship to source code and the dev environment. All your source code changes are in something like a transaction log. When you're programming, you're just manipulating the meta-level more or less directly. When you do get it, there's a "whoa!" experience. Better yet, persevere and "get it" then go back to something like iPython. You'll get a real perspective shift!

Yeah, I actually think I really like Smalltalk-the-Language - it's a really tight set of primitives which interact in a powerful way - it reminds me of Scheme or Forth.

But being born and raised on the commandline, it's Smalltalk-the-Environment which causes me trouble. I often find myself wishing that I could just play with it like you would with, say, Ruby's irb. I find the conventions (having to highlight code and hit Ctrl-I to get it to run, and so on) quite off-putting. If I can get over that, I'm sure it'll be worth it, but it's a bit of a struggle.

The Smalltalk Workspace with the debugger, the inspectors and the whole image at your beck and call is irb/iPhython an order of magnitude more powerful!

If you want something like a command line, you can write it fairly easily. You could probably subclass it from the Workspace.

But why would you want to? Most Smalltalks have lots of context-aware goodness! If you are browsing on the class side, highlighting code and executing does it in the context of the class. If you are looking at an instance in the inspector, it does it in the context of that object instance! If you are in the debugger, writing and executing code does it in the context of that stack frame!

Those last two bits of context-awareness have been the environment where I have done some of my best debugging and coding in the past decade!

Command-line or highlight/right-click is only the medium. The message is the thing! Think of it as like adjusting to the controls of a new video game.

F# (and not OCaml)
Ocaml is another popular language that I missed. Sorry.
I'm still getting better at Python but I'm really intrigued by Erlang and Lisp. I'm not sure if I want to delve into Lisp but we shall see.

Fun fact: I've never heard of Q, MPI, and Cuda .. time to wiki em :)

Scheme (does this fit under LISP?)
No it does not... but this is my choice.
I'd say yes, because Scheme is a Lisp and I don't know any specific language that's called just Lisp except perhaps the original one by McCarthy. As far as I know Common Lisp and Scheme are the two Lisp languages in usage today.
Um...why are Ruby and Python combined?!

Creates separate choices

I thought the same thing here - unique languages with distinctive paradigms, deserving of separate choices.
My thought process was, if Python and/or Ruby is on the to learn list, they would look at both, but go with one of them.
Unless of course you already know Python and want to learn Ruby next (or the other way around).
True that; but wouldn't you be better off learning a language that is a lot more different?
It depends on the purpose of learning said language. Are you learning to broaden your horizons to explore new paradigms and such? Or are you learning a language because you're part (or planning to be part) of X group who happens to be developing in Y and you just need to be productive/marketable?
I know Ruby and want to get into Python.
Ruby and Python have some similarities but not that many. I'm getting pretty good at Ruby myself and will confess to not knowing python that well but the endless comparisons on the various blogs and forums make it very clear that these are very different languages.
Ruby and Python are definitely different languages. May want to check with the creators on this one.
I see. There definitely seems to be a connection between coming to Ruby and coming to Python, so this is a fair argument for their association.

I think that them being listed together does however muddle the value of the poll because you cannot tell how many Python and how many Ruby votes there are.

But again, I understand the logic behind their their association as I was someone who was first drawn to Ruby and then later to Python because of its proximity - I have since stuck with Python...

It's sort of a combination of the two; Lisp Flavored Erlang, for real time control.
which language are you talking about?
Robert Virding's Lisp Flavored Erlang, which, among other things, does away with records, neatens up the syntax, and enabled Lisp style macros, but is still built on Erlang, and still contains it's high quality pattern matching.

Virding is one of the original contributors of Erlang.

http://groups.google.com/group/erlang-questions/browse_threa...

Copied here:

I have finally released LFE, Lisp Flavoured Erlang, which is a lisp syntax front-end to the Erlang compiler. Code produced with it is compatible with "normal" Erlang code. The is an LFE-mode for Emacs and the lfe-mode.el file is include in the distribution. Most things seem to work but some things have not been done yet:

- The interpreter does handle recursive letrecs, binaries, receive or try. - There is no lisp shell. - Documentation!

Yet. The system will be updated as new features are added. This is the 1st release so there is much left to do.

I have include the existing documentation lfe_guide.txt in this mail. There are a number of LFE test files and a version of the LFE interpreter written in LFE as examples of code. There are also a number of issues which need to be decided for the next version and I have included a file lfe_issues.txt which describe them in this mail. Both files are in the distribution.

Note that while this this lisp has been inspired by Scheme (one of the issues) it is a NOT Scheme, it is Erlang with a lisp syntax and many nice lisp features. Not for that matter is it Common Lisp. In fact features of the Erlang engine mean that it is actually impossible to implement full Scheme of CL. No, they shouldn't be changed or added.

It was quite writing Erlang code in lisp and I could easily consider using a lisp syntax for Erlang. I suppose it depends where your preferences lye. It was also easy to get into the traditional lisp habit of using long names for everything which I personally think is not a Good Thing. Perhaps we should do AFE, Arc Flavoured Erlang, instead? Although I think they have gone too far and missed what makes programs easy to read.

Macros are very nice, and it is easy to generate LFE code, which is one of the benefits of lisp syntax.

LFE also shows that it would probably be possible to write other front-ends inspired by other languages, though why anyone should want to I don't know. Perhaps back to a real Prolog syntax again.

WOW!
We're doing real time control for vehicles, which has to handle, among other things, valve timing, fuel flow, the transmission, suspension adjustments, braking. We can't afford to have the system break, and Erlang is built for mission critical systems, giving us quality primitives for handling concurrency and software breakage.

But in Erlang records and math are kinda broken, and we needed both. Hence, LFE.

Thanks! Is there a link to the project?
My project, or Lisp Flavored Erlang?

Regardless, the answer (I believe) is, not at this time. But soon enough...

Could you describe how records are broken in Erlang?
Essentially, the syntax for dealing with them is painful.

From the Recless project page:

http://code.google.com/p/recless/

Recless is a type inferring Erlang parse transform. Instead of writing these lines:

     City = ((Project#project.owner)#person.address)#address.city,
                                                                             
     NewProject =
       Project#project{owner =
        (Project#project.owner)#person{address =
          ((Project#project.owner)#person.address)#address{city =
            'Boston'}}}.
                                                                              
it lets your write these lines:

     City = Project.owner.address.city,

     NewProject = Project.owner.address.city = 'Boston'.
self (Mwah hah hah hah hah!)
Is Ruby/Python similar to C/C++?
no.

C precedes C++ (and uses the same basic syntax) and C++ changes the paradigm to object oriented (but like C is statically typed and compiled). Ruby and Python are part of the same paradigm of dynamic, object oriented languages.

i voter for ruby/python, but i already know python well, so its ruby.
Lua

An elegant, minimalistic and fast scripting language. It's like Javascript without all the cruft.

i second that. Lua is very much fun to work with. It has actually full closures, upvars, and functions are first class citizen.

The only thing is lacking a little bit of OO design. It is duable, but OO on lua always feels a little bit hacky.

If you like Lua, but want OO, try Io:

http://iolanguage.com/

It was inspired by Lua (among others).

Love Lua too bad it's web framework is leagues behind other languages frameworks. Otherwise it's a sweet language.
thanks I will take a look at it.

I think I had the most fun and frustration at the same time programming with Lua. I love the syntax and minimalism, yet I would have loved some more support for OO. Also, there is a lack of tools and libraries, which definitely hamper productivity.

Haskell. I tried three times so far, and stalled each time once I reached monad transformers. Scratch that: I consistently stalled at understanding monads. I understand the Maybe monad, but I couldn't wrap my head around the implementation of the State monad. Then I looked at monad transformers, and they made my eyes cross. (If Haskell's syntax was just a tiny bit less jarring to my Lisp-addled eyes, maybe I'd try more often than once a year...)
Groovy (or is it considered Java)
OCaml and Objective C