Ask HN: What new or hot technology do you recommend learning? - <AUTHOR> 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? <comment><USER2> 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.

<comment><USER3> I'm a web developer currently learning Haskell. Would you recommend learning Elixir instead?

<comment><USER2> 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.

</comment></comment></comment><comment><USER4> [http://elm-lang.org](http://elm-lang.org) is a functional and reactive client-side (js target) language that is still young and getting great very fast. [http://pragmaticstudio.com/blog/2014/12/19/getting- started-w...](http://pragmaticstudio.com/blog/2014/12/19/getting-started-with- elm) The idea of combining Elm with Elixir or Yesod (Haskell) on the server side seems exciting.

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](http://terralang.org). It's not networking related. But, I think it's terribly interesting and not getting any attention.

<comment><USER5> And even Elm with Clojure/CLJS [https://github.com/jamesmacaulay/zelkova](https://github.com/jamesmacaulay/zelkova)

</comment></comment><comment><USER6> 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.

<comment><USER7> 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.

<comment><USER8> > 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...

<comment><USER9> 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.

</comment></comment></comment></comment><comment><USER10> 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.

<comment><AUTHOR> 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.

</comment></comment><comment><USER11> 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.

</comment><comment><USER12> Kernel is hands down the most interesting language I've used.

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.

<comment><USER13> Webpage: [http://web.cs.wpi.edu/~jshutt/kernel.html](http://web.cs.wpi.edu/~jshutt/kernel.html)

An implementation: [http://klisp.org/](http://klisp.org/)

Others: [http://axisofeval.blogspot.fr/2011/09/kernel- underground.htm...](http://axisofeval.blogspot.fr/2011/09/kernel- underground.html)

</comment></comment><comment><USER14> Whoa! Noone mentions elm (elm-lang.org)?!

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.

<comment><USER15> How does this differ from FRP in Haskell?

<comment><USER14> It's ease of use. Elm first and foremost teaches programming. That happens to be in an exclusively FRP style, yet it ignores the usual evangelism. It is a practical language with automatic type inference and a simplified syntax.

But elm is a step on the road to a future where I believe that, when the dust settles, it will acknowledge that iteration, map, filter and reduce are as elementary as if-then-else.

So these operations (and if-then-else) will gain an iconic representation in the syntax, like punctuation. There is no need for words to be reminded of their function, the mere appearance of the program should suggest the flow and transformations they implement instead.

In other words, current languages are not FRP languages yet, but elm comes closest.

</comment></comment></comment><comment><USER16> 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.

<comment><USER17> 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.

<comment><USER18> 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...](http://www.aiche.org/chenected/2012/12/bp-building-new-houston- supercomputing-center)

[1] [http://rice2014.og-hpc.org/](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. :)

</comment></comment></comment><comment><USER19> It's good to hear that a lot of people are experimenting with functional languages like Haskell and Erlang, but I think we should step back a little and take a look at C++ and its development over the years.

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...

</comment><comment><USER20> 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.

<comment><USER9> 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/](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.

<comment><USER20> 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.

<comment><USER9> 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.

</comment></comment></comment></comment><comment><USER21> Reading these replies just makes me sad. There's plenty of value in and plenty to learn from older technologies like Lisp, Scheme, Smalltalk, and Forth.

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.

<comment><USER22> It's definitely possible to learn things from those languages. But languages that are trendy today (at least from my experience in the London job market) - Clojure and Scala - are really amazing, too, and have a lot of interesting ideas about concurrency, immutable data structures, and functional programming. Scheme, when compared to Clojure, seems a bit outdated now IMHO, although its extremely simple, small core makes it great for teaching.

<comment><USER21> If Scheme looks outdated to you compared to Clojure, I'd wager you are speaking from an unfamiliarity with modern Schemes like Chicken, Racket, and Guile.

This is an unfortunate, but all too common a perspective, since most people who are exposed to Scheme are exposed to in in an academic environment where they only get to play with ancient, primitive Schemes such as MIT Scheme of SICP fame, and come away with an impression that Scheme is a quaint toy language that may be useful for pedagogy but probably nothing else.

Nothing could be further from the truth, if you consider the capabilities of the modern Schemes.

<comment><USER22> Racket is so different it's basically a different language, so I'm not really talking about that.

I do know Chicken and Guile have more advanced library support than the Scheme I worked with on SICP, but neither has as advanced concurrency features or advanced immutable collections, which is why Clojure seems to me a big advance on Scheme. Plus that you can leverage existing libraries on the JVM, plus its excellent compile-to-JavaScript support, etc., etc.

<comment><USER21> I view lack of dependency on the JVM as an advantage of Schemes over Clojure. The last thing I want to do when developing in Scheme is learn or have to deal with Java or the JVM.

Chicken compiles down to C, so gets C's speed, size, and portability advantages. Chicken can also access C, Python, and Perl libraries, which aren't exactly lacking compred to those of Java. Not to mention that Chicken comes with a respectable set of libraries on its own, and that R7RS compatibility will bring a much larger "batteries included" core.

Guile is looking like its going to become the core of Emacs, and is an extension language for various other tools (like GIMP), so there are wins for learning it if you are interested in any of these ecosystems.

<comment><USER22> How can you access Python and Perl libraries?

However you feel about the JVM, it has led to adoption of Clojure, meaning if you're in a big city you have a chance of finding a job doing it. Not many jobs exist where you can use Scheme as your primary language.

But the main reason I wouldn't go back to Scheme is that it doesn't have a rich array of immutable data structures built in. Too quickly the implementations I've seen capitulate to mutation, which makes code harder to reason about, harder to parallelise, and just less fun to write IMO.

I'm looking forward to Emacs implementing Guile, as Elisp is yucky. But realistically that's not going to happen very soon.

<comment><USER21> Here's Chicken's interface to Python: [1]

It also has bindings for R, C/C++, Lua, Matlab, Objective C, and even Java.[2]

I could have sworn it had a Perl interface too, but maybe that was just my fevered imagination, or an older version of Chicken.

You can actually build Guile-Emacs right now: [3]

      "As of the end of GoogleSummerOfCode 2014, the Elisp engine of Emacs
      is fully replaced with that of Guile, and most things Just Work™."

Though it's true that it'll probably take some time for Guile to be fully integrated in to mainstream Emacs, and for all the wrinkles to be ironed out. But the future is here.

I do have to give credit to Clojure for exposing more people to a Lispy language, even if the language does not measure up to my ideal of what a Lisp/Scheme should be. And I do grant that there are many more Clojure jobs than Scheme jobs. So if work with a Lispy language is your goal, Clojure is probably your best bet.

However, many people work on open source and personal projects using languages that they are interested in and actually like rather than those they are forced to use at work. There's also much value to learning classic languages very different to what you're used to, which I elaborated on in another post in this thread. For all of those reasons and the ones mentioned above, I'd still much rather use a Scheme than Clojure.

[1] - [http://wiki.call-cc.org/eggref/4/pyffi](http://wiki.call- cc.org/eggref/4/pyffi)

[2] - [http://wiki.call-cc.org/chicken-projects/egg- index-4.html#ca...](http://wiki.call-cc.org/chicken-projects/egg- index-4.html#category-list)

[3] - [http://www.emacswiki.org/emacs/GuileEmacs](http://www.emacswiki.org/emacs/GuileEmacs)

</comment></comment></comment></comment></comment></comment></comment><comment><USER23> 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.

</comment><comment><USER24> 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.

</comment><comment><USER25> C is a pretty nice language, have a look ;)

<comment><USER26> +1. Learning C is not about learning a language. It's more about how to think like a computer.

<comment><USER27> 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.

</comment></comment></comment><comment><USER28> 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 ..

<comment><USER29> The only problem with Lua is how slow it is. I'm quite fond of LuaJIT, though, because it isn't slow.

<comment><USER30> 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?

<comment><USER29> 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/](http://www.gritengine.com/)

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

<comment><USER31> Sounds like a design fault in gritengine and love2d, not lua.

</comment></comment></comment></comment></comment><comment><USER32> Nobody's mentioned Julia?! I love this language. I do scientific research and high performance computing and have been exploring this language extensively over the past year. Combined with something like iJulia (iPython), it's a very versatile tool for analyzing and processing data.

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.

</comment><comment><USER33> 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.

<comment><USER34> True, but I suspect that most people already agree with this, and it doesn't address his question.

</comment></comment><comment><USER35> "There is no wind that blows right for the sailor who doesn't know where the harbor is."

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).

</comment><comment><USER36> Get yourself a Raspberry Pi, Arduino, and/or a Beaglebone.

You wouldn't believe how much playing around with these units will help to influence your design and development decisions in other areas.

<comment><USER37> I respectfully disagree. I made lights blink for about a week and then lost interest. The lag time of "wait for something to arrive in the mail" is usually enough to discourage me, and without a coherent, large-ish project to learn on, I just never got that far.

</comment></comment><comment><USER38> I don't know that it's particularly new or hot, but I've been learning F# and I really like it. With Microsoft open-sourcing .NET Core and Mono getting a lot of improvements from it, I'd love to see this become a viable platform for doing web development on Linux with F# in the future.

</comment><comment><USER39> 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/](http://blog.paralleluniverse.co/2014/05/01/modern-java/)

<comment><AUTHOR> 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.

</comment></comment><comment><USER40> Rust is awesome if you want to follow along and see how the bread is made. One of the best things about being involved in Rust since it was announced is being able to recount all the different paths it's taken and the reasoning behind them. It has taught me a lot about good language design, validated and sometimes destroyed some of my ideas about programming concepts and overall provided a great environment for questioning how things work.

I come from a C background however which is a little closer to Rust than Java/Javascript/R but I don't think you would hvae that much trouble if you put your mind to it. Java is a similarly large language if a bit removed from the metal.

</comment><comment><USER41> 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.

</comment><comment><USER42> 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://learnyouahaskell.com/) [http://learnyouanagda.liamoc.net/](http://learnyouanagda.liamoc.net/)

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

</comment><comment><USER43> If you're into analytics and data processing and want to learn something new, I would recommend Clojure[0]+Incanter[1].

Also, check out Cascalog[2]. Data processing on hadoop clusters has never been this simple and fun. Much better than Pig/Cascading/etc.

[0] [http://clojure.org/](http://clojure.org/) [1] [http://incanter.org/](http://incanter.org/) [2] [http://cascalog.org/](http://cascalog.org/)

</comment><comment><USER44> 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.

</comment><comment><USER45> ClojureScript, along with Reagent (or some other React.js wrapper like Om or Quiescent - I currently prefer Reagent, which has been gaining lots of traction recently), Figwheel and a browser REPL, has really had a lot of impact on how I view GUI development.

I do Winforms development in my day job and I hate it. The feedback loop I have from changing something in the code to viewing it in the application can be a matter of 1-2 minutes (need to compile, start up, login, setup everything to the correct state, etc). Going from that to being able to grow the application in real-time, without ever having to restart/refresh, is amazing, and makes me feel infinitely more productive. Combining it with Cordova to make mobile web apps, where I can deploy once to my phone and then have changes be applied over wifi as I type them into my text editor, is super sweet.

Getting everything set up can be a bit tricky, but [https://github.com/plexus/chestnut](https://github.com/plexus/chestnut) makes it a whole lot easier.

</comment><comment><USER46> 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).

</comment><comment><USER47> 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...](http://scott.sauyet.com/Javascript/Talk/FunctionalProgramming/) 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/](http://www.learndatalogtoday.org/)

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

<comment><USER12> Another nice DSL query language is Gremlin, for querying a bunch of graph databases. [https://github.com/tinkerpop/gremlin/wiki](https://github.com/tinkerpop/gremlin/wiki)

<comment><USER47> 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.

</comment></comment></comment><comment><USER48> > that's widely applicable

Other than Laravel (PHP), Python and Erlang (then Elixir), there's not much to try that's applicable. You'll be pleasantly surprised to see that your Erlang implementations are orderS of magnitude smaller (codewise) than your Java implementations, with different performance hurdles. Try new dbs like Redis or new messaging primitives like ZeroMQ. Find a basic analytics package like Munin or RDDTool.

I'm disappointed by the suggestions on this list, which is an ear full of bad advice. elm, kernel, julia? At least Lua is something that you will run into as an option, from time to time. That being said, you don't need to practice it. It's easy to treat it like a dumber version of javascript and you're fine.

</comment><comment><USER49> I'd pick a type of project then pick a language/framework to learn. I'm not a big believer in learning something something just to learn it. You only get so far. I've got my own library of Haskell, Scala, and Lisp books but until I have something interesting to build, it's hard to maintain momentum. My two current projects are a Go web app hosted on Digital Ocean: [http://thespanishsite.com](http://thespanishsite.com)

And I'm learning Swift to incorporate into my iOS apps. I've accumulated over 300 urls for anyone who wants to learn Swift: [http://www.h4labs.com/dev/ios/swift.html](http://www.h4labs.com/dev/ios/swift.html)

<comment><USER50> Your site seems to be down temporarily.

<comment><USER49> Seem fine. Both are running Go. Should be able to handle the load.

</comment></comment></comment><comment><USER51> I've always taken the approach to decide on a new concentration to study, and then learn the languages appropriate for that. First time I did this, the concentration was databases, so I set about learning SQL and data design and relational algebra. I wanted to learn more about front end development, so I focused on JavaScript, DOM, and single page applications. Other examples abound. But having a distinct idea of an application I want to build before learning a particular language has always worked out better for me than trying to find an application after reading a language's documentation.

</comment><comment><USER52> check: Technology Radar ; JANUARY 2015 ( by the ThoughtWorks Technology Advisory Board )

[http://www.thoughtworks.com/radar/languages-and- frameworks](http://www.thoughtworks.com/radar/languages-and-frameworks)

[http://www.thoughtworks.com/radar/tools](http://www.thoughtworks.com/radar/tools)

[http://www.thoughtworks.com/radar/techniques](http://www.thoughtworks.com/radar/techniques)

[http://www.thoughtworks.com/radar/platforms](http://www.thoughtworks.com/radar/platforms)

</comment><comment><USER53> For someone that just started learning how to program about 6 months ago, I decided on Python and R and can write all the basic stuff, but can't write a complete application yet. I've also decided on learning Angular too, but I've not made any serious attempt. And that was after evaluating all the other JS frameworks out there - Ember, Meteor, etc.

Now from reading these comments, it looks like Elm and Elixir are good to learn too.

So the problem facing someone that's just starting out, is what to learn? Where do you start? The options are many and can be confusing.

<comment><USER19> I think learning Python is a great decision if you're new to programming. It'll expose you to fundamental programming concepts like: statements, loops, conditions, functions and even go deeper into object oriented concepts like abstraction, encapsulation and inheritance.

I always recommend people who are new in programming to start with Python because it's really flexible, has rich set of libraries and it's easy to get started.

</comment></comment><comment><USER54> I recommend Nim [http://nim-lang.org/](http://nim-lang.org/) (the website docs don't look too good at the moment, but this has been fixed for the next version that will be out in a few days).

Nim is an incredibly good language that compiles to C, is fast, and has very easy bindings creation to any C library you want. For me, it's the best of both worlds between a Python look (indented, clean) and a fast typed compiled language that helps you instead of hindering you.

You might be interested in checking it out.

<comment><USER5> Oh, I'm so glad they've changed the former name (was Nimrod).

</comment></comment><comment><USER22> Consider Scala or Clojure. You'll be able to leverage the same libraries you've been using in Java (pretty trivially), while having access to a completely new way of thinking (functional).

I personally prefer Scala as I like strongly, statically typed languages, but I've played about with Clojure and it's very nice, too. A vast number of benefits come from having a rich immutable collections library.

</comment><comment><USER55> Not a specific language, but you should try learning about functional programming (eg. Java 8, Clojure, Scala, Haskell).

Also, if you want a brief overview of different paradigms you should check "Seven Languages in Seven Weeks" ([https://pragprog.com/book/btlang/seven- languages-in-seven-we...](https://pragprog.com/book/btlang/seven-languages-in- seven-weeks))

</comment><comment><USER56> 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><comment><USER57> 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.

<comment><USER58> Jeez, you Pivotal guys (sorry, "pivots") sure suck down that kool aid.

<comment><USER57> 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.

</comment></comment></comment><comment><USER59> Hack something other than related to computer science and data. John Carmack once taught himself aerospace engineering...

</comment><comment><USER60> 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.

<comment><USER61> 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.

</comment></comment><comment><USER62> 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

</comment><comment><USER63> 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.

<comment> at-fates-hands If you're into SASS, I'd check out:

Susy: [http://susy.oddbird.net/](http://susy.oddbird.net/)

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

Aura: [http://aurajs.com/](http://aurajs.com/)

Kraken: [http://cferdinandi.github.io/kraken/](http://cferdinandi.github.io/kraken/)

SkelJS: [https://github.com/n33/skel](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/](http://semantic-ui.com/)

Pure: [http://purecss.io/](http://purecss.io/)

UIKit: [http://getuikit.com/](http://getuikit.com/)

Hope this helps. . .

<comment><USER64> 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](http://learnsemantic.com/definitions/overview.html)

<comment> at-fates-hands 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.

</comment></comment></comment></comment><comment><USER65> Haskell

[https://github.com/bitemyapp/learnhaskell](https://github.com/bitemyapp/learnhaskell)

</comment><comment><USER66> 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.

</comment><comment><USER58> I haven't been as excited about anything in awhile as I am about Mesos. Program against the data center. Distributed by default. Fault tolerant everything. Lower your AWS bill.

<comment><USER57> Ah, now I see why you were pejorative about my being a Pivotal Labs employee.

I actually think Mesos is the best of the current generation orchestrators, for the same reason that Diego (Cloud Foundry's new execution system) is going to be the best foundation for PaaSes.

They both push intelligence out to the edges. Mesos pushes it to the requestor, Diego pushes it to the executor, but both represent a huge step forward over need a godlike central controller for a cloud system.

<comment><USER58> > Ah, now I see why you were pejorative about my being a Pivotal Labs > employee.

Not sure I see the connection? I probably should have been nicer, you came off very shill-like though. Pivotal does kind of cultivate that attitude though, of "whatever we're working on is a disruptive, game-changing twitter-killer", but I guess it works for them since they managed to get a bunch of smart people working for early-stage companies without any stake in them and then training other people to take over their jobs.

I will have to look into this Diego, at least. Is there like, a white paper for it?

<comment><USER57> Oh, we're full of beans. And teaching client developers how we work is literally what Pivotal Labs aims to do. It's probably the first place I've worked that has a high rate of reverse-churn: people leaving to work at startups for the glamour or equity, then deciding they miss Labs and coming back.

As for Diego, start with Onsi Fakhouri's keynote at the Cloud Foundry Summit this year[1], then read Amit Gupta's blog post on app placement as an optimisation problem[2], then you might like the Diego Design Notes repo[3].

My main pet peeve with Diego is the confusing, punny names, so it will be confusing at first.

[1] [https://www.youtube.com/watch?v=1OkmVTFhfLY](https://www.youtube.com/watch?v=1OkmVTFhfLY)

[2] [http://blog.pivotal.io/cloud-foundry-pivotal/products/app- pl...](http://blog.pivotal.io/cloud-foundry-pivotal/products/app-placement-in- cloud-foundry-diego-a-classical-optimization-problem)

[3] [https://github.com/cloudfoundry-incubator/diego-design- notes](https://github.com/cloudfoundry-incubator/diego-design-notes)

<comment><USER58> Seems interesting and that it occupies the same space as Marathon. Are you familiar with that and if so how do they compare?

<comment><USER57> I'm not familiar with Marathon, but I will read up on it. Thanks.

I find it interesting how everyone is sprinting toward PaaSes from their own positions. For example, Docker is racing up the stack, Hashicorp and Mesosphere are growing sideways, Cloud Foundry is growing in about 5 directions at once. Red Hat is trying to reboot OpenShift with Docker and Kubernetes, but I am not sure how well that will turn out for them.

There's also a thriving cottage industry of people reinventing central controllers that won't scale in the face of the network fallacies, something that Mesos and Diego have accepted and moved on from.

</comment></comment></comment></comment></comment></comment><comment><USER67> 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.</comment>


On the Pleasures and Sorrows of Life Without Screens - <AUTHOR> http://www.calnewport.com/blog/2019/05/31/on-the-pleasures-and-sorrows-of-life-without-screens/ <comment><USER3> The article is quite optimistic about peoples' abilities to transform their newfound boredom into something creative, but as in the example with books, this digital minimalist "healthy" boredom also has its prerequisites to make it work.

By likening social media use to addiction, only the negative effects are highlighted. For example, the waiting line in the supermarket used to be full of aggression, it has become much calmer with phones, and some people might even revert to alcohol or other destructive habits when they feel uncomfortable with being alone. In some cases, distraction can even be beneficial, as playing Tetris reduces PTSD and flashbacks. [https://www.scientificamerican.com/article/tetris-shown- to-l...](https://www.scientificamerican.com/article/tetris-shown-to-lessen- ptsd-and-flashbacks/?redirect=1)

Perhaps a better metaphor might be travelling: When I travel too often and move aroung all the time, there is a certain "up in the air" \- emptyness - <USER2> feels as if I don't ever arrive anywhere, and I spend far too much time in airports and in transit. When I travel less often, it is easier to enjoy the ride and the experience has a positive impact.

<comment><USER4> >the waiting line in the supermarket used to be full of aggression, it has become much calmer with phones,

What?

Grocery lines used to be people reading magazines/tabloids/tv guides or sending their kid to go get something they forgot, now it's people yacking loudly on their phone or playing candy crush waiting for the person in front of them to finish self checkout.

<comment><USER5> I can't remember the last time I heard someone "yacking loudly" at their phone in line at the supermarket. The Candy Crush part is accurate, but not very different from reading magazines.

Not sure what was the point both you and OP were trying to make.

<comment><USER4> I can't go to the grocery or my second gym without people shouting into their phones or their bluetooth, or worse, sometimes having a conversation with the other person on speaker (for that matter we have a few people that do that here in my office in the break room).

Perhaps it is a midwest thing.

</comment></comment></comment></comment><comment><USER6> I read _Digital Minimalism_ back in February, and did a cleanse in March per his recommendations. One thing I noticed... I normally keep track of books I've read. I jumped from reading two books a month to reading six. Was I seriously reading four books a month in bullshit screen scrolling and arguing with people who are wrong on the Internet? Apparently.

I still use the phone as distraction, but now I do it with the Kindle app. I keep my phone Kindle loaded with books I can read in short bursts without extended concentration (currently about to finish the financial planning book _I Will Teach You to Be Rich_ , by Ramit Sethi), and carry my regular Kindle around for books that require more engagement.

I already avoided video games; I've done so for years, because I recognized that I have an addiction problem. When it comes to videogames, I'm like an alcoholic that doesn't drink for fear of the consequences. What I didn't realize is how carefully crafted the addictions of Facebook and Twitter are, how they sucked me in worse than video games ever did.

I have a long ways to go to fully engage with the world again, but I'm getting better.

<comment><USER7> Wait, then why are you here?

<comment><USER6> I thought about that. What I decided was to distinguish between social media driven by deliberately addictive engagement in order to sell ads (Facebook, Twitter), and social media that doesn't depend on ad revenue and invites active engagement rather than passive scrolling (Hacker News, and a guitar forum I read regularly). I don't need to give up _all_ online interaction, just the ones that are actively and deliberately unhealthy.

<comment><USER7> I don't know man. This sounds like:

"I used to have an alcoholism problem. I used to drink wine, beer, hard liquer, you name it. But then I did a cleanse in March, and I stopped drinking hard liquer and wine. I only drink beer now. But that's ok, because I actually like the taste of beer!"

<comment><USER6> Yeah, it does. And if I felt that HN was intruding on my ability to do other things the way Facebook and Twitter do, I'd quit it, as well.

edit: Maybe a better analogy would be that HN can be chewing gum when I'm trying to quit smoking.

</comment></comment></comment></comment></comment><comment><USER8> Digital Minimalism was probably my least favorite Cal Newport book, not for the subject matter but because of the reliance on third party stories. I like to hear peoples' stories first hand.

Even though I ended up being a partially failed case for using this book, I still got value from it. I mostly did the thirty day digital detox but ended up going back almost to my old routine. The difference is that I have perhaps reduced wasted time on my devices by about 1/3\. I am more aware of how much time I am spending, while I am spending it reading Twitter, HN, or playing Chess or Go when I have short periods of non-busy time. I am considering removing Chess and Go apps from all my devices.

If you are going to read just one Cal Newport book, I recommend choosing Deep Work.

<comment><USER9> As I've noted here before[1], Newport is on a 3-book contract on more or less the same topic with minor tweaks. And is likely to subtly market them to the hilt at every opportunity.

Besides unsound fundamentals (relying too much "third party stories", and other issues noted elsewhere), he focuses too much on "quantity" and "productivity" than on _quality_ and _effectiveness_.

Sure, he _has_ something of value to say, but he should absolutely have compressed it into _one_ book, and avoid the filler content. But my (uncharitable?) conjecture is, as he values "productivity", he happily gives into the demand of publishers to have X number of pages in a book, to sell, lest it looks like a pamphlet.

[1] [https://news.ycombinator.com/item?id=19047303](https://news.ycombinator.com/item?id=19047303)

<comment><USER8> You make good points. I used major publishers like McGraw-Hill, J. Wiley, Springer Verlag, etc. for the first ten books I wrote. You really give up a lot of control over subject matter. I now use Leanpub, write whatever I enjoy writing about. I pitch the advantages [1] of writing to people I know, and usually suggest writing one or two books with a publisher and after that self publish.

[1] largest advantage is getting to meet and get to know really interesting people. I enjoy writing but being an author also opens up a lot of opportunities.

</comment></comment></comment><comment><USER10> Funny how younger people don't even know how the true boredom looks like. They think they get bored on their phones. Only after they go on screen detox they realise how much more fucking boring the life is. Especially if you don't have an obsessive hobby and do not want to bother other people just because you personally are bored.

I feel bad for people older than me that never got adjusted to the smartphones when they have to wait staring blankly into space or trying to start up a monologue to random stangers because they can't stand how dull the inside of their head is. Before smartphones your only salvation was a book and it was limited tool also not for everyone.

Smartphone as entertainment devices are the greatest social invention so far.

<comment><USER11> Maybe I'm just too old for it, but what is this "being bored" thing you're talking about? I clearly recall staring blankly into space while solving problems in my mind, or even just feeling the surroundings, as some of the most interesting moments of my life. I don't recall ever getting bored, not once.

<comment><USER10> You are very lucky. I clearly recall intense boredom from pre-phone times. Every time I was forced to stay in some place and do nothing, like while waiting at the doctor's, using public transport, at school during some classes, at family dinner, at couples dinner, in church, even at the funeral, sometimes even in my own home.

There was a saying that intelligent people are never bored. Untrue. I have IQ over 150 and boredom brought me to tears more than once.

I'd read to kill it, i'd play solitaire with real cards, I'd play one player games with pen and paper.

Now when I'm older I can handle being bored much better. As I accumulated scars I can reminiscence on how effed my life is and daydream of pleasure. Buy I still prefer my phone wherever it's socially acceptable.

<comment><USER12> If you want people to take you seriously. Never cite your iq unless there is a very good reason. This is not one

<comment><USER10> I was providing data point disproving (dumb) claim I heard some people make. If I just said I'm intelligent and bored you could just think I'm not that intelligent. I thought it was better to tell you exactly how intelligent I am so you can decide for yourself if that's intelligent enough or not. IQ is just a number like height or age. I just stated it as it was measured by Mensa membership test.

And I don't care much about people taking me seriously.

</comment></comment></comment></comment></comment><comment><USER13> Whatever you want to call it, I'm all for _digital minimalism_ these days.

I find modern computing to be filled with stress and anxiety. Computers, at one time, used to sit idle until used. Using a computer was to use a tool to help you get some task done that was previously menial and boring. These days as soon as I sit down at a computer I start getting messages, advertisements, pleas, bargains, warnings, requests... it seems like it never ends. I sit down to get some work done and an hour later I've finally managed to get enough of the messages down and distractions over with that I've nearly forgotten what it was I intended to do in the first place.

And this experience has been following me in my pocket for more than a decade. Since 2008 or so it has been getting louder, more obnoxious, and demanding. Offers for new phones and data plans when I'm trying to bathe my kids vibrate in my pocket waiting to be heard. Advertisements tailored to my interests and desires follow me everywhere. Messages from people trying to contact me whenever the whim comes to them. There is little room for silence in my days anymore.

I have a dream inspired by the folks behind [http://screenl.es/](http://screenl.es/) \-- a version of computing where there screens are not the primary interface for computing. One that is diverse, invisible, and intentional. I'd like a version of computing that is controlled by me and bends around my needs and not the needs of product designers, advertisers, and whims of others.

Until I can realize that dream or someone else gets it done I think I'm going to continue my trend of cutting out as much technology from my life as possible. I need more silence, solitude, and intentional, meaningful interactions. I don't want a deluge of social opinion on every happening in the world aimed right at my brain.

</comment><comment><USER14> How about the pleasures of life without other people's music and TV, which adults and children play aloud with no headphones in NYC, on a subway and in a forced, enclosed space?

Should we thank the geniuses who designed phones with amplified speakers and no headphone jack (some people are too poor/cheap for Bluetooth I suspect)? Or do we thank Facecrook and Instascam for out-loud videos cranked up at a higher volume on Android?

Or a breakdown of norms due to being a permissive, some call freer society?

Whatever it is, it's a quality of life detriment for those of us in dense areas, and a personal pet peeve.

<comment><USER15> People playing their music loudly in public spaces isn't new.

What's new is that it's coming out of a tiny phone rather than a 12 D-cell powered boom box.

<comment> Funes- >What's new is that it's coming out of a tiny phone rather than a 12 D-cell powered boom box.

And that makes _all_ the difference. You cannot possibly compare the number of times you would be bothered by a boom box in the 90s in public transport, for example, and how frequent it is now to be bothered by other people's phones on the exact same circumstances. Let's get real.

</comment></comment></comment><comment><USER16> I am a good dancer, well only Lindy and East coast swing. Not much weight for me to lose. I have a black belt in Kenpo. But I am also a systems administrator, enjoy my Switch, and generally spend at least a few hours looking at a screen each day, more than 12 hours on a work day. So I fail to see the correlation...

Seems like less about tech minimalism being the key and more, learning how to have self control. I am not knocking that, I believe that if you do not have the self control to manage a habit than you should remove that habit if it is a detriment. Nonetheless, the article, IMHO, is off the mark.

<comment><USER17> I think the value of his work is in helping folk become aware of how much time they waste. You sound like you have a good grip on that already, so probably aren't the target audience.

</comment></comment><comment><USER18> Interesting topic but is this not just an advert for this guys book?

<comment><USER19> Is there information in the article that you find useful or interesting? Or that someone else might? If so, then what does it matter that he wrote a book on the same topic and mentions it? Would it have been better if he'd written exactly the same article but not mentioned the book?

<comment><USER18> Fair point, I just worry about the prevalence of "stealth" advertising. For me at least, the article seems to boil down mostly to "Look what my lifestyle book did for this person". But if others are getting value from it then who am I to judge :)

</comment></comment></comment><comment><USER20> If you want to distract yourself while not doing anything you will find a way to do it. Before smart phones there were computers and video games. Before that there was television. Before that there was printed fiction of many sorts, most of it of no personal or social value at all.

It is good to strive to do worthwhile things. The worthless things you do to fill your time are not preventing you from doing anything else. You do what you do...

<comment><USER21> Good point. I would say that modern day distractions have an extra oomph however. I've never developed an addiction to books, crossword puzzles, or television whereas I've come to the point where I can't have a healthy relationship with video games.

<comment><USER22> I think video games went from "fun for a while, but eventually you wanna stop and go ride bikes" to "wait, what do you mean it's Monday morning?" at or a little after the 16-bit console era. There were always people who could just play Super Mario 3 all day or that one guy who did nothing but play Doom for six months or whatever, but most kids (and certainly most adults) would knock it off after a while. It wasn't a widespread issue, even among the small segment of the population that played games, even if _some_ did have problems even then.

There was the occasional eat-your-life-for-weeks-on-end game but they tended to be confined to genres like 4x and RPGs (Ultima series, say) and you didn't see multiple high-quality works of that sort every single year. The other big exception was probably MUDs and other games where social, online multiplayer was a major component.

I think a combo of 1) refining and focusing games to drive "engagement", 2) games just getting better over time, in a lot of ways, 3) multiplayer and social elements becoming more common, and 4) digital distribution putting unlimited novelty at one's fingertips, has made the whole artform kinda scary, unless you stick strictly to shortish, tight single-player games. Or local multiplayer, I guess, since it's hard to binge that until 3AM on a regular basis, for obvious reasons. Leveling concepts, lengthy turn-based games, randomness of rewards, and online/social components are all especially dangerous.

Actually point 4 goes for most things, now. It's kinda _too_ fast & easy to get... well, almost everything. I think there's a reason an unfettered will and easy gratification aren't usually things depicted as _improving_ characters in fiction, for example, and often do the opposite.

<comment><USER21> I think your analysis is spot on. Regarding that last part, I would add another disturbing argument. Some things are definitely easier to get, but the things that matter the most such as strong relationships or a sense of being useful and valued in a community are arguably harder to come by. Modern games and porn mimic having access to these needs and draw people in but fail to provide real satisfaction so the individual ends up like a moth on the lightbulb that burns it. You are under the illusion that your life is going well while at the same time you can sense that it isn't.</comment></comment></comment></comment>


Youtube Overtakes Google To Become World's Second Most Popular Website - <AUTHOR> http://news.yahoo.com/s/prweb/20080216/bs_prweb/prweb702003_2 <comment><USER2> Did anyone else dismiss the entire article after reading the first five words?

<comment><USER3> Currently Alexa ranks

1\. Yahoo

2\. YouTube

3\. MSN Live

4\. Google

This seems more than a bit fishy to me. Either Alexa is wrong or all of us are living in a bubble.

<http://www.alexa.com/site/ds/top_500>

</comment></comment><comment><USER4> Was this supposed to be news, or a press release for Kevin Riley?</comment>


Announcing gopass – A 'pass' compatible password manager for teams - <AUTHOR> https://www.justwatch.com/blog/post/announcing-gopass/ <comment><USER2> > Second, with all due respect to the original author zx2c4 (who is currently > working on the very promising WireGuard project)

Indeed I am working on WireGuard. But I haven't forgotten pass. We're currently working on a new release.

> the project proved to be a wild bunch of hotwired bash scripts that mostly > looked like they were written as a one-off job

I very much disagree with this silliness.

<comment><AUTHOR> First of all: Thank you for pass! We've been using it a lot internally and just because pass is so awesome, we decided to start gopass.

We use Go for almost everything at JustWatch and that's why we decided to rewrite it in Go as this would allow us to add even more features with better abstraction in the future. Bash just didn't feel like the right fit for that.

<comment><USER3> I looked at the code for pass recently, and thought it was a nice example of something where bash is absolutely adequate.

You point out (in discussing the design of pass):

> There is one slight drawback to all the simplicity, and that is an > information disclosure inherent to the design: pass stores all folder and > file names in clear text, so even if you fully trust GPG, you should > probably not put this repo into a public place like Github, because this may > expose your account names and other metadata.

What's not completely obvious from a cursory read is whether gopass improves upon that. Also, the multiple stores feature looks like it might be quite nice, but a lengthier example would be very helpful!

Edit: improve clarity

<comment><USER4> I was just thinking the same thing and was wondering if I missed that? I have been working on a similar project for keeping bookmarks and haven't found (yet) an easy way to obfuscate directory and file names in a way that doesn't make the tree structure look like a mess but still makes it difficult for the majority of people to "crack".

</comment></comment></comment></comment><comment><USER5> I'm pretty excited about this actually. Thank-you so much for your efforts. I've been using pass for awhile now, and I really love what it does, but it's a case where it feels 90% finished.

I have one desperate request; colour output as an option. Every time there is an update to pass (or I need to reinstall) I need to edit the file and change the options from " tree -C " to " tree -n "

This is a pain in the ass. I am visually impaired. The 'default' dark-blue that tree uses for directories is unreadable to me.

My two choices for dealing with this are to use DIRCOLORS or edit the pass executable. I'd prefer to not muck about with my environment settings. (as I do not normally see any colour output)

Anyway; awesome project!

<comment><AUTHOR> [https://github.com/justwatchcom/gopass/issues/4](https://github.com/justwatchcom/gopass/issues/4)

I just created an issue for that. Shouldn't be that hard to support it. Feel free to subscribe to the issue on github or comment any thing that's missing. Thanks!

</comment></comment><comment><USER6> > There is one slight drawback to all the simplicity, and that is an > information disclosure inherent to the design: pass stores all folder and > file names in clear text, so even if you fully trust GPG, you should > probably not put this repo into a public place like Github, because this may > expose your account names and other metadata.

This is my concern with pass. It's an awesome tool, but it _really_ needs to figure out a way to hide the filenames. I think this is doable (after all, encfs has the same need, and does it well), but I don't know if the pass team have the will to do it.

> First, the project is curated in a traditional mailing-list based approach > that was pretty unapproachable compared to a modern Github based workflow.

Sigh, not this again. I think that I prefer email vice a proprietary, centralised single point of failure like GitHub, and I know that I'd rather not work with someone who considers email unapproachable.

If your email account is unmanageable, _fix it_. Email's a really, really valuable tool; don't let go of it.

<comment><USER7> I use _git-remote-gcrypt_ [1] for configuring remotes for all of my local Pass repos. I just point the 'gcrypt' remote to a file in Dropbox and voila, a fully encrypted Git repo for syncing all of my individual Pass repos.

[1]: [https://spwhitton.name/tech/code/git-remote- gcrypt/](https://spwhitton.name/tech/code/git-remote-gcrypt/)

<comment><USER6> That _is_ pretty cool, although I'd _also_ like to have the filenames encrypted on my machine.

</comment></comment></comment><comment><USER8> Shameless self plug, I actually build a project called passgo, modeled after Jason's pass project as well. I'm a huge fan of pass' simplicity, but I really dislike managing keys:

[https://github.com/ejcx/passgo](https://github.com/ejcx/passgo)

The difference is mine does not use PGP and is instead password based, but the command line interface is almost identical. I now use passgo to encrypt and manage my ssh keys, etc.

<comment><AUTHOR> Saw that in the process of writing gopass too!

> The difference is mine does not use PGP and is instead password based...

And we still wanted to use PGP because crypto is hard. :)

</comment></comment><comment><USER9> We're the team behind gopass and worked hard over the last weeks to bring you this - happy to hear any feedback!

<comment><USER10> I've used QTPass. It provides support to encrypt password directories to multiple keys. It allows for multiple profiles as well, so one can have a team password store as well as a private one. It can also auto push/pull. Plus it has a nice cross platform gui.

Can you elaborate on the differences between how gopass and QTPass accomplish these things and why one might want to choose gopass instead?

<comment><USER9> Roadmap

        Be 100% pass compatible
        Storing binary files in gopass (almost done)
        Storing structured files and templates (credit cards, DBs, websites...)
        UX improvements and more wizards
        Tackle the information disclosure issue
        Build a great workflow for requesting and granting access
        Better and more fine grained ACL
        Be nicely usable by semi- and non-technical users

<comment><USER10> >Tackle the information disclosure issue

I'm curious how you plan to approach this one. One nice thing about passff is that it can find the right password file based on if the file name matches the domain. I don't need to drill down to my bank/paypal file when I visit paypal.com for instance.

It would be nice if a public github repo would suffice, but putting a git remote on a usb stick works pretty nicely and is private as well.

I'm considering writing an implementation myself for a different audience, so it is nice to pick your brains as you've probably given this a lot of thought too :)

</comment></comment></comment></comment><comment><USER11> Should tab completion work with gopass? Seems pretty unusable to me as a general purpose password manager without it, but it doesn't work for me out of the box with a `go get` source install.

Edit: found it on the github readme [https://github.com/justwatchcom/gopass#autocompletion](https://github.com/justwatchcom/gopass#autocompletion)

</comment><comment><USER12> I've been using `pass` for a very long time, and in combination with dmenu or rofi, it has proven to improve my workflow accessing passphrases a lot.

For 'teams' (and serv{er, ices}) I've started implementing some stuff via. vault-project [0]. The project looks really promising, sadly never got up- voted on HN so far.

The basic concept of vault is a centralized storage of secrets, managed via. Access-Control-Lists (ACLs) and accessible via. REST. Because the secrets are only accessible from a single point, you'll also have an overview of who did access which secret (called audit log). It's also possible to implement replacing all necessary secrets whenever someone has left/changed the group that got access to the secrets. Vault also makes integration in certain provisioning tools possible (though, that's something you need to spend more development in). Vault provides many database-backends [1], but also various other things (like ssh [2]).

Other things for managing secrets are:

\- keywhiz: [https://square.github.io/keywhiz/single_page.html](https://square.github.io/keywhiz/single_page.html)

\- keyringer: [https://keyringer.pw](https://keyringer.pw)

[0]: [https://www.vaultproject.io/](https://www.vaultproject.io/)

[1]: [https://www.vaultproject.io/docs/secrets/index.html](https://www.vaultproject.io/docs/secrets/index.html)

[2]: [https://www.vaultproject.io/docs/secrets/ssh/index.html](https://www.vaultproject.io/docs/secrets/ssh/index.html)

<comment><AUTHOR> Yes. Vault is awesome and we're planning to use Vault ourselves.

However Vault is mostly meant for machines to read the secrets and gopass is designed for humans.

</comment></comment><comment><USER13> Really weird that there's no mention of 1Password and its flexibility through both 1Password for Teams and 1Password Shared Vaults. I work with 2 different teams that share passwords like this and one of them has a shared vault that syncs through Dropbox for everyone while the other one is managed through 1Password for Teams so that we can update passwords and access at our discretion.

I'm very curious to see how this will stack up against those solutions because, to be honest, there is very little room for improvement from 1Password, in my eyes. They have a very, very solid and secure product and the UI is fantastic.

<comment><USER14> Not viable until they support Linux which they've put zero effort into doing even though it's been requested for years. I used to use it in Wine which was decent but the Chrome extension couldn't talk to the app which makes using it a terrible UX (open app, search for pass, copy, paste, over and over).

Literally the only reason I currently use OSX. A password manager...

Here's the 6 year old 35 page thread if you want to throw your vote into a black hole; [https://discussions.agilebits.com/discussion/2846/new- produc...](https://discussions.agilebits.com/discussion/2846/new-product- request-1password-for-linux/p1)

Instead they've become a SAAS Lastpass competitor which literally nobody asked for, in fact people were trying to leave LastPass due it it's forced-online nature (which naturally frightens people, having your passwords stored online somewhere).

<comment><USER15> > Instead they've become a SAAS Lastpass competitor which literally nobody > asked for, in fact people were trying to leave LastPass due it it's forced- > online nature (which naturally frightens people, having your passwords > stored online somewhere).

I've used 1Password for a number of years and loved it and recommended it to friends and family, but their offering now just confuses me. I don't even know what their product is anymore, and I _really_ need to be able to understand the attack surface of my password manager. So I've been looking into... other options.

<comment><USER14> I have zero faith in 1passwords engineering/security capabilities. They've been scooting by on "just good enough" for the last 5 years. They have introduced NOTHING new to the market in that time.

Someone will disrupt the market at some point and they'll be another has been because they've continuously been years behind of the market trends. I mean they literally just got into a SAAS offering and it had a hilariously botched launch; if you used their Win10 app (which you had to use to use their Family/Teams option) you COULD NOT LOAD A LOCAL PASSWORD DATABASE. For about 6 months I had to store all of my personal passwords onto my Team/Personal database because the win10 app did NOT have the ability to open a local password database. Now I've got 6 months worth of new passwords from my personal desktop stored on my work database and at some point I need to figure out a way to sync them together so I don't lose these passwords if I ever leave or so nobody else has access to them.

Absolutely blew my mind. Also, like you, I paid for the full app several years ago and here I am having to pay monthly, or yearly, I don't even know to get updates. I have zero idea as to how secure their online offering is.

Sorry, but this company makes me livid. If the other options weren't so terrible they'd be nothing.

Them acting like it's some engineering goddamned marvel to make their app work in Linux is just a slap in the face, especially considering how many people have made third party apps that can open their database in their free time.

<comment><USER13> I absolutely disagree. They have introduced all kinds of new features to the market and were the first password manager to support TouchID on the new Macs. If there's one thing that I can commend them on, it's their dedication to not making changes that might make their product less secure.

And your comment about having to pay monthly or yearly is either flat-out a lie or is completely disingenuous. If you own their app, you don't have to pay at all to update it. I haven't had to pay for updates to 1Password since I purchased it like 6 or 7 years ago. If you choose to sign up for their non-app SaaS offering, then of course you pay a monthly fee. To conflate the two is either dishonest or ignorant.

And no one's acting like it would be an engineering marvel. Maybe they don't simply have the demand to justify investing in a Linux app. If you don't like it, use their online service that has a Chrome extension. I don't really see what the problem is.

</comment></comment></comment></comment></comment><comment><USER16> I just spent a few hours to migrate our keepassx database to pass and make the team switch to pass.

Gopass seems great, especially the multistore support (which you can do w/ pass by setting an env variable), thank you for your work!

<comment><USER17> What made you want to switch?

</comment></comment><comment><USER7> I'm currently using Pass on most of my computers.

I was using Bruce Schneier's Password Safe (and various compatible apps: pwSafe on Mac and iOS and Password Gorilla on an older Mac and Linux boxes) and the big pain for me was merging changes.

I'd found that trying to use a single 'safe' via Dropbox was a recipe for disaster because some of the programs wouldn't cleanly close the safe file, or at least one of them would occasionally complain about the state of the file. So I created a copy of the safe for each of my computers and devices. Then every 6 months or so I'd merge all of the safe files into a single file and recreate all of the device-specific files as copies of that single file.

But merging in Password Safe sucked. There was no way to review the differences between entries in different safes, other than manually inspecting entries. I don't believe either of the two versions (Mac and iOS) of pwSafe (both version 1) supported merging at all. Password Gorilla was actually the best among the bunch as it had a nice 'diff' window with which you could explicitly pick which version of several fields for an entry you wanted to retain. But sometimes I couldn't get its 'diff' window to fit on my screen so I'd have to plug my laptop into a larger monitor.

Using Pass with Git is _so_ much easier.

I've also been using _git-remote-gcrypt_ [1] to push my local Pass repos to a shared 'remote' file stored in Dropbox. It works great.

[1] [https://spwhitton.name/tech/code/git-remote- gcrypt/](https://spwhitton.name/tech/code/git-remote-gcrypt/)

The only painful aspects of Pass now is the weird behavior of `gpg` on Windows in Cygwin and the clunkiness of my current multi-repo setup. Hopefully running Pass under "Bash on Ubuntu on Windows" will mitigate the former. Given that Pass is written in Bash and that the various repo config settings are read from environment variables, it doesn't seem likely that the latter will get much better than my current setup, which involves sourcing a script to switch the relevant environment variables.

<comment><AUTHOR> I know the pain of managing the synchronization of your password store. That's exactly why we enable git by default now and auto commit all you changes like pass did before. For me it works great personally, but also with a team it's awesome. It just feels like working with people that know git on something not encrypted.

Regard the windows support we would be happy to get as much feedback on that as possible. Nobody of us uses windows with gopass. If you have any idea how to improve the experience please let us know. Thanks!

</comment></comment><comment><USER18> This looks great, I've been toying with something similar built on top of Keybase that I just use for personal passwords, but using KBFS means it should be simple to extend it to shared passwords, since you just store it in the `private/me,you` directory instead of `private/me`.

My concern with using something like this or pass is that I have to manage the distribution/backup of the store/vault/db myself - whereas I can throw my laptop off a cliff, buy a new one, login to Keybase, and my passwords are still there.

</comment><comment><USER19> I quickly looked to see what git library gopass is using, but it looks like git is just being called directly: [https://github.com/justwatchcom/gopass/blob/a6f88e079be193f8...](https://github.com/justwatchcom/gopass/blob/a6f88e079be193f82779abb49d89c90442c91edb/password/git.go#L32) . Surely libgit2 would work well here.

</comment><comment><USER20> Pretty neat, and addresses a space where no tools seem to exist.

Would be cool if it could leverage a GitHub public repo for password updates. Something like using the list of collaborators on a repo, iterate over their GH public keys, and push new encrypted files for each collaborator on the repo.

I suppose though, this would leak a lot of metadata on how the tool is being used, and would tie it too closely to GitHub vs just git.

<comment><USER21> > Pretty neat, and addresses a space where no tools seem to exist.

It's literally a port of an existing tool, so a tool DID exist.

<comment><USER20> The space is "team sharing" for passwords. My reading of the post says that's a net new feature.

Or did I miss something?

<comment><USER21> pass doesn't lack anything for "team sharing". You can add the GPG keys for multiple users ("team"), and they can all read those passwords.

From what I can tell, gopass adds nothing new here (they even brag about using the same format/interface).

</comment></comment></comment></comment><comment><USER22> There's a Chrome+Firefox browser plug-in which also uses a native binary written in Go: [https://github.com/dannyvankooten/browserpass/blob/master/br...](https://github.com/dannyvankooten/browserpass/blob/master/browserpass.go)

<comment><AUTHOR> Yep. I'm using that extension on Chrome everyday with gopass in the background. Works great! Now that we published gopass I wanted to take another look at the source of browserpass in the coming days. Maybe we can try to support both pass & gopass (with the new features).

</comment></comment><comment><USER23> I have a similar project that uses smartcards/HSMs/anything with a PKCS#11 interface called "hunter2":

[https://chiselapp.com/user/rkeene/repository/hunter2/](https://chiselapp.com/user/rkeene/repository/hunter2/)

</comment><comment><USER24> Hey there, Vault auhtor here ( not the Hashicorp one, ours is earlier). Wondering if you came across our project [https://github.com/franela/vault](https://github.com/franela/vault)

</comment><comment><USER25> so this intended to be unix focused, not something that could replace lastpass for example? been looking for something better than lp.

<comment><USER26> I'm a fan of 1Password.

<comment><USER25> 1password is ok but has issues tried them for about a year.

Lastpass does some things well but it's not had the greatest record on UX or on security.

1) The prompt to "create new site?" is so dumb it commonly saves URL junk as the homepage like [http://mysite.com/create-new-account?huge-long- querystring](http://mysite.com/create-new-account?huge-long-querystring). You have always manually edit the vault to keep it clean.

2) The form detector to auto-fill username/password often can't find the right fields forcing you to manually copy/paste credentials.

3) On iOS there is no way to autofill address/cc (identities) from the extension

4) They've been compromised, and even afterwards one guy found like 3 zeroday exploits in a weekend and thought it was so bad he couldn't believe people were using it.

The list goes on and on with primary usage scenario problems they could do better at but simply do not for whatever reason.

</comment></comment></comment><comment><USER27> Any example of a company where few people badly need to share password and there is no "team" where you can add new users?

</comment><comment><USER28> A comparison between this and Vault would be super useful.

<comment><USER9> Vault is pretty cool as well, but hard to set up correctly (you need your own PKI for serious use, etc.) - it's sweet spot are server sided and app secrets used in production, while gopass is meant to cater for all kinds of shared secrets in distributed teams.

<comment><USER29> I don't understand the distinction.

Vault's sweet spot is automated generation and revocation of credentials which are given to authenticated clients (like creating a one-off keypair for an SSH session & giving the private part to the user and allowing the server to read the public part).

We're currently testing the waters of migrating our pass-like shared password store to vault (so we can grant authorization to automated scripts to read certain shared rotated creds).

<comment><USER30> I would very much encourage anyone to use Vault to manage secrets consumed by machines, but for personal credentials it's maybe not the best fit.

<comment><USER9> One of my ideas was using Vault as an alternative backing store for a gopass mount actually. And then it's Vault for company secrets (and no hassle with keys due to central PKI) and gpg for private stores (fast & simple to set up on your own).</comment></comment></comment></comment></comment>