Hacker News new | past | comments | ask | show | jobs | submit login
Programming languages and Frameworks to learn in 2015
46 points by meerita on Dec 27, 2014 | hide | past | favorite | 76 comments
I can't make a poll on HN, but I would like everyone to contribute with an opinion. Which languages are worth to devote learning in 2015? and what about the new frameworks? Please, be patient and open :)



If you have the slightest interest in the issue of concurrency then you should study Erlang and Clojure. Since Moore's Law has largely faded, and we now gain speed by putting more CPUs in each server (rather than having the individual CPUs be faster) concurrency is an increasingly unavoidable aspect of programming. Joe Armstrong (Erlang) and Rich Hickey (Clojure) have both spent an enormous amount of time thinking about how to support concurrency in a programming language. Armstrong talks about a paradigm that he calls "Concurrency Oriented Programming". Armstrong's thesis is surprisingly readable and I recommend it:

http://www.erlang.org/download/armstrong_thesis_2003.pdf

Rich Hickey's video presentation "The value of values" is also a good overview of some concepts that are important to Functional Programming:

https://www.youtube.com/watch?v=-6BsiVyC1kM


I think you misunderstand Moore's law. It states nothing about speed, but about chip complexity (number of components in an integrated circuit). Moore's law has been following pretty closely since 1965 (and looks like we will maintain it until 2020 at least at this point).

What we have hit is is the max frequency the CPU can operate at. This is not something Moore claimed (as far as I'm aware). Physics got in the way when the transistors got so small that they can't operate any faster without causing problems.

EDIT: reddit discussion about MHz cap from 3 years ago: http://www.reddit.com/r/askscience/comments/ngv50/why_have_c...


How do you feel about Go?


I think Go is very interesting. One thing that I like about Go is something for which it is often criticized, which is the ability to create a binary that holds all dependencies. Some people are critical of these "fat binaries", but I have lost countless hours dealing with dependency issues, in various languages, and dependency issues are my least favorite kind of computer problem, so any language (and/or eco-system) that gives me an easy way to solve dependency problems is interesting. Likewise, when I work in Clojure I often go with the "uberjar" option to deploy, which often means the only outside dependency is the JVM itself. But Go can go further, as there is no need for some VM, like the JVM.


I agree, shipping the dependencies in a single binary is the easiest way to package software. Nim is the same as Go in this respect: native code generation via compilation to C without a VM. And for me, Nim's Pythonic syntax is hands down more pleasant than Go's or even D's. It's the only systems programming language I've come across where it feels like I'm coding at the speed of thought.


I haven't heard much about Nim (until reading this post). I saw that someone was comparing it to python in a way? What are your thoughts on it?


I believe Nim also has generics and macros.



Wait, they gave OM "Trial" status and React just "Asses"? How does that work?


I agree with you but just because the typo makes a reasonable difference, it's actually "assess" :)


Very nice, have never seen these Radars. Going through the history of some Platforms & Languages is very interesting.


+1

However, if you don't already know Rails or Grails (or possibly Django), then that is a good place to start.


The fact that OpenID is on their radar makes doubt about everything else on there...


They are referring to OpenID Connect which is actually Oauth2 for login and has nothing to do with openid 2.0 which is being phased out by most authentication providers (I.e google) http://openid.net/connect/


Ah, thanks. Got to wonder why they re-used the same name.


I'm planning on going old school and re-learning C and Assembly for x86 and, in particular, ARM architectures. My reason for doing is that I want to get back into embedded systems.

I also plan on picking up Rust and somehow integrating it into my workflow (I'm a web developer).

Ideally, for the future (2015 and beyond), I want a basket of languages I could use for building web-scale applications. So, for example, within a single application:

  * Erlang -- distributed messaging
  * Rust -- heavy lifting for various tasks
  * Python -- various data munging tasks and rapid development
  * Javascript -- client side applications (e.g. Ember.js)
  * C -- in those rare cases where it would be needed
I think I would stick with these languages for the next ~10 years and try not be distracted by anything else.


I'm in the process of picking what I want to specialise in as I'm worried about fragmenting my learning and falling into a 'jack of all trades master of none' situation.

    * Elixir -- scalable APIs and 'realtime'
    * Rust -- still evaluating this. 
      Hoping it could replace C for me. 
      Ruby bindings is something I'm looking for in the future.
    * Swift -- Loving it compared to Objective-C so far
    * Clojure -- I like the idea of creating an app just in Clojure, Clojurescript
      using Om etc.
      Not sure how Clojure is with Android but that will be a factor


I can only speak about the Rust side. Seriously, pick it up. It is more than a replacement for C. You get a total replacement of C + a loooot of extra stuff, like no null pointers, memory safety, C compatibility for FFI, iterator and list comprehension goodness, and just a lot of good practices. At least for me, Rust is the perfect mix between C and Haskell. YOu get the low level stuff of C, and the expressiveness and joy of Haskell, without all the brain-hurt from Haskell.

Side note: I do love Haskell, but let's admit it, the learning curve is pretty steep once you hit monads/comonads.


+1 to Elixir and Phoenix from my side. I have yet to dabble with Phoenix but the short amount of time I've spent with Elixir has been thoroughly enjoyable. I can't wait to rewrite chunks of code at work into small phoenix applications.


Elixer and Phoneix definitely on my dabble list. Falcon (Python) definitely on my 'use in production' list.


C#, obviously. It's the only modern language that provides ALL of the following:

1) Static and dynamic typing

2) OOP and functional paradigms

3) Multi-platform via single framework: WP, Android, iOS, Mac, PC, Xbox, PS4, Linux etc.

4) Two super-powerful IDE-integrated static analysis tools to choose from: ReSharper and Roslyn

5) Mature workflows for developing Web, mobile, enterprise apps and games.

6) High performance on WP and desktop, reasonable elsewhere.


No powerful IDE on Linux / OS X.


Work in progress, but looks very promissing: http://www.omnisharp.net


Doesn't contradict with my statement, but yes. Luckily the rest 97% of developers are covered.


Are you sure that 97% developers use Windows? From my experience developers use Linux / OS X more often than regular users.


Only if you mean web applications. Many do write desktop applications.


Not only web applications. There's all the iOS devs, for instance. Pretty big market, and it's rather hard to do this job on a Windows machine.


Those are not on GNU/Linux systems.

As for the market size it is a matter of perspective. On my home country iOS comes out on third place.


I thought linux developpers didn't use IDEs...damn time have changed !


monodevelop is no visual studio but works just as well as the best other linux programming ides


IntelliJ?


Now that .NET is going open source, I wouldn't be surprised if JetBrains came up with some good cross-platform IDE for C# and the rest of the gang


Rails has allowed me to move from being a product/programme manager to start up owner / developer in six months. I've managed the development of products using PHP and .NET technologies, but when it came learning to code myself, Rails enabled me to learn and iterate quickly. Ruby is beautiful, and the Rails community is both prolific in terms of making the gems you need and responsive when you have problems. 12 months ago I was coldly agnostic about frameworks, I am now a bit of a fanboy.


Swift if you're gonna live in the iOS/OSX ecosystem. I've been writing Swift everyday for the last 4 months and I'm loving it. The compiler and toolchain are still buggy. But this is clearly the future of programming languages.

Shameless Plug, I send a weekly newsletter here: http://swiftnews.co




> A year ago I wrote an article trying to round up new languages since year 2000 and what I think of them by just… glancing at them, or otherwise playing with them. I ended up sifting out the 5 most interesting in my not so humble opinion - Go, Rust, Dart and Julia. Now a year has passed and…

> I discover that I missed Nim!

> Nim was born somewhere around 2006-ish and is clearly a very serious language to consider, but is going suspiciously under the radar. Having reviewed this language more closely (and still doing so) I can safely say that for me it actually easily tops this list.

http://goran.krampe.se/2014/10/20/i-missed-nim/


I'm convinced Nim is what Python aspires to be, but it seems like putting the cart before the horse.

Does anyone know of any interesting projects using Nim?


The Nim compiler itself is written in Nim: https://github.com/Araq/Nim

There is Jester, a framework for web applications: https://github.com/dom96/jester

HastyScribe looks pretty nice as well: https://h3rald.com/articles/hastyscribe/


... or the horse out of the car.


Just pick one and go with it. It really doesn't matter. Being a framework user is useless. What you should be striving for is being a problem solver and being a problem solver means understanding computation in general and not some specific bastardization of it in some framework like Rails, Angular, Ember, etc.


Nim, the most elegant new language.

http://nim-lang.org


Depends if you want something that's marketable now, or more if you're asking what's interesting learning for the future.

Django and Rails are still powerful in web development territory, but I don't find them particularly exciting anymore.

I'm quite interested in seeing where Go and Rust evolve to provide developer-productivity and performance at the same time. Previously, we've had these kind of splits where we have Ruby/Python/other at one end, and C/C++ at the other, and things in the middle have felt like compromises (Java, etc). I'm thinking we can get to a nice happy medium, once their standard libraries mature. Still, there's not a lot of job opportunities out there in these yet. But interesting!

To me, a lot of what makes a language usable is how big the standard library, and community libraries around it grow to be. So, for now, a lot of the cool stuff would require more legwrok on your end to make it work for certain applications.

On the UI side, JavaScript remains absolutely pervasive, but I wish there were clean alternatives that didn't require something compiling down to JS. It seems that Angular is going in the right places.

I'd be interested in people's takes on whether Scala/Clojure are no longer gaining any interesting traction or whether I'm wrong about that - there's still a giant ton of Java out there, obviously.

If you just want to hurt your brain in interesting and useful ways, functional languages can be great fun.


I've heard one recruiter specifically advise I learn Scala or Clojure, but then I love in Finland, where the JVM it's still even more king of the jungle than elsewhere thanks to decades of mobile engineering focus.

I'll be taking up Scala, as well as F# and Haskell, in the new year, because I've increasingly realized that whether functional programming really it's the new OOP or not, it's certainly the specialty I most enjoy working in. As a Windows (and Windows Phone) user I'm especially interested in F#, and the .net world it offers to FP. I find it fascinating that so many developers spend their time finding any and all means to work around the reality that Windows is what nearly all their users are actually running. We've turned web browsers into miniature OSes, just to avoid that reality, and it's weird.


Same thing in Germany.

I also think F# is a better bet, because it is a first class citizen in the .NET eco-system, whereas Scala and Clojure are third party languages on the JVM.

In the enterprise space this little difference plays a big role when choosing languages.


I would stick with basics and try to learn programming paradigms and underlying principles. I guess it would be really helpful in long term. Please correct me if I am wrong.


I don't know what you already know but here are some suggestions.

node.js, express, hapi are all good to learn. Knockout (knockback), Angular would also be good to add to that list.

golang is something I am personally working to get better at in 2015. I am not sure which frameworks inside of Go would be best to learn but I am curious to see what others suggest to you as well.

ansible (or puppet, chef etc). Even if you don't do devops as a job. I learned (still am finding new uses) Ansible this past year and it helped me understand more about the challenges of deploying what I build in an automated and scalable way.

I have also been picking up Lua as it is pretty powerful, but I am by no way totally proficient yet.

Also, not necessarily a language/framework to learn but something I think that is worth learning. Lucene queries, I went the Elasticsearch route, but Solr or others are just as viable. But between ELK and loading our data into Elasticsearch to handle the searching needs of our application really helped us solve things faster and easier. But at least for me, getting the query side of Lucene down took some effort.


Hi, I’m in my third year in a French IT School. I’ve used A LOT of C/C++ during my first years and now I’m learning bit of Java and C#. I learned Ruby On Rails through a 6 months internship while I was in my first year and I fell in love with the ruby world. I also used some OCaml (and this is actually great!) and some x86_64 ASM at school.

So I’ve read all your comments and I’ve seen a lot of kind of esoteric languages. I mean that I’ve already heard about them but I’ve never figured out if they are really used in companies. I also love to check on new things and look at new languages with cool syntax and fun features but is it really useful? Are languages like Erlang, J, F#, Rust, Haskell or Nim really used in your companies? Are they worth to learn to find a job? From what I’ve seen / what I know node.js has grown A LOT this year. I’ve seen several job offers asking for node.js. I think I am going to focus on this from now on.

Thanks for reading / giving your opinion in comments ;)


Erlang or Haskell - rare, but esoteric??

I don't think it's fair to lump them into the same category as Rust (which may or may not gain popularity, it's too early to say), or Nim (now that's truly an esoteric one).


Well Erlang and Haskell aren't the most common programming languages that I can think of. I've never seen any job offer (in my area) for those. But I often find articles talking about what people achieve using those and I find it fun but are they really useful in the 'grown ups' world?


Well, maybe it's a matter of naming here, because while of course they're very domain specific - an esoteric programming language is one that's rather not designed with usability in mind (but as a joke, or to prove some point etc).

See http://en.wikipedia.org/wiki/Esoteric_programming_language or http://esolangs.org/wiki/Language_list - noone would put Haskell under that category...


They are both very useful for solving real world problems, yes.


Well would you say to someone who is going to look for an IT job in a few years to learn those languages?


For the most part yes, but it depends on the position they're trying to get.


I'm still actively working on intercooler.js, which is an extension of regular HTML to bring declarative AJAX to the web. Just released a new version (0.4.5):

http://intercoolerjs.org/

MaxCDN has donated their CDN services, so it's easier to install now.

I now have some decent non-backend specific demos up as well, using mockjax.


I've been doing a bunch of work with Go recently, and think it's definitely worth taking a look at. It's growing fast and is used in some pretty awesome up and coming services, and it's very simple, which is nice.

If you're really into system languages, then maybe also do Rust.


From my job hunting experience, Java, JavaScript and AngularJS skills are in high demand. That won't change any time soon. So dabble in some small JavaScript projects and you won't have to worry about finding a job.


Prediction: Rust is the language of 2015


Disagree. It's not even 1.0 yet. I wouldn't be surprised if it were the language of 2016 or 2017, though.

Languages move painfully slowly.


Rust will be nice to play with. That is all.

What the Rust devs are doing is great, but so far system programming languages only succeed when OS vendors adopt them into their SDKs. Otherwise they are just another language to write business applications.

Even if that does happen to Rust, it surely won't be in right away in 2015.


Snap/Haskell/(opaleye|esqueleto|groundhog)/postgres web applications

Elm

Netwire games - Haskell frp

Gloss - Haskell 2d graphics

Nim (generics, fast, enforce purity, macros)

Idris - Becoming more useful for real world problems.

Clojure - fun pragmatic lisp that leverages the JVM


C++14


I think reactive programming (such as RxJava) is quickly gaining on popularity these days and seems like a promising paradigm...


Go retro with Perl and http://mojolicio.us


I expect I'll be fleshing out my Clojure for work. I've some interest in picking up Rust in my spare time. I also plan to venture into dependently typed languages (Coq/Agda/Idris) at some point, but that may or may not be 2015.


What are you goals?

If you want to Get Shit Done and ship a product, pick a tried and true (and possibly boring) stack

Be wary of the Magpie! http://blog.codinghorror.com/the-magpie-developer/


I am rooting for Haxe (as a language, compiler & set of tools) and Lua (for embedded system programming). They rock!! BTW, they are the next generation programming languages.


> BTW, they are the next generation programming languages.

What does this mean? You mean like those: http://en.wikipedia.org/wiki/Fifth-generation_programming_la... ?


Yes, the 5GL. "The fifth-generation languages are designed to make the computer solve a given problem without the programmer. This way, the programmer only needs to worry about what problems need to be solved and what conditions need to be met, without worrying about how to implement a routine or algorithm to solve them".

The two languages{same as a set of tools, compilers,e.t.c} would do that.


To be honest, the only language I've really taken an interest in for the past few months has been Jonathan Blow's Jai, which isn't available yet.


Thanks for aggregating this. I'll be heading in the opposite direction, so that someone may be right if the majority turns out wrong. Just kidding.


Polymer


This and Web Components [1] in general are high on my list of technologies to learn.

[1] http://webcomponents.org/


I'm interested in Web Components, yet, I couldn't see the advantages.


The biggest advantage I see is HTML imports [1] finally providing a common bundling mechanism for HTML/CSS/JS. Custom elements can also finally get devs out of <div> hell.

[1] http://www.html5rocks.com/en/tutorials/webcomponents/imports...


J.

It's mind expanding.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

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

Search: