Why Clojure? (2010) - <AUTHOR> http://thecleancoder.blogspot.com/2010/08/why-clojure.html <comment><USER2> I tried and really wanted to like Clojure, but I hated the error messages. I love how it's a lisp, I love how you write programs in it, I love the REPL, it all just feels nice to me.... until I miskey something or make some other error. Then the compiler seems to hate me personally.

"Here's a haystack where the error /might/ be, have fun finding the needle dipshit." Maybe I'm just spoiled with Elm, Rust, and Elixir's error messages, but the last time I tried Clojure (more than a year ago) I just hit a wall when I tried to make a toy app, as the Clojure compiler seems to hate me even more than C's compiler does.

Has this situation improved? If so, I'd love to take another stab at it.

<comment><USER3> I always use something like clj-stacktrace[1] to pretty print error messages and I've never had any issues figuring out what the problem was.

Most of the time you're working from the REPL inside your editor anyways so the iteration loop is much, much better than any other language's. Even without clj-stacktrace I'd still prefer Clojure development to anything else.

Rebooting a program and losing state is always worse than error messages taking a bit longer to understand at first.

[1]: [https://github.com/mmcgrana/clj- stacktrace](https://github.com/mmcgrana/clj-stacktrace)

<comment><USER4> _Rebooting a program and losing state is always worse than error messages taking a bit longer to understand at first._

Not sure if it's _always_ worse. I've worked in imperative & functional languages, and the quality of error messages is key to solving bugs and understanding a sufficiently complex system, regardless of what language it's coded in.

<comment><USER3> Maybe not always, but its important enough to consider.

You often have much more information at runtime than at compile time. Sure I can run the compiler and scan its errors but I feel its much more productive to poke around the program as its running. Even when working in C++/whatnot I learn more about programs by running them in the debugger than reading the code (reading UE4's source code will be weeks of head scratching because its so huge - 2 days of stepping into its boot process and you know and _understand_ most of its architecture).

I'd argue that the hardest bugs to find are the ones your type-system is completely helpless against. Few languages protect against null pointers and every time you have a cast you're breaking out of the type system and its guarantees. Dependent types aren't frequent either so you're now augmenting the type-system with asserts and guards and whatnot.

I find that in C++/Java/C# complex systems are the norm because everything is built out of mutable blocks and misconceptions about what makes programs fast.

Every project I did in Clojure was a fraction of the complexity it would've had in imperative languages. You're reducing complexity _so much_ that the "type-system is good for complex bugs" argument almost vanishes.

<comment><USER4> _... I learn more about programs by running them in the debugger than reading the code_

Agreed - in Ruby, most of my development was driven by a REPL & debugger, and tests. That's an example of a primarily imperative language, though it borrows some ideas from Lisp. But there, again, understanding error messages was key.

</comment></comment></comment></comment></comment><comment><USER5> My "functional programming epiphany" came in a talk by Martin Odersky, who remarked that imperative programming is like thinking in terms of time, whereas functional programming is like thinking in terms of space. Don't think about the sequence of how to achieve things, but the building blocks needed to do so. That nailed it and made me a Scala convert ever since.

<comment><USER6> Best example I heard was in an F# talk. The guy used a bar tending analogy:

FP => I'll have a Sazerac

Imperative => Excuse me sir, could you take some ice, add rye whiskey, add bitters, add absinthe, shake, strain into a glass, and add a lemon garnish before bringing it to me

<comment><USER7> Well, isn't this nice - outsourcing the knowledge what makes Sazerac, and how to make it to somebody else, and just declaring that you want it?

Would you mind actually making Sazerac in your FP "analogy" as well?

<comment><USER8> I like Clojure, but stopped using it due to not having a good way to define DTOs at a service level (I prefer noisy statically typed languages apparently). Best guess.

      (-> {}
        ice
        (rye :2-fingers)
        bitters
        absinthe
        shake
        strain
        garnish)

Now I think that strain flipped the returned type from drink to a glass with the drink.

All this shows is that OO and FP are duals [1]. I don't claim to get FP perfectly, but my moment of zen was realizing this.

1 - [http://wiki.c2.com/?ClosuresAndObjectsAreEquivalent](http://wiki.c2.com/?ClosuresAndObjectsAreEquivalent)

<comment><USER9> Thank you, I had not seen that c2 page. Many in the JavaScript community have fervent arguments for/against closures/objects (which I do not share). The educated debate in that link is a quality resource on the subject.

</comment></comment></comment></comment></comment><comment><USER10> I've used Clojure in a few cases and I totally adore the simplicity of its Lisp syntax as opposed to the baroquesque abomination that is Scala. However, lack of strong typing is sorely felt. I 've done a little playground-style OCaml coding and the feeling you get with OCaml is that once your program compiles, it most likely also runs correctly. Is a Lisp language with strong typing for the Java ecosystem too much to ask? Apparently it is or else we would have had it by now.

<comment><USER11> > _I 've done a little playground-style OCaml coding and the feeling you get > with OCaml is that once your program compiles, it most likely also runs > correctly._

This is only a feeling. Without carefully testing the code to exercise its cases, all you know is that they are properly typed.

For instance, suppose we write a complicated function (or group of functions) which goes through a block of intermediate code (output of a compiler) and assigns registers to all the temporaries, introducing memory spills in situations where more variables are live than the available registers.

We might have a _feeling_ that because this code compiles, it must be free of problems such as accidentally assigning the same register to two variables which have overlapping lifetimes.

That feeling is poorly supported by reality; it is the "safyness" of static typing.

Untested code is garbage. And thorough testing is difficult to impossible, so there is a bit of garbage in almost all software, unfortunately.

Statically type checked code has all of its code paths effectively tested by the compiler, but those tests have only the limited point of view of trying to show that the program contains a trivial type mismatch, a close cousin of the syntax error. These "tests" are not actually feeding values into the code and trying to make it fail or behave incorrectly with respect to its specification.

<comment><USER12> > Statically type checked code has all of its code paths effectively tested by > the compiler

The type checker just ensures that a program is well-typed (i.e. free of type errors).

The better the type system the more program properties can be encoded in it and the more errors it can catch (up to the point of proving correctness of your program).

But you are right that type checking alone is no substitute for testing. They are orthogonal concepts and both should be employed to ensure that your programs behave correctly.

One nice thing of statically typed languages is that they can automatically generate some tests for you, like e.g. the QuickCheck library for Erlang and Haskell.

<comment><USER3> Clojure has quickcheck as well: [https://github.com/clojure/test.check](https://github.com/clojure/test.check)

<comment><USER12> Good point. Of course you have to specify the type of the values that you want to test in the test itself then, so you have to specify some types one way or the other.

<comment><USER3> You can feed those types from clojure.spec now :)

</comment></comment></comment></comment></comment></comment><comment><USER13> One issue with Clojure is that it comes with strong opinions (STM, immutable data structures, JVM-Java ecosystem) and thus is not as paradigm-enclosing as other Lisps (e.g. Common Lisp).

I'd much rather have SBCL's native code compiler, read/compiler macros, conditions and restarts (that I end up using on pretty much every project) and optionally use libraries for immutability and STM (if and when I need them), than compromise from the get-go and use a language that reduces the set of available options by forcing its specific worldview.

If I do need a strong focus on concurrency, I find Erlang (and also Elixir) a much more coherent solution. The cognitive dissonance that comes from having to interact with Java when using Clojure is very damaging and it can't be abstracted away. Just look at Clojure stack traces.

So to end with, Clojure proponents should understand its limitations and design choices. It was created because Hickey needed a language to solve problems he was having in his specific arena (delivering concurrent applications in the Java ecosystem with his consultancy) and not really to improve on the Lisp state-of-the-art side of things. If you're a Java guy and absolutely need to stay in that ecosystem, I guess you can go with it. Otherwise, you end up giving away too many things. This has been validated in practice, in the Common Lisp community. We get a lot of guys who are coming _from_ Clojure, but it is rare for someone to move _to_ Clojure from CL.

<comment><USER6> I really tried SBCL, but even knowing a little Lisp (own about 6 books I've read most of), I couldn't get past the tooling. SLIME+emacs is powerful, but the tutorials are awful and very lacking. Sadly, Clojure isn't much better here. Racket is pretty good here, but I can't get past the fact that I'm essentially playing with an educational product and not a real industrial language.

<comment><USER14> Some resources:

[https://common-lisp.net/project/slime/doc/html/](https://common- lisp.net/project/slime/doc/html/)

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

[http://www.jonathanfischer.net/modern-common-lisp-on- linux/](http://www.jonathanfischer.net/modern-common-lisp-on-linux/)

[http://trac.clozure.com/ccl/wiki/InstallingSlime](http://trac.clozure.com/ccl/wiki/InstallingSlime)

</comment></comment></comment><comment><USER15> For me, Clojure is the most satisfying language to write in. The design of the language feels impeccable most of the time. Working in the repl, with all of your application code loaded into the runtime, sitting in an adjacent terminal or editor tab, is immensely satisfying, much like the experience of a craftsman working with hand tools. Unfortunately, I find Clojure code to suffer in terms of readability, and I think it suffers from the same problem all dynamic languages suffer from, they just don't scale to larger applications and teams as well as static languages do. Proof of this is the fact that pretty much every dynamic language out there eventually looks to graft something like a static type system on after the fact. Basically I think people advocating Clojure outside the context of small, high ability teams are (mistakenly imho) prioritizing write mode over read mode.

<comment><USER16> au contraire - many find Clojure code extremely readable (even compared to other Lisps). It's possible to write some obscure functions in any language, developing good taste and habits to write nice and reasonable code is just a matter of practice. I believe Clojure gives you enough discipline to learn that fast. It just seems there are certain types of devs who are inherently dyslexic - they struggle to read Lisps. Where a Lisp developer sees structure and beauty they see nothing but quivering beehive of parentheses.

</comment></comment><comment><USER17> They left out the part where Clojure DOES NOT implement tail-call optimization for mutually recursive functions. Without TCO, you can't fully leverage functional composition and immutable data structures without introducing some ugly hacks or relying on other language-level constructs offered by the implementation--that they can't be implemented in the language strongly suggests something about the limitations of the language.[1]

A great language that does optimize mutually recursive tail-calls, among many other elegant features: Lua!

... TCO, asymmetric stackful coroutines (90% as powerful as call/cc, but with zero calories), lexical closures, prototype-based object orientation, duck typing-based object orientation (among other possibilities), and a first-class C API that allows C code to work cleanly with coroutines, closures, the object system(s)....

Lua is truly multi-paradigm. The only downside is dynamic typing, though that's not always a liability and often an asset. Also, Lua has other interesting features, like lexical global namespace substitution using _ENV, that permit devising solutions to minimize some of the headaches of dynamic typing. And because Lua is so powerful in so many dimensions, yet so simple and tiny, writing unit and regression tests is often a breeze.

Once you add the canonical extension module LPeg into the mix (written by one of the Lua co-maintainers), Lua is about as formidable as they come. Only Perl 6 comes close to the ease of writing parsers with Lua+LPeg.

[1] The JVM will eventually add support for implementing TCO in Clojure and other languages, at which point many Clojure proponents will find religion in the power of TCO.

<comment><USER18> Clojure does actually support TCO, it doesn't support _automatic_ TCO because of the JVM limitations. And after using explicit TCO calls in clojure for a while I actually prefer it now over automatic TCO. Because I can clearly see from reading my code where tail calls are optimized, and where they build up stack. I don't have to try and work out if the recursive call is in the tail position. It's all explicit.

For mutually recursive TCO there's `trampoline`

[https://clojuredocs.org/clojure.core/trampoline](https://clojuredocs.org/clojure.core/trampoline)

<comment><USER19> Agreed that explicit is better than implicit but I can't imagine when you might want tail calls to build up stack. And if you do have a use case for it in mind, wouldn't you want to be explicit about that and have TCO be the default?

<comment><USER18> Well that (default being TCO, and explicitly declaring a stack call) would mean every normal function call (the vast majority) would need to be explicitly declared (call func args...), and the implicit case would need to blow up everywhere it's invoked in a non-tail position.

What I was getting at is: in an automatic TCO language you don't actually know if the call is optimised or not. You might think it's optimised, but it isn't, because it's not in the tail position. You don't find this out until one day in production the stack explodes. The only way to know if it's optimised is to determine if it is in the tail position. That sometimes is straight forwards, but sometimes requires careful thought. It is certainly not always obvious.

Additionally, another coder can come along and break your tail position. You've gone "return func()" and it's TCO and then later someone changes it to "return 1 + func()" and now the call to func is not TCO, but there is no warning and no obvious outward signs that this has changed.

In the explicit TCO of clojure, if the second programmer adds the extension the compiler will explode with something like "recur not in tail position", immediately informing you that this has happened, and then you may either refactor to put it back in the tail position, or change it to a full stack function call once you determine that building up stack is ok in this case.

Now I think loop/recur was implemented in Clojure as a work around the JVM limitations, but in doing so I think Hickey stumbled onto a really great new syntactic formulation for TCO. Explicitly declared TCO. I like it.

<comment><USER20> This is why I like Scala's approach so much.

It will TCO automatically. If you want to make sure you haven't made a mistake, simply add the @tailrec annotation, and the compiler will give you an error if it can't TCO.

<comment><USER18> That sounds pretty good! I will check that out.

</comment></comment></comment></comment></comment></comment><comment><USER21> I think my language of focus in 2017 will be Racket. It seems to be the perfect combination of optional (but somewhat static!) strong typing, highly advanced features and cool Lispness without becoming impractical.

Minilanguages... for everybody!

<comment><USER6> I have a comment on Racket below. I like the concept, but it seems to be pretty slow. I'm also not sure how many mini-languages are out there. What the "Red" language team is doing seems to be a similar concept. That makes sense as Racket is a Lisp and Red is mostly from Rebol, but has a native code compiler and comes with a tiny .exe. Their GUI engine is phenomenal.

<comment><USER22> On Scheme benchmarks, Racket does fairly competitively, probably due to its JIT:

[http://ecraven.github.io/r7rs- benchmarks/benchmark.html](http://ecraven.github.io/r7rs- benchmarks/benchmark.html)

(Chez is still freakishly fast.)

However, if you're writing code in DrRacket, it has full debugging information enabled, which may slow the code down. So your REPL performance in DrRacket may be slower than if you ran Racket from the command line.

[https://docs.racket-lang.org/guide/performance.html](https://docs.racket- lang.org/guide/performance.html)

<comment><USER23> The debugging slows the code down a ton in my experience, and it also prevents futures from running in parallel. Trying out the futures code from the guide, failing to disable debugging slows down the final Mandelbrot example by something like 100x on my machine.

Fortunately, DrRacket's friendly GUI makes it pretty easy to toggle debugging. I leave it in place most of the time, but occasionally the slowdown is just unbearable.

<comment><USER6> Thanks for the tips! I'd like to use ChezScheme, but haven't found a good way to get into it.

</comment></comment></comment></comment></comment><comment><USER24> There should be a rule that if one writes a post saying language X is faster than languages A,B,C there should be some real world benchmark to add data to the discussion.

<comment><USER25> That a fair request, but the article doesn't say Clojure is faster than any other language, it just says it is fast. That caught my attention as well, because I don't think of it as being particularly fast (mostly due to startup time).

<comment><USER26> > because I don't think of it as being particularly fast (mostly due to > startup time).

Proposal: Fast for server use-cases?

Curiously, I was never really interested in the startup time of most of my code, probably because most of my code is long running where it doesn't matter if it takes a few seconds more to start.

<comment><AUTHOR> I was not interested in that either until I had to start Java processes by hand. The initial version ran for 5 minutes. I then refactored the app to be a long running service instead of a fire-and-forget app and the run time changed from 300 seconds to 300 microseconds!

<comment><USER26> Five minutes? Ouch .. when I think of "slow" start of Java processes it is more in the range of 5 to 10 seconds. Maybe a minute tops for an application server, but five minutes sounds ugly. Especially when it is all just start time.

<comment><AUTHOR> Startup of a single JVM was around 10secs but I had to start up a JVM for each operation (think of it like a JUnit test suite from the command line). If you have several of these processes the whole thing is no longer O(1) but O(n) and you begin to see the JVM startup overhead.

</comment></comment></comment></comment></comment></comment><comment><USER27> Being able to target servers, web applications, and mobile apps is compelling enough for me (at least for personal projects). Throw in the simplicity of the syntax and the low dev iteration times and it makes me have to ask "Why not Clojure?" when starting something new.

<comment><USER28> >and mobile apps

Last time I tried (which was probably over 2 years ago by now) the CLJ android had a huge loading time to the point of not being usable for anything serious (it offered no tangible benefits that would justify the load time it had) and iOS was something based on that JVM for Android port that Xamarin bought then shut down. Has that changed ? Or are you talking about CLJS + ReactNative and similar tech ?

<comment><USER27> Yeah I'm talking about react native. I'm on mobile at the moment but look up "re-natal", it's built on top of react native with re-frame, it's superb.

Edit: [https://github.com/Day8/re-frame](https://github.com/Day8/re-frame)

[https://github.com/drapanjanas/re-natal](https://github.com/drapanjanas/re- natal)

</comment></comment></comment><comment><USER29> The jvm platform has become (again) the most exciting platform to work with in recent times. And my favorite there is Kotlin.

kotlin 1.1 (still in milestone) is a brilliant and compelling language to use on the JVM.

Spring 5 is a very "functional" web framework that will come out in a few months with first class kotlin support (even today, it is fairly excellent [1])

Vert.x [2] has incredible support for Kotlin and is coming up with built in kotlin support. Coroutines got merged fairly recently [3]

Reactor ([https://projectreactor.io/](https://projectreactor.io/)) and Rxjava have had kotlin support for a long time.

The tooling is excellent (umm.. it was developed by Jetbrains).

The killer app/functionality ? Android. Kotlin is the swift of Android and that's where its uptake is coming from.

[1] [https://github.com/sdeleuze/spring-boot-kotlin- demo/tree/all...](https://github.com/sdeleuze/spring-boot-kotlin- demo/tree/all-open)

[2] [http://vertx.io/whos_using/](http://vertx.io/whos_using/)

[3] [https://blog.jetbrains.com/kotlin/2016/07/first-glimpse- of-k...](https://blog.jetbrains.com/kotlin/2016/07/first-glimpse-of- kotlin-1-1-coroutines-type-aliases-and-more/).

</comment><comment><USER30> Full title: Why Clojure is better than C, Python,Ruby and java and why should you care

I recommend updating the title to "Why Clojure is better than C, Python, Ruby, and Java"

<comment><USER31> The original title is more of a clickbait. The article highlights good things about Clojure but it doesn't tell anything about the languages mentioned in the title.

The current one is much better.

<comment><USER30> It also agrees with what the original post was entitled.

</comment></comment></comment><comment><USER32> Fwiw, here's a deep learning framework for the JVM that some Clojure people are using: [https://deeplearning4j.org/](https://deeplearning4j.org/) I bring it up not just because LISP was conceived as a language for AI, but because of the points about distributed computing made in the post. Multithreading is baked into the JVM, which is important because advances in AI are computationally intensive.

<comment><USER33> In what ways is Lisp / Clojure better for AI than say, Scala?

</comment></comment><comment><USER34> We had a majority of codebase in clojure back in 2011, but we found that that presented us with major roadblocks hiring new team members. Even some experienced people had hard time getting into and learning curve was non- trivial. So we dropped it. Prbly not a good idea to build a big company with not so popular prog language [1].

1\. [http://www.tiobe.com/tiobe-index/](http://www.tiobe.com/tiobe-index/)

<comment><USER35> My team has been using Clojure for the past 6 years, and we have the opposite experience. Most new developers we've hired haven't used Clojure before, but they were able to become productive doing useful work within weeks. The fact that we're using Clojure tends to be a positive factor for attracting candidates as well. A number of candidates we've interviewed mentioned that Clojure was the reason they applied for the job. They heard about the language and they were interested in trying to work with it professionally. In addition, we hired contractors and co-op students to work with our team, and they were able to pickup Clojure as well.

At this point I would actually use Clojure as a filter. I'm rather suspicious of any developer who wouldn't be able to learn Clojure.

<comment><USER36> How do you convince management to treat getting up to speed with a programming language (and your group's particular usage of it) as just another cost of onboarding? Or even better, how do you make the case to whoever is in charge of hiring that they shouldn't bias prior experience to the company's language over newcomers too highly when adequate proficiency is only a matter of a few weeks. All else being equal I think most hiring managers would naturally take the dev who already knows the language, but if it doesn't take long to learn the language up to the company's standards then it's not all else equal, all is effectively equal and another metric is needed.

<comment><USER35> I guess I'm just lucky to work at a place where technical people make technical decisions. The management does not decide what languages are used or how developers are onboarded where I work.

</comment></comment></comment></comment><comment><USER37> So, why not clojure? (Warning: subjective, and a bit toungue in cheek):

\- Clojure is a Lisp. Lisps are very elegant in their simple tree syntax, so compilers like them, and reasoning about Lisp code is a joy. However no one has yet figured out how to represent Lisp code in good a way that doesn't require a large number of parentheses, often stacked together in groups of three or four. If you have a slight astigmatism this (((()) will not help.

\- It's a jvm language. That has gives all the benefits you want in a functional language such as type erasure meaning you can't make a data structure of primitive types without either pretending they are objects (boxing) or writing a custom type. Also, you have access to the vast amount of jvm libraries, almost all of which use mutable data structures and nulls everywhere. Jvm lacking proper tail calls will also give you the joy of having to manually specify when you want tail recursion rather than just recursion...from the tail.

<comment><USER38>
        FunCall1( FunCall2( FunCall3(arg1, arg2, arg3)))

vs

       (FunCall1 (FunCall2 (FunCall3 arg1 arg2 arg3)))

Yes those useless parentheses certainly clutter up the code. Look at how much longer the lispy line is compared to the less lispy line. Why it's got a whole -3 more characters!

And the end of the line with all the parentheses. So much uglier to see three parens at the end of the lisp line than the non-lispy line.

Truly a monstrous imposition, that lisp syntax.

And when you look at any lisp code base, look at how they don't indent their code at all. So unlike other languages. Here's literally the first project I could find looking for "lisp source code": [https://github.com/adamtornhill/LispForTheWeb/blob/master/we...](https://github.com/adamtornhill/LispForTheWeb/blob/master/web_with_persistent_backend.lisp)

<comment><USER37> To be fair, both the imperative and the lisp version of that are probably not optimal. In most imperative (OO) languages the first one could hopefully be

        Fun3().Fun2().Fun1()

or even

        thing3.thing2.thing1

If some thing is a property of the other

Concrete example from your linke: a projection and sort (I believe it is). I think that the tail of this expression with 5 parentheses makes this very hard to read (Admittedly it's a matter of experience of course):

        (docs (iter (db.sort *game-collection*  :all
                                                :field "votes"
                                                :asc nil)))))

Questions I find hard to answer for the above line is: how many args does "iter" have? Is 5 trailing parentheses the right number?

Here is some half-functional half-imperative strawman syntax: for comparison:

       x = some_collection
              .select(c -> c.documents)
              .sort(d -> d["votes"], direction: ascending);

I find that a lot easier to balance, and know how many arguments the projection has compared to the sort.

<comment><USER11> > _Questions I find hard to answer for the above line is: how many args does > "iter" have?_

It's obvious to me in a millisecond glance that docs and iter are called with one argument.

For one thing, the snippet does not contain a single instance of a ) parenthesis being followed by a ( parenthesis. Also, none of the ) parentheses have any material between them. It's just (sym (sym (sym stuff ...))).

Only three trailing parens are required to close (docs; the other two are for something else.

If iter had additional arguments, it might be written like this:

        (docs (iter (db.sort *game-collection*  :all
                                                :field "votes"
                                                :asc nil)
                    (another-iter-arg)))

It is still obvious that docs has one arg, iter has two and that the :all :field material is under db.sort.

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

<comment><USER37> Ah, the arg-count-from-indentation makes sense with the concrete example, thanks.

That said: if the code is neither correctly indented _or_ has the parens correctly balanced - then one is in a pickle. It's easy to balance parens on correctly indented code, and it's trivial to indent correctly balanced code.

<comment><USER14> > That said: if the code is neither correctly indented or has the parens > correctly balanced - then one is in a pickle.

But you can format the code automatically, and check if all is good by looking at the shape of your code (indentation). If the amount is the same but you put elements in a strange location, like:

        (defun bar ()
          (let ((a (foo)) (print (list a)))))

Simply pretty-printing it with PPRINT will do:

        (DEFUN BAR ()
          (LET ((A (FOO)) (PRINT (LIST A)))
            ))

(C-c RET, aka. slime-expand-1-inplace, will work too).

Indentation and parenthesis introduce a level of error checking by redundancy: the tools works on structured expressions, you look at indentation. Here above you can see that the body of the LET is empty, while there is a bogus binding in it.

The above example is in practice quite rare. Most errors are easily spotted with paren highlighting. I use paredit, which makes structural editing easy (but which is not too rigid and allows me to make unstructured changes too). You generally don't have unbalanced parenthesis, and if you don't spot the bad syntax with indentation, the compiler has a chance to complain, too.

</comment></comment></comment></comment></comment></comment><comment><USER39> Is Clojure better than Erlang?

<comment><USER18> I use them both. They are very different beasts. I wouldn't say one is better than the other. They have different trade offs.

In Clojure I miss the preemptive VM support for the Erlang "processes", the pattern matching and the elegance of the pid mailboxes.

In Erlang I miss the fantastic built in data structures, the platform reach (targeting the browser for example), the syntax (refactoring clojure is a dream), macros, the REPL, the tooling, the time constructs (refs, agents, atoms) and a bunch off more esoteric stuff. (I don't miss core.async cause Erlangs processes are much better).

I tend to use Clojure by default and Erlang when the problem particularly suits it.

<comment><USER40> As an aside, you can get pattern matching in clojure as a library[0], though I'm not familiar with erlang so I can't say if clojure's implementation is a complete match in terms of functionality.

[0] [https://github.com/clojure/core.match](https://github.com/clojure/core.match)

</comment></comment></comment><comment><USER41> I got book about clojure and was really trying to get into it. Some of the concepts really resonated with me but i can't get over the lisp syntax.

<comment><USER42> I also hated the syntax when I got started. I found it very hard to read Clojure code. After a while you use it, you will not "see" it anymore (and instead you will appreciate its clarity). Don't give up!

<comment><USER43> It also helps to turn parens grey via syntax highlighting so they are still visible, but don't clutter all the wonderfully wordy symbols.

I've also started turning all the special character noise down in all languages now. I'm usually trying to read the words, not all the cruft.

</comment></comment></comment><comment><USER44> Just to add a bit of context, this article was written more than six years ago: [http://thecleancoder.blogspot.fr/2010/08/why- clojure.html](http://thecleancoder.blogspot.fr/2010/08/why-clojure.html)

<comment><USER30> Thanks! I knew I had read a blog post with this title somewhere, but I couldn't put my finger on it. Here's the related HN post from 6 years ago: [https://news.ycombinator.com/item?id=1615182](https://news.ycombinator.com/item?id=1615182)

<comment><USER45> Same here: I was reading and when I read the anecdote about a some basic concept being introduced only around page 216, I thought "hang on, I've read that before..."

And I had the same thought as back then, too: "Concepts, Techniques and Models of Computer Programming" _also_ used this approach, except it's only after a few chapters that they teach you "oh by the way, Oz also supports for and while loops" whereas everything until now used recursion. All my eng school buddies found that off-putting, but I always thought that if you put the book in the hands of a completely newcomer to programmer, they would never even think of it.

(I know SICP predates CTM by decades and may not be considered in the same league, and that Mozart/Oz is rather more obscure that any lisp/scheme ever can be, but I consider it a fairly important book as well, and one of the best textbooks I've ever read: very well structured, well written, very complete, starts shallow but goes very deep and very wiiiiidddeee in terms of knowledge.)

</comment></comment></comment><comment><USER46> Bit of an aside, but this is the first I've seen an article published on telegra.ph, Telegram's Medium-like article hosting service.

See: [https://telegram.org/blog/instant- view](https://telegram.org/blog/instant-view)

<comment><USER47> [https://news.ycombinator.com/from?site=telegra.ph](https://news.ycombinator.com/from?site=telegra.ph)</comment></comment>


Now I Fear Exploratory Interviewing While Employed - <AUTHOR> http://www.bipolarco.de/now-i-fear-interviewing-while-employed/ <comment><USER2> The recruiter guilting you is the recruiter acting out their anger that you didn't earn them their $25k or whatever. They get whatever exorbitant cut they do specifically because of the risk that they assume.

I backed out of a new job on a Thursday when I was scheduled to start on Monday. Recruiter was super nasty to me. It was unfortunate to back out when I did, but that's when the offer came in, and they were offering me 65k against 93k.

That kind of conflict is baked into the relationship. It's not their fault, not exactly, but it's their job to handle rejection with professionalism and grace, not by pouting.

Edit: I said "when the offer came in." What I meant was the competing offer that paid ~30k more. Timeline: Company A offers, I accept. I interview at company B. Company B offers me 30k more. I cancel with company A. Hilarity ensues.

<comment><USER3> This. Recruiter's daily job is to talk to people to convince and pressure them for positions that are potentially undesirable (otherwise, the roles will be handled by an internal recruiter or filled very quickly); it is a cold-calling sales job where rejections and cold feet are common, and the final closing are far and between.

Their emotional response to rejections should be equivalent to a programmer's emotional response to debugging a difficult trace-stack error.

However, their job is also to elicit emotional response from their applicant- side to further pressure them if the applicant is sitting on the fence, sure most of you whom have experienced the sales cycle have heard the following: e.g.,

* "I need to feed my family..." (everyone has to make a living to feed their family)

* "[The hiring manager] told me specifically 'make sure to get this guy', we worked really hard on getting this package ready for you..." (every car sales involve printing a standard package, the sales person didn't handwrite a love letter addressed to you)

One time, I've received a particularly nasty call from a recruiter because I made up my mind, turned down a job offer and addressed the e-mail directly to the hiring manager cc'd to recruiter instead of just to the recruiter. The recruiter was upset and said that "[I] burned all bridges now for any alternative negotiations... and that's why I make the big bucks."; never mind that the hiring manager was very polite and replied that "next time, if you are interested; feel free to e-mail me directly". The whole experience taught me that most of the time, the recruiter (agency) is not on your side and some of the time, they're not even on the hiring company's side either; they like everyone else, is frying the fish for themselves.

<comment><USER4> I really despise all things recruiter. I frequently hang up on them. They are the scum of the industry.

I've had several jobs I've gotten via recruiter and several that were direct hire. In every single case, the direct hire jobs were better (quality of the work environment, treatment, quality of the software and environments .. I'd even dare the say the quality of the team/other employees in some cases).

Another thing about the writer of this article; he mentions his loyalty and how it felt like he was "cheating on his wife". You should never feel loyal to a company. It's not a personal relationship. I talk about it a bit in this writeup: [http://khanism.org/society/loyalty/](http://khanism.org/society/loyalty/)

<comment><USER5> If you were really married to the company, you could actually get something in the divorce.

Your employer is not like your spouse. Your employer is more like a f'buddy that is into "S" when you are not into "M", who gives you a booty call every weekday at 9AM without fail, who leaves a fat wad of cash on your nightstand every two weeks, and who all your other friends think is a colossal jerk. Also, your employer is anything but monogamous, but expects you to be.

You would dump them in a second, if it weren't for that cash, because that would make you a fool rather than a prostitute.

</comment></comment></comment></comment><comment><USER6> I don't really understand this post. The author seems to be doing a lot of handwringing for no reason. Why not just tell the new company "I'm currently employed, so it is unlikely that I would leave my job, but I would be open to it for the right opportunity, if you're still interested"? That way, you both know where you stand, _and_ you have a better negotiating position, since you don't _need_ to take the new job.

<comment><USER7> I concur - it's like the author never even attempted to get a cost of living adjustment in the offer.

<comment><AUTHOR> The offer was 20k more than my base salary already. Asking for even more seemed crazy to me. I have controversial opinions on how much money developers make already, probably stemming from my imposter syndrome. Asking for more money did not make me comfortable. If they had offered, I would have had to reconsider. I expected more of a conversation after I declined, but it didn't happen.

<comment><USER8> The path forward is usually not comfortable. Up to you whether or not it's worth it (sounds like it's not).

> _I expected more of a conversation after I declined_

Guessing the recruiter felt the same way. "A call would have been nice" was the chance to have more of a conversation! It's where they say "what went wrong?" and you say "it's all great but I did the math and I need another $15k (or whatever) for the move to make sense" and they say "if I can get you $10k will you accept today?" and this is called negotiation.

And don't kid yourself, it's all negotiating about money. I'd work waist-deep in cow feces programming a Facebook clone on an AS/400 with actively hostile coworkers if it paid $2 million/day. Let's be real, there's _always_ a price. Maybe it's not realistic, but it's there.

For me, it's easier to negotiate conversationally. These are my roadblocks for taking the job, how do we solve them together? Let the recruiter get creative. In most negotiations you don't have the monopoly on solutions -- know your must-haves and collaborate with the other party. It doesn't have to be adversarial.

<comment><USER9> I'm a programmer and I would prefer to negotiate via email. All those counter points could have been raised in the response instead of a little fit.

<comment><USER8> This part is business, not programming.

My biggest salary negotiation was part phone, part email. But the relationship was collaborative, so it worked.

</comment></comment></comment></comment></comment></comment><comment><USER10> _> felt guilty enough for turning it down after they had spent time and money on me _

In these cases you should _never_ feel guilty about the time and other resource _they_ spent on the process. If they hadn't made you an offer in the end they certainly wouldn't have felt guilty about the time/money/other _you_ had spent.

<comment><USER11> Very good point, I've spent almost 40 hours of my time for an application only to be told at the final stages I wasn't right for the position.

I doubt anyone on the other side lost sleep over it.

<comment><USER10> Exactly. It is part of the process that both parties need to accept. If the outlay/risk is too high for the company then it is not the candidate's fault, the candidate does not dictate the interview process.

</comment></comment></comment><comment><USER12> There was once a company giving out free iPads to anyone who could pass their tech screen interview. This was round about the first release of the iPad, so it was quite a big deal - they were expensive and out of stock at local retailers.

I went in, passed the interview, collected my iPad, and at the second round interview had a very strange "so why are you interested in working here?" discussion. I wasn't, I was only there for the iPad.

<comment><AUTHOR> This made me laugh out loud. You're fearless!

</comment></comment><comment><USER13> _All_ my interviews in my past few months have been in this format.

1\. Talking to recruiter ( 0-1 hr)

2\. InterviewStreet coding challenge ( 2 hrs)

3\. Phone Screen - 1 hr

4\. Take home coding exercise - 4 hrs

So you are spending 8 hrs just to get your resume looked at. Then comes onsite interview which is another day ( assuming you are not flying out).

All recruiter did was mass email ppl on linkedin. Spending at most 1 hr on your particular case. You have all the right to say no, its none of their business why. I've had Amazon recruiters not even have the courtesy to email me back when I didn't pass ( assuming) their interviewstreet. They don't even tell you why you got rejected when you don't pass the interview so you don't have to either if you don't want to. Just tell them 'it was difficult decision', if you are feeling particularly generous :D.

<comment><USER14> What country are you in?

<comment><USER13> USA

</comment></comment></comment><comment><USER15> Funny: the recruiter was annoyed at his declination email - a phone call was apparently expected. But how does a company decline? "We do not see a fit at this time, but we'll keep your resume on file". Lol

<comment><USER16> The recruiter was upset he didn't get a chance to browbeat him into changing his mind. The author should stick up for himself because recruiters are not highly incentivized to care about your happiness. If you don't upset future business, that's all that matters to them.

<comment><USER8> Or the recruiter had tools at his disposal he wasn't even able to employ against a brick-wall "no". The recruiter didn't even have the chance to address the applicant's concerns, which is a bummer. Maybe they liked the applicant so much the recruiter got told "do whatever it takes" and he didn't even get a chance?

</comment></comment></comment><comment><USER17> You did nothing wrong. Keep doing what you are doing, spend some time interviewing, it's a great skill to develop. Don't feel like you're cheating on your wife, your current employer is _not_ your wife. If at any point, they realize that they are better off without you they'll sack you, period.

If the companies you interview with really want you they'll make it worth your while. They'll adjust their offer to compensate for all the items you listed, otherwise, they just accept the fact that you can walk at any time.

<comment><USER18> Excellent point about negotiating. Definitely mention that you will take a hit with housing and taxes if you move, and have them add $12k to the offer. That is peanuts compared to the total offer amount.

</comment></comment><comment><USER19> I try to subtly steer the direction of the interview process from within my current companies. But it is fruitless, last time I got responses from other engineers that conduct the interviews like:

\- "real world problems are not discrete enough to present and solve within 10 minutes" (but the random "average best solution" for a random algorithm question is, and they have 30 minutes to an hour to fumble through it without us telling them they really had 10 minutes)

\- this is what we do for everyone (and when we find the right candidate that fits our autistic goals and is also sociable enough for our arbitrary culture fit ideals, we won't have any exercise like it in the actual job)

I just don't get how there is so much media about how bad the interview process is, on here and linkedin, but nobody has an alternative yet. Is hand waiving it away with "we just dont want false negatives" really the absolute to perpetuate this inefficient process?

</comment><comment><USER20> It sounds like the poster is happy with his position in life, and he's just figuring that out. I think favorite piece of wisdom that can be applied to this post is to listen to your gut when it tells you _not_ to do something; not the other way around. If you're in a position in life where you're happy, try to coast for a while and enjoy stability.

<comment><USER7> I didn't gather that the author was happy - it sounds like he's quite stressed all the time and over-analyzing everything and yet not considering so many options at the same time. Just doesn't seem like a fun recipe to me.

</comment></comment><comment><USER21> Rage. Your employer pays your salary, you do your very best work for them. That is all you owe them. If they expect to make a penny more without you, they will.

You do not owe them loyalty beyond that. You owe negative loyalty to a recruiter, especially somebody trying to guilt you.

</comment><comment><USER22> Just ask for way more money. What would it take for you to get to that more pricey spot? An extra $50k? Just do it. I've seen people get 30 or 50% more on their offer by impressing the hell out of the interviewers. Don't think that the the flight makes you owe them anything. Why do they need to do an in- person interview? I've hired plenty of people out of province with a couple extended Google Hangouts chats as well as code review.

</comment><comment><USER23> > I sought advice from two of my best friends/coworkers.

Unless you trust them absolutely, it's a risky idea to talk to coworkers about your interviews somewhere else. If your coworkers are already talking about their interviews with you, then it's fine. I mean, there are some very weird companies out there where the managers get so upset at the idea that you might look somewhere else on your own initiative that it's usually best to not talk about job interviews with any coworker. It's one of those things that people do themselves but hold against you once they know you did. Talk about some job frustration during a company party, only to have it recited as an argument against you during an HR interview.

That said, interviewing at places even if you don't have plans to leave is normal and many people do it. It's interview experience and market research in one and it's something your employer may not punish you for, but some do, so keep it private.

<comment><USER24> Doing this results in the company and HR having an inaccurate view of the organization. How long can a company last when employees don't make frustrations known and instead put on a happy face for display?

<comment><USER17> You can voice your frustrations and offer ways to improve the organization without volunteering the information that you are interviewing.

When it comes to interviews and dealing with my current employer, I have 2 rules: never tell that you are trying to leave, and never accept the counter offer when you give your notice.

</comment></comment></comment><comment><USER25> We rent our brains for money. Brain prostitution. We can seek higher offers, no guilt needed.

<comment><USER17> Exactly. Everybody in this industry needs to shift their mindset. You are not a loyal little employee cherished by your boss, you are a contractor with one customer, period. You do not owe anything to anybody, you are free to go with what is best for you as an individual and a professional.

<comment><USER26> True, but... _never_ burn bridges (unless you really would go on unemployment rather than work there - or with them - again).

</comment></comment></comment><comment><USER27> I have been in this situation before where I was flown out and the company low balled me on salary with 5% pay cut despite the cost of living be way higher. My time and energy was wasted. Trust me, companies do the same things all time to prospective employees. Even for a startup, flying someone out and putting them in a hotel for a night is the cost of doing business and the risk you take for finding the right candidates.

<comment><USER28> if you didn't tell them how much you want to make, they're going to just guess. and it sounds like they guessed pretty well, if they came within 5% of what you currently make.

amateur hour advice like "never be the first one to name a price" is nonsense. just tell them what you want and see if there's a fit, or not. it's how business gets done 99% of the time.

<comment><USER27> I did tell them what I make but I didn't tell them what would make me leave because it usually goes without saying... more money.

<comment><USER28> right, so exactly as i suspected, you didn't tell them how much you want to make.

and no, it doesn't go without saying. you need to say it. tell them your requirements. do it without them asking.

what if you wanted to buy a car, but the dealer wouldn't tell you the price? what would you do? offer them MORE than what you think the car is worth?

<comment><USER27> I actually see it a bit differently than buying a car. To me it's more like an auction where the person only has to actually sell the item if they are pleased with the final price. So if the price starts at $100 dollars and you bid $95 that person will probably not give you the item and wait for a better deal or at the very least sell at cost. That being said, I certainly could have been more assertive and said I will only move if you pay me X amount but then you run the risk of not getting the best offer they can provide because you have given them number. At the end of the day after the company low balled me, I told them I would need more money than that and they wouldn't budge so even so it was still a waste of energy.

</comment></comment></comment></comment></comment><comment><USER29> This post sounds like every interview cycle I've ever gone through. The self doubt during the process, the surprise at their interest, the pleasantness of the new company, and then finally, the hard part: making a decision. Not sure why this is worth even writing about. Also, I wonder about the sensibility of writing about it under your own name when your current employer now knows you are interviewing around.

</comment><comment><USER30> Everyone owes it to themselves to test the market once a year. You don't have to take the offer, but the extent to which you consider yourself guilty for doing so is the extent to which your current employer is screwing you. If your current company is in trouble, they will only blink once or twice before kicking you aside.

<comment><USER31> > If your current company is in trouble, they will only blink once or twice > before kicking you aside.

This right here. The company has no loyalty to you, so why should you have any loyalty to them?

I'm very happy where I am right now, but I know that I'm exactly one "pivot" away from getting the axe and having to move to Texas. If a better opportunity comes my way, I'm not going to lose sleep over quitting.

</comment></comment><comment><USER32> You sound like junior guy which probably explain all the drama. Others already pointed out your mistakes in reasoning.

However, since you liked this opportunity so much (SF I assume), you could just ask for more money, however much would make things work for you. Explain your reasoning to them and see what they can do.

</comment><comment><USER33> > Maybe I did nothing wrong and am over-analyzing it.

Yes, that's exactly it.

The recruiter was being a dick by making you feel guilty about declining over email. Even if the recruiter was correct and you should have called, that has no bearing on whether or not you should feel guilty about the process overall.

You went through the process, was presented with an offer, and after evaluating the offer against your current circumstances, decided it wasn't a better deal. That's how it's _supposed_ to work.

I'd say keep on doing what you're doing. If you find that interviewing periodically is a good use of your time, do it.

</comment><comment><USER34> > Maybe there is a better way to explore other opportunities without ending up > on a plane.

Yes, arrange a Skype/call (30-45 mins) with the actual hiring executive, the guy you'd report to.

Have solid questions prepared. Learn some basics about what they are working on, what kinds of problems they need solved, a little about structure and the team.

Assuming there's good tonality in the conversation and you're serious about exploring further-- then move forward to meeting in-person.

</comment><comment><USER35> I guess I'll be one voice in the other direction -- I agree with the friend: if deep down you know you're just exploring, you should cut it off before the in-person if they are flying you out. Interviewing is stressful for the interviewers, too, and nobody wants to pay $400~ and spend a day of their time, too, for you to have a field trip to update your feel for the market.

</comment><comment><USER36> Everyone in this story seems to have acted reasonably.

Guy interviews new job, weight up the pros and cons, decided against it.

</comment><comment><USER37> I do not see a real reason why one should be afraid of trying to find a better offer. I do not think it is right to be so emotionally attached to an employer. all they do is give you money to do stuff they don't want to do. It's just business and loyalty should not come into it.

</comment><comment><USER38> This looks like an advert for the book.

</comment><comment><USER38> Post sounds like an book add.

<comment><USER39> Comment sounds like you didn't actually read the post. He explicitly says he's against the book. I can't fault someone for trying to earn some credit with Amazon.</comment></comment>


Bjorn Lomborg: Our lifestyle is unsustainable and why that's irrelevant - <AUTHOR> http://www.newsweek.com/2011/06/12/bjorn-lomborg-explains-how-to-save-the-planet.html <comment><USER3> We got lucky a few times and now have enjoyed a comparatively long period of time without serious problems. Relatively long time being one generation, so we don't really remember what it feels like to go hungry, struggle to survive in a war and stuff like that.

Unfortunately that doesn't mean that bad things can't happen again, just because we don't remember them. In Japan they had ancient stones in the land warning about places where previous Tsunamis had hit. Unfortunately nobody of the "younger generations" cared about them anymore...

This attitude of "technology will sort it out every time" is just stupid and not really supported by history. I have no doubt that humans will survive, somehow. Doesn't mean that there can't be turmoil, millions of deaths and so on on the way anymore.

</comment><comment><USER4> I'm not sure if he's correct. Neo-liberal mainstream economists take it as an article of faith that "everything will be OK in a free market". If we don't innovate early enough, society can collapse. Look at Easter Island.

Nuclear is there as an option, but it's not a pretty one. There's a big lead time on reactors.

As an Australian, I'm very proud of our imminent carbon tax. Businesses will find a way to cut energy use, or generate "green" power before any crisis hits. OK, a carbon cap and trade _might_ do the same, but businesses won't be able to invest as they will be afraid carbon prices will increase or decrease too much. Speculative bubbles, fraud, and the weather would make prices fluctuate too much.

<comment><USER5> > I'm not sure if he's correct. Neo-liberal mainstream economists take it as > an article of faith that "everything will be OK in a free market".

So, you don't believe in innovation on demand.

> As an Australian, I'm very proud of our imminent carbon tax. Businesses will > find a way to cut energy use, or generate "green" power before any crisis > hits.

Except that you do.

<comment><USER6> > So, you don't believe in innovation on demand.

Innovation isn't guaranteed to happen "on demand". Some things may not be physically possible, or even if they are, may prove economically or environmentally unfeasable. "Everything will be OK in a free market" is just that - an article of faith.

<comment><USER7> Historically, it's more probably correct than "The Party's 5-year-plan will make everything OK".

<comment><USER3> This discussion is seriously flawed. What free market proponents miss is that ALL markets are free markets. Even in communist Russia there was a free market. It was just that the cost for doing something not allowed by the government was incredibly high (like death penalty). The free market then would go on to produce the things, according to prices and demand. The black market is simply a part of the general "free market".

So there is not really any information contained in "let the free market regulate things". The environment (including politics) determines the actual prize of things. The free market then does the rest, but we still have to set up the environment in the proper way.

For example the price of wheat is not just what people are willing to pay for it - it is also the cost of producing it. You can not go artificially low with the price. Just to provide an example that is not so obviously affected by politics.

<comment><USER8> "Even in communist Russia there was a free market. It was just that the cost [...] was incredibly high (like death penalty)."

According to your definition prisoners are also free. It's just the cost of breaking out of prison are incredibly high (like death penalty).

<comment><USER3> They are free to roam inside their prison cell. Nobody is really free, just our average prison cell is bigger. Where does a real free market (as you might subconsciously imagine it) exist? It would have to be anarchy at least - <USER2> am I not "free" to take my neighbor's land to build a factory there? Only in anarchy I would be really free, I could shoot my neighbor and take his land. Unfortunately he could also shoot me first, but that is the price for the truly free market.

Unless you want to propose anarchy, you have to propose some policies alongside your supposedly free market, such as property laws enforced by the state/military. There goes you free market down the drain.

My point was that "let the free market sort it out" is not a strategy. It does not contain any actionable information, as you still have to define the actual rules of your "free" market.

To make a better example than shooting my neighbor to take his land: why am I not free to dump my waste on his land? Would a free market (allowing me to dump my waste on his land) somehow sort out that I wouldn't dump my waste on his land?

<comment><USER8> Most categories break down if you stretch them far enough. That does not mean that they are not useful. Fare from it. Usually, there is some common understanding what words mean. For example, if I say "forest" most people will know what I mean, without arguing that there are no real forests only single trees [1]. Just as most people will agree, that markets in the western world are free (or more free) when compared to markets in Soviet Russia (the term "black market" should have tipped you off).

[1] In the same manner one could argue that fossil oils really are renewable resources if the time frame under consideration is chosen to be long enough.

<comment><USER3> Yes, but I challenge you to come up with a proper definition, if you think the "free market" will save us. Those wishy washy discussions are what get us into trouble.

And fossil fuels would be sustainable if their rate of production was greater than or equal to our rate of consumption.

<comment><USER8> "I challenge you to come up with a proper definition, if you think the 'free market' will save us"

I will do no such thing because I have not argued that "a free market will save us". I solely wanted to note that arguing over definitions and making caricatures of commonly understood terms ("But what does it really mean to be free?") is pointless and does not add much to the discussion at hand.

I agree, however, with the comment made by gaius: historically it is more probable that a free market produces innovation than a centrally planned economy. Not, IMHO, because the abstract entity "free market" somehow magically comes up with a solution. But rather because it allows individuals to tinker and to test their results w.r.t. the actual wants and needs of other people as opposed to assuming that the best solution can be planned and designed top down.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> On the topic of the long term survival of societies I can thoroughly recommend _Collapse_ by Jared Diamond:

[http://en.wikipedia.org/wiki/Collapse:_How_Societies_Choose_...](http://en.wikipedia.org/wiki/Collapse:_How_Societies_Choose_to_Fail_or_Succeed)

While I am generally rather positive about the long term fate of our current society I do worry that blind belief that technological innovation will _always_ deliver solutions is perhaps a bit naive.

<comment><USER3> I always remember his example of a society that collapsed after 4000 years, whereas our modern society is maybe around 200 years old. We have no idea whatsoever how sustainable our current lifestyle is.

</comment></comment><comment><USER10> I think there are a couple of points that the article skips over:

1) The planet's human population is much greater than it was even 50 years ago ([http://www.google.com/publicdata?ds=wb- wdi&met_y=sp_pop_...](http://www.google.com/publicdata?ds=wb- wdi&met_y=sp_pop_totl&tdim=true&dl=en&hl=en&q=population+of+earth)) and continues to rise

2) We still don't fully understand the impact of widespread habit and species loss

1) is important because each person requires a minimum amount of energy, in whatever form, to sustain them, so we need to improve our technology year-on- year just to stay at the same level of 'resource drain'.

2) is important because the idea that the natural world will recuperate once we've developed more sympathetic ways of existing with it may actually be flawed. There is some evidence to suggest that the biosphere is a self- regulating system of which we are now breaking or removing many parts. Any such system, however resilient, can only stand so much of that before it collapses.

Of course technological development is crucial to our long term survival, but in my opinion this doesn't make short term fixes irrelevant.

<comment><USER11> ad 1: <http://overpopulationisamyth.com>

<comment> bjelkeman-again That is a very shallow set of arguments from a self confessed pro-life group. A better place to start understanding the complexities and impact on environment from a large population is probably Nature's special on planetary boundaries.

[http://www.nature.com/news/specials/planetaryboundaries/inde...](http://www.nature.com/news/specials/planetaryboundaries/index.html)

</comment></comment></comment><comment><USER12> I think many people are missing Lomborgs basic point.

It's not just blind faith in technology but rather technology is the best choice we have now, so instead of using trillions on political statements of intention, let's use them where it matters and that is in trying to innovate and engineer our way out of some of the issues.

<comment><USER3> How does a political statement cost trillions? The information contained in the sentence "let's use the money where it matters most" is zero. How do you figure out where it matters most?

The fact is: if people can exploit some loophole (like blowing dirt into the air instead of installing expensive filters), they will do so. They don't really have an incentive to do otherwise. It doesn't have to be laws that gives them an incentive - there could be "transparency", customers could prefer to buy "clean" stuff, hence producers would have an incentive to produce clean.

Without such an incentive, nothing will happen.

<comment><USER13> I think the original comment about political statements costing trillions are when say the government subsidizes corn ethanol.

There is good consensus that corn ethanol is energy negative, and that it doesn't result in cleaner air or less greenhouse gases due to production costs.

This mis-allocation of capital hinders development of truly better alternatives, and sets back innovation. These setbacks, beyond the cost of the subsidy and the lack of improvement in the areas targeted, do cost trillions.

<comment><USER3> I dislike most of the government actions that are supposed to help, but I think it is confusing the discussion to mix together things that could be done, should be done, have been done, and so on. Ultimately I think Lomborg is just a troll, and lumping people together into fake classes is a tried and proven technique for trolling. It gets people worked up because they don't want to be associated with certain other people, and stirs discussion towards petty battles rather than solving the problem. Just because some government wasted billions, doesn't imply every possible political action would be a waste of billions.

<comment><USER12> I think this is a basically unfair description of the reality.

Lomborg is not some gun-ho republican right-wing that denies there is a problem. I is just in disagreement with what most people find to be the right reason.

He is as liberal as they come and he just happen to have a different take on what the problem is and how to solve it.

Calling him a troll is sorry to say this but absurdly unfair and shows more about you than him.

</comment></comment></comment></comment></comment><comment><USER14> The author does not acknowledge the point that e.g. air quality has improved precisely because people have complained about it.

The technological developments and business investments in filtering and related technologies would not have happened without environmental groups putting up a fight.

In a similar way, groups shouting about unsustainability are the ones who actually get people to think about alternatives, which in turn plays one part in moving technology forward.

Of course technology is moved forward by other things as well. But don't underestimate the impact of young people taking up PhDs in relevant subjects partly because of the high visibility of the debate about sustainability.

</comment><comment><USER15> > In fact, would-be catastrophes have regularly been pushed aside throughout > human history, and so often because of innovation and technological > development. We never just continue to do the same old thing. We innovate > and avoid the anticipated problems.

The thing about the Anthropic Principle is that it only protects you in the past, not in the future. We're here now because our civilization overcame its past problems; but any speculator can tell you that past performance is no guarantee of future results.

<comment><USER16> The thing we really have to come to terms with is that the future is unpredictable. Both the "doomers" and the pollyannas fall down here. Past performance says _nothing whatsoever_ about future performance.

Nice well-behaved Newtonian systems are amenable to prediction by mathematical regression. Messy, complex, chaotic living systems are not. Everything changes, and changes how it changes, and changes how it changes how it changes, and ...

</comment></comment><comment><USER17> I'm surprised by all the negative comments.

Lomborg makes the simple suggestion to rely on the most proven processes we have to solve problems: science, technology and trade.

How can this in a community of hackers and entrepreneurs be so provocative?

<comment><USER18> That is a false dichotomy - lots of people suggest we rely on science and technology, that is not what many people dislike about Lomborg. Well, it is not what _I_ dislike about him anyway, I can't speak for everyone.

Arguing against him is not arguing against science. Actually, it is my respect for science that makes me wary of him. He always seem to suggest simple populist solutions to complex problems.

<comment><USER12> The populist solutions are the political summits that year after year claim to want to solve the worlds pollution yet do nothing.

</comment></comment></comment><comment><USER19> "Past performance is no guarantee of future results." Just because technology has saved our sorry ass in the past does not entail that it will continue to do so forever.

<comment><USER20> "Past performance is the best indicator of future performance." Technology has saved our sorry ass in the past, so it is likely to continue doing so for the foreseeable future.

<comment><USER3> Except it hasn't. It has saved us in some occasions, but not in others. There where still millions of "unnatural" deaths in the twentieth century. And, similar to what the other comment pointed out, some species are extinct or nearly extinct - technology doesn't seem to have helped them.

What about the recent financial crisis? Not sure how hard it really hit, but nevertheless, technology has not prevented it. Just an example to point out that we do NOT have everything under control.

</comment></comment></comment><comment><USER21> And the major unfair point is that the developed countries, after having exploited and polluted their way to prosperity, want equal cuts from the developing world.[1] [1][http://big5.xinhuanet.com/gate/big5/news.xinhuanet.com/engli...](http://big5.xinhuanet.com/gate/big5/news.xinhuanet.com/english/2008-07/10/content_8519797.htm)

</comment><comment><USER22> I think Lomborg's got a good argument in favor of a conclusion he leaves unstated (and may, in fact, not favor) - that some portion of the money governments would spend on sustainability should instead be spent on finding a proactive solution to climate change, e.g. extracting large quantities of carbon from the atmosphere.

Doing nothing and hoping someone independently solves the problem strikes me as an unacceptable risk; there is little market incentive at the moment to reduce environmental damage. A carbon-trading scheme would create such an incentive, but would no doubt create its own inefficiencies. Markets are great at dealing with resource shortages, for example whale oil, but quite bad at dealing with negative externalities, e.g. air pollution. It took government intervention to clean up London (I think? I don't have any sources on this).

Spending money on proactive solutions encourages economic growth instead of discouraging it, and can lead to future benefits as "green technology" leads to new advances. On the other hand, it's somewhat risky as most avenues of inquiry will lead to dead ends, and any geo-engineering technology that becomes widely adopted could have nasty side-effects.

</comment><comment><USER23> It is the irony of the tragic nature of human race: we are both, descendants of Promitheus, who courageously fought for our right to harness greater powers, but also of Pandora who just did not have the maturity to know what NOT to poke,

It is so ironic, there are so many different diets, just to conceal the simple fact that if one eats excessively they will get fat and the simple fact that if one wants to be in good shape, there is a very simple straightforward answer, eat less move more. Instead we busy ourselves with the new " scientific breakthrough" that allows us to be eating bacon all year long and then drink the magic pill and wear our bikini just in time for the miss skinny contest.

P.s. The interesting dude is Odisseas, who before going close ro the sirens, he assessed the risk and decided, to hear their sing but not

</comment><comment><USER3> Just wondering, have science and free markets ever resolved a tragedy of the commons situation (except for destroying the resource)? I think the "original" solution for the sheep and lawns was to erect fences, which seems to me to be a purely political solution. It doesn't seem so different from issuing CO2 shares.

</comment><comment><USER24> Nothing like standing up a straw man and then tearing it down.

The situations that are cited in the article seem like apples when comparing to the situational oranges of today. A shaky foundation like this hardly seems like a good place to build a valid logical argument. But, it sure does look cool.

</comment><comment><USER16> This guy is ignoring the twin elephants in the living room: the unbelievably massive amount of energy that we obtain from fossil fuels, and the reliance on the modern financial system on continuous growth simply to maintain the status quo.

These are linked issues.

All fossil fuels will peak this century. It's not politics... it's physics. No amount of wishful thinking will change that. Actually, I suspect they will all peak before 2050. Many knowledgeable people think oil has already peaked.

Peaking doesn't mean running out, it means exponentially declining EROEI (energy return on energy invested). There's plenty of oil left, but when it takes a barrel of oil to get a barrel of oil we are out of oil.

Nothing except maybe nuclear has the muscle _right now_ to fill the gap for electricity generation. Just try to sell that now, post-Fukushima. Nothing except biofuel can presently fill the gap for transportation, and it is dubious that biofuels can scale to those levels.

Does this mean apocalypse? I'm actually not a "doomer" per se. But consider this: as we pass peak on all fossil fuels, the vast majority of our surplus energy and labor will have to go to simply treading water and maintaining our standard of living in the face of rapidly declining energy availability. There's also going to be a lot of demand destruction: people buying less, traveling less, using less.

All that does spell doom for our financial system. Even a short interruption in growth results in financial catastrophe, since without continuous growth you get a wave of debt defaults.

It could be a very chaotic century.

Edit: but on the upside, there's going to be a ton of entrepreneurial opportunities around saving energy, making energy, and storing energy. Personally I think IT isn't where it's at... if I wanted to get back into entrepreneurship now (and I might in the future) I'd get into something energy-related.

</comment><comment><USER25> According to this Robber Baron apologist, I am 10 times better off than I was in the 50s. Lets see, my dad, in the fifties could afford from his average salary to buy a new car every 2 years. Guess what in my so called better life, I buy a new car every 15 years. yea thats progress. I think this tool lumps the progress of the top 2% in with the rest of us smucks to come up with his baloney good news. The average wage buys less today than it did years ago, plus the average wage is falling and benefits are disappearing. The good news just keeps coming...

<comment><USER26> I think this is the case: In the fifties, there were a lot fewer people who were as rich as your dad, than there are people today who are as rich as you. At the same time, more people today want and can afford cars and other expensive things. Thus, even though we are constantly using resources more efficiently, you are competing with more people for resources today than your father in the fifties.

This is natural and a good thing: If Earth can't sustain very many people buying cars every 2 years, then we can't buy new cars every 2 years. We have to use resources more efficiently. It's a similar situation with fuel: For a long time, we built stronger engines that consumed the same amount of fuel, instead of building engines that used less fuel for more efficient use. Later that trend reversed. A similar thing happened with computers and their energy use.

I hope my kids won't have to buy more than one car in their life.</comment></comment>


Sidecar: 'We failed because Uber is willing to win at any cost' - <AUTHOR> http://venturebeat.com/2016/01/20/sidecar-we-failed-because-uber-is-willing-to-win-at-any-cost/ <comment><USER2> Pretty impossible to compete with someone who's got $8B+ in capital to win with. That's like bringing a nuclear bomb to a knife fight.

</comment><comment><USER3> Except gm has 36 billion. And Google too much to count.</comment>


China's slowdown deepens; industrial output growth falls to 17.5-year low - <AUTHOR> https://www.reuters.com/article/us-china-economy-activity/chinas-slowdown-deepens-industrial-output-growth-falls-to-17-1-2-year-low-idUSKBN1W102H <comment><USER2> > Several analysts said in recent weeks that China's economic growth was > already testing the lower end of Beijing's full-year target of around > 6-6.5%, which is likely to spur more policy easing. Second-quarter growth > cooled to 6.2%, the weakest in nearly 30 years.

6% growth would be the envy of many countries. For comparison, the last time the US did that was 1984, after back-to-back recessions and a flood of deficit-financed defense spending:

[https://www.thebalance.com/us-gdp-by- year-3305543](https://www.thebalance.com/us-gdp-by-year-3305543)

<comment><USER3> Under the CCP China's per person growth has been lackluster over the full period 1950 - today relative to many countries. The numbers have improved, but context is always important.

Edited: Used poor numbers for GDP ranking. Trying numbers from here: [https://pophealthmetrics.biomedcentral.com/articles/10.1186/...](https://pophealthmetrics.biomedcentral.com/articles/10.1186/1478-7954-10-12#Sec12) but it's not that fast.

PS: Of note the 1950's GDP was after a long civil war.

<comment><USER4> ROFL. Never have I seen a more skillful distortion of facts. China's GDP per capita was around $500 per person in 1950, just at subsistence level, whereas it is currently around $9500. Other than a few countries such as South Korea, there are no countries that have advanced so much in that period.

If they have fallen in ranking, that is only because a number of countries became independent after WW2, especially in Europe.

<comment><USER5> Between 1949 and 1978 they did massively screw up economically while experiencing a population boom, which obviously led to GDP per capita numbers to collapse. On the other hand, since 1978 they've experienced probably the biggest economic boom in human history.

After Mao's death the government was pragmatic enough to realise that if they did not kick start the economy the regime would collapse (as it did in the USSR), and they rightly concluded that socialist economic management does not work.

Beyond that, it's difficult to compare with South Korea (since someone else mentioned that country) just due to the population difference.

<comment><USER6> Not really. They grew at an average of 6% over Mao's reign too. The economic progress made was very substantial. In 1948 China was an impoverished, colonised and war-wrecked country with a large proportion of drug addicts. 90% of people were illiterate. By the 60's it was a major power making large machinery, ships, weapons etc.

<comment><USER5> The economy was on its knees in 1978 and they had rationing. There is a reason they instigated such drastic changes.

</comment></comment></comment></comment></comment></comment><comment><USER7> I have so many questions about China.

1) What does this mean for Xi's leadership and the CCP? Will this threaten their power?

2) Does this cement the US as the leading economy for the next quarter century?

3) What does this mean for up and coming rivals, such as India and Vietnam?

4) How will this effect China's middle class?

5) Will we see an increase in Chinese expats?

<comment><USER8> 1) What does this mean for Xi's leadership and the CCP? Will this threaten their power?

No, only had you experienced the level and depth of China's indoctrination, can you understand how profoundly it affects the people, I still recall now and then the red songs I was taught and sang. Your whole world view is shaped by the regime to ensure their best interest, you think in their ways even if you are a rebel.

BTW they now teach "politics" in primary schools. The Youth are extremely patriotic and loyal to the party, they are impatient to even let you start your different opinions.

There will be discontent, but the power and reach of the tools the party has built is simply unprecedented in human history.

4) How will this effect China's middle class?

If the condo market collapses, most of them probably will go bankrupt and be in huge debts for a long time, being taught bubble economics the hard way, but the market probably can bounce back since it's CCP monopoly. Worst case senario the party can print money nonstop to keep the prices from crashing.

<comment><USER9> Much of this description applies pretty well to western countries, especially the US.

<comment><USER10> China has no freedom of speech, the press, religion, or assembly. There is no real comparison of the indoctrination of the people of China to the US to be made. The systems are completely different as to be unrecognizable from one another.

In addition, the Chinese court system is simply a tool of the government to keep themselves in power. Reference the 99.9% conviction rate: [https://www.telegraph.co.uk/news/worldnews/asia/china/121932...](https://www.telegraph.co.uk/news/worldnews/asia/china/12193202/Chinese- courts-convict-more-than-99.9-per-cent-of-defendants.html)

<comment><USER11> > There is no real comparison of the indoctrination of the people of China to > the US to be made. The systems are completely different as to be > unrecognizable from one another.

I'm not sure I entirely agree with that. It's true, the two systems are significantly different, but I don't think that rules out that Americans are subject to _a form of_ indoctrination. Look at the stranglehold the two parties have on the electoral _system_ in the US. Just as one example, what happened to Bernie Sanders in the last election barely raised an eyebrow. If you listen to Dan Carlin's Common Sense podcast for several weeks on either side of the last election (particularly after), I'd say it's pretty hard to make a case that the system isn't rigged to a fairly large degree, but how many people are actually aware of this?

I don't know if indoctrination is the perfect word for it, but constantly singing the praises of the system of democracy, while realistically the only alternatives people get have to go through a very thorough pre-screening for "suitability", and almost no one ever asks what the hell is really going on here, seems like a relative of some sort to indoctrination.

<comment><USER12> A reality tv show political outsider was able to become president through the Republican primary system.

Superdelegates in the Democratic primary are the following:

1\. Elected members of the DNC 2\. Democratic governors 3\. Democratic members of Congress 4\. Former Democratic Presidents, Vice Presidents, congressional leaders, and DNC Chairs.

The majority of them are elected officials currently holding office. The rest are formerly elected officials, and a minority. It's called an indirect election. That is not 'rigging'. The closest thing to rigging here would be category 4.

<comment><USER11> > A reality tv show political outsider was able to become president through > the Republican primary system.

That this is even possible is as much a criticism of the process as it is a compliment.

Honest question: if you were designing a brand new system to elect the leader of the US, how likely do you expect it would be for someone of his calibre to be the last person standing?

> 1\. Elected members of the DNC 2. Democratic governors 3. Democratic members > of Congress 4. Former Democratic Presidents, Vice Presidents, congressional > leaders, and DNC Chairs. The majority of them are elected officials > currently holding office. The rest are formerly elected officials, and a > minority.

Was this structure designed by the founding fathers? What percentage of Americans would you say _really_ understand that a small group of undemocratically unelected people like this has the ability to directly block undesirable (to whom we don't really know) candidates from making it to the election? How many people do you think _approve_ of this structure.

> That is not 'rigging'.

For certain definitions of rigged, of course. If the actual nature of this system was clearly explained to the American people, do you think most people would agree with you?

<comment><USER12> >Was this structure designed by the founding fathers?

No, this is a primary, as in, it is how the democratic party elects its own representative to run for president.

>What percentage of Americans would you say really understand that a small group of undemocratically unelected people like this has the ability to directly block undesirable (to whom we don't really know) candidates from making it to the election?

In 2016, 20 of 716 were in category 4, i.e., those who aren't currently holding office as a result of having been voted in. The rest are currently holding an office for which they were voted in. In other words, democratically elected.

Superdelegates and how they function is common knowledge for anyone following or participating in the primary. It's heavily covered and talked about every presidential election cycle.

>How many people do you think approve of this structure.

According to a poll run by Rasmussen in 2016, likely democratic voters approved of it at a rate of 30%.

>For certain definitions of rigged, of course. If the actual nature of this system was clearly explained to the American people, do you think most people would agree with you?

Americans understand very well how the election system works. 'Rigged' implies deception or fraudulence.

<comment><USER11> > In 2016, 20 of 716 were in category 4, i.e., those who aren't currently > holding office as a result of having been voted in. The rest are currently > holding an office for which they were voted in. In other words, > democratically elected.

That's actually a pretty convincing argument, I think I'll have to concede victory.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> Given the trajectory of most developing economies away from industrial growth and towards service growth, is this really so bad? Wouldn't we expect industrial output to peak and decline over time?

</comment><comment><USER14> Ah statistics.

You couldn't fault a layperson for thinking this means that they have plateaued, or industry is in decline. But it's not saying either of those.

This is just a very tortured way to say that we are reaching the other end of an S-curve. An S-curve that any rational person would assume was coming eventually.

</comment><comment><USER15> I don't think that's what slowdown means. They are still speeding up just accelerating less.

<comment><USER16> It's a slowdown... of growth. Who reads that headline and doesn't immediately infer that?

<comment><USER15> I did piece it together from context but it's a bad headline. It doesn't even say growth slowed. It says China slowed, and growth was low. It's just grammatically bad, and probably deliberately misleading.

</comment></comment></comment><comment><USER17> If they'd stop producing so much cheap, ephemeral crap I'd really like that. Stop wasting the planet's resources guys and just build stuff that works properly.

As seen on amazon.co.uk: "1-48 of over 70,000 results for "iphone case""

</comment><comment><USER18> Apparently Trump's tariffs contributed to this. Just hope it would not hurt US economy that much.

</comment><comment><USER19> Trumps measures taking effect to some extend?

I expect China will be hit hard by the US terminating UPU.

Edit:Changed to UPU

<comment><USER20> China's economic slowdown has been a long time coming, the relevance of this slowdown to the trade war is not necessarily as a consequence of it but more of a fortuitous opportunity for the US to negotiate freer trade in China. The trade war has an economic impact on China but there is a lot more behind their problems.

</comment></comment><comment><USER21> Who knows what the Chinese end game really is? I'm not a political analyst, just like I would have no idea who droned the Saudi oil fields (maybe Trump did). WTF--we only know what we're told.

However, based on the fact that the Chinese government mistreats the shit out of millions of their citizens--I'm delighted to pay more for a phone or a TV or whateve; just based on the possibility that they will become overtly aggressive in the future (and drawing similarities to the US prision system does not negate my point).

Of course, this is just my point of view, and it is colored by the litterly hundreds of thousands of battles I've had in my lifetime in cars. The fact is; if it looks like someone is out to fuck you... they usually are.

</comment><comment><USER22> And all they need to do to return to some semblance of their former trajectory is agree to stop stealing our IP, stop their currency manipulation, and stop sending us a bunch of fentanyl. A no brainer really.</comment>