Ask HN: What new or hot technology do you recommend learning?
122 points| toddkazakov | 11 years ago | reply
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?
[+] [-] skrebbel|11 years ago|reply
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.
[+] [-] juliangregorian|11 years ago|reply
[+] [-] Kiro|11 years ago|reply
[+] [-] wildmXranat|11 years ago|reply
[+] [-] corysama|11 years ago|reply
Another interesting project is Snabb Switch. If you want to learn networking at the lowest level and highest speed possible in software, Snabb a great platform for experimentation.
Finally, I'll throw in http://terralang.org. It's not networking related. But, I think it's terribly interesting and not getting any attention.
[+] [-] elementai|11 years ago|reply
[+] [-] threeseed|11 years ago|reply
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.
[+] [-] alfiedotwtf|11 years ago|reply
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.
[+] [-] ribs|11 years ago|reply
[+] [-] sz4kerto|11 years ago|reply
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.
[+] [-] toddkazakov|11 years ago|reply
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.
[+] [-] christensen_emc|11 years ago|reply
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.
[+] [-] sparkie|11 years ago|reply
The Kernel language is small and simple, yet offers a huge contrast to how you would think about programming in most other languages - namely because other languages have reduced their model of computation to reduction.
Kernel is influenced by the Lisp family, but offers somewhat of a duality to it. In lisp, everything is passed implicitly reduced unless explicitly quoted, then they are passed verbatim. In Kernel, everything is passed verbatim unless explicitly evaluated - the callee then, has complete control over how something is evaulated, rather than the caller. (And consequently, it's trivial to simulate lisp's computational model in it)
Reduction then, is just a special case of a much more general computational model - passing arguments around. Other languages have coupled the idea of argument passing with reduction, such that they need to invent compiler hacks like macros or code generation when it turns out that reduction is not what they want. Or in some cases, we've created languages specifically for template-based programming, where we want to splice bits of code into an otherwise static block of text. Such templates are trivial to do in Kernel.
Another nice feature of Kernel is that of encapsulation types. One can define a new type which consists of a constructor function, eliminator function and a predicate to test for the type - and combined with the powerful information hiding that can be achieved through Kernel's environment model, one can implement sophisticated type systems using very few primitives, and without special compiler support.
[+] [-] highCs|11 years ago|reply
An implementation: http://klisp.org/
Others: http://axisofeval.blogspot.fr/2011/09/kernel-underground.htm...
[+] [-] unknown|11 years ago|reply
[deleted]
[+] [-] childintime|11 years ago|reply
There is much brewing in language land. Rust brings a set of ideas that other languages will borrow (pun intended). But..
Elm restarts programming, treating events as lists, and this is how programming will change over the next 5-10 years in a most fundamental way.
Taken together programming is climbing out of the miserable non-composable mess that having been stupid bread-and-butter bit-fuckers have put us in. Elm just leads the pack.
You may not understand its ways, that is exactly because you think being a bread-and-butter bit-fucker is a feature, while it most definitely is not. It is a bug and it infests the code you write, up to the point where unlearning is an unsurmountable effort.
When elm's wave is through, the computer will replace you, and with it children will design much better programs than you do. Please stop making sense now.
[+] [-] wtracy|11 years ago|reply
[+] [-] sshillo|11 years ago|reply
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.
[+] [-] olavgg|11 years ago|reply
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.
[+] [-] collyw|11 years ago|reply
[+] [-] manca|11 years ago|reply
As you probably know C++11 is already around and majority of compilers already support it. What most people don't know is that C++14 is ready to kick some ass too! It introduces for the first time in C++'s history functions as first class objects and allows you to pass them around as function parameters! I think this is really exciting and I also encourage as many people to take a look at this new and very promising developments of C++ language.
On the other hand, Apple's Swift looks promising too - functional elements, type inference, speed, good compiler and so on. Not to mention it's being used with tons of great frameworks Apple provides for iOS and OS X development. It sure doesn't hurt to take a look into it too.
All in all, it really is an exciting time for us developers. There are really tons of cool tools and languages that allow us to get things done at the speed never imagined before.
Now, we should also look back at the fundamentals and ask ourselves could we design, not only program? That's not the skill you can pickup in couple of days reading bunch of tutorials and forums about your next cool language. I think, learning how to think about particular problem and how to approach it is more important than barely know how to code the first solution that comes to your mind in the new ultra fancy language. Think about it...
[+] [-] jordigh|11 years ago|reply
[+] [-] meowface|11 years ago|reply
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.
[+] [-] pmoriarty|11 years ago|reply
Sure, there's a lot of hype around newer technologies. There's never a shortage of hype. But the glow around virtually all of them will fade, probably sooner rather than later.
Ruby and Python are no longer considered hot and new, but not so long ago they were. Java and Perl had their share of hype back in the day, but the luster has certainly wore off by now.
Too many people involved in the tech field are endlessly chasing the next shiny thing.
[+] [-] rjberry|11 years ago|reply
[+] [-] JoeAltmaier|11 years ago|reply
[+] [-] _wmd|11 years ago|reply
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.
[+] [-] hootwoot|11 years ago|reply
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.
[+] [-] eps|11 years ago|reply
[+] [-] stephenheron|11 years ago|reply
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.
[+] [-] bjoe_lewis|11 years ago|reply
[+] [-] rjdagost|11 years ago|reply
[+] [-] scrapcode|11 years ago|reply
[+] [-] fit2rule|11 years ago|reply
[+] [-] proveanegative|11 years ago|reply
Pun intended? LÖVE (https://love2d.org/) happens to be a great way to learn Lua.
[+] [-] striking|11 years ago|reply
[+] [-] Xcelerate|11 years ago|reply
It's got a few quirks, but the language designers are improving it rapidly and the number of libraries available for it is increasing drastically.
To name a few features I really like about the language: multiple dispatch, flexible type system (use it if you need performance; ignore it if you want pretty code), powerful macro system, extensive debugging system (instantly view AST, LLVM, and native assembly output to optimize), easy parallelizability/vectorization, and just an overall beautiful language design (unlike C++ or Matlab for instance).
Things I dislike about Julia, but that should be changed soon: unintuitive automatic memory allocations (everything seems to allocate new memory by default which is a pain for tight loops because you have to write layers of functions that all take tons of "output variable" parameters), incredibly slow start-up times, and documentation that leaves a lot to be desired in terms of details (I normally have to call methods() in a REPL to figure out exactly what I need to pass into functions). Also, the module system seems a little more confusing than it needs to be.
[+] [-] colinbartlett|11 years ago|reply
[+] [-] adamzerner|11 years ago|reply
[+] [-] fit2rule|11 years ago|reply
[+] [-] mamcx|11 years ago|reply
Decide and have clear what is the question, then look for the answer.
---
For the fun of learn, pick anything you can do and put some time of it. If you are like me, you will read some info about X and and if it pick you interest go ahead.
But without a direction, you will waste time. You will dismiss things that are good and double-focus in things that not..
----
"I am facing a lot of challenging (which ones?) data analytics and software development problems during the day (which ones?)"
"Data analytics (and his not-famous cousin reports)" is far more about re-shape and clean data than do cool algorithms. The last mille is the easy and the 909% (yep, 909%, not a typo!) is the hard, in opposite to normal development.
Having a clean, well defined schema/database/warehouse/etc is the thing here. Run your super-fancy mathy-thingy on it? Others have solved that!
Most likely, non-normal-dev will have a bigger impact on this kind of jobs, so not just focus in tech.. (and I don't drink the fallacy that your selection of tools not matter. But is also a mistake think that are the only thing that matter).
[+] [-] ChikkaChiChi|11 years ago|reply
You wouldn't believe how much playing around with these units will help to influence your design and development decisions in other areas.
[+] [-] derwiki|11 years ago|reply
[+] [-] bratsche|11 years ago|reply