Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: What programming language are you currently learning?
38 points by khingebjerg on July 4, 2009 | hide | past | favorite | 92 comments
I would like to know what languages my fellow HN readers are currently learning/investigating, in their free time, and the criteria for choosing which language to learn next.



None. I've got enough of them. What I need to get better at is maths, signal processing, and graphics. Chiming in to reject the idea that we should spend our careers churning through languages.


Not to say you are wrong, but if one has an interest in a new or different language they should not think they shouldn't because they already know enough.

Learning a new language can also be a supplement, say learning haskell in such a way that you improve your math ability and critical thinking at the same time. Or attempting to write a project in a new language would be far more interesting say if you are burned out from a job in a certain programming language. New and different things can be very refreshing!


Agreed, although I am still learning new things about Haskell (but that's because it's still under heavy development in certain areas).


Learning another language can mean learning yet another slightly different syntax and API, but sometimes it means learning a fundamentally different model. Learning Erlang's concurrency model, logic programming, or something completely different like K can be a real eye opener, even if you don't use them directly.

I've been learning Prolog over the summer* , and while I'm not convinced I will make much use of the language directly, it has some really interesting ideas, which are largely usable in Scheme and Lua. For example, I also have a much better understanding of how unification, type inference, etc. work now -- Prolog is a DSL for that sort of thing, and having a good notation helps, much like knowing regular expressions changes the way you think about patterns.

* Via Sterling and Shapiro's _The Art of Prolog_ (which is an excellent text, IMHO) and the relevant chapters of CTM (all the more so).


(1) Haskell, because I like functional programming, and this language seems very promising (I first looked at it 10 years ago, but I gave up because the implementations seemed immature. I took another look recently, and I'm amazed by how much it's progressed since then). I especially like the way that laziness and purity enable a concise, stream-processing paradigm through the use of maps, folds, and various combinators.

(2) Lua, because it seems like the Scheme of imperative scripting languages, while still being very practical and hackerish. It also has a neat game engine (Love2d) which I'm eager to try out.


I'm learning Scala for the following three reasons (in increasing order of importance.) These just reflect my current needs, not a prescription for other people, and all three revolve around my need to add a practical language to my repertoire to reduce my usage of C++ and Java.

3. I decided to learn a language I could use on the Java platform using Java APIs, rather than on the _nix C platform using C APIs. Partly this is a matter of wanting to escape C's shortcomings; partly it's because I have my eye on a couple of upcoming projects at my company for which the Java libraries will be extremely helpful.

2. I want to learn a language that will allow me to use functional idioms and help me learn a more functional style, yet allow me to get the job done even when my functional-fu falls short. I don't want to learn a language that expands my mind but then becomes a fond memory. I hope that for many years to come Scala will be the first language I reach for when I need to get something done on the Java platform.

1. I want to master a modern yet practical language with a strong static type system. I don't do much programming that calls for a dynamic language, and I'm pretty satisfied with Python. I write a lot of code in C++; C++ and Java are the only statically typed languages that I have really mastered, and I'm dissatisfied with both of them.

Runners-up:

Clojure: not statically typed. Maybe my next language after Scala -- I really enjoyed using Common Lisp but hated the library situation.

O'Caml: great for the _nix C platform, but not for Java. Also possibly too pure to be a "go-to" language (heh.)


Ocaml isn't too pure. It's just weaker in libraries (and has no threading). It's faster than Scala in my experience, but not by more than 50%.

I like Scala quite a lot so far. The main pleasure of Haskell or Ocaml over Scala is that they can deduce all your types (even function arguments), whereas Scala supports overloading and can't.


I'm learning Scala for the same reasons. I'm also working with my professor on building a scala web framework to do stuff for which Jave EE is usually used. Whatever little I know about Scala, I love.


Javascript. I've "known" it for 10+ years, but now I think is the time to take it seriously. The web stack is getting dumber as a lot of UI and logic moves to JS inside the browser.

Databases got dumber in exactly the same way -- do you know or care if your database has good stored procedure support? Eventually it won't matter much what the server is running.


+1. It's just getting faster and faster as it becomes the focus of the browser wars, and it's not a bad language, really.


I'm fresh to JavaScript this year, but am keeping at it, and adding JQuery to the mix, this summer.


Haskell. I'm working through http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_H... which is quite a good tutorial.


Even though I complained about not being able to learn Haskell in another comment, this is the tutorial that got me the furthest. I found RWH pretty much worthless by comparison.


Erlang - why? after diving into threading in Java for a recent project, I wanted to see other ways of approaching the same problem - recommendations for other languages with powerful threading solutions?


Erlang uber alles. i love it. it just works. when i'm done and my project works, i keep wondering where all the code went.


Stackless Python is neat, but it's not really threading.


Have you looked into scala?


Haskell. Don't waste your time with Erlang.


Can you elaborate?


Objective-C. Quite a big jump from Ruby. :)


Python


Ok. That covers the rest of this weekend anyway. :)


I'm not learning any language right now, but have learned a fair share over the course of the past few years.

My general criteria is not to learn a language that is conceptually similar to something you already know unless there are professional advances to be had there. If all you know is Python, C might be good because it's lower level. Lisp or Haskell or O'Caml might be good because you'll have to program with different paradigms, etc. If I were coming from Python, Ruby wouldn't be my next choice unless I needed it for a job.


Haskell. I've already written non-trivial applications in it, but there's still so much to understand.


Haskell for me too. It's slow going, but it's already making me a better Python programmer in my real work. OCaml/F# are on the back burner too.


> making me a better Python programmer in my real work.

I found this too. Once I started reasoning with lazyness, Python's generators felt a lot more natural. The itertools module is very useful.


Haskell's let... in... construct I use heavily now, I don't miss multi-line lambdas now.


Haxe - compiles to ActionScript, JavaScript, PHP et al. Strongly typed (with type inference) and creates faster code than Adobe's AS3 compiler.

F#


Clojure.


I am learning Clojure because I know lots of "traditional" languages and want to stretch my brain in new ways. I am also interested in new ways to write parallel programs, which is becoming a bigger and bigger issue. Clojure scores well on these two criteria. I chose Clojure over Scala and Haskell, because I believe in dynamic typing over static typing. This is probably more an issue of tase than anything and I also have a high opinion of those static languages. I am very impressed with Rich Hickey's design sensibility and his goals for Clojure align well with my own.


Agree on all points.


Just wanted to say it's hard. I'm definitely not the best programmer, truth be told I haven't even programmed full time for a while, but switching from java to clojure took me at least half a year.

I'm in the middle of my first (small) full app though, and I can tell it will be worth it. With java there was a wall in productivity I simply could not brake. I wrote pieces of code sometimes as fast as I could type (similar alterations to existing software), but still I felt I did the same thing over and over again. Now I'm at the first iteration of my framework and I can already tell a lot of the code I write won't be written again.

Just an example: one of the first things I did was to brake the old web convention of separating the app into writing html and processing requests. Most of the links I write now, including forms, have the action code right there. Something like (pseudocode):

  html_button("Delete item", {
    delete_item(value); 
    return list_items();});
I'm not saying it's the way to go with a webapp, only how easy it is to experiment with different paradigms.


I would not advise this style of programming, because it creates a very tight binding between the application logic and the interface. In fact, it's exactly the problematic style caused by GUI builders that generate event handlers and ask you to fill them in.


I think clojure's use of higher order functions is very well suited for this. With only a "#" in front the code becomes a lambda function. This pretty much makes the whole concept of handler functions void - or at least trivial.

But I'm not sure if it will work out in the end... and I mixed this with liberal use of metadata and thrown away SQL too... mostly I try to go as far as I can and see where I trip. It's fun.

And it does make for some terse code. This for example is the code for changing the person responsible for a brief:

    (html-select (cons {:id 0 :name "- No account -"} 
		       (filter #(:is-account %) @users))
      :selected (:account brief)
      :onchangefn #(do
		     (passoc briefs (:brief %) 
                             :account (Integer/parseInt (:value %)))
		     (return-from briefs (:brief %))
      :onchangeparams (str "&brief=" (:id brief)))
And this really is all of it. No html, no sql, nothing.


OK, now you want to develop a desktop version of your application with a snazzy graphical interface. Good luck.


Me to, knowing a little scheme definitely helped, watching all the SICP lectures last summer also helped(If you don't have time for the book, the videos are a good way to cheat).


Ruby


Me too - oop I understand - gotta get a grip on procs and lmbadas.....

Best language I ever used and I was programming in Fortran iv on 80 column punch cards in 1972...


Cool. Be sure to ask lots of questions on the ruby-talk mailing list, and hopefully there's useful stuff on ruby-doc.org. (If not, let me know. :) )


ARM Assembly. I want to commune directly with the bare metal. I want to lose my fear of those hex dumps machines spit out just before they die.


Baby Language


Arc (lisp in general)


Common Lisp -- because it has begun to change the way I think.


C++, after learning Python as a firstl anguage, going through accelerated C++ then thinking in C++


I am (very slowly) diving deeper and deeper into Ruby.


Adobe flex. I am doing some data visualization stuff. I thought about using HTML5 drawing syntax first. But because stupid IE still doesn't support it. I give it up. Adobe flex is perfect for the job for the time being.


Python, Processing & Java. And HTML, CSS etc.....

All of them, really, for pleasure. Python because I want to learn to program, Processing for image processing, Java to bypass CS 101 requirements, and HTML & CSS for web design.


PHP


Rather surprising to see PHP so high here since I rarely see PHP-related submissions on HN. How do people learn it? I've found that the best thing for me was finding StumbleUpon and reading up as much as I could about best practices in PHP and programming in general. Now I force myself to try a different language for my own projects to get away from PHP as a "comfort zone".


I'm a bit shocked to see any significant popularity here, as it seems to be a language most hackers avoid. I'd like to know why people are interested in the languages they're learning - not just PHP.


The OP asked about what you are currently learning. Many folks may actually be required to learn it for their job, rather than for professional enrichment.


I'm a bookworm, so I sought out well-regarded books on Amazon. I started with 'PHP and MySQL Web Development' by Welling & Thomson, and could not have been happier. It's hefty (nearly 1,000 pages for the latest edition), but was well worth the time. Next up was 'PHP in Action', which is similar to the later chapters in Mark Pilgrim's Dive Into Python (one hell of a book, btw) and was coauthored by Chris Shiflett.

I've since read two of Ullman's books (PHP for the WWW and PHP 5 Advanced), the Powers books (PHP Solutions and PHP Object-Oriented Solutions), and Shiflett's 'Essential PHP Security' (the PHPSec guide is required reading also).

The two Apress Pro books ('PHP Objects, Patterns and Practice' and 'Pro PHP'), 'Essential PHP Tools', 'PHP5 Power Programming' (Andi Gutmans is a coauthor) and 'Advanced PHP Programming' by Schlossnagle are up next, although I'm currently working through SICP.

(Note: I switched to Postgres since reading Welling & Thomson; there are basically 10x as many MySQL books as PostgreSQL ones, unfortunately)


Did you know OmniTI (employers of Shiflett and Welling, former employer of Thomson, and sister company to MessageSystems (Wez Furlong & George Schlossnagle) have an office in Brooklyn? I believe the main contributor to CakePHP works there too. If you're that interested in PHP, it might be something to consider being relatively close by.

I'm bookish in how I approach programming too, and among your list have read "PHP & MySQL Web Development," Shiflett's "Essential PHP Security," and "Advanced PHP Programming" when I was first starting out (I started out as a PHP programmer). If you're anything like me, the books get less exciting as the knowledge they contain gets more familiar, which is inevitable among a certain class of books. I now read more language agnostic books on algorithms, math, and some broader concepts. We'll see how that goes.

Sara Goleman has a book on writing extensions for PHP that you might like if you want to 'cross the threshold.' These sorts of things can be useful to know how it all works internally, even if you aren't writing a ton of extensions yourself. The Schlossnagle book has a chapter on that. I'm not sure how much movement PHP internals have (I'm out of that world now).


I didn't know OmniTI had an office up here. I definitely have noticed diminishing returns from all the PHP reading; I still find it satisfying, but I'm not sure how long that'll last. Thanks for the 'Extending and Embedding PHP' recommendation. Any other recommendations (especially non-PHP ones) are welcome. 'me' at the first domain in my profile.


after being a coder for 3 decades I finally got around to lisp, two things prompted me to do it, first the source code to HN, secondly a discussion with 'dtor' of the glusterfs project, a young indian coder that seems to be pretty gifted. I audited some code there and came upon a macro that took me a long long time to comprehend, he explained it was to give C continuations.

One thing let to another and I ended up buying a bunch of books and downloading the mit video lectures.


Scheme


I'm learning Scheme so I can program Impromptu (http://impromptu.moso.com.au/) to control my MIDI setup live. I'm having a hell of a time with macros and define-syntax; I have not yet found docs that explain those so I can understand them. I have played around with SBCL and Clojure, and can write macros in those languages. Don't know why I'm having problem with Scheme.


I'm learning Scheme with SICP after a failed attempt at picking up OCaml. I didn't make significant progress beyond writing toy OCaml and was experiencing some serious culture-shock in my first foray into the functional programming world. After some floundering it became clear that I needed a better introduction to the functional programming mind-set. Purchasing SICP turned out to be an excellent decision.


Processing


I haven't learned a new language for a while now. Perl/Java/C never fails me and I'd rather learn a new trick than another way of doing an old trick. I am learning about modern large-scale Internet service design, running hadoop clusters, distributed logging solutions, virtualization, ad-hoc radio networks, radio propagation, sensor fusion, intelligent transportation systems, etc. (for startup and PhD)


Scala


Objective-C and the iPhone API. This is probably the first language I learn just in the process of doing something specific (writing apps for iPhone), and not because I really need to learn it for enhance my programming skills. Still it is an interesting language even if designing it today from scratch could lead to something pretty different...


Stop replying in this thread and make a poll !


Wouldn't that require knowing in advanace the answers people would give?

Or is a "close enough" guess at the usual suspects (with an option for 'Other') good enough?


PHP and Action Script through Adobe Flex


I'm rewriting a card-game-playing environment written in Java. I originally wanted to use one of the Java implementations of Arc, but the low activity level of the forum (and my difficulty installing Rainbow a while back) makes me uneasy, so I'm learning Clojure. Sorry PG.


Ruby, Scheme, C++. C++ I am learning for about six years already, what a fucking complex language :)


Potion, _why's experimental language. It's cool to play with something bleeding edge, though something about the language itself makes it feel like Python. Maybe the use of colons to define functions/blocks.


I continue to learn Haskell. A possible future side project would be a good fit for trying out functional reactive programming.

If I ever find myself wanting to program at a low level again, I can see myself learning D.


After trying to learn Haskell on and off for a couple of years and miserably failing to be able to write a useful program with it, I'm moving on to Scala which pretty much rules.


Playing with Erlang - I like its approach to errors and parallelization. Plus the idea of a functional language with Prolog-like pattern matching seemed like a cool idea.


Scala. Because it's the right combination of fun and pain. =)


F# -- OCAML has got it all: imperative, functional. Plus with F# you've got a huge collection of ready-to-use libraries


Dabbling with Clojure and Haskell at the moment. Also reading some material relating to clisp and Scheme.

I can never stick to one thing.


After Effects Expressions, a js-like scripting language for video graphics. I'm not sure if this qualifies though...


Forth, because I'm to impose some creativity enhancing constraints on what I develop my free time.


- Visual C# (Microsoft Dot Net)

- Some CSS, HTML and Jquery

- English :)


Clojure. It's fantastic. http://clojure.org/


Bouncing around between PHP, AS3 and Python/Django. Really need to settle on one for a bit.


A few months ago Python, decided to jump the gun to learn Common Lisp and Scheme.


erlang. because somehow my install of ejabberd failed and I don't know the first thing about how to troubleshoot it. plus I want to learn more about languages that are good with parallelization.


Erlang - nitrogenproject.com got the best of me one evening...


Newspeak, Lisp, Python, Smalltalk, Objective-C.


Ruby


Factor


Lisp, in Pico Lisp flavor.


Ruby at the moment


Haskell.


Prolog


Jython


obj-c


C++ = you can never stop learning darn thing, it is still growing.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: