Ask HN: Thoughts on Rich Hickey's advice on becoming a better developer? - <AUTHOR> Hi HN,
Very recently I stumbled onto a comment by Rich Hickey which I've reformatted in a gist[0] (unfortunately, the source is no longer available). Honestly, Rich Hickey is one of my programming heros and I'm a big fan of his ideas about programming. However, reading the response below, I couldn't help but feel disheartened.
Rich Hickey says - You don't level up by switching games all the time, but by sticking with one long enough to gain advanced skills. And, you need to be careful to recognize the actual game involved. Programming mastery has little to do with languages, paradigms, platforms, building blocks, open source, conferences etc.
Quite seriously, this is more or less opposite of what I've lived by in my career till now. As a backend engineer I can't help not getting excited by React or not spending a month learning OCaml or building side-projects tangential to my 9-5 line of work. The worst part is, that till now I always felt that it is a sure fire way to level up as a developer.
The confusing part is that Peter Norvig, another great programmer has quite the opposite to say[1] (although one can argue that overall they mean the same) - Learn at least a half dozen programming languages. Include one language that emphasizes class abstractions (like Java or C++), one that emphasizes functional abstraction (like Lisp or ML or Haskell), one that supports declarative specifications (like Prolog or C++ templates), and one that emphasizes parallelism (like Clojure or Go).
At this point, I'm really confused and I spent better part of the day mulling over whether I should go through the lectures of a recent Coursera course that I'm doing or should I dive deeper in my current stack e.g. Python / Django.
What are your thoughts? Is there one school of thought that you agree to?
[0] - https://gist.github.com/prakhar1989/1b0a2c9849b2e1e912fb [1] - http://norvig.com/21-days.html <comment><USER4> Whenever a question like this comes up among the people that I am mentoring, I like to show them the "T-Shaped Employee" section of the Valve Employee handbook [0]:

 _" We value "T-shaped" people.

That is, people who are both generalists (highly skilled at a broad set of valuable things—the top of the T) and also experts (among the best in their field within a narrow discipline—the vertical leg of the T). This recipe is important for success at Valve. We often have to pass on people who are very strong generalists without expertise, or vice versa. An expert who is too narrow has difficulty collaborating. A generalist who doesn't go deep enough in a single area ends up on the margins, not really contributing as an individual."_

[0] - [http://www.valvesoftware.com/company/Valve_Handbook_LowRes.p...](http://www.valvesoftware.com/company/Valve_Handbook_LowRes.pdf) page 46

<comment><USER5> This is exactly why a lot of people want to do a start up, or at least start a side project that solves a specific problem. You get to to be the expert in that domain, and in order to get the complete product out, you need to be a generalist.

Another meme that's been thrown around is: "You are not the complete developer if you've not written a compiler." I don't necessarily buy that, but there is some merit: there is a lot of different skills required in a compiler, from domain modelling and DSL design, to theoretical CS like grammars and parsing, to very practical software engineering such as IO handling, string manipulation, encoding, documentation, etc.

<comment><USER6> > This is exactly why a lot of people want to do a start up, or at least start > a side project that solves a specific problem. You get to to be the expert > in that domain, and in order to get the complete product out, you need to be > a generalist.

Hm, funny thing you mentioned startups. Apart programming related startups, I don't think that startup-ers are "great programmers". I get the feeling that most startup programmers (not all of them, but most of them) are somewhere between average and novice level.

I get the feeling that most "great programmers" are not that interested in startup (making money, living the thrill or whatever).

Most famous programmers, work in big corps for medium-to-huge salaries and (most of the times) even getting paid to work on their side-projects (Dropbox pays G.V. Rossum for Python-dev, Heroku pays Matz for Ruby-dev, etc.).

<comment><USER7> FYI : Heroku and dropbox are not big corps.

</comment></comment></comment></comment><comment><USER8> Both are right, and they agree with each other. But you have to understand what they are talking about to get it.

The point of Peter Norvig's advice is that once one has learned 3 different ways to do one thing, it is easier to abstract out the fundamental principles and think about when to take one approach or another. Which makes it easier to understand the actual game.

Which leads into Rich Hickey's advice. Recognize that the game you are in is programming. Which is the art of keeping software doing what we want to it to subject to various constraints including timelines, changing requirements, and so on. This is not the accumulation of esoteric information. This is not the accumulation of prebuilt solutions. Those are necessary, but not sufficient. You need both a skill set and a mind set.

I used to like chess so I'll use a chess analogy. In chess, and many other games, there is a clear difference between tactics and strategy. Tactics is, "I do this, he does that, I respond like so..." Strategy is the abstraction across tactical situations to recognize things like the importance of controlling the center, that attacks naturally proceed along the line of pawn chains, and what affects the relative value of pieces in different situations.

You cannot learn strategy without knowing tactics. Because the accumulation of strategic advantages is useless without the tactical skills to notice and use the opportunities that arise. And mumbled slogans do not a coherent strategy make. So learn tactics first. But to become a great chess player, you will need to master strategy.

The same applies to programming. Programming tactics include languages, paradigms, platforms, building blocks, open source, conferences etc. These do not constitute strategy. Learn strategy. But you cannot do that without learning programming tactics first.

<comment><USER9> I like that: strategy enables tactics. Much like logistics enables strategy.

</comment></comment><comment><USER10> Programming languages matter some, but algorithms and data structures matter a hell of a lot more.

While it is true that learning different programming paradigms can help you evolve as a programmer, I strongly believe (I have been programming professionally for about 20 years) that that is far from the best way to evolve as a developer, and learning algorithms and data structures will help you "level up" faster and better.

The reason is simple. Programming languages are a medium of transforming programmer intent into something the computer can execute (perhaps indirectly). This is not an easy task by any means, but all an ideal (nonexistent) general purpose programming language can hope to achieve is the reduction of what is known as _accidental_ complexity. Programming languages vary only in how much burden, and -- just as important -- _what kind of burden_ they place on you when you commit your chosen algorithm from your mind to code on the screen.

Knowledge of algorithms, on the other hand, will help you tackle the far more important _essential_ complexity of the problem at hand.

So, in a way, focusing on programming languages is indeed a distraction, at least as long as you haven't yet familiarized yourself with the more fundamental -- and more useful -- tools of computer science.

<comment><USER11> When people talk about learning algorithms, what do they mean?

I recently spent a few hours reading about and implementing A* for the NPCs in a video game I'm working on.

Are you talking about being able to write A* and other algorithms from scratch with no reference material?

<comment><USER12> First of all, you should know that there exists an A* , and what it can be used for.

Second, you should know when to use A* or something else, the trade-offs etc.

Third, you should know how to implement A* , when needed, with reference material (you'd be surprised how many programmers can't read/understand the reference material even when its given to them, or don't know enough programming to put it in code).

Of course you could get by with never using A* or tries or whatever advanced algorithm, not even in some ready-made API form. E.g. if you just do some CRUD or some simple web programming. But for the kind of programmers we're talking here, those three are paramount.

The thing you mention, implementing it from scratch with no reference material might be impressive, but it's more of a circus act.

<comment><USER13> Aside from as a learning experience or display of prowess, what's the point of implementing A* yourself?

In my experience, knowing which prebuilt algorithms and data structures to reach for matters more than being able to implement them myself. Not saying there isn't value in learning or that it doesn't help flex the problem solving muscles, but in most software domains, I think that practically speaking there are more important skills to focus on after you've mastered the basics of time and space complexity.

<comment><USER12> > _Aside from as a learning experience or display of prowess, what 's the > point of implementing A_ yourself?*

Because for people working in those kinds of problems we're talking about (we started from Valve and games IIRC, but it could also be Google, Facebook engineers etc) you don't just download some off the shelf API.

You'll need to create something of your own to:

\- have the whole IP

\- mold it specifically to the domain logic you need

\- take control of it's memory and performance characteristics based on your constraints

\- implement it in the language your company uses, for which no ready made A* (or some other algorithm) is available

\- you'll need to make it talk to different infrastructure, libs etc

\- you might be the one writing the library API yourself

As I said, this is not about what a CRUD programmer will need. But as you can see everyday in HN, people write these and other algorithms all the time in their jobs doing more serious engineering.

</comment></comment></comment></comment></comment><comment><USER14> "Beware that an expert at X is not necessarily an expert about becoming an expert at X." \- Peter Seibel [https://twitter.com/peterseibel/status/471664135990566912](https://twitter.com/peterseibel/status/471664135990566912)

</comment><comment><USER15> I think you're overemphasizing Hickey's first thought. His second boils down to "be careful to recognize the actual game involved. Programming mastery has little to do with languages"

To me it sounds like he's saying "understand the underlying patterns and techniques that make good programs in any language" not "stick with one, and only one, language until you know it inside and out".

<comment><USER16> Yes exactly that. In the same way you need a camera to be a photographer, and you need to be competent in its operation, but the endless search for a better camera is not what photography is about.

</comment></comment><comment><USER17> I think what he's getting at is that to be a master programmer, you need to be master of something - and it doesn't really matter which language.

If you are thinking of learning a new language, ask yourself why. Is it because it's going to make you a better programmer? Is it because all the cool kids down at the Club House are talking about it? Is it because you're stuck with a problem in a language, and instead of overcoming that problem, you're just jumping to a new language hoping that language won't have any problems?

When you've really mastered one language, mastering a second one is much easier. Whereas if you learn the basics of one language, and then the basics of another, ad infinitum, you never really master anything.

Compare to learning to play musical instruments. Who is the better musician - somebody that can play Chopsticks on 20 instruments, or somebody that can play Brahams but only on the piano? The first has a lot more to learn than the second.

Finally, it's better to master a domain than a programming language. In the long run, it's more rewarding (personally and financially) to be the world's leading expert in, say, security in C++ than it is to be the world's 10,000th best developer in Ruby, Clojure, Go, etc.

</comment><comment><USER18> I think Hickey is referring to more of an abstract "level up", while Norvig is talking about a general accrual of specific skills.

Think how all programming languages can be reduced to lambda calculus or Turing machines. And think how design patterns and algorithms can exist across all programming paradigms. If you can master design patterns and algorithms in one general-purpose language, then to pick up other languages you just need to learn the syntax and idioms of that language.

On the other hand, a quick way to expose yourself to different programming concepts is to take a crash course in very different languages, as Norvig suggests. The risk with this method is that you never attain mastery in any one thing ("jack of all trades, master of none", s/trades/programming languages/)

I think Hickey is right in this one, but fundamentally they are talking about two different things. Hickey is talking about _mastery_ , while Norvig is talking about "programming success" ("success" is word with a slippery definition, but to be "successful" definitely does not require one to be a "master")

</comment><comment><USER19> In the venerable 'well actually' StackOverflow tradition of not answering the question: as a developer, don't consciously invest too much of your time trying to become a better developer.

Instead, set aside time to become a better marketer. If you're a solo developer you will need to get the word out to investors and customers about yourself and what you can do. Working for someone else, you'll additionally have to sell your ideas to your co-workers and management.

Even in just asking this question, you are demonstrating motivation to do your best as you create. However, your creations will typically be far better served by your ability to promote them.

<comment><USER20> If the OP's goal is to make more money, this might be good advice. But if their goal is to become a better programmer, it won't.

<comment><USER19> That is certainly a valid response.

Being able to convince others of the value of one's contributions tends to create an expectation for even greater contributions - this driving force can easily be directed toward improvement as a programmer.

</comment></comment></comment><comment><USER21> Rich Hickey is one guy and this is what worked for him. That does not mean that his experience generalizes to all developers. Listen to lots of people, perhaps weight their opinions based on their success and your admiration of them, and then make your own decisions.

<comment><USER22> I am not quite sure how to express it precisely, but the fact that in our field the phrase "Rich Hickey is one guy and this is what worked for him" doesn't sound ridicules, makes me a little sad. Mathematicians don't say "Pythagoras is just one guy and it worked for him."

<comment><USER21> On the contrary, I think exactly the same thing is true in mathematics; not everyone works or learns the same way, and assuming that imitating the path of one person, no matter how brilliant or successful, is the only way to succeed, is very shortsighted.

</comment></comment></comment><comment><USER23> When I started programming I was pretty bad at it. I didn't get good until I focused on "really" learning perl. I mastered perl fairly well quite a few years ago.

At some point I was no longer learning anything from perl and I tackled something different. Erlang was my next deep dive.

What Rich is saying has less to do with how many languages you've absorbed whether a lot or a few. What he is saying is that leveling up requires taking the time to truly absorb and understand what you are working with.

I'm fairly polyglot these days. But the number of languages that I know deeply is less probably about 3. With the time spent learning them measured in years not months.

Peter Norvig is actually saying something similar. He's advocating a slightly different route to the same goal. Learn the foundations of programming deeply. The 4 broad categories he lists are foundations of programming that any developer needs to learn deeply.

Both Rich and Peter advise investing the time to learn something thoroughly. They just came at it from slightly different directions. I imagine they would agree with each other though.

</comment><comment><USER24> I liked what I first heard described as "t shaped" people when I read the Valve new starter guide [0]. That is people whose experience covers a fair amount of breadth with pockets of depth. The breadth is good because knowing a lot about what is out there helps you know where to look when you encounter new problems. Depth is also good because you don't really develop your understanding of how things are put together and what the challenges are until you get into a lot of detail. Multiple areas of depth, particularly where they are related (say knowing oo and functional style programming well) are particularly useful because what you learn in one area expands on what you learnt from the other. You can start to really understand what the design trade offs were and what works well in different situations.

There isn't one right answer though. The answer depends a lot on what you want to do. Do you want to lead a team, become an architect, go contracting, become a consultant, go into academia, join a Google, join a start up, write financial software, help cure cancer, invent new ways to do things, become an expert? There are lots of ways you can develop a career in software and whatever happens will most likely be part chance.

Don't worry about it too much, except to make sure you don't get too comfortable in a particular area. If you keep trying to challenge yourself and doing things that are interesting, you will keep getting better. Doing things that are interesting to you is important because it'll help you avoid getting too hung up on what everybody else knows and will help fuel you through the parts that are painful or tedious.

[0] - [http://www.valvesoftware.com/company/Valve_Handbook_LowRes.p...](http://www.valvesoftware.com/company/Valve_Handbook_LowRes.pdf)

</comment><comment><USER25> Rich Hickey's advice is shaped from his experiences and following his advice can lead to his kind of career. Rich Hickey and Peter Norvig, although both successful, have different experiences and hence different careers. If you ask someone like Bill Gates, he'll have another much different twist to his advice. Each successful collection of skills (deep, shallow or mixed) will lead to certain unique career; which one you regard highly is up to you.

Although an important caveat remember is, following some successful person's specific advice may not even work for you if there's a big difference in your basic brain circuitry compared to his/her. Your best bet, IMO, is to commit to the projects you feel 'hell yeah!' for and say no to the rest (more about hell yeah vs. no here: [http://sivers.org/hellyeah](http://sivers.org/hellyeah)).

The bottom line is: Never ask advice of someone with whom you wouldn't want to trade places.

</comment><comment><USER26> I think the missing piece is here:

"I am not questioning the many benefits of broadening or learning activities, just the premise that they lead to any sort of mastery." \- Rich Hickey (from the same gist).

Norvig is speaking about becoming a better developer by becoming exposed to tools that solve problems in different ways, so that you can internalize those different problem-solving techniques and apply them when appropriate. But exposure alone has only a limited benefit - at some point being able to write a quicksort in a new language is going to produce diminishing returns. At some point understanding the advanced techniques offered to you by a programming paradigm is going to require studying that one paradigm to a greater level of detail.

Hickey is speaking about becoming a better developer through 'mastery' in the sense of thoroughly understanding a system, having the ability to acquire new information, identify and solve problems that comes only through extensive experience.

These are two different ways to become better as a developer. Hickey's point is that the 'skill ceiling' for the former is very low - once you've been exposed to a number of different paradigms, you can either continue learning even more languages for little marginal benefit, or you can begin to master one or more of the paradigms you've seen. And that mastery builds a whole different set of skills that will make you a better developer no matter what toolset you end up using.

> I can't help not getting excited by React or not spending a month learning > OCaml or building side-projects tangential to my 9-5 line of work...it is a > sure fire way to level up as a developer.

Do you feel the side-projects you've worked on in the past have made it easier for you to work on your job, or your current side-projects? Have they given you more insight? Do you come across solutions more easily because...

* you've seen and solved a similar problem before?

* the month you spent working on OCaml gave you insight into a functional way to reframe the issue?

* your exploration of react.js gave you a better appreciation of client-side engineering issues?

* something else?

If you can honestly say 'yes', you are almost certainly leveling up as a developer. Otherwise, you might want to examine whether your side-interests amount to more than dilettantism and whether you might be better served spending some time focused on a single topic.

</comment><comment><USER27> I don't think the two are mutually exclusive. You need both variety and focus to excel. The key is to know when to shift gear between the two modes. Why don't you just do whatever that you find fun and challenging? That's usually the best indicator of what you should do.

<comment><USER28> Yes. Donald Knuth sometimes quotes Huxley - a good education is learning something about everything and everything about something. There should be a center to studies or you're all over the place, but having extreme tunnel vision is not helpful either.

</comment></comment><comment><AUTHOR> Clickable links -

[https://gist.github.com/prakhar1989/1b0a2c9849b2e1e912fb](https://gist.github.com/prakhar1989/1b0a2c9849b2e1e912fb)

[http://norvig.com/21-days.html](http://norvig.com/21-days.html)

</comment><comment><USER29> You can't master something by switching games all the time, by definition.

"... switching games _all the time_..." is the key.

What does "all the time" mean? Does it mean not dipping your toe into new waters? Of course not; exploration also deepens your understanding of where you currently are.

Does it mean never changing your path? Of course not, but changes in direction should be done mindfully, not at the whim of the current front page of HN (or anywhere, or anybody, else).

"Spending a month 'learning' OCaml" is barely divergent from the path you're on. It will affect what you're currently doing, to some degree. A month is (essentially) nothing.

In any case, everybody is different. The real question is whether or not _you 're_ happy with the direction you're headed.

<comment><USER30> Yes. Learning new languages and libraries is helpful to a point, but learning _all_ new languages and libraries is a distraction.

</comment></comment><comment><USER31> I totally agree with Rich Hickey. Very important to have mastery in one language at least. Once mastered feel free to experiment with other languages, but do not just learn several languages and know them only at a surface level

</comment><comment><USER32> My thought (predating your post) is that there are two ways you can stay on the edge of your comfort zone; one of these is by expanding laterally into things you don't already know much about, and one is by expanding vertically into things you do already know about.

The risk of expanding laterally is that you can pretty much surf on a fairly clean wave of documentation, examples, tutorials, SO q&a and github code to solve most of the "problems" you face (and many of these "problems" are shit like "learning an API" or "gotcha config files"). This isn't to say that this is how expanding laterally will work in every case, especially when you're picking up a lot of knew paradigms.

The upside to expanding vertically is that you're eventually going to run into problems or questions that you can't just research your way out of. Not to denigrate all of the other learning we do, but I think these times when we have to go out into the wilderness and test ourselves against problems that, even if only by dearth of documentation, are effectively novel, are when a lot of growth happens.

Of course, it's perfectly possible to work in one domain and never have to really stretch yourself. It's also possible to be perpetually expanding laterally into technology so new that you spend more time testing yourself in the wild than many who go "deep" on more thoroughly-trodded ground.

</comment><comment><USER33> I would go with the sort of answer that dodges anything concrete: It's not about which specific things you do, it's about doing things that seem scary and unfamiliar.

For some people, that means learning to write really tight low-level code for tiny hardware. For others, incorporating more advanced mathematical constructs. And for a third group, learning how to design a certain category of applications really well.

To round yourself out means not to stay within your comfort zone, but to attack the missing parts as well so that even if you aren't a master at those, you have working knowledge. This is also familiar to those who have studied drawing or playing musical instruments - there are many cases where you can get by with what you already know, but would do better if you took the time to study a technique in detail.

When Hickey says "you reset from zero" by only doing new things, he's specifically referring to repetitively relearning basic tasks in software development. That's the stuff that you're guided into looking at constantly because there are slick presentations and hypemen trying to get you to pick up their tool, and their tool has to look easier(i.e. more basic) than the other tool because that's the only way you'll pay attention to it.

If your approach involves something that is kind of challenging that you build from scratch, with new domain problems, that is a Good Thing and you'll surely get something out of it.

<comment><USER34> I would extend this further and suggest you challenge yourself by following your interests. If you happen upon a C++ graphics library that your favorite game is built upon, your curiosity will be enough to propel you forward and learn new things based purely on intrigue.

If ultimately you go the route of wanting to learn a particular programming paradigm, I would still encourage you to try to solve a problem that resonants with you personally. The problem itself becomes the method by which you learn programming and not the other way around.

</comment></comment><comment><USER35> Wow, I'm quite literally floored by what is completely and utterly missing from this entire discussion: The User.

It doesn't matter what or how you program, as long as you have: The User.

If you have to spend your time competitively learning some new-fangled slippery, slidey, pretty little ball of tangled chains of bits and pieces of - whatever - it doesn't matter for a fig if you don't have: The User.

With The User as the principle focus of your goals and career as a developer, programmer, coder, hacker, binder-of-pretty-gthings, you can escape all misery and just learn to enjoy the ride completely. Because its The Users' bus, and if you don't have The User driving it, it ain't going no-Where.

So the whole perspective about Industry standards and real reasons for just using one thing, and one thing only, and sticking to it and becoming good at it: this is only ever acknowledged, worth a fig, if you have: The User. I've still got users of 20+ year old software stacks that I'd love to replace with some newfangled jangle. Have you?

 _That_ is how you prepare yourself for a career, in service of The User.

<comment><USER36> Question was how to get better as a developer and engineer--relying on The User is the worst possible way of solving that problem, because they don't care anything about the tech...they just want results.

Your advice is correct about how to get better serving users, but that was very much not the question being asked.

<comment><USER35> Well, I really mean that in spite of whatever you do to improve yourself as a developer/engineer, it doesn't mean a thing if you don't have a User. Ever.

And even if Developers can themselves be Users, in the sense that they gain some sort of joy out of consuming the developer tools of the trade, its still just navel-gazing until there is actually some sort of _use_ out of the activity.

Real developers build things for users. It doesn't matter how good or bad they are, as developers, if there is a User: win.

</comment></comment></comment><comment><USER37> You have to learn the big concepts in computing. These include low-level details like how a Von Neumann architecture works, memory and pointers, I/O, how the OS, network, and file system work, etc. But it also includes useful abstractions such as data structures and ADTs, algorithm efficiency, objects, functional programming and lambda calculus, design patterns, and big-picture questions of what kind of system should I be building in the first place. (Should I build one big monolith? Should I break it down into pieces? How should they communicate? and so forth)

This will necessarily require familiarity with a variety of languages and ways of thinking about code. When you find a particular style of building software that suits you well, you can invest a lot of time in becoming expert at building that kind of system, making it run fast, and making it clean and maintainable. But you will also have a deep well of knowledge to draw from because you've looked at the computing field from a variety of perspectives.

In other words, both Hickey and Norvig are right, to an extent.

</comment><comment><USER38> WRT Norvig if you learn clojure to learn functional and parallelism, you'll win, but if you learn clojure so you can write visual basic in clojure you'll lose. He's giving a necessary but not sufficient option for each broad field you need to understand.

WRT Hickey if you "gain advanced skills" by using the best language for the job, then the language mattered with respect to the learning process. But once you understand the "fun" of concurrency, the language you used is no longer relevant. You can talk ACID compliant transaction using clojure STM as a vehicle or your favorite SQL, the language just doesn't matter any more.

The point of a reading primer "see spot" "see spot run" isn't to learn about dogs, and once you can read, you don't need the primer anymore. There are learning techniques and textbooks that are better at learning than others... the the mastery, if it ever comes, came from sweat, not the book itself.

</comment><comment><USER39> What you do to level up depends on your level now.

Novice: Keep the scope small. Try not to get confused. Concentrate on small successes and learning the basic "rules".

Beginner: After building a base, branch out and expose yourself to areas where the "rules" are different.

Intermediate: You have a base and you also have some idea that there is more to the world than your base. Write a lot of code. No, really a lot. Read a lot of code -- twice as much as you write. Become an "expert" in an area and create an understanding of why the "rules" are the way they are.

Advanced: You are an expert at something, but you realize that you have only scratched the surface. Question all the "rules". Throw them away. Make new ones. Explore the world searching for abstractions that you missed before. Write a ridiculous amount of code. No, I mean epic amounts. Read 4 times as much code as you write. (My negative alter-ego adds: Despair as you realize that you aren't so much looking for a needle in a haystack as a needle in a dung heap. Despair even more when you realize that the dung heap was made by you).

Novice Again: You have mastered a few subjects. You have rewritten the rules. You now have reached a state where you can clearly see that you understand nothing of consequence. Keep the scope small. Try not to get confused. Concentrate on small successes and learning the basic "rules".

Note that it may take a lifetime to reach the final stage and I would say that the vast majority of programmers don't reach it. Scale your expectations accordingly.

Finally, to comment on your question about whether your should review your Coursera course or dive deeper in your Python / Django stack: Write a lot of code. Doesn't matter what. Hey, how about implementing something in Python on the topic of your Coursera course? But not a toy -- write at least 10,000 lines.

</comment><comment> FLUX-YOU You already have a job so I'm guessing you have the practical skills needed to get paid, otherwise I would recommend sticking to one stack.

Personally I feel Norvig's advice wins out here, even if you just run through books to get some of the basic ideas and never build anything with the additional languages (you should though!). The point is to get out there and try new things and maybe something will get your imagination firing on all 12 cylinders and help you decide.

I'm not even sure what Hickey is getting at as he's stripping out all of the things that we use to communicate between one-another about programming and putting some nebulous concept (that isn't explained) as the core of programming mastery. 'Late game' paradigms, building blocks, and platforms ARE the advanced skills!

</comment><comment><USER40> The musician analogy is poorly chosen. Playing an instrument is a highly physical, hand-eye(-mouth)-coordination challenge.

But mastering a platform - be it a language, a framework, a library - <USER2> help make you a much better developer, it is true. If you don't know enough to exploit the relevant features of the platforms you're using, you'll produce a poorer solution than otherwise. You'll use more code, or fail to encapsulate. Your solution will be harder to maintain and adapt.

But then again, if you're busting your ass writing parallel applications in C++, managing locking and threads, when you could be using actors in Akka, your solution will have the same shortcomings compared to the one you could have developed had you been aware of the qualities of that platform.

So yes and no :-)

<comment><USER41> Learning to play an instrument taught me how to learn complex skills in general. There are similarities in the processes of learning almost anything - be it martial arts, glassblowing, flamenco dancing or web programming.

In the beginning, everything is new and it can be overwhelming. Humbleness and discipline or dedication is required in the beginning. Small successes lead to pride and enthusiasm, and gradually, over years, your skills grow. In playing guitar and glassblowing, i recall various times where I was satisfied and or pleased with my skills, and then looked back at those times years later and was amazed by how much more sophisticated my skills have become.

With that experience, I never felt frustrated learning Python, JavaScript or SQL because the process reminded me of my previous learning experiences and I knew then all I needed to do was put in time and seek information.

As an aside, I might note that there are mathematical aspects to creating, playing it and even appreciating music. Every system of music has rhythm and a set of tones that is based in someway on numbers – the 12 notes of the western octave, time signatures, 8th and 32nd notes and so forth. Learning the complex relationships of systems like jazz chords on the guitar or piano is very much a mental exercise as well as a physical one.

</comment></comment><comment><USER42> Breadth and depth are both very important. Too much breadth and you have a hard time getting any non-trivial job done. Not enough breadth and you use the wrong tool for the job. If you want to be the best dev possible, it's probably good to keep up with the latest in terms of adding those alternative solutions into your own conceptual framework, but it's distracting to spend too much time with them unless they truly are the best tool for the job at hand (and marginally so in terms of time invested).

I suppose it's like reading non-fiction books. As soon as you believe you understand the author's perspective in sufficient detail, it's often best to set the book aside and move on to the next one. You are under no obligation to read every page.

</comment><comment><USER43> In my experience great developers rarely focus on the tools (except if that's what they're building of course). It's like with great authors; what you have to say is far more important. Most great books were written on a typewriter, some even with pen and paper.

</comment><comment><USER44> Theoretically both works - the single system depth will allow you to encounter new issues / see how the stuff you developed panned out.

But that's too slow a process IMHO due to how organizations work and i wouldn't do it unless the field, you are in, is really deep to start with eg gaming/distributed computing etc. You also face the risk of being in the same rut over and over again and all of a sudden the rug could get pulled from underneath you (hopefully so that you will learn new things).

I would say stick around until you gain expertise (and actively do so) in the domain and know its problems and its typical solutions and then move on 3-4 yrs ?

I was shoved around due to market forces ... its the best thing that happened to me IMHO

</comment><comment><USER45> I enjoy listening to Hickey talk in abstractions because it always gets grounded in practical considerations. I suspect the "actual game" is solving problems. At the end of the day, that's my understanding of why he wrote Clojure and Datomic recently and switched from C++ to Java earlier in his career.

Because Clojure was targeted at working Java programmers who might benefit from the power of Lisp and working Common Lisp programmers who might benefit from the power of the JVM, I don't really see any contradiction between Hickey's quote and Norvig's. For each, the reason to know "another language" is it helps a person solve problems.

</comment><comment> art-of-code There's no point learning 10 new languages if what you can do with it doesnt go far for example from a normal CRUD application/Hello World application. Just set appropriate goals. In the end what you will be very good at is creating CRUD applications. Be objective in what you will be learning. For example, being a backend developer, you can learn new tech that further augment your skills.

For example use Ruby/Rails on the backend or a web app, learn Objective-c to create an app that gets data from that RoR app, and maybe use go to create an API for a section that is performance heavy, etc... So that everything builds up. You need to establish goals.

</comment><comment><USER46> Valve has a concept of T-shaped people. You have a broad range of skills and you have one domain that you know really well. Know 8-12 languages, by good with 2. Similarly, if you are marketing guy knowing what EBITA is may help you.

</comment><comment><USER47> I don't see these contradicting each other. I'm also a huge Rich Hickey fan (my main language is Clojure at the moment), and he certainly has emphasized the benefits of a broad base of knowledge and experience in various talks.

But here he is saying that you can't only explore the breadth of programming, you also have to dive deep at some point and get the experience of mastery in something. I can't see either one disagreeing with the statement that you want to have some breadth of experience first but that mastery only comes afterwards from focus.

</comment><comment><USER48> I think you need to have a few languages in your arsenal(but not too many), I like php, python and clojure for example. This doesn't make me an expert to all of them but given the proper time I am able to create any app in those languages.

Apart from this, it's true that you need to invest time in learning how to architecture staff... unix, networking, programming internals, keeping yourself up to date with whats going on in chaching, queuing, databases. Patterns and solutions to real life problems are have common solutions to any language/platform.

</comment><comment><USER49> Both. You get a better understanding of when/where to focus by understanding what the similarities and differences are between languages. I'm better now because I've done PHP, VB, Java, C#, Groovy, Perl, Ruby and some others, even though I focus about 90% of my time on just 2 of those areas.

You get a better idea of what 'advanced' is both by diving deep in to one language but also by digging in to other languages - seeing how they do stuff, what's possible, what's elegant, what's a hack, etc.

</comment><comment><USER50> No matter how deep you dive into Python / Django, you will not understand what's possible with Prolog. I think what Hickey is getting at is that you should be aware of what computers are capable of, not just Python / Django.

Re: parallelism, as a useful and simple exercise, try writing a load tester in Python and then try it in Go (simple program that hits yoursite.com as hard as your network connection will allow).

</comment><comment><USER51> I subscribe to a bit of both -- the Broken Comb approach. Being a little of everything but never getting deep into anything is just as dangerous as being a one-trick pony. [http://spin.atomicobject.com/2013/06/27/broken-comb- people/](http://spin.atomicobject.com/2013/06/27/broken-comb-people/)

</comment><comment><USER52> Do some things deep, others shallow and pursue your fleeting interests - <USER3> will contribute to your levelling up.

Just make sure you do become deep with some things otherwise you'll be just a dabbler. You need deep expertise in some fields to be a power developer.

</comment><comment><USER53> This seems to be the original discussion.

[http://jasonrudolph.com/blog/2011/08/09/programming- achievem...](http://jasonrudolph.com/blog/2011/08/09/programming-achievements- how-to-level-up-as-a-developer/)

</comment><comment><USER54> I think you have to balance the two and not put all your eggs in the same basket.

Choose one or two language and get mastery from these, but also look for other languages to learn from.

That way, you'll have a balanced portfolio.

<comment><USER54> Also, maybe look at Valve's "T-shaped person". That can be a useful guideline.

</comment></comment><comment><USER55> Do you want to be a really expensive Japanese sushi knife? Or a high-quality, extremely versatile Swiss army knife?

Those are the two career paths illustrated. Different people have difference preferences.

</comment><comment><USER56> Is my opinion that your dilemma could be better answered by reading: "Code Complete". Just read and apply as much of it every day, for next level :)

</comment><comment><USER57> From the moment you started focusing on the result (becoming a better programmer) and you forgot to enjoy the journey (why would you ask if you should go through the lectures of a recent Coursera course if that's something you enjoy doing?) you failed.

In my opinion, do what you enjoy doing, nothing else matters as long as you enjoy what you're doing.

</comment><comment><USER58> Where is the original discussion? Googling the text just gives me similar gists.

</comment><comment><USER59> Gotta do both, bro.

</comment><comment><USER60> > The worst part is, that till now I always felt that it is a sure fire way to > level up as a developer.

So here's the thing: you believed in something, were living by this and felt just fine. Now you've heard some other guy with famous name disagrees with that and you feel down and confused. Isn't that funny? To be blunt, I think it's simply ridiculous. Having "a hero" in the strong sense of it is a problem by itself, but whatever, here you're discussing a practical issue. You think there's some goal you'd like to achieve, there are some practical advises from several people on how to achieve it, some are contradictory, as always. If you have confirmed, that something works, what's the problem? If you didn't confirm anything and you don't know how to solve it analytically, the only option you have (well, at least in this case) is following some of the advices and see what works.

But I'll go as far as saying that even that indecisiveness isn't your problem. The problem is, as it often happens, that you don't know what you want. You believe there's _something_ you'd like to achieve, but you don't really know _what_. You never really formalized it, and hence you cannot judge if some advice would be helpful or not. Yet you strongly believe you want this "something", but as you don't know what is that, you cannot really decide on direction and it worries you. In that case only meaningful advice you can get is the one Cheshire Cat has given Alice, IYKWIM.

For what it's worth, I also have an opinion on that matter. I don't really believe in "mastery". I believe there's world full of things you can interact with and state of some things is different from that you'd like it to be, which produces a notion of _problem_ , which you are willing to solve. Solving some specific problem may require skill, domain knowledge, physical strength or something else. Telling me that learning to make good sushi takes 70 years will only make me yawn or chuckle, depending on my mood, but sure it takes a lot of practice. And, generally, to be able to solve skill-related problems you need to practice. However it is quite likely that subset of problems you'd like to be able to solve in some domain (even skill-related) requires very little to none practice, as you can resort to using better tools (maybe _humans_ ), some clever trick or getting _the essence of it_ is in fact pretty easy, when you have a good teacher.

So, as I don't believe in "mastery" both Hickey's and Norvig's advices mean pretty much nothing to me, and I partly agree and partly disagree with both. Specifically, I almost completely disregard the notion of "being not my domain", as I've repeatedly found that learning seemingly unrelated fields can improve my understanding of others and sometimes happens to be just handy (kinda point to Norvig). However I feel that as long as you have many enough options to cover all range of problems you'd like to solve, the less tools you use — the better it is for you, as it removes mental clutter and helps concentrate on actually _solving the problem_ , not thinking too much about "what is better option to solve it" (point to Hickey). The famous presentation, where Hickey compares programmers to musician, I find compelling, but completely ridiculous when you actually think about that, as being a programmer has almost nothing to do with being guitar player. I disregard popular saying about programming being an art. There're more strong opinions of mine, which I can support with arguments, but that isn't really on topic and I doubt it would be of any interest to you as my surname isn't Norvig nor Hickey.

 _But, yeah, well, that 's just, like, my opinion, man._

</comment><comment><USER61> He's 100% correct. Learning new languages/frameworks/tools is fun and can be useful if you have projects that can make use of them. But they don't contribute to making you a "better developer" very much after a point. There's diminishing returns on learning new languages. So, once you've learned a dozen, then learning the thirteenth or the twentieth will not contribute greatly to your overall developer skills.

Creating a new project unlike any you've done in the past will do more to contribute to your skills as a developer, whether that project is in a new language or one you already know, than just picking up a new language and making your 10th simple blog.

</comment><comment><USER62> I'm going to have to agree with Hickey on that one. But then again, imagine the horror of dedicating years of your life to a language that turns out to be complete garbage.

I also think you need to take into consideration that the Norvig essay is dripping with hyperbole.

</comment><comment><USER63> It's a breadth and depth thing. You need both.</comment>


Jack Dorsey believes Bitcoin will be the world's sole currency within 10 years - <AUTHOR> https://www.yahoo.com/finance/news/jack-dorsey-believes-bitcoin-world-214436542.html <comment><USER2> No thanks.</comment>


How the Economic Machine Works (2014) - <AUTHOR> http://www.economicprinciples.org/ <comment><USER2> This is a very good explanation for the debt cycles and the role of banks, gov't, central bank et al.

There is one point it doesn't explain, though. It appears that the severity of the debt cycles can be reduced and social stability improved if the economy weren't fueled by credit to such a degree ($3 trillion in money, $50 trillion in credit, wow). So why have so much lending? The video does briefly answer that question with the need to finance economic investments (i.e. things that can improve future income, e.g. a tractor).

That is only a partial answer. The narrower version of the question remains: why do we need so much lending for consumption? Is there any benefit at all in financing consumption with debt? It does increase present spending and economic activity, but only at the expense of reducing future spending and hurting future economic activity.

<comment><USER3> > why do we need so much lending for consumption? Is there any benefit at all > in financing consumption with debt?

The benefit is for corporations. And allegedly that trickles down to people/employees. But that's obviously not the case for this current recovery in US. It's a sham.

<comment><USER4> _The benefit is for corporations._

I don't think that's true. Low interest rates benefit everyone as the cost of lending decreases.

<comment><USER5> Do low interest rates benefit savers? For example, senior citizens trying to live off the interest earned from their savings?

<comment><USER4> In the short-term it certainly benefits consumers who are using debt to finance their consumption (e.g. houses, cars).

In the long run (at least for the housing market) the benefit goes away as housing prices adjust to reflect lower borrowing costs.

</comment></comment></comment></comment></comment><comment><USER6> Ray Dalio wikipedia article:

[https://en.m.wikipedia.org/wiki/Ray_Dalio](https://en.m.wikipedia.org/wiki/Ray_Dalio)

</comment><comment><USER7> Some things he says in this video bug me.

1\. "Printing money doesn't always cause inflation." \-- Printing money causes inflation under all cases unless money is literally destroyed at the same rate it is printed.

A loan temporarily inflates the economy until it is paid off. By replacing credit with printed money you turn the "temporary inflation" into permanent inflation.

2\. "Increase your productivity faster then your income." \-- Are you kidding me? I can't speak for everyone but most people in society want to be rich and well off. That means achieving income that is far greater then what is humanly productive. Even Elon Musk as hard working as he is cannot achieve his level of income off of his own productivity alone. He had to build his wealth off the shoulders of others (aka employees). By telling people to be productive for less income he's basically telling people to work harder and don't ask for a raise.

If you're not being paid an income equivalent to the amount of work you do, then the extra value generated by your work will, of course, go to your employer. This increases income disparity and decreases consumer buying power.

Here's what I advise instead: Increase your productivity but demand that your income increases at the same rate. Be paid what you're worth. It helps the economy.

3\. He fails to elucidate where income comes from and thus fails to model one very important aspect of the economy: The money cycle. The economy isn't just income coming out of thin air to facilitate transactions of product and services. Money moves in a cycle, it flows from employer to employee as wages then back to the employer when the employee pays for products. The total amount of money cycling through the economy would otherwise be fixed if it wasn't for loans and money printing.

<comment><USER8> > Printing money causes inflation under all cases unless money is literally > destroyed at the same rate it is printed.

Absolutely not! _De_ flation occurs _naturally_ in any growing economy--even when your currency is indestructible--as the same quantity of money-units is chasing a greater quantity of goods and labor.

Consider the case of a crew stranded on a deserted island, who choose to found a new civilization. They decide to use the 100 "buttons" they recovered from the ship as their currency since they cannot be forged on the island.

On day 30, a 1 button is worth a coconut.

On day 3000, the island is dotted with dwellings, fences keep in herds of domesticated animals, and a scattering of boats fishes offshore... A "button" is going to be worth a heck of a lot more than a coconut.

<comment><USER7> you're right. my mistake.

</comment></comment></comment><comment><USER9> Can anyone tell me what will happen to inflation when, let's say, in 50 years time we have a completely digital economy (e-money)? Would it not, in that special case, be impossible to stash the money under the proverbial mattress thus people may actually lose money simply by having it (in their current accounts, obviously)?

<comment><USER10> People are losing money by simply having it. Even if you store it in a normal bank account that gives interest rates inflation will eat up the interest and then some.

</comment></comment><comment><USER11> I wonder if General Equilibrium Theory were presented in a completely novel way, whether it could be popular on HN. Something like "Russian mathematicians come up with a decentralized way to solve resource allocation problems" or "How to solve all the world's problems with calculus".

</comment><comment><USER12> The most important part of this whole presentation is that credit drives everything. If you know how credit is coming into the economy you can anticipate credit cycles. Credit cycles are the only thing you have to keep your eye on in order to keep from getting destroyed in economic crashes.

The credit cycle stuff is well explained by Austrian Business Cycle Theory[1], but that's a brain bender and once you get it will make you totally unable to have an economics conversation with anybody who doesn't understand it either.

[1].[http://wiki.mises.org/wiki/Austrian_Business_Cycle_Theory](http://wiki.mises.org/wiki/Austrian_Business_Cycle_Theory)

<comment><USER13> That theory isn't widely accepted (like you'd see if you looked it up on wikipedia). mises.org is a libertarian organization advocating the austrian school of economics, which is often quite divorced from reality.

<comment><USER14> You've got it backwards. The Austrian school of economic thought is the only one that _actually corresponds to reality_.

You're not going to take my word it, but feel free to see for yourself. Watch their lectures on YouTube ("misesmedia"), and you'll get it.

<comment><USER15> The Austrian theory offers some important insights and a lot of it's ideas are valuable. That is why it is widely considered a precursor of modern credit cycle theory, but carrying it's conclusions too far without considering other factors such as savings rates, fiscal and monetary policy.

<comment><USER14> Just because you say so, I guess?

<comment><USER16> No need to take his word for it. If you look at the Austrian school theories you'll see that those things aren't accounted for. Another crucial element that isn't considered is velocity of money, and the concomitant effects on money supply. The Austrian school has a lot of important insights, but it omits several important factors. It has a good and useful set of ideas, but it's not the grand unified theory of economics that many libertarians (like me) wish it were.

<comment><USER14> Well, I just responded to your other post, where you were economically confused :)

Velocity of money? Concomitant effects, huh? .. I suspect you might be some sort of government shill though. Very few actual Libertarians don't see Austrian economics for the rational truth it is.

</comment></comment></comment></comment></comment></comment></comment><comment><USER17> [http://theeconomicmachine.tumblr.com/](http://theeconomicmachine.tumblr.com/)

good blog that uses Ray Dalio's thinking to examine various economies around the world.

<comment><USER18> I follow Bloomberg, FT, and sometimes the WSJ and I've never seen in mentioned that Dalio writes weekly updates on different global economies. I guess Ackman is getting all the press these days.

Thanks for sharing

<comment><USER17> ha, Ackman is so hot right now. And, its not Dalio. Just uses his approach to the markets.

</comment></comment></comment><comment><USER19> The Cultural and Spiritual Legacy of Fiat Inflation, by J. G. Hülsmann: [http://web.archive.org/web/20061102222328/http://www.mises.o...](http://web.archive.org/web/20061102222328/http://www.mises.org/story/1570)

</comment><comment> dj-wonk From Andrew Sorkins' commentary on: [http://dealbook.nytimes.com//2013/10/21/economic-theory- via-...](http://dealbook.nytimes.com//2013/10/21/economic-theory-via-youtube- and-cartoon/?_r=0)

> [Ray Dalio] dispenses with the way economists have long taught economics in > school, and instead explains the economy as if it were a "machine" that he > believes is much easier to understand and predict.

"Dispenses", really? Dalio is no small force [1], but his thoughts and models are, in some sense, just "another" model to add to the mix.

[1]: [http://www.economist.com/node/21549968](http://www.economist.com/node/21549968)

Here, my point is not to support or detract from Dalio's model. My point is simply that many people (and many journalists) don't seem to get what models are, at their core. They are tools.

Yes, sometimes traditional economic models get "too much" credit and mindshare. I like seeing alternative models. After taking a look at Dalio's snappy presentation, connecting _almost_ everything with a nice explanation, I really miss an academic presentation, with equations. (I'm not saying Dalio doesn't have them -- Bridgewater Associates certainly does.)

Both in the case of this presentation and in many mainstream accounts, the language commonly used in economic models sometimes lulls readers/listeners/viewers into conflating the model with reality. Don't let it. The world is complicated. If you want to force a complicated world into a simple model, you can, with varying results.

Here is my central point. Everyone, including all flavors of economists and Dalio himself, are peddling models. Don't let their claims of being "simple" and "mechanical" distract you. (Some people claim the opposite, e.g. "my complex model is the most realistic".) People will accentuate any aspect of their model. Like any good salesperson or marketer, they will find the words that engender trust.

(In modeling-speak, modelers often seek to build models that their audience will find intuitive. Models that are too non-intuitive, in their assumptions at least, sometimes get quickly discarded. Models with intuitive low-level behavior and non-intuitive higher-level behavior often garner a lot of attention, because they are deemed to be believable but surprising.)

What makes a good model? That's a long conversation. For now, I'll just say this: use some model(s) that are useful for your situation. It is obvious, but you'd be amazed how few people take this advice to heart. Perhaps they want the "best" model, which is akin to asking for the "best" car. In practice, many people go with the most familiar model, though many don't like to admit it.

I'm not saying models are bad. I am saying two main things:

1\. If you are using numbers (even rough ones) and seriously think that you aren't using a model, you are fooling yourself. I'll give three examples where people pretend that they aren't using a model:

1A. If you are shooting from the hip, then you are using an unspecified, perhaps instinctual, probably non-repeatable, model.

1B. If you are "just doing the numbers" then your choice of what numbers to include _is_ your model.

1C. If you are doing "theory-free" data mining, then you are still relying on some technique(s) to surface certain patterns. Ok, so you might not be using a specified model (such as linear regression with particular variables), but how did you select your variables? If you are using a SVM, what kernel are you using? If you are using a NN, how many layers and what configuration? These are still assumptions. Your choice of technique (and preference for bias vs. variance) will shape what patterns you find.

2\. Relying on too few models is foolish.

<comment><USER20> I don't understand how this video represents a departure from standard macroeconomic thinking. He presents the business cycle, with a boom as an inflationary period and a bust as a deflationary one leading into recessions, the idea of credit creating debt which can be an asset, a very simplified version of the role of the central bank (really, it's all very simplified, it's only a half-hour), and, most importantly, a complete lack of the insanity I'm used to seeing in discussions of economics.

In short, he might not be precisely the exact flavor of Keynesian which is in favor now, but he's obviously not a Marxist, an Austrian Schooler, a goldbug, an anarcho-whatever-you're-not, or any other variety of Flat Earther, so he seems fairly mainstream.

So he's presenting basically sound ideas (as opposed to "Sovereign debt is just like household debt" or "Gold is the only honest money" or "Bankers are pure evil class war villains" or "All government is bad") in a very accessible format. His models are simple, maybe even simplistic, but they're close enough to the mainstream that people who are otherwise out of the loop should be able to follow the discussion intelligently, as opposed to being terrified out of their wits that the government debt is a bigger number than their mortgage.

<comment><USER14> Spoken like a true sophist.

So anything that's not mainstream is just as crazy as thinking that the earth is flat, huh?

For example, it's decidedly mainstream to believe that ~2% inflation is a _good_ thing, mostly because governments say so.

But it's plain crazy to disagree, realizing that not a single sane person on earth actually _wants_ his purchasing power to _decrease_ , but that's exactly what the 2% inflation does to us.

<comment><USER16> Inflation doesn't decrease your purchasing power unless you're living on a fixed, non inflation-adjusted income, or from a limited pool of wealth which you keep in cash.

If you're doing productive work, you can expect your wages to keep pace with inflation, and if they're not, it's very likely that without inflation you'd be seeing wage cuts; your relative value as a worker is independent of inflation. If you're living off of stored wealth, you need to store it in the form of goods, not cash. Real estate, stocks, etc.

There are advantages to inflation. One is that it encourages people to keep their wealth invested in production (aside: This is also part of the economic value proposition for property taxes, which discourage non-productive land- hoarding). Another is that it discounts debt. Because debt payments are not inflation-adjusted and wages effectively are, making your payments gets easier over time. This isn't a good in and of itself, but it's a good when considered against the alternative possibility of deflation, which tends to create insolvency among borrowers. Of course, inflation can harm creditors who don't factor it into their interest rate, but this is less harmful to the economy as a whole.

The ideal would be a money supply that exactly kept pace with growth in production resulting in neither inflation nor deflation. But that's hard. Because mild inflation is not particularly harmful, and deflation is really bad, policymakers prefer to aim for mild inflation as a hedge against deflation.

<comment><USER14> Yes, salaries are a variable, but even if salaries do rise in sync with inflation, that doesn't make inflation good. It's still bad.

Nope, we can't expect our salaries to rise along with inflation - not in today's insane world.

      - http://www.pewresearch.org/fact-tank/2014/10/09/for-most-workers-real-wages-have-barely-budged-for-decades/
      - http://www.theguardian.com/money/2011/nov/23/uk-household-earnings-fall

.. and whatever you'd feel like Googling up.

>> There are advantages to inflation. One is that it encourages people to keep their wealth invested in production

That's not an advantage. Inflation does punish saving (which is bad to begin with), but also encourages risky investments. The higher the inflation, the higher the return on investments you need to not lose wealth, and the riskier your investments, the more likely you're to lose them.

So no, that's not good. Purchasing power increases are good.

>> Another is that it discounts debt.

Yes, this is why governments keep lying to us that inflation is good for us. They're trying to manage their massive debts, but they'll ultimately fail.

How about just not using money you don't have, or money you can't afford to borrow? Oh but that would curtail politicians' crony-capitalist spending, so we can't have that.

>> The ideal would be a money supply that exactly kept pace with growth in production resulting in neither inflation nor deflation

You're basically suggesting that our purchasing power should not increase. That's just absurd.

>> Because mild inflation is not particularly harmful

So even you acknowledge that it _is_ harmful, even if not to a large extent. But what do you get if there's 2% inflation for 10 years? It keeps compounding you know. How much of your purchasing power will you have lost by then?

>> deflation is really bad

No it's not. It's your purchasing power increasing. Everyone wants to get more for less, and that's what (price-)deflation means.

<comment><USER16> Sorry, you're badly confused about a lot of things, but it's not worth the effort to me to educate you. I'll just let you have the last word.</comment></comment></comment></comment></comment></comment>


How five employers are helping make hiring easier for neurodivergent people - <AUTHOR> https://www.virgin.com/entrepreneur/five-ways-employers-are-breaking-down-recruitment-barriers <comment><USER2> i wish more companies were more accepting, having both ADD and autism on my record doesnt help with my employment prospects in general. ive presently been unemployed for six months and im starting to struggle to see a light at the end of the tunnel.

what baffles me is how the mentioned 84% of people actually get by without being employed, i dont get any form of aid or benefits despite having 2 mental health conditions and a physically disabled hand but as far as im aware im considered to be capable of work and not entitled to any benefits, i currently get by because of the incredible generosity of my family but a lot of people arent so lucky to have such supportive people around them</comment>


Glowing plasma created by a high speed jet of water [video] - <AUTHOR> https://www.youtube.com/watch?v=_vTq8oGpqwM <comment><AUTHOR> This video was based off of a paper that was previously linked here: [https://news.ycombinator.com/item?id=16042367](https://news.ycombinator.com/item?id=16042367)</comment>


Instacart's Gig Workers Are Planning a Nationwide Strike - <AUTHOR> https://www.vice.com/en_us/article/4agmvd/instacarts-gig-workers-are-planning-a-massive-nationwide-strike <comment><USER2> I stopped using instacart because of their workers. The person who showed up at my door had the audacity to tell me I need to pay my tips in cash and not on the platform.

Well thanks for replacing half a dozen items with others that cost 3X. Trying to improve your tip? The extra cost comes directly out of it. Oh, and the produce you selected is awful.

Let them strike, I'm not giving them business either way.</comment>


Maldives island residents report sighting of 'low flying jet' - <AUTHOR> http://www.haveeru.com.mv/news/54062

<comment><USER2> Nothing is recording beautiful Maldives 24/7 that can be used to confirm/disprove this story?

<comment><USER3> Maldivian here. The army (MNDF) wasn't able to pick anything up from the surface monitor radars. There is no data to back this story outside of eye witness accounts from the residents of Kuda Huvadhoo.

Can neither confirm nor disprove :(</comment></comment>


Cassandra Evolution at Expedia - <AUTHOR> http://www.slideshare.net/esatterly1/datastax-expedia

<comment><USER2> 40 high-end RDBMS servers for _logging_? Yeah, not really a big surprise that there's an easy win there.</comment>


QUIC and HTTP/3: Too big to fail? - <AUTHOR> https://calendar.perfplanet.com/2018/quic-and-http-3-too-big-to-fail/ <comment><USER2> Regarding the headline:

I am pretty certain it won't fail, but that it will also take a long time to get rolled out and most likely won't see the usage rate (in applications, not worldwide requests/s) of TCP and HTTP/1.1.

The same already happened with HTTP/2\. Even though that one is available already for many years and yields noticeable benefits for some applications, there exists only a pretty low number of compliant implementations. Other applications/services are helping themselves by being behind HTTP/2 capable proxy servers. So I suspect the main areas where we would see HTTP/3 being used is Google services and some CDNs for a while.

Implementing these low level networking protocols is hard, and most organizations won't invest in the time and effort of doing it (or doing it properly). I implemented HTTP/2 for .NET ([https://github.com/Matthias247/http2dotnet](https://github.com/Matthias247/http2dotnet)), and it was for 2 years the only compliant implementation for that ecosystem. Nevertheless it saw not a lot of interest. I suspect something similar will happen for QUIC.

And regarding the IoT section:

The main challenge with constrained IoT devices is memory, and not necessarily computational power. This makes implementing lots of networking protocols which require higher buffer sizes super hard up to impossible. HTTP/2 would actually be a good protocol for IoT devices, since the permanent connection and logical streams e.g. decrease the cost for TLS establishment a lot compared to HTTP/1.1. And it's a lot easier to use for some use-cases than a message-based protocol like MQTT - e.g. for RPC, or large file downloads or uploads. However the memory requirements of HTTP/2 makes it hard to deploy it for those IoT scenarios - e.g. the default stream window size implies one should have 64kB of buffering per stream - which is immense on <= 300kB RAM CPUs. The other challenge is the lack of good libraries for these constrained devices. A normally dynamically allocating like nghttp2 might not work out there, and building a real embedded implementation is again a task that nobody wants to take on.

</comment><comment><USER3> A commenter on Ars, iAPX, put it best:

      > The problem is not HTTP over TCP, it is out-sourced Ads
      > and trackers.
      >
      > 67 requests, 1.0MB transferred, 1.48s with AdBlock Plus
      > and my own Tracker Blocking Chrome Extension.
      > 263 requests, 2.8MB transferred, 26.92s without any of
      > that.
      > This is the home page of Ars Technica as I write it (full
      > reload).
      >
      > Do you think that HTTP/3 will generate 4X less request,
      > will be 3X faster to transfer and will be 18X faster to
      > complete loading?!?
      >
      > This is not an HTTP problem, this a website design and
      > abuse of ads and tracker problem ;)
      > Google is trying to solve or hide a Google created
      > problem.

\-- [https://arstechnica.com/gadgets/2018/11/the-next-version- of-...](https://arstechnica.com/gadgets/2018/11/the-next-version-of-http-wont- be-using-tcp/?comments=1&post=36350073)

Because those requests include many different domains, the benefit of QUIC is substantially blunted.

<comment><USER4> Anti-bloat has been peddled for a long time, it hasn't worked, it's time to mitigate those effects with adblockers, your wallet and new protocols.

<comment><USER3> Sure, simply admonishing developers and companies to reduce bloat won't do much to improve the situation. But neither will QUIC. That's the point. All QUIC effectively does is add more complexity to the technology stack, making real innovation more difficult by increasing the fixed costs.</comment></comment></comment>


Volvo Cars Recalls 507,000 Vehicles as Probe Finds Fire Risk - <AUTHOR> https://www.bloomberg.com/news/articles/2019-07-22/volvo-cars-recalls-507-000-vehicles-due-to-faulty-engine-part <comment><USER2> This is a direct link to some of the recall notice from Volvo:

[https://www.volvocars.com/uk/own/maintenance/volvo- warranty/...](https://www.volvocars.com/uk/own/maintenance/volvo- warranty/recalls/notifications)

It seems that there is more information in the letters sent to consumers.</comment>


NSA Google Search Tips - <AUTHOR> http://www.wired.com/threatlevel/2013/05/nsa-manual-on-hacking-internet/?cid=7829534

<comment><USER2> As the previous discussion of the actual NSA document (kindly submitted in the HN thread linked here by brown9-2, and also linked in the article submitted here)

<http://www.nsa.gov/public_info/_files/Untangling_the_Web.pdf> notes, the NSA document is old, and thus dates from an earlier era of Web research. For all that, applying the Google tips mentioned in the document, specifically domain- restricted searches, would improve the quality of links submitted to Hacker News and thus improve the quality of discussion here.

The previous discussion of the actual document link seems to have missed the process by which the document was released. The document was an internal document of the National Security Agency, requested by a Freedom of Information Act request. Some parts of the document had to be redacted, and of course "official use only" had to be struck out in the copy released to the public. The editing process apparently involved mark-up of actual paper printouts of the original internal document, which were then scanned again to form the released document. This makes for ugly formatting, but the content is still interesting.

</comment><comment><USER3> A lot of people I know have have been using the Google "index-of -(htm|php|<etc.>)" trick to find music (and now ebooks) for years now.

<comment><USER4> That technique for finding mp3s went downhill pretty quick once word got out. Lots of SEO spammers putting 'intitle:"index of" mp3' in their landing page titles.

</comment></comment><comment> brown9-2 <https://news.ycombinator.com/item?id=5679793>

</comment><comment><USER5> > it does come with other risks, the authors note: "It is critical that you > handle all Microsoft file types on the internet with extreme care. Never > open a Microsoft file type on the internet. Instead, use one of the > techniques described here," they write in a footnote. The word "here" is > hyperlinked, but since the document is a PDF the link is inaccessible.

Anyone have any insight on this? I imagine it's opening the files in a VM or something along those lines, but I'd be interested to know if there are any other techniques for looking at potentially malicious files.

<comment><USER6> I recall reading through one of the public NSA or USAF whitepapers on securing Windows XP for usage within their organization and I'm pretty sure they recommended using a Virtual Machine that had been set up following a bunch of extremely secure protocols. Essentially the VM had network access only for the length of time necessary to transfer the file and the host's security was also dealt with. Then there was protocol which they referenced was supposed to be standard which was the wiping/reset of the VM image at certain intervals and upon specific events (contact your supervisor if...).

It contained a lot of "Contact your supervisor if..." and "Failure to follow this can result in..."

</comment></comment><comment><USER7> For anyone who doesnt know: <http://www.exploit-db.com/google-dorks/>

</comment><comment><USER8> Might be old but it still works

[https://www.google.com/search?client=safari&hl=en&ei...](https://www.google.com/search?client=safari&hl=en&ei=5UaMUbnqA4H9qAGRiYGoAw&q=filetype%3Axlsx+confidential&oq=filetype%3Axlsx+confidential)

</comment><comment><USER9> Old or not, I think this document's value is to help demystify some of how detective/research/surveillance work is done in highly secret institutions. They still rely in part on the hackery and technology that everyone else is capable of doing.</comment>


Microsoft sues Samsung over Android patent fees - <AUTHOR> http://www.bbc.co.uk/news/technology-28640628

<comment><USER2> If you can't compete on tech, compete by bleeding them dry. This is text book Microsoft and I hope it continues to not work. Especially now that the list of patents is out:

[https://news.ycombinator.com/item?id=7900892](https://news.ycombinator.com/item?id=7900892)</comment>


Yoshua Bengio has started a blog - <AUTHOR> https://yoshuabengio.org/2020/02/10/fusce-risus/ <comment><USER2> For anyone not aware, he was one of last year's Turing Award-winners.</comment>


The White House is Briefed on "Potential For Life" on Mars - <AUTHOR> http://www.universetoday.com/2008/08/02/the-white-house-is-briefed-phoenix-about-to-announce-potential-for-life-on-mars/ <comment><USER2> Briefly? "No."</comment>


Announcing YUI 3.3.0: AutoComplete, Charts, DataTable, Dial, Resize & more - <AUTHOR> http://www.yuiblog.com/blog/2011/01/12/announcing-yui-3-3-0/

<comment><USER2> The AutoComplete widget is awesome! Check Ryan Grove's 150 slide deck covering its capabilities:

[http://www.slideshare.net/yaypie/introducing- yui-3-autocompl...](http://www.slideshare.net/yaypie/introducing- yui-3-autocomplete)

</comment><comment><USER3> Yippee, I can finally start to really put this to use without dredging up YUI 2.x components for mundane things.

It beats me how they choose the order to implement stuff in. For example, somehow we have the Rich Text Editor and Data Table but they have not managed to implement the Button class yet?

<comment><USER4> A lot of the decisions are driven by internal Yahoo! needs. For instance, the new Yahoo! Mail really needed Rich Text Editor, but they could build their own chrome around it, so we have a really basic RTE that works, if you can build the chrome for it.

Data Table is one thing that many people have been asking for on the forums and in IRC for a long time, but it's also really complex. My suspicion is that it was waiting on DataSource to reach a certain level of maturity before pushing forward to release.

The focus on YUI3 from the team has been on the Core, and it's a really good core. Really, this is the first release that they've really been able to focus on Widgets, as most of the core widgets prior to 3.3.0 seemed to be more proof of concept.

</comment></comment><comment><USER5> I can imagine using the new dial widget as on-screen thumbstick controls on a mobile device type game.</comment>


Anything You Want - <AUTHOR> http://sivers.org/a

<comment><USER2> So there doesn't appear to be a description or anything here, which is odd as Amazon has one and a rave review from Tim Ferriss among other things.

In any case:

"Best known for creating CD Baby, the most popular music site for independent artists, founder Derek Sivers chronicles his "accidental" success and failures into this concise and inspiring book on how to create a multi-million dollar company by following your passion. In Anything You Want, Sivers details his journey and the lessons learned along the way of creating CD Baby and building a business close to his heart."

<comment><USER3> _So there doesn't appear to be a description or anything here [...]_

Here's a little more info:

<http://sivers.org/ayw>

From the above URL:

"It's 40 short stories, sharing what I learned during starting, building, and selling CD Baby."

</comment></comment><comment><USER4> Am I the only one that finds the book cover quite off-putting? It definitely stands out in a "purple cow" sort of way, but I can't help but think that it will affect sales (even though the book will no doubt do well regardless.)

That said, I look forward to reading it, and I'm sure it will be awesome.

<comment><USER5> Somewhat... At first I thought it was some sort of bizarre CD cover (you know the type) and kept looking then noticed it was actually about a book. So it worked in that respect to get me in, although I was a little confused at first.

I guess it worked though because I promptly bought a copy.

</comment></comment><comment><USER6> Derek is one of those people you wish to know in person. One of those good guys who you can trust and good at core. He always responds any email send by his followers. Why this is important you may say. Well, after sending emails to some so called VC/entreprenuer internet stars and having not receiving any single return, it's an obligation for me to shout out Derek's classy attitudes.

i have the book and it's really good. His crystal clear thoughts and simple and approachable style is fabulous.

</comment><comment><USER7> I agree that there should be more information and a better cover... however Derek Sivers is one of a small handful of people that I simply trust to only be awesome. This man's affiliation is a golden stamp.

</comment><comment><USER8> Related: Derek Sivers' 3 minute TED Talk on leadership (it's perfectly spot- on.): <http://on.ted.com/9O9d>

</comment><comment><USER9> Started reading this book today. It's a small book and cuts through the BS with solid information. Nothing too new or groundbreaking, but I do like hearing another point of view. Much of the advice so far is to stay small and focus on the customer. Reminds me a little of Rework, but different tone.

</comment><comment><USER10> He also writes great summary notes on a ton of business related books. <http://sivers.org/book>

</comment><comment><USER11> I bought the book just now, looking great. However I have to say that, not sure why, but the book cover is really disturbing.

<comment><USER12> _not sure why_

Because it looks like a dismembered child's head? Or if you get closer and see he's buried, someone who's been left for the ants to feast on?

<comment><USER13> And I just saw it as somebody having fun at the beach, which I think goes along with what the book is trying to say (you can have fun building what you want).

<comment><USER14> Same here. I wonder if some people never played of getting buried in beach sand, and are "parsing" the image incorrectly, imagining the kid's body buried vertically?</comment></comment></comment></comment>


Wikipedia is now deleting entries about its own practice of deleting entries - <AUTHOR> http://thenerfherder.blogspot.com/2008/09/debate-over-deletionism-at-wikipedia.html <comment><USER2> This isn't about Wikipedia's practice of deleting entries, which is documented in huge, sprawling, mind-numbing detail, accompanied by 3x the word count of huge, sprawling, mind-numbing debates about the wisdom of those policies.

What it is instead is an article about one guy's side project, "Deletionpedia", which is a wiki that captures the pages Wikipedia deletes. That article hasn't even been deleted; it's just (apparently) been put up for deletion.

Wikipedia is a huge project. You can put Bill Gates' article up for deletion right now. Nobody will stop you. The debate will be short (I'd expect "seconds, not minutes"), but that's because everyone knows who Bill Gates is, and nobody knows what Deletionpedia is, which means it lives or dies on its merits, and not name ID.

Can we stop making mountains out of molehills now?

<comment><USER3> I agree. I don't understand why these shrill anti-Wikipedia links keep ending up on HN.

<comment><USER2> Because people vote them up. Hey, people. Stop voting these up!

</comment></comment></comment><comment><USER4> Headline is both misleading and out-of-date anyway, since they've already decided to keep the article after a long debate (and in the meantime, an improvement of the article). The system works.

</comment><comment><USER5> Deletion decisions on Wikipedia are made by users, not a singular entity known as "Wikipedia."

<comment><USER6> People tend to anthropomorphize for dramatic effect. It's very unbecoming.

</comment></comment><comment><USER7> He who controls the present controls the past.

</comment><comment><USER8> Wikipedia is, surprisingly, quite a fine reference. I say this because the amount of power and influence a person has is directly correlated (in fact, exponential in this variable) to the defectiveness of his personality. The "administrators" are mostly mentally-ill shut-ins playing Internet Tough Guy, and edit-warring with them, even when objectively right, is a lost cause (you'll run into the "3-revert rule", which basically means that if you don't allow groupthink to bulldoze you, you get blocked or banned). Still, it's a great reference 99% of the time, and I'm amazed that this can be the case, given the putrid nature of the WP community.</comment>


Our Love Affair With Shopping Malls Is on the Rocks - <AUTHOR> http://www.nytimes.com/2009/02/01/business/01mall.html?pagewanted=all

<comment><USER2> The article is huge so here's the main point:

"Here, ladies and gentlemen, is the crux of the problem: We are reliably informed that whatever part of the economic crisis can't be pinned on Wall Street — or on mortgage-related financial insanity — can be pinned on consumers who overspent. But personal consumption amounts to some 70 percent of the American economy. So if we don't spend, we don't recover. Fiscal health isn't possible until money is again sloshing into cash registers, including those at this mall and every other retailer."

I think the statement that money must be sloshing into cash registers again is a misnomer. Why must we spend money on items we don't really need? Is it our fault that the products are "nice to haves", but not so nice that we're willing to spend on them? I believe that the products and services offered will have to stepped up a notch; become items that improve people's lives and increase happiness.

I see these times as Darwin's law applied to products, services, and businesses in general. If it's not profitable it should fail.

That said the current mess of the economy is at such a scale that it's hard for me to even keep straight in my head. As Henry Ford said, "It is well enough that people of the nation do not understand our banking and monetary system, for if they did, I believe there would be a revolution before tomorrow morning. "

<comment><USER3> Thanks for the summary and the great quote by Henry Ford. What he said is so true.

The scary thing is that for most people, their lack of understanding the bigger picture means that when things get really bad, it will happen fast. I'm shocked by how many people simply don't even somewhat understand the way the US financial system works (I can't even say I fully understand it), and by how many of them treat bills and debt as their absolute, life-long moral responsibility. To the bankers, it's all a big game. To the average consumer, it's their entire life.

The most important thing I see missing from all this is education. Financial education should be required by every public school (and should be taught by the parents) to help prepare people for the "real world" of managing debt, credit cards, loans, and even mortgages and investments.

If everybody understood that filing for bankruptcy (I did after losing 3 investment properties to sub-prime) or downsizing and living a more simple life was perfectly OK to keep your family fed (I went from $2.5k /mo expenses to $800), then we wouldn't have people killing their families and committing suicide because of a few financial issues.

<comment><USER4> Maybe I'm reading you wrong, but you seem to be saying that it's okay for people to renege on debts when convenient.

In my opinion, people who take on debt _do_ have a moral responsibility to pay it back. If you don't want that responsibility, don't take on the debt.

I understand that bankruptcy is necessary for some–but I would hope people arrive there as a last resort. Teaching people that bankruptcy is a "card up your sleeve" is sending the wrong message.

<comment><USER5> OK, here's what he's trying to say:

1\. Individuals, the final end consumer of debt, treat debt as a lifelong obligation. A serious, serious obligation. So much that they chastise each other for bankruptcy on Internet forums. (oh no! someone on the internet is fiscally irresponsible!) And act as if not fulfilling monetary obligations to big, anonymous corporations is tantamount to proving that one is a worthless human being.

2\. And yet, at the same time, the same corporations that these very- responsible-debt-paying people owe fealty to, will perpetrate enormous fraud -- of the technical definition and just general "looks like a fraud, smells like a fraud, who cares what the law says" kind. This fraud can fuck not only other such corporations, but the entire financial system, and the country's stability as a whole.

Got it?

Debt payors are considered horrible people if they do not repay all their private debts. Debt payees, on the other hand, have carte blanche to act however they want and get excused by saying "That's the way free market capitalism works."

Thus you have individuals lambasting other individuals, and going "OH NO, you cannot just say that DEBT is NOT a MORAL OBLIGATION!" with regards to individuals who owe, but just shaking their heads and clucking their tongues with regards to the acts of corporations.

This is basically a case of the serfs policing themselves, while the nobles are pleased to promote any kind of ignoble acts among themselves.

<comment><USER4> I have no problem with that assessment at all. So long as you're not extrapolating that into _"since big corporations are dishonest and fraudulent, then it's ok for me to be also"_

I think that sort of one-downsmanship would spiral into even worse issues for our economy.

And, for the record, I think debt is an obligation for whoever makes it–individual or corporations.

If you don't like the way such corporations act a) don't patronize their services, b) work to change the way they are regulated/operate, c) create a startup that disrupts their business model ... but for goodness' sake, don't act like them.</comment></comment></comment></comment></comment>


Goodbye Serenity (2011) - <AUTHOR> http://www.nybooks.com/daily/2011/12/05/goodbye-serenity/ <comment><AUTHOR> This discussion - [https://news.ycombinator.com/item?id=13205685](https://news.ycombinator.com/item?id=13205685) \- reminded me very much of this fantastic short article by Charles Simic, particularly this quote: "My late father, in the final year of his life, claimed that he finally found that long-sought serenity by no longer reading the papers and watching television. Even then, and I was thirty years younger than he, I knew what he meant. What devotees of sadomasochism do to their bodies is nothing compared to the torments that those addicted to the news and political commentary inflict on their minds almost every hour of the day." I think the same could be said of the incessant distractions caused by notifications. I turned off all my notifications apart from SMS a couple of years ago, and why anyone would leave email notifications on in particular is a mystery to me these days.</comment>


First client is like a first date - <AUTHOR> http://alexsblog.org/2014/11/10/first-client-is-like-a-first-date/

<comment><USER2> I also think it's like a first date in that if it doesn't seem like a match you shouldn't try to change your entire personality in order to be a better fit. Date a bunch at first, and if everyone rejects you that's when you should think about changing.</comment>