7 ms·
Ask HN: What programming language will you learn in 2014?
After a long research I decided to learn Haskell. It is very unlikely that I will ever be paid to use it, but I am pretty sure that after more than 10 years experience in programming, Haskell will greatly benefit my programming skills and thinking.
- wonderer007 13y agowhat about golang programming language
- ACow_Adonis 13y agoI spent the last year doing lisp as much as I could, and I've become a right convert. I've got some C and python down already. This year, I am currently torn between: -Haskell (to go full blown functional crazy) -Smalltalk (to go full blown object crazy) -Javascript (to finally write some stuff for the web/browsers) - Java (to sell out and lose the will to live?) Any advice is more than welcome. I'm probably looking for the "programming language that changes the way you think" aspect, since I've already got a paying job...
- dyscrete 13y agoOff topic since this is not a programming language, but AngularJS will change the way you think.
- spb 13y agoI recommend going out and buying the third edition of [Programming in Lua](http://www.amazon.com/exec/obidos/ASIN/859037985X/lua-pilindex-20 http://www.amazon.com/exec/obidos/ASIN/859037985X/lua-pilind...), then using that to learn Lua before getting into JavaScript. PiL will present examples that will change the way you think in several different ways, which you will then be able to leverage in any other programming language (most of the time, depending on how restrictive the language is).
- peterfoldi 13y agoYou have Lisp knowledge, so maybe Haskell is not the best candidate for "a new way you think". Given your background I would say you probably would enjoy Scala more than Java (targeting the same JVM). I am not sure if one can learn enough from Smalltalk to justify the effort it takes to learn an in-practice useless language. If you don't speak JavaScript yet, that's a good candidate, especially if you use your FP experience in it and not just go the OO way most people do.
- lispm 13y agoNo, Haskell is very different from Lisp. It makes perfectly sense to learn Haskell.
- peterfoldi 13y agoYou have more experience here thanks for correcting me :) What I meant was that they are not two very different worlds. I myself picked Haskell over Lisp hoping to gain the benefits that I would get from Lisp but with some advantages. Would you also recommend the other way around? Learning Lisp after Haskell? I don't mean the syntactical differences or the real-world usage. Solely the "way of thinking".
- lispm 13y agoActually Haskell and Lisp a very two different worlds. Some basic abstractions are shared, but Functional Programming tends to be much much more advanced in Haskell. Haskell is the standard language for some branch of functional programming and has a good/great eco-system for that. It's main use seems to me to advance the state of art in Functional Programming and applications of it. Lisp OTOH is a multi-paradigm languages with much more emphasis on OO and interactive development. Lisp is much more diverse and favors a very different programming style - slightly more pragmatic. Lisp had its main application domain in AI, but nowadays it's a bit more diverse - often it is used by individuals or small teams. One of the larger applications is the flight search engine of Google. Others are in music composition, planning and scheduling (satellites, people, logistics, ...), etc.
- jmnicolas 13y agoThere are so many languages I would like to learn : - Ada : everybody raves about it but nobody uses it ;-) - Python : for everyday hacks, it's portable, simple and it's not Java ;-) - Assembly : it's the root of everything - C : my mind is overflowing with Arduino projects - C++ : I'd love to create ISX extensions and make private bots for some MMO - Prolog : just because I will probably settle for Ada if John Barnes publish its book at the beginning of 2014.
- qwerta 13y agoKotlin and Go
- yen223 13y agoThere was a recent comment by tptacek in another thread which I agree with: you really only need to know a couple of programming languages before you start hitting diminishing returns in terms of what you can implement. We should focus instead on learning new concepts or new problem domains. I'm trying to revisit statistical modelling and pick up some machine learning basics over the next year.
- gfodor 13y agoand what about domains only tangentially related to computer science, like robotics, semiconductors, or digital music? or what about domains barely related to computer science, but where coding is an invaluable skill, like medicine/genetics, manufacturing, or aerospace? consider how many programming languages your average person knows (zero). now consider how many you know. is it objectively worth your time optimizing around that particular dimension within your skills, or are you perhaps suffering from a latent bias you have from the fact that you are a relative expert in programming? would you rather have a carpenter who knows how to use a dozen hammers, or a wide variety of tools? is haskell a new tool, or is it just another hammer for you? with coursera you have no excuse to avoid stepping outside your comfort zone!
- velis_vel 13y ago> would you rather have a carpenter who knows how to use a dozen hammers, or a wide variety of tools? There's a danger in what you're suggesting, in overgeneralizing and never learning too much about one topic. Would you rather have a carpenter who's an okay carpenter, an okay musician, an okay actor, and an okay racecar driver, or a carpenter who's really good at carpenting?
- gfodor 13y agowell, my point is a person needs to determine on their own if learning something like haskell really makes them a better carpenter, or if they are just going leveling up their "number of programming languages" XP because that's the main XP they are familiar with. If I had to pick a point of leverage with which to increase programming skill in minimal time, "learn a new programming language" would be far down the list if two or three for various contexts were already well mastered. "Learn Haskell", almost universally, would be near the bottom.
- anwaar 13y agoI will learn Ruby on Rails and node.js
- kyrre 13y agoclojure
- ing33k 13y agoclojure
- spb 13y agoI will learn Go and then happily ignore it in favor of HTML + JS + CSS + SVG all the time forever.
- usladha 13y agoI will learn Scala and node.js.
- aldanor 13y agoGonna attempt to learn Haskell properly once AGAIN.
- havanna993 13y agoRuby, Python and Scala =)
- arisAlexis 13y agoc++ or scala undecided
- leashless 13y agoI'm heads down on golang right now and will continue to be so. I never quite acquired C - wrote plenty of code in it, but it was always a struggle. Go's just above the threshold where my mind will take it wholescale (ala Python) and it gives me the ability to write simple code and generate cross-platform binaries from it. One app: web, windows, mac, linux. I know that can be done with other tools too, but this is the one I've chosen. I like SQL too: old guys like weird tools!
- tsahyt 13y agoI'd be interested in learning Rust. I've been learning Haskell last year and I'm absolutely loving it.
- nnoitra 13y agoCement my knowledge of Scheme as I work through SICP.
- axit 13y agoMozilla's Rust because: * It's memory safe * concurrent (using light weight tasks like Erlang) * practical (in terms of syntax, semantics) It's also being used to develop the next generation of browser engine: Servo http://rust-lang.org/ http://rust-lang.org/
- workhere-io 13y agoGo.
- horofx 13y agoElixir
- dded 13y agoI'm picking on you, but could just as easily picked on most the other replies. Your answer to this topic is only interesting if you explain why. Even a very brief explanation will do. As it happens, I've never heard of Elixir. Try to make me curious enough to google it. In my case, I'll likely not try to learn any new language this year. But I am going to brush-up on the mathematics that has gotten rusty over the years. Partly because I used to like math, but now rarely get to use anything beyond basic algebra. And partly to position myself better to help my kid with homework.
- peterfoldi 13y agoI friend recommended Elixir to me, but I would rather learn Erlang properly. Erlang has a small community already, why to learn a language targeting Erlang VM that has even smaller community and much less documentation?
- cju 13y agoI've started to play with Nimrod and I will definitively continue in 2014. Macros are not always easy to use but they are clean and powerful (I'm mostly a C programmer ...)
- cafard 13y agoWell, definitely Powershell.
- phektus 13y agoI was surprised to have used nodejs in my work throughout the year, so now I'll skip the advanced (functional) javascript and go retro with c/c++/c#.
- hkarthik 13y agoPlanning on learning enough Erlang to understand BEAM and the OTP ecosystem, and potentially picking up Elixir if it makes sense to do so. I think there's a lot of interesting ideas around high availability and fault tolerance to explore in the Erlang world, and I'd like to tap into that.
- Pishky 13y agohaskell + scala + racket "yeah baby..."
- pcharles 13y agoRuby, iOS
- dmux 13y agoTCL
- tdfx 13y agoObjective-C. Overdue.
- michaelwww 13y agoI learned Dart and TypeScript this year and both were fairly trivial to learn and use. The learning process improved my JavaScript skills because I had to think about JavaScript in new ways and got me ready for ES6 (For example, the discussions about iterators in Dart and ES6 was interesting.) Next up is ClojureScript, if I can get over the syntax.
- ciderpunx 13y agoIf you're learning Haskell, be prepared to feel like a beginner for a while. I had great learning it. I usually pick up languages fairly quickly, but Haskell eluded me for more months than I'd care to admit. There is a great community of very smart and friendly people who helped me on IRC, and a couple of pretty good books -- http://learnyouahaskell.com/ http://learnyouahaskell.com/ and http://www.cs.nott.ac.uk/~gmh/book.html http://www.cs.nott.ac.uk/~gmh/book.html. I enjoyed the experience, and I certainly feel like a better programmer for it. But damn I felt daft for a few months!
- peterfoldi 13y agoI am looking forward to that experience :) Besides the technical reasons (nice syntax, pure fp, strong typing, ...) I chose Haskell to learn functional programming because it has a very good community and documentation. It's like the entire Haskell ecosystem's been built to teach FP. Actually that was kind of the intention when Haskell was born as far as I know.
- iSloth 13y agoPython - I'm doing far too much stuff in PHP just because that's what I know, seems to be fairly simple to learn as well, and quick which should help in the $dayjob efficiency.
- deadfall 13y agoSame boat. I started a django project to learn more about python for the web.
- mattquiros 13y agoCan someone make recommendations for me? Here's what I already know and what I've built with it: - Java. My first real programming language, learned in college, used for a year and a half in enterprise work and Android, got pretty good at it, but I learned - Objective-C for making iOS apps and I never want to write in Java again. I'm also learning C just to understand Objective-C more but I have no plans building anything with C. Basically, my current interests/goals for learning a new language are: - Develop a new way of thinking. - Learn some great engineering practices. - Build products (software) that solve real-world problems. I'm not likely to learn a new language if I can't build anything useful with it, that can potentially sell and make it as a consumer startup. - Become full-stack. I can already easily build an iOS app (I have no interest in building responsive websites) but I find myself still having to rely on something like Parse. Which isn't so bad though because it saves me so much time. I guess that narrows my choices down to: Ruby, Python, Go, or something else, but I'm not in a position to identify which poison is best-suited to me. I just want one that I can be really good at and meet most if not all of my goals. Any thoughts?
- peterfoldi 13y agoVery pragmatic approach. C# if you are ok with the Microsoft stack, or F# if you are a bit more advantageous and serious about the "new way of thinking". Python is also a great investment to solve real-world problems. And don't forget JavaScript. It is not just a browser language any more: there is node.js for the server side and it is the common language of most mobile frameworks that are multi-platform targeted. You cannot go wrong with any of these. So have a look at code samples and spend some time browsing the web-sites about all of them then choose the one that appeals the most to you.
- zenshade 13y agoAfter programming for 30 years (and upwards of 20 languages) I've come to believe that you really only "need" to learn 4 languages to complete your Jedi programming skills and become a master. You need one each from the following categories: "Machine" language - this is anything turing complete that's close to the hardware, ie that forces you to think about and understand the underlying circuitry. Candidates: Assembler, C. Static/Imperative "Object" language - put this one off for as long as you can, for it is easy but not simple, and will ensnare your mind with the belief that you are special because you are among the elite priesthood of programmers who can grasp levels of complexity mere mortals dare not even dream of. Down this path lies years of frustration, all in service of the darkside. Chances are that this category will be forced upon you first, by naive, shortsighted fools who little realize the evil they are spreading. Learn only what you need to disable the tractor beam and escape with the Deathstar layout, so that when the time is right a well planned rebel assault may remove this abomination from the universe. Candidates: there are no candidates here, as that implies choice. One of these languages will be heaved upon you whether you like it or not - C++, Java or Visual Basic (if the darkside is particularly strong in you). Dynamic "scripting" language - this is for that category of problems where most of the needed abstractions are well understood and well tested. Using them should involve as few words as possible. Candidates: Ruby, Python, Perl, Lua, bash (or any bourne shell derivative). And finally, what should be every programmer's last language, A "language" language - these are usually known as Lisps, but I think both Alan Kay's original bootstrapping Smalltalk and Forth are acceptable here. The key feature is having a small core of concepts that can be infinitely composed into higher abstraction commands that are treated no differently from the compiler's perspective. Once you have this power, all of the interesting behaviours of languages like Haskell, Erlang, Prolog, etc, are available to you. Candidates: Scheme/Racket, Common Lisp, Clojure, Smalltalk, Lisp.
- Myk267 13y agoHaskell. Having learned perl, ruby and python (these are all incredibly similar), and then Clojure, I've found that I really like the functional paradigm. It helped drag my attention back to thinking about data structures and functions to act on that data a lot more than a ton of bad OOP examples ever have. I'm actually excited to program now instead of feeling like, "Okay, this mess of classes I'm making is going to pay off some day..." One negative/positive is that I now kind of recoil in distaste when I find OOP-y code that's seemingly done for the sake of jamming code into a class instead of using generic functions and data types. It's funny that there's a large swath of not so useful monad tutorials, because there's an absolute mountain of examples of classes/objects that don't make any sense at all. I didn't mean to make a tiny rant on OOP. Sorry about that. As someone who has been using a lot of dynamic languages, I'm really interested to find out how a static type system can help me program better software.