If Java Is Dying, It Sure Looks Awfully Healthy - <AUTHOR> http://www.drdobbs.com/jvm/if-java-is-dying-it-sure-looks-awfully-h/240162390/

<comment><USER2> Java may not be dying, but it does take off early on Fridays for golf.

Java is not dying the same way Cobol was not dying 10 years ago. It has a lot of legs left but nobody is 'hoping' to use it, they are told to do so.

Java is and always has been almost completely a corporate tool. Again, like Cobol, so the 'cool kids' are not going to give it much love. It's too slow to execute to compete with C++, its too slow to write to compete with Groovy or Scala. And all the cool kids pick an extreme and vote that way.

Java is not 'dead', but thought leaders aren't using it right now. The people who inherited the decision of thought leaders of 15 years ago are using it, so the writing is on the wall, its just going to take a while to be read.

<comment><USER3> I'm fairly certain Java and C++ have comparable speeds, and I think in someways Java's faster.

<comment><USER4> Java is not as fast or faster than C(++). The assertion always makes me cringe. I won't say Java is slow(though the startup time is annoying for some tasks), as it does perform better than many languages. But how does it make sense to you that a platform written in C can produce results faster than C is capable of?

<comment><USER5> I agree that C code is currently faster than Java in most benchmarks:

[http://benchmarksgame.alioth.debian.org/u32q/benchmark.php?t...](http://benchmarksgame.alioth.debian.org/u32q/benchmark.php?test=all&lang=java&lang2=gcc&data=u32q)

There is no contradiction that a compiler written in a language with expensive semantics (say python), could compile a program written in another language (say C) to produce highly efficient machine code.

The JVM operations, such as JIT compilation and garbage collection, are bound by the performance of C code.

The performance of the code you write depends significantly on the quality of the machine code produced by the JIT compiler. This quality of this code is not theoretically dependent on the implementation language of the JIT.

<comment><USER6> > There is no contradiction that a compiler written in a language with > expensive semantics (say python), could compile a program written in another > language (say C) to produce highly efficient machine code.

Maybe not a contradiction in logic, no. But in practice the compiler has to solve a problem that is much harder than the problem the programmer would have to solve to write efficient C code for this one case. It's also one that has different complexity.

So you're in the situation now that a few compilers (VERY few, though this is very very hard to do) will actually beat stupid programmers in optimization, but there is nothing any compiler can do to beat the optimizations a good programmer will implement.

As for startup time, the sad part of that is that is one area where you could really improve C/C++ : startup time. Right now a C program has 4 distinct things that need to run before main() starts, and involve quite a bit of calculation, C++ has a lot more (the various kinds of initializers which can cause arbitrarily complex calculation).

A lot of these initializers result in constant (and small) memory layouts, and could in fact be run at compile time. What you generally do in initialization phase is to calculate registered classes (e.g. for serialization, or protocols) and make indexes of them. Maybe even compile regexes. All of that could be optimized to occur at compile time (as long as memory usage of the code is reasonable).

<comment><USER5> Sorry I was not clear enough.

I am _not_ making any kind of sufficiently smart compiler claim ([http://c2.com/cgi/wiki?SufficientlySmartCompiler](http://c2.com/cgi/wiki?SufficientlySmartCompiler)).

You think I am saying that a compiler can do optimization better than a human.

What I assert is that the implementation language of a the tool that generates machine code guarantees nothing about either the source language, or the quality of the generated code. This was the assertion of the parent that invalid. He said that because the Java JIT compiler was written in C, that necessarily implies that the generated machine code would be slower that C.

Consider an Assembler, written in C, that generates machine code. By your logic you can't argue that assembly code is always less efficient than C.

Or alternatively Fortran compilers, written in C, which produce machine code that outperforms code generated from C for many tasks.

</comment></comment></comment></comment></comment></comment><comment><USER7> I'm surprised nobody has mentioned Android yet. When you add in the Android factor, Java is probably still one of the most widely used programming languages today.

It's funny the article straight away brings up the verbosity argument as well. You want to talk about verbosity - take a look at Objective-C and Cocoa (again, hugely popular today!)!

Personally, I quite like Java.

<comment><USER8> Popular in terms of use, yes, but liked? I don't know, I doubt it. Android and iOS essentially force you to use Java or Objective-C respectively. I don't hate Java, but I don't like it either. It lacks quality of life features that other, similar languages have had for years. I can't stand writing code in it if I don't have to (and don't get me started on Objective-C...)

From what I hear from others and read on a weekly basis, few people enjoy writing Java code. It may not be dying in terms of numbers, but given an option to use something else those numbers would likely drop very quickly.

<comment><USER9> > and don't get me started on Objective-C..

        itsNotTheLanguagesFaultPerSe:butIfTheFunctions:andTheirParameters:werentNamedLikeThis:itWouldBeBearable

<comment><USER10> I find the descriptive nature of method signatures to be quite delightful. Unlike other languages like C++, I don't always have to go looking for the function definition to see the types of the parameters it takes, and what exactly was the order again? Combined with Xcode's autocomplete, it saves a lot of time.

I shed a small tear every time I have to call a C API with and endless parade of (NULL, NULL, 0, NULL).

<comment><USER11> In C99 it's possible to use compound literals to implement something like named parameters. You create a struct with all of your parameters, and only include the ones you want to set in the compound literal. Anything not explicitly specified in the compound literal gets set to 0, so the caveat is that 0 can't be a valid value for your parameters.

<comment><USER12> The book 21st century C talks about that trick:

[http://books.google.fr/books?id=_EdbrocXX9MC&lpg=PA183&ots=D...](http://books.google.fr/books?id=_EdbrocXX9MC&lpg=PA183&ots=D8EhqfWRSU&pg=PA183#v=onepage&q&f=false)

<comment><USER13> Switch .fr to .com: [http://books.google.com/books?id=_EdbrocXX9MC&lpg=PA183&ots=...](http://books.google.com/books?id=_EdbrocXX9MC&lpg=PA183&ots=D8EhqfWRSU&pg=PA183#v=onepage&q&f=false)

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> There's a lot wrong with Java, but even while having moved on and learned / used professionally many other languages I keep coming back to it and its ecosystem. There is still not another language / platform that provides the same level of a variety of things that are important to me:

        * platform independence
        * performance
        * low level features
        * simplicity and clarity (for reading, writing not so much)
        * infrastructure/tools (IDE, visualvm, etc)

Admittedly, I lean more and more into JVM languages like Groovy and Scala these days. But even then I still drop into Java to write parts of the code that I want to be as fast as possible.

<comment><USER15> You can get all of that and clearer writing in c#, with Intellisense.

<comment><USER16> Doesn't C# have "magic" getters and setters, where code like "foo.bar = quux;" might mean a function call? To me, that's not clearer at all.

<comment><USER17> Yes. However, C# uses the convention that capitalized "fields" are actually properties, and lowercase ones are true fields.

For example, Foo.X might be an x position, returned from a getter method, and set with a setter method. Internally, the class make use the Foo.x field to store it, in which case the getter and setter are trivial. In fact, C# will write them for you The property could look like:

        int X{
            get;
            set;
        }

(Though my syntax might not be completely correct, I haven't used C# in a while). C# will automatically create a private field to store the value for x, and the getter and setter will work as expected.

Classes should, as a general rule, only expose properties and methods to the outside world. All fields should be private. Yes, accessing a property calls a method, but so does a Java getX().

Java uses the same rule, except getters and setters are implemented using setX(int) and getX(). C# properties are the equivalent. The client of a class should not care how the class stores values, but that the getters and setters work.

<comment><USER18> _" However, C# uses the convention that capitalized "fields" are actually properties, and lowercase ones are true fields."_

If only. In [http://msdn.microsoft.com/en- us/library/vstudio/ms229043%28v...](http://msdn.microsoft.com/en- us/library/vstudio/ms229043%28v=vs.110%29.aspx), Microsoft advocates:

 _" The PascalCasing convention, used for all identifiers except parameter names, capitalizes the first character of each word"_

<comment><USER19> The UI in MonoDevelop / Visual Studio will show the differences during autocomplete. Also, fields should NEVER be public in a class.

</comment></comment></comment></comment></comment></comment><comment><USER20> I primarily use java in my day job, and although there's a lot _not_ to like about it, some standard complaints are somewhat overblown. For example, nothing really forces you to use long variable/method names, but even if you do, a modern IDE -- I use IntelliJ -- with auto-completion makes these fairly painless. It's not like you have to type every letter of "SomeClass.veryLongMethodName()" \-- rather, you type "SomeClass.v" and then hit tab.

Similarly, I never type "for (int i = 0; i < blah; i++)." I type "cmd-J, fori, return." Etc....

So, I'm not particularly persuaded to the "you have to type a lot" complaints.

Similarly, Spring has simplified a lot of stuff that J2EE had previously made overly complicated.

That's not to say that Java doesn't have problems or isn't suboptimal for a certain set of problems. (In fact, it's unclear to me where java might be optimal.)

<comment><USER21> > Similarly, I never type "for (int i = 0; i < blah; i++)." I type "cmd-J, > fori, return." Etc....

As someone who didn't realize this existed in Intellij, I think you may have just changed my life :)

<comment><USER22> Eclipse has something similar, which it calls "code templates." Features like these leave me wondering why "excessive typing" is often cited as a criticism of Java. As far as I can estimate on the fly, I type less than half of the characters that make up my Java code.

And as the article points out, for readability, verbosity is arguably a good thing. I sure believe it is, perhaps because I am more distracted by poor symbol selection and syntax than most programmers I know. Speaking of, I don't particularly like the C-lineage syntax, Java included. I don't like the braces and parentheses. I prefer a syntax with fewer symbols and more keywords. Crazy, I know.

<comment><USER23> Excessive typing isn't the issue. The problem with verbose code is that code gets read way more than it gets written. In Java you're often reading 15 lines of code for something that could be 2-3 in other languages.

<comment><USER24> And still, I have seen plenty of Java code which is perfectly readable and Haskell, Perl, or Ruby code (2-3 lines) that resembled line noise. And I am a Haskell fan :).

The worst offender in Java are IMO anonymous inner classes. But IntelliJ shows them abbreviated. E.g. IIRC Runnables are displayed in Java 8 lambda syntax.

</comment></comment></comment></comment></comment><comment><USER25> Any talk of Java "dying" is just nonsensical

Java hands down is the most obvious choice for any applications that require performance, yet are too complicated to write and support in C/C++/other lower level languages. Java JIT is very mature unlike JITs for most other languages, which largely remain at the level of experimental projects and fall short on key production requirements.

Given that the entire Hadoop ecosystem is based upon Java as well, it is here to stay for anything that has to deal with "Big Data"

<comment><USER26> Yes, that's why kernels are written in java.

If you're writing complex code java is rarely the answer as it requires so much complexity itself.

Hint: Most java projects just appear to be complex because of the poor quality of the language (and developers).

Java is hands down the choice for simple projects written by way too many poor quality developers. The JVM can barely manage 12 GB of memory, Java is a piece of crap when it comes to anything that's actually complex.

<comment><USER27> I would venture to say, with no facts or figures mind you, that if you were to evaluate the number of lines of code dedicated to kernel programming to that of applications running applications on the Internet, that the resultant figure would be so small for kernel code that it would look like kernel development doesn't even exist.

Saying that developers who use Java are poor quality is also an awful thing to say. Yes, there are many "poor" Java developers. But, it's only because there are so many Java developers in the first place. So, of course when you take even a small percentage of such a large number there will still be a large enough sample to look significant. It's the same for all other languages.

Java has been my primary language for the last 14 years. During that time I have worked with countless individuals who I would regard as some of the smartest and most competent programmers (who develop using Java) I have known or heard of. These people make your banks, file sharing sites, massive online market places, electronic billing etc. work. So, go ahead and bash all the developers from Google, Sun, SpringSource, Apache Contributors, Oracle and the other 10,000+ companies out there, but empirical evidence has shown that the language and platform work.

Your statement is just so "trollish"... seriously?

Edit: capitalized Internet. Letting the run-on sentences and bad grammar fly.

<comment><USER26> What about java makes it better for high performance / complexity code?

I never said there isn't a lot of java code, or that it doesn't work, my assertion is that java is not the hands down choice for high complexity / performance work.

If you've got a bunch of mediocre programmers who can't be trusted to make + add things together then sure java is a great choice.

<comment><USER28> It's a natural fit for enterprise programming where time to implement is usually key and logic is endlessly extended to accommodate whatever new business requirements emerge after the last round was deployed. And robustness is valued more highly than raw performance. Use Java - pay for twice the servers and get ten times the uptime? Done.

That means that days or weeks spent hunting your latest memory corruption issue makes C a non-option for these applications.

As for mediocre programmers - sure, and a large bunch of mediocre programmers scales, whereas a small team of star programmers doesn't. Someone has to tweak the UI. Someone has to implement all that tedious persistence logic. You need star programmers for that? No.

I'm excited to see if Go intrudes on this field, but it's a big field and Go's just starting out.

<comment><USER26> Yet again I ask what makes java good for high complexity / performance code and get told it's good for managing mediocre programmers.

<comment><USER29> In the kind of situation GP describes, what matters is probably the well- established practices for extending the behavior of an already-built system without breaking what's already there. A lot of Java practice has built up around having behavior determined dynamically (OOP is a nice fit for that, whereas C does not have great facilities for it). Much of the "ceremony" involved in using the big, complex Java frameworks is about preparing a piece of code for eventual extension. When some behavior is hard-coded in, it's difficult to change later, so the code is parameterized over anything and everything that might eventually change. Of course this looks silly when you do it for small things that won't change -- no need for FizzStrategy and BuzzStrategy interfaces when the only thing you'd ever want to do is print "fizz" or "buzz".

Quite a bit of that programming practice did develop in C++, but Java as a language provides stronger safety guarantees than C++ (lots of memory-related errors are difficult to impossible to have in Java) without sacrificing all that much performance. When you ask for a reasonably performant, statically- typed, memory-safe, object-oriented language, you're going to get pointed at Java (and C#). So that's what people use in that domain.

</comment></comment></comment></comment></comment></comment></comment><comment><USER30> I just wish they'd fix the generics - Been writing some c# recently, and the lack of type erasure is a really nice advantage.

The decision to do it that way because of backwards compatibility issues looks really shortsighted now - virtually nobody runs JVMs from before they introduced generics, but we still have this hack in place to maintain compatibility with them. Would have been better to break the compatibility and introduce a little temporary pain, but have a better result 10 years later.

</comment><comment><USER31> I've run the Java Users' Group in Philadelphia for almost 14 years, and I specialized in Java recruiting between 1999-2010. I know a lot of Java pros.

Our meetings still get pretty strong attendance (80-120 per meeting), but I'm seeing far fewer new sign ups and the faces are much the same. There could be several reasons, but young engineers that I speak with rarely have any interest in Java work (though JVM is still popular).

Some members have taken to coming up to me and saying "Java is dying, you know?" at meetings. It will become harder and harder to find engineers to maintain the Java code as the first generation of Java pros start to move on to other languages or retire. Java needs some new blood and better PR to maintain interest from younger devs, and Android may be the best hope.

<comment><USER32> I have 0 interest in learning Java, the language, to a professional level.

The JVM on the other hand, with things like JRuby and being able to use popular Java libraries and things like TorqueBox, is incredibly cool.

<comment><USER31> This is fairly common it seems, and one of the reasons my JUG (and some others) have modified our guidelines from a Java language focus to a focus on anything Java language or JVM. It has opened things up and allowed us to dive into some topics that will keep our audience more engaged.

</comment></comment></comment><comment><USER33> Stopped reading the article when he referred to Scala as a scripting language. Clearly the author has no idea what he is talking about. Sure, you can use Scala for scripting (I never do) but its main value is in software design, whereas scripting usually is not about design, but about a quick solution.

</comment><comment><USER34> Well... I am one of those guys who hates Java, but I see Java far away from dying.

I know it is not very reliable but Tiobe index is still a decent metric.

[http://www.tiobe.com/index.php/content/paperinfo/tpci/index....](http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)

When Visual Basic dies I would start believing that Java could die.

</comment><comment><USER35> How many of you are actually handling big Java projects ? Mine is not that big but big enough to have 15 sub projects, 200 dependencies, 5 people for maintenance, batch, GUI, JEE stuff. The only thing I can say is taht although Java is nice, the maven, release mgmt, spring stuff it needs to be actually manageable is absolutely enormous (the question is, how would I manage that in another language ?). Contrast that with interpreted/dynamic languages... No type safety ? But I don't have to wait 3 minutes 30x a day for my build to complete in order to check that my code is actually running... So well, there's room for compromise.

For me the tru force and problem with the java ecosystem is that it allows to separate concerns in the enterprise : a team to provide some Eclipse plugins, a team to handle release management, a team to deploy thnig on servers, a team for development, etc.

</comment><comment><USER36> One of the huge advantages of Java's static typing + somewhat boring/verbose syntax is that it makes writing powerful tools for manipulating Java code far, far easier than any of the C-based languages with preprocessors or any dynamic languages.

After working in IntelliJ for a while with its phenomenal refactoring tools going back to any other coding environment feels somewhat stone age in comparison.

<comment><USER37> I have been using IDEs since the mid-90's, that is my feeling every time I see anyone coding as if UNIX System V was the latest version available.

<comment><USER38> I don't use IDEs, but it seems that there are only 2 or 3 that really work: Visual Studio for C/C++, and Eclipse/Intellij for Java. Do you use one of those?

<comment><USER37> I have used all of these during my professional life so far,

Almost all Basic, C, C++ and Pascal IDEs from Borland for MS-DOS and Windows

The initial releases of Delphi IDE

Visual Studio, only after 32 bit support, not earlier

The first releases of C++ Builder

KDevelop

Anjunta

Eclipse

Netbeans

Smalltalk environments

Lisp environments

Native Oberon environment

And a few more not worth remembering.

</comment></comment></comment></comment><comment><USER39> Well what do they teach in schools?

When I was attaining my degree during the end of the last century, Java (and XML) was being trumpeted as the saving grace for all soon to be software professionals. We were all in love OO programming and this scratched us right where C++ left an itch. Oh Java Beans and Servlets, how we loved thee.

It'll take decades before all the code created by those who came right before me and soon after is gone and we're gone before Java is considered dying/dead.

From what I see the new generation wasn't forced to learn Java and doesn't want to use Java.

<comment><USER40> I just started university and it's still all Java. I found out one university in my country (Germany) teaches Scheme in their introductory course, but sadly I had already enrolled at a different one at that time.

The high school CS curriculum here is also basically an introduction to Java.

<comment><USER41> I just looked up my old university's curriculum and it must be another university - our 'Programming 101' is half C, half Java now. I bet our students will never hear of recursion on campus anymore.

From what I heard as a student assistant, there were all sorts of reasons for dropping Scheme. First, professors have to use half of their time for research, and there isn't much useful research left in programming languages (given that the industry is decades behind that research, anyway). Second, many of our old professors started out in mathematics, unlike the new generation. Third, everything is being dumbed down. :(

At least my job is secure...

</comment></comment></comment><comment><USER42> >A recurring prejudice in the forums where the cool kids hang out (Hacker News, Reddit, etc.) is against Java, the language.

Maybe I've been reading a different Hacker News, but I haven't seen this sentiment at all one HN, especially with the love for everything JVM (Clojure, Scala) and all the Database/Big Data tools written in Java (Cassandra, Hadoop, HBase)

<comment><USER43> I disagree with you and think the statement that you quoted is entirely accurate. People can like the languages and tools built on top of the JVM and implemented in Java, without liking coding in Java the language itself.

</comment></comment><comment><USER44> Scala is a "scripting language?"

Also,

>When the JVM implementation of Ruby, JRuby, added native support for this instruction, its performance zoomed past the C-based Ruby VM, which for years has been the Ruby reference platform. As JRuby's performance continues to pull ahead, I fully expect it to become the reference implementation. Certainly, it will become the vehicle by which most organization first try out Ruby.

This was true at some time, afaik the MRI Ruby on 1.9.3+ is faster-than or about-the-same-as the equivalent JRuby implementation. I also know zero people who were first exposed to Ruby via JRuby.

JRuby is awesome btw. I just think this article has a bit of a defensive tone...

<comment><USER45> [http://benchmarksgame.alioth.debian.org/u64q/jruby.php](http://benchmarksgame.alioth.debian.org/u64q/jruby.php)

There are some areas where JRuby is 3 times faster and the areas where it's 2 times slower. Not impressive, compared to native Java implementations:

[http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?t...](http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=jruby&lang2=java&data=u64q)

Where you can get even two _orders of magnitude_ speedup.

</comment></comment><comment><USER46> Aside - I miss the paper __Dr. Dobbs ' Journal __from the early nineties. Is there a modern equivalent?

<comment><USER47> Dr. Dobb's puts out a monthly PDF issue. It's smaller in terms of content than the paper issues of the 90s, but it's in that mold. Also, the website posts new feature articles every Tuesday, covering a fairly wide range of programming topics. Most articles have code.

<comment><USER46> Yes, I know about the PDF issues, and I also realize that there are so many great resources on the web that having a dedicated general purpose programming magazine doesn't make business sense anymore.

It is quite possible that what I miss is really my childhood and the excitement of waiting for the magazine and learning about things (most of which I didn't fully understand) with wide-eyed wonder. But of all the computer magazines I have ever encountered I think it was Dr. Dobbs' that struck the best balance between CS academia and the hands-on world of programming. It straddled that world between abstraction and application perfectly in my opinion.

It would be a wonderful role to resurrect in the age of big data and increasing statistical and algorithmic sophistication. Won't happen, though. So I'll just wallow in my moment of nostalgia :-)

</comment></comment></comment><comment><USER48> With Hadoop, Lucene, Solr, etc. written in Java, there is no doubt that Java is here to stay. None of these libraries (or many others) have competing implementations written in other languages.

<comment><USER49> "None of these libraries (or many others) have competing implementations written in other languages."

Except the ones they were written to copy. Each example you give is an open- sourced clone of an pre-existing version implemented in a different language.

<comment><USER50> That's not true at all, Lucene is a Java project from the beginning, and has since been copied to virtually every other environment because it is such a kick-ass indexing engine.

<comment><USER49> So in no way did they copy Google's which is implemented in C++ ?

Though I agree with OP - these projects and Java are here to stay for the foreseeable future.

<comment><USER48> No, they didn't copy any of Google's implementation. They simply implemented efficiently the TF-IDF based document retrieval model.

</comment></comment></comment></comment></comment><comment><USER51> Java isn't new anymore. It wasn't really groundbreaking even when it was new in 1995:

      * Object-orientation: Simula-67 mid 1960's, CLU 1974, Smalltalk 1980
      * Garbage collected memory: In Lisp since 1959 !!
      * JVM: UCSD Pascal had a similar idea in 1974.
      * Syntax: Java's was a basic evolution of the Algol-68 -> C -> C++ chain
      * Performance: in 1995 Java was too slow and too big
      * Write once, Run everywhere: other than assembly language, all languages strove for this.

Nothing in the language was that special. Most of it's features weren't new, but it went on to be one of the most important programming languages because the engineers at Sun had put together a good, solid, language on a good, solid, implementation. They had a vision, largely realized now, of a language to support professional software developers. It is now very fast, the size of it's run-time doesn't seem so significant in 2013, it's current garbage- collector is state-of-the-art, and it's eco-system of libraries and frameworks is now unsurpassed.

Java may have already peaked. This doesn't change the fact that it has been so important and that experiences with it will shape the future of software engineering. I was impressed with Rob Pike's talk on the Go language: "Language Design in the Service of Software Engineering" [1]. It seems to me that Java's success was driven by largely pragmatic thinking and that the designers of Go are now attempting a similar path to success.

Public service announcement: Don't squabble. If you program in C, be happy, your language is the very best for embedded systems and kernel development. If you program in C++, be happy, your language is the very best for developing programs that deal with complex data structures and must run as fast as possible while using memory efficiently. If you program in Objective-C, be happy, your language is the very best for IOS and Mac OS X programming. If you program in C#, be happy, your language is the very best for developing Microsoft .NET applications. If you program in Python, be happy, your language is the very best for rapid prototyping and exploring big-data. If you program in JavaScript, be happy, your language is the very best for client side web programming. If you programming in Haskell, be happy, your language is the very best for exploring reliable software through detailed specification of types. If you program in Ruby, be happy, your language is the very best for putting together Rails apps (and yay, it's getting faster). If you program in Lisp, be happy, your language is the very best for getting the most out of Emacs. If you program in Visual Basic...be happy, there are better languages you can learn.

[1] [http://talks.golang.org/2012/splash.article](http://talks.golang.org/2012/splash.article)

</comment><comment><USER52> Java is doing just fine and with the addition of closures in Java 8 I expect the already incredibly rich set of libraries to improve dramatically.

<comment><USER44> There are some pretty awesome libraries already... check out [https://github.com/jnape/Dynamic- Collections](https://github.com/jnape/Dynamic-Collections)

</comment></comment><comment><USER53> I am really sick of these articles. "Java is alive and well", "Brand new exciting things that tell you Java is still a leader" blah blah blah. To me Java is a great tool, the JVM an even better tool. No one said your favourite language is dying and if they did, they are naive. These articles only give me a small hint that you think java is dying and are trying to do your part to keep it alive.

I guess what boils down to is that I hate articles that give me the impression of desperation. Maybe this is my own problem in the long run so I don't know why I wrote this comment.

<comment><USER54> I agree. It's link-bait, battling the other link-bait about how Java is dying and { x, y, z } is the #1 language, will dominate any day now, and anyone not coding in it is inferior.

Unfortunately, as technology has matured, it has become just as politicized and petty as anything mainstream. Countless people make their reputation and/or income writing blog posts and churned articles, living in the tech periphery like leeches, without creating any actual value. I think this is part of why I have so much nostalgia for the 80's and 90's.

Code in whatever makes your life least painful, and learn whatever's in demand for your desired career path.

</comment></comment><comment><USER55> I'm just getting back into Java (both platform & language) and I'm really excited about it. It has really matured over the past 10 years both in tooling and application architecture philosophies. I'm really looking forward to pick up Java, Spring, Hibernate (maybe I settle for JPA, not sure yet) and my old trusted friend Tomcat.

Oh, and I might throw in some Scala, Groovy and JRuby in here and there as well.

</comment><comment><USER56> I use Java, C, C++, Python, Ruby/jRuby, bash, Perl, etc.

The right tool for the right job. Anybody making unconditional statements about the decline (or not) of a language is a fool (IMHO).

Likewise saying the "C++ is better than Java", or "Java is better than Python" or ... is devoid of any meaning without specifying the domain of the problem to be solved.

</comment><comment><USER57> The best thing about java is the ecosystem around it - a massive range of mature and robust open source libs to do just about anything you like (parsing HTML, part of speech tagging, search indexes, neural networks, fast caches, networking tools, web servers/containers, email servers etc etc) Does any other language have this variety available?

</comment><comment><USER58> Java is not dying, it has just started its long slow decline like COBOL did back in the 1980s. But COBOL is still with us and so will Java be with us for a long time. But the momentum is picking up on alternate JVM languages, in particular Grovy, Scala and Clojure. Of course there is also Python(Jython), JRuby, PHP and many others that run on the JVM, but Groovy, Scala and Clojure are the triumvirate that is picking up steam and will end up pushing Java down into the depths where, like C, it will remain as the tool of choice for building JVM libraries.

The Oracle JVM is also not the only JVM available these days and there are even some commercial JVMs that are higher performance than Hotspot. I think one could make a strong argument that the JVM will outlive Java itself by a large margin. Say, Java fades out of common usage by 2050 but the JVM is still going strong in 2150.

</comment><comment><USER59> "Java is dying" is wishful thinking. It's not the case, but we can only hope it will be. Currently, it does a good job of marketing to developers too good for Ruby and Python and not good enough for C.

<comment><USER60> I understand the "not good enough for C" comment, but why "too good for Ruby and Python"?

Not trying to pick a fight, just would like you to elaborate.

<comment><USER61> Welll, the reasoning behind it might be from two facts - a) Ruby and Python both are far better beginner/learner languages than Java & others - I mean, if some kid wanted to learn programming, I'd suggest to start in those because they don't have distracting boilerplate; and (b) other things being equal, Java does get you better execution performance than Ruby/Python; not on C level but it's halfway in between.

But still "developers too good for Ruby and Python" is an interesting statement; IMHO the only ones who'd claim to be 'too good' for Python/Ruby would be authors of their own languages or maybe the hardcore Lisp or Haskell crowd.

</comment></comment></comment><comment><USER62> There is Java and there is the JVM. Both are doing well, but Java is progressing slowly, and more and more developers -why actually now what they are doing- are looking into alternatives. These may also be languages running on the JVM though.

Java as a languages is getting old, in terms of concepts and verbosity.

Functional programming is what is -the next big thing-. And most java-only developers don't know how todo that.

While it is still thriving, there is an unstoppable move to newer, more functional languages (which can run on the JVM too).

</comment><comment><USER63> I haven't programmed in Java but I sometimes read Java source code. I must admit that I like the language which to me is a better C++. However I don't like the way it is used i.e. tooling, libraries and programs. I don't like AbstractProxySingletonFactories, XML configuration files, long method names and lots of other things. That being said I believe that a change in the programming culture surrounding Java may lead to more pleasant programming experience.

</comment><comment><USER64> Dying? I don't know, but surely not dead.

But look at the beginning of Java, at that time it was "cool" and growing. Now Java is an adult and not cool, other languages grow, build new communities, new tools and new possibilites, that's why they offer more fun and many people think java is dying.

Java will be there for many many years, Cobol still there too ;-) But someday it will die, that's normal life.

</comment><comment><USER65> Java is a pretty boring language, it must be said. But that's what makes it so good for real world usage - its got a lot of library support and many issues tend to have been ironed out already. Couple of weeks ago I was using Selenium's WebDriver SDK with a Ruby client program. It failed in some obscure TCP/IP stack error coming out of the C Ruby implementation. Using a java client just worked.

</comment><comment><USER66> Check the tendency: [http://www.itjobswatch.co.uk/jobs/uk/java.do](http://www.itjobswatch.co.uk/jobs/uk/java.do)

</comment><comment><USER67> I searched various job sites by programming language, and Java always came out on top (by a significant amount) for listings, except on the startup job boards.

</comment><comment><USER68> Technologies with giant backers (e.g. Java or Windows) have massive inertia keeping them seemingly alive for years (or decades) after losting their soul.

</comment><comment><USER69> Why did Google adopt the language for Android?

<comment><USER37> They didn't, the startup Android Inc was already using it.

</comment></comment><comment><USER70> I thought C was dying out. I must be living in the dark ages.

<comment><USER60> I think C has kind of hit equalibrium, in that it's not often used for things outside its "niche", but with no other language threatening it within its niche.

<comment><USER70> Is forth considered to be in the same niche?

<comment><USER71> Not really. Forth is nowadays only used for tiny embedded systems.

In contrast, C is the glue language for pretty much everything. Even the latest operating systems like iOS and WinRT use C as the base level API language that is callable from anywhere. They do have significant libraries and conventions to manage that (Apple uses CoreFoundation, Microsoft uses COM), but it's still C.

</comment></comment></comment></comment><comment><USER72> Anybody using Rust?

</comment><comment> francis- Dead cat bounce.

</comment><comment><USER73> Java is dying because it requires more and more resources to make it work. People look at the growing resource requirements and think "wow, look at how Java is growing! We even are teaching middle schoolers Java now!"

Wasn't the point of Java to release developers from having to worry about memory? Well, now we have to worry about everything else. It's a failed abstraction and now we have to live with it.

<comment><USER47> "Wasn't the point of Java to release developers from having to worry about memory?"

I think you're thinking of releasing them from worrying about pointers, which it basically did. When it first came out, its stated goal was to release developers from having to worry about portability, which it did.</comment></comment>


U.S. Postal Service Nears Collapse - <AUTHOR> http://www.businessweek.com/print/magazine/content/11_23/b4231060885070.htm

<comment><USER2> The only problem that I see with 'crashing' the system is the amount of time that would be devoted to the blame game. If that could be skipped so that we could jump directly to the debugging phase, then I'd say---let it crash. Also interesting to notice which kinds of problems get fixed before blame assignment versus blame before fix---I've no clue as to the pattern, just something I've noticed...

</comment><comment><USER3> Previous submission:

<http://news.ycombinator.com/item?id=2593671>

</comment><comment><USER4> The article starts by claiming that "Delivery of first-class mail is falling at a staggering rate." I have never seen this to be the case. The article also fails to substantiate this strange claim.

Delivery of first-class mail is succeeding at a staggering rate. I have not had a piece of mail get lost in the US in decades, and delivery coast to coast is often within 3 days.

When an article gets its basic premise so wrong it is usually not worth bothering with the rest of it. It is better to tell the student to rewrite the entire essay and take a look at the second draft whenever it is ready.

<comment><USER5> It's not talking about success rate of items that are mailed; it is talking about the number of pieces that are mailed in the first place. The latter number is declining.</comment></comment>


Facebook creates fact-checking exemption for climate deniers - <AUTHOR> https://heated.world/p/facebook-creates-fact-checking-exemption <comment><AUTHOR> Intro to the piece

> Facebook is "aiding and abetting the spread of climate misinformation," said > Robert Brulle, an environmental sociologist at Drexel University. "They have > become the vehicle for climate misinformation, and thus should be held > partially responsible for a lack of action on climate change."

> Brulle was reacting to Facebook's recent decision, made at the request of > climate science deniers, to create a giant loophole in its fact-checking > program. Last year, Facebook partnered with an organization, Science > Feedback, that would bring in teams of Ph.D. climate scientists to evaluate > the accuracy of viral content. It was an important expansion of the > company's third-party fact-checking program.

> But now Facebook has reportedly decided to allow its staffers to overrule > the climate scientists and make any climate disinformation ineligible for > fact-checking by deeming it "opinion."

> The organization that requested the change, the CO2 Coalition, is > celebrating, E&E news reported on Monday. The group, which has close ties to > the fossil fuel industry, says its views on climate change are increasingly > ignored by the mainstream media. Now it plans to use Facebook to > aggressively push climate misinformation on the public—without having to > worry about fact checks from climate scientists

I highly recommend for people to read the whole thing, many details such as:

> The CO2 Coalition told E&E News that it is getting assistance from a > "'conservative' Facebook employee." Facebook says that claim is not true, > but did not specify who at Facebook reversed Science Feedback's ruling.</comment>


From Noob to Pro Taking CS50 - <AUTHOR> http://gofromnoobtopro.blogspot.com/ <comment><USER2> Thanks for the recommendation Arvind.</comment>


Ask HN: The most boring/frustrating activities during your job as a programmer? - <AUTHOR> Title says it all.
Mine are:
- reading someone else's crappy formatted code and trying to make sense of it
- testing some small change buried deep inside the software so that I have to think very hard on how to create a UI use case where my code change is executed
- realizing, when you actually wanted to commit some changes to the repo, that you have to merge a whole bunch of other people's changes in first (and test them... and debug them...)
- after programming a week and finally finishing a "desperately needed" feature that required a partial redesign of the data model, your project leader tells you that said feature has been dropped after all
- thinking about ways of how to tell your colleagues it might be good to think about the impact of code changes in other places than just the file they are currently working an (and realizing it would be useless to tell them...) ;)
- trying to make sense of the changes someone else made to a file I once wrote and finally realizing that what he/she was trying to accomplish would have taken him 1 line instead of 20 (scattered all over the place) while still avoiding new bugs
- reading code with (obviously) misspelled variable names
- reading code that performs a very simple thing using a lot (a lot) of lines of (badly formatted) code
I am sure there are more... <comment><USER2> My ways to stay positive:

\- Establish coding style guidelines. There should NOT be only one way, but all the different formats should be compatible in terms of feeling comfortable to read them. Also, weed out senior candidates who paid no attention to coding styles during interview.

\- Establish modular codebase as much as you can.

\- It happens in a big team. Modular codebase would help.

\- This happens quite often in start-ups. It is part of the business and I think we must accept it.

\- Hiring good engineers. Most engineers will learn, especially from their own mistakes. I admit that some people will never get it.

\- Same as the last one. You can always improve it if it doesn't require much of your time.

\- Refactor them.

\- Try to talk to the engineer who performed the task. Most inexperienced engineers would appreciate your showing them a better way to do it. For those who don't, you can do nothing about it, except talking to the manager if it comes to the point that almost all of his/her code have to be rewritten.

<comment><AUTHOR> Thank you for the ideas ;) At heart I am a realistic optimist. Some people will never learn and some things never change.

</comment></comment><comment><USER3> Boring:

1\. Meetings

2\. Waiting for an hour or so every other day before you can leave the work since you already done everything for today and don't feel like coding anymore today.

Frustrating:

1\. Corruption

2\. Incompetent people (see 1)

<comment><USER4> I had 6 meetings totally 4 hours last Friday (granted I work for a large bank), but it's causing me to reconsider if I really want to be here.

<comment><AUTHOR> You could write a small program that, everytime some calculation is done with money, cuts of the remaining fractions of cents and puts them into your bank account. Over time it will be a lot of money and no one will notice ;)

</comment></comment></comment><comment><USER5> Mine is waiting for ElasticSearch reindex after changing one number to see actual difference in fuzzy-matched search results. 7 minutes is a long time when you need to do it multiple times a day. (While I am typing this, ElasticSearch is reindexing - again)

Also, coffee machine is too far away.

<comment><AUTHOR> Yes, reindexing ES is a pain in the ass. While it is reindexing, I constantly stare at the screen asking myself "Why the f* do you have to reindex, I just added a field to the mapping you f* piece of sh* moronic database".

</comment></comment><comment><USER6> Email and being expected to read every email as soon as it arrives and craft a perfect response in a timely manner while hitting all deadlines. Then, if you don't answer quickly, three people come swinging by your office asking if you've "seen that email" yet.

</comment><comment><USER7> Working on a component / module / piece of functionality and now you're _the_ person to turn when it doesn't work. Even though a dozen other people have worked on it and it's changed completely since you last saw it.

</comment><comment><USER8> +1 for Meetings!

Also:

Conference calls

Being treated like garbage (by incompetent people)

700 line loops

dbo.v_TheFirstTimeIMadeThisView followed by dbo.v_TheFirstTimeIMadeThisView_1 (referencing dbo.v_TheFirstTimeIMadeThisView)

<comment><USER9> >dbo.v_TheFirstTimeIMadeThisView followed by dbo.v_TheFirstTimeIMadeThisView_1

Not to mention multiple versions of stored procedures having slightly different names because they have slightly different sets of parameters -- rather than having default values on the parameters.

</comment></comment><comment><USER10> \- over complicated human processes

\- dealing with assholes

\- functional testing

\- writing unit tests

\- extending shitty unit tests

\- most programming. don't get a buzz from it anymore

<comment><AUTHOR> \+ for writing unit tests ;)

I traded the buzz for the long-lasting personal software project that scratches my own itch (and probably only few people care about).</comment></comment>


Google Face Pose Detection API - <AUTHOR> https://developers.google.com/vision/

<comment><AUTHOR> Note that this only seems to do the following tasks:

\- Detection: Return the location of faces in the image

\- Pose estimation: Determine the direction they're facing

\- Landmark estimation: Return the location of keypoints (eyes, nose, etc)

\- Attribute estimation: Returns whether eyes are open, or whether the face is smiling.

In particular, this API does not provide tools to _recognize_ faces, or to see whether two people are from the same person.</comment>


Start ML Using Python - <AUTHOR> Hi, Can anyone suggest me how to start working on ML using Python? <comment><USER2> Some starting points: [https://pythonbasics.org/why-python-for-machine- learning/](https://pythonbasics.org/why-python-for-machine-learning/) [https://machinelearningmastery.com/machine-learning-in- pytho...](https://machinelearningmastery.com/machine-learning-in-python-step- by-step/)</comment>


Ask HN: Advice needed regarding TDD from programmers - <AUTHOR> I have a question for you about TDD. How important do you think TDD is to Javascript, PHP and other development in general? I want to know your own personal opinion about it.
1. Do you enjoy it?
2. Have you written code without it?
P.S. I hardly ever see any popular repos on Github that have less than 90% code coverage and I've been trying to write test driven code for sometime now but I often lose interest in a few days and start writing what comes naturally. The projects I determine not to write without TDD I never finish because I find TDD esp hard in the later parts of the project where everything is coming together like Database, Socket comm, etc. In the end I'm usually skimping on writing tests because mocking classes, using spies, etc is just too much burden (I'm self employed if it matters to anyone). Is there a way to get the hang of it? Is there a good resource I'm missing?
Thanks for your thoughts and guidance! <comment><USER2> I've absolutely built projects without tests, let alone without TDD. They eventually became overloaded with tech debt. That said, the wrong types of tests can become a straitjacket instead of a support system.

I don't particularly enjoy TDD, where you write the tests first. I do enjoy what I call test-oriented development, where code doesn't get merged without tests, and automated testing is how you verify any changes before committing them (though for UI and workflows you should always have an acceptance testing stage). It goes a long way towards making me feel confident in my code; it gives me a structured point in my workflow to consider what the edge and corner cases might be and how to deal with them; and it often helps me catch and verify fixes for subtle (or not so subtle) bugs much sooner and with a lot less effort than click-throughs would.

Edited to add: you say you spend a lot of time mocking databases and such. I usually plan to have a DB available for testing. Django in particular makes this easy by building an empty DB scheme for each test run and running every test in a transaction that gets rolled back so that the DB is in a known state for the next test. Some things you may just want to use instead of mocking, especially if they don't require running an additional process (sockets seem like an example of that to me, depending on what you're doing with them).

For other interfaces (especially third-party web APIs), look for libraries in your language that will let you mock requests, specifying responses. If there isn't one, build one for re-use, use it for all your projects, and release it open-source. That'd be a great way to earn some visibility in your ecosystem.

</comment><comment><USER3> You can definitely write successful applications without tests of any sort. However, as your application becomes more complex, it becomes more and more likely that you'll find it difficult to make changes without breaking something else (especially as developers cycle through the codebase). Tests become significantly more important if you're planning on creating and supporting projects for 6+ months

Now the good news is that you don't need to use TDD. Tests of any kind do make a difference, even if you have to write them after you've coded up a solution. Tests should be testing the most important parts of your application or the trickiest parts. Tests are there to give you confidence that your code does what you think it does AND to ensure that you don't accidentally cause regressions. If your application wasn't built with testing in mind, use test data or use a BDD tool like codeception.

I don't find TDD to be necessary but I do find tests necessary. It along with automated deployment can increase the quality of your code by an order of magnitude.

</comment><comment><AUTHOR> Thank you everyone for your replies. After carefully reading all opinions I think that TDD is the way to go because for larger projects sooner or later it will help me catch bugs when the project becomes complex. I also think that the 2x effort will be worth it with easier deployments.

I was kind of giving up on TDD but seeing that almost everyone thinks it is important (for larger projects), I will try to watch some more videos and try to write tests for my current project (for the work already done) and tests first for the code that hasn't started (maybe I'll add comments in the tests). This way I can compare the two, with which approach suits me better and fails more (i.e. catches more bugs) in future.

</comment><comment><USER4> I really enjoy TDD when I get into the rhythm, but I've found that setting up the infrastructure can be a real barrier, especially for a language/framework that I've never worked in.

However, I have written code without it and I frequently find that when I do so, I very quickly regret it. Either I get confused about what precisely I'm doing or I end up having to write tests after-the-fact and it is much harder. The barrier is worth overcoming. How?

1) Find good tutorials and _work_ through them.

A lot of people say that the best way to learn something is just to dive in and build something. I disagree, at least when that thing is new to you. I find it is much better to find a tutorial that guides you through building something the first time. It is worth asking around on twitter or on a relevant subreddit for this. Then, don't just read--actually work through at least a good chunk of it. Once you've done that you have some code you can look back on when you are looking for the basics of how to set up your tests.

2) Don't worry about mocking as much in the beginning.

The purpose of mocking is to avoid having the test take a long time to run due to the machine spending a bunch of time working on other things. Given that you are waiting on the machine when you run your test, this is actually meaningful. So, mocking intelligently can be a win if you it saves you that time. However, it also has the downsides that it can take a lot longer to write the test and it can make your test more brittle. For that reason I find it often makes sense not to mock and just write a bunch of tests that do in fact (for example) hit the database. This is especially a good idea with a new language where trying to use 7 new libraries at once ( _cough_ javascript _cough cough_ ) is going to lead to confusion.

Also note that TDD doesn't really work if the code is already written because doing fine-grained tests for code that is already written is really hard. It is better to do interface/API tests and put off unit testing until you are willing to refactor the code.

Note also that there are some tasks where your tests are going to be more like infrastructure tests and your changes won't be quite as granular as TDD doctrine dictates. That is something you have to accept when everything is coming together, because that is the realm of integration tests.

There is a tutorial I've written which aims to teach this alongside teaching configuration management, though it is my first tutorial. I would love critiques of the pedagogy and example code. [https://amfarrell.com/saltstack- from-scratch/](https://amfarrell.com/saltstack-from-scratch/)

</comment><comment><USER5> I prefer Test driven Development rather than Test First Development. I can't think with tests first. I do a mix of both. In the end I ensure my code has good coverage.</comment>


Ask HN: Good web service to detect proxied IP addresses? - <AUTHOR>

Hi,
I'm getting a large number of scam/spam messages being sent to users on my site.  I have the usual deterrents in place (captchas, etc) but was wondering if there is a good API out there I can query to see if a user's IP address is being proxied or if they are known scammers/spammers/bad people from their ip address.
Thanks! <comment><USER2> I don't know any services, but this might be a good place to start looking: <http://whatismyipaddress.com/blacklist-check>.

There are a number of links to various IP blacklist providers.

<comment><AUTHOR> Yep, great place to start. Thanks!

</comment></comment><comment><USER3> Well behaving proxy servers will send X-Forwarded-For and other extra headers along with the request. Maybe the spammers actually use zombie machines (that don't send this), but worth checking at least.

Most individual spammers do at least one thing that makes it easy to identify them. Maybe they submit forms 10x faster than any human? Maybe no referer? A unique user agent?

</comment><comment><USER4> I wrote a script that runs every 15 minutes and checks the IPs of new users against Stop Forum Spam's API here:

<http://www.stopforumspam.com/apis>

It's caught the significant majority of spammers, giving me some time to write other spam protection checks.

</comment><comment><USER5> you can probably sign up for and integrate with Akismet's API and that can help quite a bit.

<comment><AUTHOR> Yep I think comment spam on blogs has a slightly different profile than private messages being sent to users, but their service may catch a lot of it anyway. Will investigate this option. Thanks!

<comment><USER5> spam is spam though. everything has a footprint, and systems like akismet can detect those.</comment></comment></comment>


Brain Cell / The Universe - <AUTHOR> http://sprott.physics.wisc.edu/pickover/pc/neuron-galaxy.jpg

<comment><USER2> and they both look like the flying spaghetti monster. coincidence? i think not.</comment>


No CEO should earn 1,000 times more than a regular employee - <AUTHOR> https://www.theguardian.com/business/2018/mar/18/america-ceo-worker-pay-gap-new-data-what-can-we-do <comment><USER2> If doing the job of a founder/CEO were so easy, why do so many people fail at it?

When Steve Jobs came back to Apple, it made terrible products. It had a market cap of $3 billion, hadn't had profits in years, and was _six weeks_ from bankruptcy.

During his tenure as CEO, Apple made consistently excellent products, and it entered the right new markets. Its market cap rose to $350 billion. It has since doubled that, and is now the largest and most profitable company in the world.

The value that CEOs bring to their companies is exclusively in the _decisions_ they make. That's why Jobs deserved to be paid well over 1000X a "regular" employee!

<comment><AUTHOR> Was it really Steve Jobs or the people that worked for him that deserve the credit for Apple's success?

<comment><USER2> Also, what about the decision to stop licensing the MacOS to cloners in 1997?

A decision this big has to be made by the CEO. At the time, Apple was dying, and Jobs was the one that made that call. It was quite unpopular at the time. But it was also absolutely the _right_ thing to do!

You might find this hard to believe, but Gil Amelio (Apple's CEO before Jobs) floated the idea of splitting Apple into two disintegrated companies - "Apple Hard" and "Apple Soft." Can you guess how that would have turned out? (You can't build an iPod, an iPhone, an iPad or a Mac that way, because the entire point is to make the product better by integration.)

<comment><AUTHOR> _" A decision this big has to be made by the CEO."_

Or it could be made by the employees of the company as a whole, or their representatives. The currently popular hierarchical structure isn't the only or necessarily the right way to structure a company. Companies could be worker-owned and allow employees much greater participation in decision making.

Anyway, even if one person's decisions are exceptionally consequential doesn't mean they have to be paid an exorbitant amount of money to do it. I'm sure plenty of other people would have taken a fraction of Jobs' salary to make the same decision.

There's a cult of personality around Steve Jobs in SV, and I for one find it very hard to swallow.

<comment><USER3> If the hierarchical structure is inferior to a worker-owned structure, why aren't the most successful companies worker-owned? Same to your second point: It is obviously a market advantage if you get the same quality of CEO for less money. So why are the CEO's salaries so high? If the supply of cheaper but equally good managers is there, why does the usual supply-and-demand price finding system of the market not work? Is something stopping it?

That being said, I really don't like the cult around Jobs. However, the cult was clearly an advantage for Apple, and it made him a rare manager. And thus, expensive.

<comment><USER4> You are defining success as "large market cap" or "large number of product sales", yes?

There are other definitions, like satisfaction of the employees, or corporate social responsibility. These are harder to evaluate, and empathy and humane interactions costs money - that's why company boards want robots.

Suppose it takes something like Microsoft's policy of "embrace, extend, and extinguish", or the FUD policy associated with IBM, or the LBO-and-loot-the- pension-plan of KKR, for a company to become huge.

These are rather cutthroat approaches, and not examples of what I would consider to be good corporate social responsibility.

If a worker-owned structure is less likely to be socially irresponsible, because so many people are involved in the decision making instead of the dominating personalities that tend to be at the top of a hierarchical structure, then that would explain why the most successful companies are not worker-owned.

I have no idea if this is true, but based on the lectures I've heard by pro- worker-cooperative people, it's not unreasonable.

As to the second point, Richard D. Wolff's most recent "Economic Update", at [https://youtu.be/KrPHl1s9MNw?t=864](https://youtu.be/KrPHl1s9MNw?t=864) , comments about the recent rejection by doctors in Quebec of a pay raise their union negotiated. Quoting from the translation of the rejection letter, given at [http://home.nzcity.co.nz/news/article.aspx?id=265449](http://home.nzcity.co.nz/news/article.aspx?id=265449) :

> "Contrary to the Prime Minister's statements, we believe that there is a way > to redistribute the resources of the Quebec health system to promote the > health of the population and meet the needs of patients without pushing > workers to the end."

Wolff comments (at t=1002) "the capitalist model: you pay the people at the top a great deal and part of that money is to keep down everybody else. Because you know something, it's been learned by capitalists that if you pay the top _a lot_ you can avoid paying the mass of your workers what they ought to be paid. It's cheaper to pay those at the top a lot more than it is to give everybody a fair shake. So you're top-heavy, with overpaid folks at the top. And you know something? This happens everywhere. ....

Remember, Apple was one of the many large tech companies involved in an anti- trust lawsuit that charged they colluded to avoid poaching each others' employees. Such a collusion would have the effect of depressing everyone's wages, and therefore increase corporate profit. Just like that model predicts.

<comment><USER3> I define success as "the company is still around many years later". All the alternative ways to construct a company are nice, but they are worth nothing if the company will not exist for long. The market is, in some very real sense, an evolutionary system. There is clearly a fitness function, and only the fittest companies survive. You can not freely pick your fitness function, it's implicitly defined by the boundary conditions of the market.

Anti-trust laws are important facets of these boundary conditions, especially because they keep the market from falling into degenerated states. In the end, the different local markets, shaped by the laws of each country, are competing on a world scale.

I am not saying that worker-owned companies wouldn't be nicer, but they are clearly less effective/less fit in the current market system. Otherwise we would have more of them. It is not clear to me that this is just because a "strong leader" system is cheaper and more easily extorts the workers. I am not convinced that steering by committee, especially if most of the committee members are maybe less educated than the average CEO, works very well from a long term strategy perspective.

<comment><USER4> In that case, most of the longest-lived companies are privately held.

The current market system is built by capitalists, for capitalists, and include the goal of squeezing everything they can out of the workers.

Of course a worker-owned cooperative will be a less effective fit. The current system should not be the final arbiter of what success means.

You mentioned anti-trust laws. What of worker right laws, and laws related to unionization? (In the last, I include laws like the Taft-Hartley Act which limit what unions can do.)

I don't understand your last sentence. Most large companies are already run by committee, no? There's an ongoing negotiation between the C-level officers and the board of directors. It isn't that the CEO sets policy by dictate.

Perhaps [https://en.wikipedia.org/wiki/CEO#Celebrities](https://en.wikipedia.org/wiki/CEO#Celebrities) is relevant?

> Business publicists since the days of Edward Bernays and his client John D. > Rockefeller and even more successfully the corporate publicists for Henry > Ford, promoted the concept of the "celebrity CEO". Business journalists have > often adopted this approach, which assumes that the corporate achievements, > especially in the arena of manufacturing, were produced by unique talented > individuals, especially the "heroic CEO". ... Journalism thereby exaggerates > the importance of the CEO and tends to neglect the harder-to-describe > broader corporate factors. There is little attention to the intricately > organized technical bureaucracy that actually does the work. Hubris sets in > when the CEO internalizes the celebrity and becomes excessively self- > confident in making complex decisions. Indeed, there may be an emphasis on > the sort of decisions that attract the celebrity journalists.

<comment><USER3> That's my point. The current system defines what success means now. You cannot fault current companies for trying to stay alive. And indeed, I think the behavior is ethical, in the sense that they don't have a survival alternative.

This does not mean that the situation is static. The current system can be changed, by setting different bounding conditions. Anti-trust, unions etc. are all instruments to affect such a change. But again: Since you cannot dictate the global boundary conditions, you have to build a system which can survive in the global economy. Socalist planned economy, for example, has been proofed by experiment to not work. Unions often work, if balanced in power. Consumer protection laws often work too. Note here: Survive, not be the biggest. Your economy can fulfill a niche role with better social aspects, but other downsides. Take Germany for example. The social security and general high level of living goes hand in hand with general good education and, for example, larger investment in science. On the other hand, this sets a minimal productivity a job must have to exist in the first place. There a no "Apple store greeters". This means that low-education jobs which pay enough to actually live in Germany are rare. These jobs are often filled by guest workers from countries where cost of living is significantly lower. The problem is that not everybody can be brought up to a high enough education level. Having not enough viable jobs available for those who cannot make that jump is tragic. While in Germany the social system takes care of them to some extend, not having a job is bad for your psyche even if you have enough money.

I wouldn't say big companies, especially privately held ones, are run by committee in the sense that everybody has the same power. There is a hierarchy. But even if so, it's a committee consisting of selected people from a special pool, not from the general pool of workers.

Regarding the celebrity CEOs: In the current state, it obviously works, otherwise companies which do not fall into this pattern would outperform those who do. If you want to change it, you have to change the system. It seems to me that focusing on the salary is not the right way though, because they follow from the celebrity system (which makes "good" CEOs more rare).

<comment><USER4> I can completely fault current companies for inhumane and unethical practices, even if they are completely legal. Including outsourcing work to countries where child labor laws, sweatshop conditions, and environmental damage, while possibly illegal, are a simple bribe away.

Sure, planned economies don't work. That's one of the reasons for social democracy ("... a political, social and economic ideology that supports economic and social interventions to promote social justice within the framework of a liberal democratic polity and capitalist economy as well as a policy regime involving a commitment to representative and participatory democracy, measures for income redistribution and regulation of the economy in the general interest, and welfare state provisions."; Wikipedia). But I don't see why this comment is particularly relevant?

Abstractly speaking, a balance of power is good. Concretely speaking, I can't make sense of it. Does Germany have the right balance of power? Does the US? My sense is that unions rarely have enough power. Certainly not in the US, where workers don't even have the right to a representative on the company boards.

"this sets a minimal productivity a job must have to exist in the first place"

Sure. But given the several centuries of productivity improvements, why are we all still working as long in the first place? Quoting Wikipedia again, in the article on John Maynard Keynes: "Keynes thought that the pursuit of money for its own sake was a pathological condition, and that the proper aim of work is to provide leisure. He wanted shorter working hours and longer holidays for all."

If we worked 28 hours per week, as IG Metall recently negotiated, then there would be more jobs.

"not having a job is bad for your psyche"

I'm of mixed feelings of this. I know a lot of people who would love to work on free and open source software, but cannot because it's not a viable source of income. If there was a basic income, which was enough to live on, then I think they would "have a job" doing software development, even if it wasn't really a job.

A lot of rich people don't have a job, but volunteer to be on, say, an art museum board or other organization. I think this helps the psyche, even though it isn't a paying job.

Regarding committees, I used it to point out that most companies are not run by a dictatorial head, which appears to be your argument. I brought up "celebrity CEOs" to point out that that might be more a marketing and journalism myth, or selection bias, than a reality.

DuPont is one of the longest-lived companies in the US, so by your standard it's one of the most successful. What do you know of its management style? Probably nothing. It's simply not flashy enough to make the popular press.

"It seems to me that focusing on the salary is not the right way though, because they follow from the celebrity system (which makes "good" CEOs more rare)."

As I pointed out in the quote by Wolff, the high salaries are true for more than just celebrity CEOs. They are true of nearly all CEOs in mid-to-large companies, and to many college presidents, and many non-profits (the Wolff piece mentions the recent at a Chicago YMCA, but I can include the American Red Cross and Susan G. Komen for the Cure).

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER5> I agree that inequality is a problem, but I think the article is on the wrong track. The richest people in society aren't business executives. They are overwhelmingly entrepreneurs and finance-traders. Ie, Bill Gates and Warren Buffet. Koch brothers and George Soros. Compared to them, CEOs and C-level executives are mere pawns.

To give a sense of scale, Tim Cook, leading the most valuable company in the world, earned $13M in 2017, working what is likely 60-80 hour weeks. In comparison, Bill Gates with his $82B assets can sit on his couch all day, and make $13M in investment returns in a couple days.

If anything, CEOs have more in common with regular workers, than with the truly wealthy. This focus on CEOs as the bogeyman, causes us to overlook some more important causes of inequality, such as the ultra-low tax rates on capital-gains, the numerous deductions available to the 0.1%, and the preservation of wealth across multiple generations via estate inheritances.

<comment><AUTHOR> _" CEOs have more in common with regular workers, than with the truly wealthy"_

Someone who makes $13 million a year never has to work another day in their life, and neither does anyone in their family. They can buy pretty much anything they want, live anywhere they want, can send their children to the most elite schools, and money is not just not an issue for them, unless they're trying to buy themselves a country or trying to reshape the entire political landscape of the United States.

Meanwhile, the median _family_ income in the US is about $60k and more than half of Americans have less than $1k in savings. Many of these regular workers struggle to survive, living paycheck to paycheck. They may never afford to retire and could easily be bankrupted by medical bills.

Help me to understand how a CEO making $13 million a year can have much in common with them.

<comment><USER5> Yes, $13M is a whole lot more than $60k, but it's also a whole lot less than $8B. One thing that CEOs have in common with most workers, but not most multi- billionaires: The majority of their "income" is taxed as income, not capital- gains. I suggest focusing more on the second part of that paragraph:

 _This focus on CEOs as the bogeyman, causes us to overlook some more important causes of inequality, such as the ultra-low tax rates on capital- gains, the numerous deductions available to the 0.1%, and the preservation of wealth across multiple generations via estate inheritances._

</comment></comment></comment><comment><USER6> It would be a lot easier for executives to defend massive salaries if they weren't _also_ making money hand over fist when they _fail_ spectacularly. What's worse is that it seems like there are an awful lot of executives that don't execute perfectly.

While I don't personally believe there is any job in the world worth one hundred _million_ or more per year (I mean, these people aren't even physically in harm's way!!!), why on earth aren't companies making sure that money swings far in the other direction too? If you want a chance at $100M a year, the company should be able to FINE you _millions and millions of dollars_ when you make costly mistakes, for example.

<comment><USER7> That all sounds great, in theory, and sounds super fair. But how do you attract executive talent without large salaries and golden parachutes?

When one person's choices can make the difference between bankruptcy and having surging profits, how should we compensate them? I do think our distribution is a bit top heavy, but I think of it ethically, not pragmatically or fiscally. Short of executives collectively deciding against their own financial interests, or regulators choosing for everyone (and the economy being exposed to regulatory capture), I don't see what you're proposing.

And physical danger is like physical labor. It's not intrinsically tied to the value society places on that work. Personally I don't think skydiving instructors should be paid more than high school teachers.

<comment><USER8> The "large salaries and golden parachutes are necessary to attract top-notch talent" is just typical b.s to justify awarding even more compensation within the boys (and girls) club. In reality, you could easily find at least several equally qualified executives to fill the position.

<comment><USER7> How many have you been able to find and attract?

Anyone who says "you could easily", wrt business, obviously is either a business genius unlike the rest of us, or has never tried.

Trust me, finding top notch talent that you're willing to trust with the direction of your company is probably harder than finding a spouse.

</comment></comment></comment></comment><comment><USER9> This article doesn't seem to give any reasons to support the opinion in the title. It describes ways to accomplish this - mostly legislation and shaming - but not why a limit should exist, nor why 1,000 is a more logical limit or goal than any other multiple (10,000? 100?).

<comment><AUTHOR> I have a suggestion. Make the pay equal. The janitor and the CEO should make the same amount of money.

<comment><USER10> then you'll have no CEOs and lots of janitors

<comment><USER8> You are kidding, right?

If money is not a factor, I want to feel important, have people suck up to me, travel on corporate jet, etc.

:-)

<comment><USER10> You'd get bored of that after a week. If you're not getting paid more you'll resent having to work 24/7, with no real breaks and suffer watching your relationships and family crumble. You'll have no hobbies, no real friends and be incredibly lonely. But you won't even notice because all you care about is the business and your facade.

The janitor goes home after their shift and is completely free. They get their 4 weeks vacation and max 40 hour working week and can do whatever they want in their spare time.

</comment></comment></comment></comment></comment><comment><USER11> Why? This article explains that inequality does exist, but doesn't say why that's a problem.

<comment><USER12> Because research has shown there's an inverse correlation between CEO pay and company performance.¹

¹ [https://online.wsj.com/public/resources/documents/CEOperform...](https://online.wsj.com/public/resources/documents/CEOperformance122509.pdf)

<comment><USER13> That doesn't seem surprising at all - a CEO's reputation is tied to the reputation of their company, so it makes sense that a poorly-performing company would have to pay more to attract the same level of expertise as a well-performing one. If the poorly-performing company fails, then the CEO's market value will decrease. Higher compensation offsets that.

</comment></comment></comment><comment><USER14> This is a very misguided metric. A CEO Of a small company with 100 employees and $20MM annual revenue is going to be compensated very differently from a CEO of a giant company with 200,000 employees and $40B+ in annual revenue. Although their line workers may have similar skills, jobs, and compensation. A 1000x ratio may be too much for the small company CEO and way too little for the giant company's CEO.

Fortunately, shareholders can dedcide and influence each company's Board. There is no need for the government to get involved unless politicians are trying to raise another witch hunt for distracting peasants.

</comment><comment><USER8> I think the title is imprecise.

I know exactly two people who deserve that kind of money: Jobs and Musk (there may be a couple more) with a track of repeat success and world-changing impact.

Most big-corp CEOs don't deserve the money they get. People who got lucky and complete failures in particular (like Gil Amelio, or Carly Fiorina).

</comment><comment><USER15> It's not easy to find somebody who has the brain, knowledge, and experience to run a big company.

It's extremely easy to find somebody that can serve food.

Evidently, it's 1000 easier to serve food (or whatever other job).

What is the problem with that?</comment>


One Ethereum trader just made $1,140,000 in seconds, thanks to an epic glitch - happy-go-lucky https://medium.freecodecamp.com/one-ethereum-trader-just-made-1-140-000-in-seconds-thanks-to-an-epic-glitch-48af7e0ffe49 <comment><AUTHOR> Seems this trader had a vested interest at that strike price, and probably very close to the source of the mis-information about the car crash.</comment>


Apt-get purge chromium - <AUTHOR> http://www.iuculano.it/linux/apt-get-purge-chromium/

<comment><USER2> I always was under the impression that Chrome was build on top of Chromium. Is this not so? And if not, would somebody please be so kind to be able to explain what exactly the relationship between Chrome and Chromium is these days?

<comment><USER3> Sounds like they are build from the same source but with different assets/flags:

[https://code.google.com/p/chromium/wiki/ChromiumBrowserVsGoo...](https://code.google.com/p/chromium/wiki/ChromiumBrowserVsGoogleChrome)

This post appears to be about the Debian fork and the stalling of the development process.</comment></comment>


Whether a Swallow Is Frightened in a Storm - <AUTHOR> http://www.scientificamerican.com/article/why-we-know-whether-a-swallow-is-frightened-in-a-storm-excerpt/ <comment><USER2> This bit got my imagination going (even if the true explanation is likely something mundane):

 _Another, somewhat spooky example of a tagged shark demonstrates the chasms GPS technology will reveal to us in time. Off the coast of Australia, a ten- foot-long, tagged female great white shark that went by the name "Shark Alpha," disappeared from the radar. According to the tracking device, at four o'clock in the morning, the shark was suddenly torn five hundred yards into the depths, with astonishing power and speed. Within seconds, the chip also recorded a spike in ambient temperature, from 8 degrees Celsius to 25. That is the temperature of an animal's insides; the shark must have been eaten by an aquatic predator. The chip could be followed for the next eight days, at which point it vanished from the control monitor. It was most likely voided. Four months later, it was found on shore, bleached by gastric acid. Researchers suspect Shark Alpha fell prey to a much larger creature. It will have to have been at least five meters long and weighed two tons or more. But what was it? An orca? Orcas usually hunt close to the surface. The deepest killer whale dive on record is 260 yards. Another great white? This species has a body temperature of 18 degrees—not 25. Could it actually have been a monstrous octopod or a megalodon, a gargantuan prehistoric predator that some say may has survived, hidden in the darkest depths of the ocean?_

<comment><USER3> Def a compelling mystery. Turns out to likely be a larger Great White: [http://sploid.gizmodo.com/mystery-solved-heres-the-animal- th...](http://sploid.gizmodo.com/mystery-solved-heres-the-animal-that-ate- the-9-foot-gr-1587429691).

</comment></comment><comment><USER4> Annoyingly, the title is actually "Why We Know Whether a Swallow Is Frightened in a Storm [Excerpt]" \- key being, why/how we know, and not actually answering the question posed or not. In fact "Swallow", "Frightened" and "Storm" only ever occur in the title.

</comment><comment><USER5> Only halfway through the extremely long-winded introduction did I realize that the article was about a much more boring topic than the title led me to believe.

<comment><USER3> I think it's a more interesting topic. Another article on animal emotions would be inconclusive. But this represents real progress in ecology and environmental protection. A GPS sensor that fits on the back of a bee is incredible.

</comment></comment><comment><USER6> What do you mean? An African or European swallow?

</comment><comment><USER7> Seems sort of sad to me how we want to encroach on everything, we can't let even the animals be free, we must surveil and control them too for their own good.

<comment><USER8> I feel like you put some pre-concieved notion on both the topic and animals. The article talks about tracking animals so we can better provide protection for them and their habitats (which will also provide loads of benefit to humans, as well, as we learn more about them).

<comment><USER7> [https://en.wikipedia.org/wiki/Gestell](https://en.wikipedia.org/wiki/Gestell)</comment></comment></comment>


Microsoft makes Windows 7 RC1 availible for download. - <AUTHOR> http://news.zdnet.co.uk/software/0,1000000121,39646595,00.htm

<comment><USER2> If you do not have a TechNet/MSDN subscription and can't wait for May 5, try <http://btjunkie.org/search?q=windows+7100>

The first two results are the legit builds (both 32 and 64 bit). I tested with SHA1 against the signatures in TechNet and they are identical.

BTW, I do have my TechNet subscription, but I couldn't wait for today, so I downloaded those versions mentioned two days ago.

Finally, if you already have a beta key from the previous release, it should work with these ones.

</comment><comment><USER3> Tried it in vmware earlier. I couldn't find a simple way to turn off font smoothing, only a 4 step wizard which kept repeatedly showing me text samples and asking which one looked best. Smoothed text makes me nauseous for some reason and I can't stand it.

<comment><USER4> Microsoft's implementation of font smoothing is really terrible. The way they use subpixels leads to a weird red/green halo on some letters.

Interestingly, font smoothing in OSX doesn't suffer from this problem.

<comment><USER5> Apple's implementation of font smoothing is really terrible. The way they emulate print rendering on-screen makes every letter blurry and unnecessarily bold.

Interestingly, font smoothing in Windows doesn't suffer from this problem.

<comment><USER4> That's true, but I find it much less of a problem than the colored halos.

<comment><AUTHOR> It would be great if both companies cross-licensed their font smoothing technology to each other, and allowed users to choose which method they want on either OS.</comment></comment></comment></comment></comment>