Ask HN: What new or hot technology do you recommend learning?

122 points by toddkazakov ↗ HN
I feel that I've been procrastinating a lot in my free time and it's time to learn something new.

I see the hype around Go and Rust and I believe I'm missing a lot in my professional development. I'm involved with my start-up and I am facing a lot of challenging data analytics and software development problems during the day. I am using Java/JavaScript/R on a daily basis, but these are mature languages that have been around for a while and I have a hard time learning new frameworks that are beyond my work scope.

So what (hot) languages/frameworks are you learnin/using now, that give you the warm feeling that you get a lot of useful knowledge out of them, that's widely applicable?

137 comments

[ 3.9 ms ] story [ 269 ms ] thread
C is a pretty nice language, have a look ;)
I second this. After using PHP, Java, Ruby, Python, JavaScript and various frameworks within each, "The C Programming Language" was very refreshing. It's fundamental, and made me think differently when using standard libraries in other languages, such as how they may work, etc.
Having done quite a lot of C myself I believe it's good for a person just starting off with software development, but I can't see myself doing it for fun, besides if I have a specific problem in mind.
I found this video series (https://www.youtube.com/watch?v=F3ntGDm6hOs) very interesting. It is someone (Casey Muratori) building a game from scratch using C.

The intro videos really opened my eyes to how powerful C is. Being able to directly access memory seems crazy for someone who is just used to dealing with languages that really remove you from the hardware.

+1. Learning C is not about learning a language. It's more about how to think like a computer.
When you program even a little bit, you already think like a computer. C is more about thinking a lot closer to the hardware, to the very low-level components of the computer. That's really an amazing universe.
Go learn assembly language if you really want to "think" like a computer ;)
This was my first thought as well- it's tough to go wrong by learning C. For me learning C was a brutal struggle (driven by necessity), but no other language taught me more about what is going on under the hood in software. C has withstood the test of time and will ground your programming skills better than any fad language or framework.
The hype for Go/Rust is really just on HN.

If you are involved in data analytics then you could always immerse yourself in the Hadoop stack e.g. Cascading, Spark, Mahout etc. It's a platform that is increasingly become a fixture in enterprise companies and plenty of new technologies. For me the future will be "container driven development" where everything will be deployed as a container and dynamically wired together. Loads of new technologies e.g. Docker, Consul and plenty of challenges still around.

None of what I wrote is around languages/frameworks though mainly because I think that the majority of them won't be really used in 5-10 years.

I would have to disagree.

If you think it's just hype, try and calculate the enormous waste of both time and money from memory leaks caused by code written in C and C++. Rust solves this, and it's only going to get better once we're on the other side of Rust 1.0, and the library ecosystem grows.

I think by hype he meant enthusiasm : it doesn't mean Rust or Go is useless but that enthusiasm for this languages is far more present on HN than anywhere else.
Not just memory leaks... all the recent hacks/exploits are showing us that even the best people in our field can't write secure code in C/C++. You can reduce your attack surface substantially by using a language like Rust.
Imho, it's a scalability issue.

Was OpenSSL secure when it was originally written in X lines of code? Very likely.

Is it feasible to expect it to be secure now that it's X^Y lines of code, when a large class of bugs can exist in any line of code? No.

That's what 15 years of an evolving codebase has taught us. Which is reasonable, given that a lot of open source projects came into existence in the mid-90s. Inculcate lesson, design language for next 15 years. Not that radical.

Does it really matter whether it's a scalability issue though? The bottom line is that the code has bugs, whether it's due to the fact that the codebase is large is somewhat irrelevant.
By scalability, I meant more along the lines of, "Is it possible/efficient/reasonable to write large, secure codebases in language X using process Y?"

Answer A is "Yes, bugs come from bad development practices or unskilled programmers."

Answer B is "No, there are fundamental issues with the language that make it unreasonable to expect a secure product."

In other words, are the primary sources of bugs programmers or the ways the language forces them to interface with it?

> Try and calculate the enormous waste of both time and money from memory leaks caused by code written in C and C++. Rust solves this...

This seems like an unusual language feature to highlight --- don't most modern programming languages solve this problem with various implementations of GC or memory management? N.B. I am not at all familiar with Rust and so maybe I'm missing some important context...

Yes, but all managed languages will necessarily be less performant and less efficient than C/C++/D/Rust (barring a hypothetical future interpreted language with an amazing JIT and GC; LuaJIT has the JIT part down but definitely not the GC). Rust is specifically for systems programming. If you don't need to do systems programming, then sure, use C# or Scala or whatever you like.
The more I've been hearing about Rust, the more I'd like to try it. What's the equivalent of "_why the Lucky Stiff's Poignant Guide to Ruby" for Rust?
The official guide[0] is worked on by Steve Klabnik and serves as a good introduction to the programming language. Where you go from there is the hard part a lot of people interested in Rust struggle with. I recommend building a clone of some command line tool you like or if you're a Ruby/Python/JavaScript programmer try and build an extension for those languages but written in Rust instead of C. Good luck!

0 - http://doc.rust-lang.org/0.12.0/guide.html

You know what language Docker is written in, don't you?
Yes, lots of other cloud software is written in Golang as well.
Just as a side comment, the reason languages/tools are fun to learn is because it's usually quite easy to do so. You say you know R, but the depth of packages available for R is insane, and most of it requires a level of math that few possess.

I'd punt on learning a new language and instead master a new skill - up your stats knowledge, force yourself to learn how some algorithm works, whatever,.. these things are all infinitely reapplicable skills, whereas a pretty compiles-to-JS language or prettier-C-derivative generally aren't so much.

If learning is going to be a hobby, then learn something different (because that gives you perspective), but also something that has some connections to what you already know (because if you learn something part-time, then it's good if you don't need to re-learn all tools, environment, etc.).

I would not care of the 'hot' stuff too much - frameworks come and go.

I'd try some Clojure (you're familiar with the JVM and IDEs, but one should learn a bit of Lisp once in life). Or Scala.

You're totally right the frameworks come and go, but on the other hand they come for a reason. And when I am learning a new framework there's usually something more I gain than just something to put in my CV. For example when I started with Spring I learned a whole lot of IoC and AOP. It was quite long time ago, but the principles that stand behind a framework might be very influential in the long term.

I like the Scala suggestion, because the last time I was involved with functional programming, I was using Haskell which I found quite difficult to grasp to a level that's useful for real-world projects.

well since you're using Java/JavaScript/R on a daily basis I would recommend Dartlang. It has futures, awaits/async, enum, SIMD. Works in client and server side. Its also really fast. www.dartlang.org
If your self-admitted problem is that you "have a hard time learning new frameworks that are beyond my work scope", it probably means your experience is deep but narrow.

If that's the case, you don't need to learn a hot/new technology, you need to cast a wide net and get a better grasp on today's software ecosystem in general, until picking up new things is no longer hard.

You could nonetheless kill two birds with one stone if you hacked on something current but wide. Docker and its ecosystems come to mind.

You said Javascript but didn't mention Node.js. I would recommend learning Node.js if you haven't done that already, just because it's so darn useful.
Give Lua some love. Learn the language, learn the VM. Learn to integrate it with a set of libraries and so on. Lots of bleeding edge stuff runs on Lua and its a fantastic stack of technology to learn ..
The only problem with Lua is how slow it is. I'm quite fond of LuaJIT, though, because it isn't slow.
Right, that is of course the truth: LuaJIT is fast.
This is the first time I've read this sentiment, Lua is purported to have one of the leanest, fastest interpreters around (not talking about luajit of course). Can you talk about your experience?
The Grit Engine [1] and Love2D [2] are fun, useful engines that make making games easier, in Lua. Except they're slow as all get out; the only cap on the framerate is literally Lua. If you don't use spritesheeting to its maximum degree, you can't even squeeze out 60fps for a moderate size game.

[1]: http://www.gritengine.com/

[2]: https://love2d.org/

Sounds like a design fault in gritengine and love2d, not lua.
Try MOAI then. Its much, much better ..
Lua is quite fast. The algorithms you can implement in Lua are all slow unless you want to make an optimized structure for every kind of lookup you want to do. Lua reminds me of a hobbled javascript.
>Give Lua some love.

Pun intended? LÖVE (https://love2d.org/) happens to be a great way to learn Lua.

So are MOAI, openresty, luvit .. Kademlua, elua, busted .. Penlight .. lapis, luarocks .. luamongo .. and last but not least, snabbswitch.

All projects from which I have learned a great deal of Lua. ;)

Is Luvit fit for production use? Which Lua web stack would you say is the most mature in general?
OpenRESTY is pretty darn good, I use it in production. Right now I've got a luvit project in the lab/on the bench that I'll pull the switch on and deploy, replacing a Node.js rig.. for no reason other than we want Lua everywhere and no more javascript .. so I'd say its ready, but my ready may not be your ready.
Cloud Foundry.

(I'm biased, I'm currently seconded from Pivotal Labs to Cloud Foundry development in the buildpacks team).

It's an opensource PaaS. A full, all-the-stuff-you-need-is-in-there PaaS. You can take it and run it in a private datacentre.

For large companies, this is A Big Deal. Right now, in most F500s, deploying an application takes anything from days to months.

Except if they've installed Cloud Foundry, where deployment time drops to seconds to minutes.

For startups, it will soon be a big deal, because Cloud Foundry gives you a smooth path from just-playing-around (deploy on public cloud with Pivotal Web Services or IBM Bluemix) through to running on AWS (with the opensource distribution or a commercial derivative like Pivotal CF) through to running on your own hardware in your own datacentre.

CF is still evolving fast. The execution core is being rewritten currently and will probably hit feature parity early in 2015, carrying along with it the ability to natively allocate, mount, manage and monitor Docker and ACI container images.

It gets very little buzz on HN, because what interests us is building our own stuff out of cool, smaller components. Plus the main organisations driving development (Pivotal and IBM) have focused their marketing and sales at big companies, not startups.

Systems of this reach and influence basically appear once in a generation. I'd hop on while it's fresh, if I was you.

Jeez, you Pivotal guys (sorry, "pivots") sure suck down that kool aid.
I guess I have.

Funnily enough, the best critiques I see of how we work comes up in our internal forums. I sometimes refer to Pivotal Labs as a debating club which produces code as a byproduct.

If you don't know python and you're interested in analytics you should solve that.

IMHO you'll become a far better developer if you devote the majority of your time to learning advanced algorithms, ml, and ai as opposed to the new hot framework.

No one asks for those in job specs though
Algorithms are definitely asked for in interviews at every company except small startups.
Not in my experience. And after 12 years in the industry, I never have to code any sort of sorting algorithm. Just chose the library where it has been done for you already.
I've already started, there is a bigger challenge though. That is, how do you sell this? I can think of plenty of scenarios for the oil and gas industry, which is the biggest industry where I live.

For example drilling for oil in sea is quite expensive, could easily cost over 100 million USD. With machine learning we can predict the seismic ground pattern by predicting the amount of clay, lime etc in different locations and between wells. This can help us to decide if there is a good chance there could be oil/gas underground.

The problem when I present this, is that it quickly sounds like science fiction.

Oil and gas already does a hell of a lot of computing, and invests heavily in supercomputing facilities. [0] I'm not too familiar with the domain, but looking at abstracts of conferences like the Oil & Gas HPC Workshop [1] might give you some idea of the work already being done in those fields.

It's entirely possible that machine learning techniques could be used as well as modeling and simulation for these problems. (They may be already! But my limited expose suggests they're mostly doing traditional HPC.) But you'd probably need to be a petroleum expert already, not just someone with machine learning expertise living in an O&G hub.[2]

[0] Just an example: http://www.aiche.org/chenected/2012/12/bp-building-new-houst...

[1] http://rice2014.og-hpc.org/

[2] Apologies, btw, if you are a petroleum expert who's just frustrated by a lack of machine learning in the industry. :)

Learn Nodejs/Meteor then join the product and help contribute relational database support. Please. Nodejs and persistent connection is a hugely important technology by my estimation which will become popular. Meteor is interesting because it is a full stack of interlocking parts that work together quite well, to lend an interesting new perspective on web development as a whole. However currently it doesn't support relational databases.
OpenStack seems to be trending, if you are into the whole cloud thingy.

I've only been in contact with TaskFlow, the state and workflow management library that OpenStack uses, and I'm very impressed how well-engineered it is.

On a related note, OpenStack uses RabbitMQ, and that seems to be trending too. Not a huge hype, but a steady adoption by both open source community and enterprises. And if not RabbitMQ, then being familiar with some kind of asynchronous messaging framework certainly wouldn't hurt.

On the engineering side, I think you should learn concepts such as asynchronous programming, actor based programming and functional programming, and pick a new language (Swift, Scala, Go, Rust, etc.) and learn it.

On the more practical side, I think data science is a very useful tool, so learn everything there is to do with data today, from machine learning and data mining in small scale to big data processing.

(comment deleted)
Don't know how well you know Java, but look into Reflection and Annotations, it could simplify your development a great deal.

Also: http://blog.paralleluniverse.co/2014/05/01/modern-java/

This is a great blog post. While annotations and reflection aren't something new, I will definitely spend some time experimenting with the Java 8 new features.
Git is not the final word in DVCSes... Take a look at Mercurial, in particular, the Mercurial Evolve feature. It's an innovative way to collaboratively polish commits. Imagine pull requests that could be rewritten with the history of the rewrites being easily accessible as you see them, well, evolve. Evolve is basically a way to record and use distributed meta-history of the editions of your commits. It's like a beefed-up git reflog.
The problem is that in the open source world, most projects use Git and most active old projects using SVN or CVS are slowly moving to Git. Many people out there who greatly prefer Mercurial to Git admit to using Git much more than Mercurial due to the ecosystem.

See: https://fuzz.me.uk/git-vs-hg/

From Eric Raymond:

>git won the mindshare war. I regret this - I would have preferred Mercurial, but it too is not looking real healthy these days. I have made my peace with git's victory and switched. I urge the Emacs project to do likewise.

That's fine. Take Evolve as an an example of how git itself could improve. I'm fine with Mercurial being an experimental display of features that could go into git.

Also, this whole popularity argument, if it were to be believed, could have killed Linux in favour of Windows or FreeBSD in favour of Linux. Just because something is popular doesn't mean that alternatives need to cease development or are not worthy of attention.

This thread started with a request for exciting new features. A certain degree of experimentality and non-popularity is in order.

I think the distinction is that Linux is very different from Windows in a lot of important ways, while Git and Mercurial are relatively similar in what they do and how they work. If someone invented a VCS that completely revolutionized the process (I really don't know how it could, but just hypothetically), then it could serve as true competition to Git.

This is one reason why D has failed to really take off. Both D and Rust are looking to essentially take C++'s place. D is C++ improved, while Rust changes the whole model of managing memory and also introduces some new paradigms (more type inference, pattern matching, etc.). D is clearly better than C++, but the two are just similar enough to make C++ a more preferable choice due to its immense popularity compared to D. Rust changes just enough to give it a chance at being a serious contender: the value may be higher than the cost of leaving C++ for many people.

The same applies to Git (C++) and Mercurial (D). Perhaps even more so, because while Git isn't perfect it generally "just works" for almost all use cases; Mercurial is just some simplicity and elegance on top of some workflows (which are sometimes emulated with wrappers over Git, like Legit). C++ on the other hand has a lot of warts.

I think that functionnal programming is a good candidate. You can learn about it in different situations/languages. It opens the mind about the code and its design by exploring other patterns.

- http://scott.sauyet.com/Javascript/Talk/FunctionalProgrammin... explain how procedure ahem function composition leads to better/more readable code

- datalog is a DSL for querying (recursive/linked data) http://www.learndatalogtoday.org/

- The introduction to Reactive Programming you've been missing https://gist.github.com/staltz/868e7e9bc2a7b8c1f754

Another nice DSL query language is Gremlin, for querying a bunch of graph databases. https://github.com/tinkerpop/gremlin/wiki
Gremlin is nice, powerful and easier to grasp. Datalog programs are more compact. I need more experience to know if datalog is as powerful. On the subset of queries, I used datalog, I prefer datalog.
I'm learning Haskell right now and it's great. I don't know how widely used it is in production, but it's introducing me to tons of ideas that are applicable in lots of other languages (e.g., how to do functional programming effectively, how to effectively use a strong type system, how to separate out functions with side effects).
Elixir. While Rust and Go get way more exposure lately, they're mostly designed for systems programming. Many more of us do web development, and it's really amazing how fast Elixir has become a very cool and mature environment for developing great web apps.

Elixir is a really cool language, and also a great way to learn functional programming. But more than that, it gets all the non-languagy stuff right. The build system is amazing, your code hot-reloads out of the box, dependency management is very well done (source-only, git-friendly, project-local, etc), the community is very friendly and going fast.

And code scales by default. I might exaggerate here, but sometimes it feels like need to really try to write code that's hard to spread across servers. If you consider it's non-trivial to even use all your CPU cores on Node.js, the Erlang VM will blow your mind.

I'm a web developer currently learning Haskell. Would you recommend learning Elixir instead?
As someone that hasn't heard of Eilxir before but has done a bit of Haskell. Haskell is mind expanding on it's own right.
For me, learning Haskell was a supremely educational experience. There is no better way to learn functional programming techniques and you will not regret learning it. That said I can count the number of times I've used Haskell in a non trivial application on one hand.

Elixir lets me use a lot of the stuff I learned with Haskell, and I've already used it building a real time component for an app I'm working on.

Take from that what you will.

No. You waste time if you half-learn something and then hop to the next hot thing again. Haskell is awesome too.

Do know that conceptually, Elixir and Haskell are pretty far apart. They're both functional, but that's about it. Elixir is dynamically typed, Haskell very much not so. It's a whole different approach to programming; where in Haskell, you'd "let the types guide you", in Elixir you simply can't do that. Elixir is much closer to Lisps in that regard.

I'm somewhat in the same position and I'm learning both. Haskell is great for learning new programming concepts like monads, applicative, and every other crazy thing Haskell programmers love. It also helps you think and get used to the concept of pure and unpure functions which definitely expands into other languages in a positive way.

Elixir on the other hand gives you a great development environment by default with ExUnit for testing, the Mix build tool, hex.pm packages, a tempting library, and more. All of the tools feel mature as well. Immutability with rebinding is great, concurrency is made simple compared to some other languages, and it also has the entire Erlang ecosystem of libraries to work with.

It's definitely easier to write Elixir, but I wouldn't say better. They're both great languages, just different.

I'm using snap in a freelance project right now. Haskell is also great for web development, keep at it!
I guess a lot of the benefits listed are a result of erlang vm.
What's recommended for an experienced "back-end" developer who wants to dabble in front end and web development, but never spent much time in it? It seems like there are a million options for web stack components, and a lot of tutorial resources are geared towards total non-developers.
JQuery. I have been trying to do the same (when I get a chance) for the last few years. Angular, Backbone, etc are a lot to learn, while JQuery lets you get basic stuff done.
I'd recommend learning how to learn. Making learning and curiosity a part of your every day existence will have more of an impact that the latest hot language or framework.
I am compelled to agree with you, inasmuch as the irony of "what is the newest thing to learn" wouldn't be much of a hipster position if it weren't borne on the fact that must learn new things, always. Always. Since the beginning of social computing - when we've all had access to the same degree of technology - our languages, tools, and frameworks have always been changing. It is one reason for the existence of an ivory tower - sometimes you need to wizard-out, just to get peace from the noise. Trouble is, you inevitably end up casting new spells. There is no such thing as 'a brand new thing' to learn, alas the truly hipster edge can't be learned yet. ;)
True, but I suspect that most people already agree with this, and it doesn't address his question.
The thing that I am studying in my spare time are Agda and Haskell.

Haskell gave rise to bunch of strongly typed DSLs both for front-end and backend development.

Agda is sort of derivative of Haskell, and gives you powers to reason MUCH MUCH clearer about your code and what you want it to do.

I have wet dreams of using those languages on my everyday development. Esp Haskell.

http://learnyouahaskell.com/ http://learnyouanagda.liamoc.net/

When I catch some time I will fiddle with Elixir also mentioned here in comments.

Elixir!

On one hand it has a simple ruby-ish syntax and a solid MVC framework (Phoenix).

On the other hand it has immutability, concurrency through processes and message passing (which is awesome!) and a bunch of other functional goodies.

I'm not sure how widely applicable it is now, as it's still in its infancy, but it's the first "hipster" language I've used in a while that felt like it had legs.

As a sub-question, I would be interested if the answer was restricted to frontend frameworks (eg. Backbone/Ember/etc.) for 2015. Thanks in advance.
If you're into SASS, I'd check out:

Susy: http://susy.oddbird.net/

Otherwise, if you're into the latest Javascript frameworks, I'd check out:

Aura: http://aurajs.com/

Kraken: http://cferdinandi.github.io/kraken/

SkelJS: https://github.com/n33/skel

If you're looking for something more "bootstrapish" but without all the "bootstrap" bloat, I'd look at some more modular frameworks like:

Semantic UI: http://semantic-ui.com/

Pure: http://purecss.io/

UIKit: http://getuikit.com/

Hope this helps. . .

Semantic UI author here. I just wrote a draft guide to explaining SUI definitions and the spirit of the library for those who are interested in learning a little bit more: http://learnsemantic.com/definitions/overview.html
Thanks for the extra documentation. Been looking into your boilerplate and I really like it. This will help me to really use the depth of this.

Thanks again for the heads up.

If we assume Ember, Backbone + friends, and Angular are already 'big', then React is definitely the one on the come up.

For all intents and purposes those 4 are really the only ones being talked about IMO. Polymer is thrown about too but from what I understand it's not exactly production ready (could be mistaken)

Backbone may not be the most popular, but you will learn a lot of transferable skills by using it.
It's not a hot technology ( read as overhyped ), but if you're in the analytics space and not using Python/PyData tooling then definitely check that out. It's certainly as mature, if not more so than R.