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