Hacker News new | comments | show | ask | jobs | submit login
Ask HN: Is Java still worth learning?
57 points by watermel0n on Nov 10, 2013 | hide | past | web | favorite | 93 comments

Some context would help, since it depends on what you already know, what your longer term goals are, and how you think learning Java will help you achieve that.

Some reasons in favor of learning Java: it's an incredibly entrenched technology in a wide variety of industries, and it will be running incredibly valuable line of business code for long after both of us are dead. The language itself is competent and C-style, and it handles memory management. The JVM is a wonderful platform. The Java ecosystem interoperates with everything, has copious developers available no matter your region/price point/industry/desired level of experience, and has a vibrant community which has libraries available for whatever you'd want to do.

Reasons against: I'll spare everyone the "Good God man, it's Java." (Though, having cut my teeth on it and used it professionally for most of my career, they're not totally wrong.) Mostly, my concerns would be directed at "Is learning a new programming language really the highest priority for you given your particular goals?" Learning the syntax will only take you a few weeks (assuming you've programmed before), but getting conversant with e.g. the J2EE stack is a multi-year project, and there are many things you could accomplish in the same time which would be more intellectually rewarding/credibly promise more career growth/etc.

> I'll spare everyone the "Good God man, it's Java."

I always get a kick out of this. If someone says a language's expressiveness is one of her biggest pain points, she probably is not working on anything significant. There is a reason that so much Java is used in Google, Amazon, etc. Performance, maintainability, tooling, and ecosystem are more important than whether or not you have anonymous inner classes vs. true language support for closures.

J2EE, like Applets, gave Java a bad name. And Spring has become more complex and nasty than J2EE ever was. Java sucks when you have to deal with those environments.

But if you use a modern Java stack - Jersey, Jetty, Guice, Guava, etc. - it is a pleasant experience.

>> There is a reason that so much Java is used in Google, Amazon, etc.

There is a reason why some companies are still running COBOL, C++ or even FORTRAN. Replacing them en masse is expensive, and often you can hire cheap labor and throw some bare minimum funding to keep those systems up and running, until there is no business case to keep them running any more.

When these companies started up, Java was the latest tool that gave tremendous productivity benefits over C++. Newer tools have arrived, now and Java is in the same place as C++ was.

And just like how it doesn't make business sense to re write old legacy systems in new languages. It also doesn't make business sense to write new systems in older languages.

Choose where you want to be.

> When these companies started up, Java was the latest tool that gave tremendous productivity benefits over C++. Newer tools have arrived, now and Java is in the same place as C++ was.

Which languages/tools give tremendous productivity benefits over a modern Java stack? Serious question. I have done a lot of work in a lot of different environments and IMO for the big and maintainable things it's hard to top the Java ecosystem.

(edit: I do agree with you - it is ridiculous to rewrite enormous legacy systems. But I don't think there's a clear-cut order-of-magnitude-better replacement for Java yet)

Is there any good material on learning the modern Java stack? I know Java SE from using it quite a bit in college, but it seems beyond that everything is geared towards JEE.

>>it will be running incredibly valuable line of business code for long after both of us are dead.

Good for Java, bad you us as a career option. Unfortunately the more entrenched it is the more legacy projects you get to work on. The new things, the important things, sort of things which people are ready to invest big money on will happen in some other stack.

I know of a few friends of mine who've so far worked mostly on COBOL their whole career so far. Through COBOL is still pretty much in use, they have problems getting into good projects, switching jobs, getting good compensation. People seem to look legacy stacks like a burden they need to carry on unwillingly. So tend to provide the bare minimum funding to keep it up and running. Most of the times they are only running, until something better is found to replace them.

Learn Java if you want. You will still get a job, but you shouldn't be surprised if something like scala has more interesting projects, good money and better opportunities.

This happens with all technology. As with these things, the sooner you adapt to something- the better.

It maybe more appropriate to ask, should I have a portfolio of Java applications/solutions to interesting problems. Learning the pitfalls of a language is undoubtedly useful and I would argue that learning the process of project start-up, testing, maintenance and deployment would perhaps put you in a much more valuable position for learning.

> The JVM is a wonderful platform. The Java ecosystem interoperates with everything

I hear this over and over but it never strikes me as true. The best and most widely used libraries and interfaces for a given problem always seem to be C++ or C. There's typically some slower and less comprehensive library for Java or .Net.

The best and most widely used libraries and interfaces for a given problem always seem to be C++ or C.

I think it differs hugely per case. E.g. there are not great C++ or C libraries that provide functionality of Akka, Guava, or Java persistence.

On the other hand, nothing in Java-land beats Qt, Cocoa, or Eigen.

But I agree on interoperability. Interoperability within JVM-land is pretty great. But it is far easier to write a good binding for a C library in e.g. Python, Ruby, Go, or Haskell, than it is in JNI.

I also don't fully agree with the statement that Java (or other JVM based languages) is the pinnacle of interoperability. Try interfacing between e.g. Python and Java some time and you know what I mean. Besides JNI or some other JVM based language, interfacing between Java and something else basically means doing some form of IPC, which isn't fun.

If you do interoperability right, then you would use Apache Camel which interoperates effortlessly with everything including Python. The right way to interoperate between tools in different languages on different VMs, is to use something like AMQP or ZeroMQ both of which are supported in Camel and in Python.

Now if you don't want to use Camel and want to build a Big Ball of Mud, that is your choice, but do not pretend that it is a best practice in the 21st century. The standards for software engineering have moved on.

>> Now if you don't want to use Camel and want to build a Big Ball of Mud, that is your choice, but do not pretend that it is a best practice in the 21st century. The standards for software engineering have moved on.

I don't even understand what you are saying here. Are you implying that if I have a Python application and a Java library that solves some very specific part of what the application does (say, applying some very complex algorithm to a few numbers, or decode some arcane undocumented file format), that I should use something that sells itself as:

Apache Camel ™ is a versatile open-source integration framework based on known Enterprise Integration Patterns.

Camel empowers you to define routing and mediation rules in a variety of domain-specific languages, including a Java-based Fluent API, Spring or Blueprint XML Configuration files, and a Scala DSL. This means you get smart completion of routing rules in your IDE, whether in a Java, Scala or XML editor.

Because 'the standards of software engineering have moved on'?

Not everyone is building large-scale enterprise software running on clouds of servers or whatever you have in mind. I can make up a million examples of pieces of software that perform only one single one-shot task (like a command line script) that may want to call out to some external library that implements some part of what the script is supposed to solve, and for those kind of applications, 'the standards of software engineering' should not have to dictate I have to use message queues or a versatile open-source integration framework based on known Enterprise Integration Patterns, amirite? If that library I need to call is written in Java and I need to call it from Python or some other non-JVM language (or even C/C++ because JNI is a pain in the ass as well), I'm SOL :-S

For enterprise applications usually you would use REST. And that is pretty easy, almost automatic.

Can you expand on this? I've never seen this opinion before. I would have guessed rest is too loosely defined for the structural rigidity of most enterprise applications?

There's no need to interface cpython and java. Looks like jython is already faster than cpython, so just use it, interface is ok.

Then you can't use C libraries with it.

C++ library would crash your process or ruin your threading. Java one won't. Interfaces tend to be more stable. For complex things like Excel parsing Java is the way to go.

Thats not an answer to the question about interoperability. Java/C interop is a complete pain so the world is divided into two, C (native) libraries, which the non JVM languages can mostly interop with, and the JVM libraries that JVM languages can use. Most stuff is implemented eventually twice.

A lot of people are using the word "interface" to mean sticking two bits of object code together with the compiler and linker. In plain English, the word "interface" covers a lot more than that specific technique. Even most Java developers make a distinction between what the "interface" keyword does, and the broader CS term "interface".

Why on earth would you want to stick some C code (or God forbid, C++ code) inside the same process as the JVM? If you control the OS, there are better ways to do the same thing with two separate proceses. And even if you don't control the OS, we do have techniques (most of them implemented inside Apache Camel) for hooking up a Java process and some other kind, without sharing bodily fluids.

Apache Camel is safe hex, use it!

"to mean sticking two bits of object code together with the compiler and linker" That's what I mean here. You drop your .jar into a folder and it tends to fit. Even if build options or library version differ. And you always have tests to check that!

Java libraries can ruin your threading too. Java doesn't magically make everything you write threadsafe.

You can guard against that. In Java, making things thread-safe is usually straight-forward.

Java libraries tend to mis-handle classloader recycling, but most projects can ignore that.

Additionally, Unicode is a nightmare in Java.

Mozilla's HTML5 parser is written in Java. One of the reasons java was chosen was the unicode support [1] The Java code is converted to C++ in build time I think [2]

[1] https://news.ycombinator.com/item?id=6204760

[2] http://ejohn.org/blog/html-5-parsing/

Did you ever tried it in C and C++?

> The best and most widely used libraries and interfaces for a given problem always seem to be C++ or C.

Where are the enterprise C and C++ libraries and server stacks?

The enterprise is all about Java and .NET nowadays.

java and C are strong in different areas. I would rather say that choice of C libraries for enterprise or just for any useful web backend is poorer than for java ;)

The only thing Java is tier one for is shoveling around XML/HTML and talking to databases. As soon as you leave that CRUD territory and need to work more seriously with algorithms or have high performance requirements, the available stuff is second tier. Off the top of my head, consider computational geometry. CGAL and boost.geometry are amazing. JTS is very slow and missing a lot. It's the same thing over and over with many sorts of libraries.

Well-designed libraries usually trump poorly-designed libraries, performance-wise, regardless of which language they're implemented in. C++ isn't a magic bullet; it's plenty easy to write bloated, poorly-performing software in C++, just as it is in Java, C#, Ruby, etc.

Here's just one counterexample to your claims: http://stackoverflow.com/questions/4257659/c-sharp-versus-c-...

So why are the banks moving to Java and .NET for real time transactions?


Absolutely Yes.

What Language today will open up opportunities to:

1. Being able to program for No1 Mobile OS (Android)

2. Being able to program for Enterprise application (Oracle Apps etc)

3. Being able to develop web application with other server side application with matured specs (JavaEE)

Any other so called "Hip" language at most will let you help find jobs in one of those areas.

Yes Java is not what cool kids advocate but it what makes an good career.

Nearly all of the areas you mentioned are massive commodity markets, where individuals get hired on the basis of least pay they are ready to accept. Its not a very comfortable position to be in. You age quickly, fall victim to age related discrimination. While a fresher gets the job because he is ready to work for a little less.

>>Yes Java is not what cool kids advocate but it what makes an good career.

Well Java is what cool kids in the late 90's were advocating. And C++ was where the supposedly 'good career' was.

I'm willing to believe that mobile dev is treated as a commodity market, but the other areas mentioned are essentially "desktop apps" and "web apps." I don't think you can paint with so broad a brush that essentially all front-end and back-end Java work is commodity.

Surely there are markets and companies where companies hire Java programmers as replaceable cogs, and you shouldn't aim to work there. But there are many many enterprises where quality Java engineers are hired, appreciated, and well-compensated.

Also, once you have learned Java, you don't have far to go to also learn C#. Most of the differences with C# are solutions to problems that have not yet been fixed in Java, i.e. C# is faster moving from a language design point of view. Yes, the .Net libraries are completely different, but few software developers nowadays bother to learn a set of libraries inside out because reference material and search engines are so much better than they were a few years ago.

Yes - if you like money and job security - there is very strong demand for java developers and a lot of code to be maintained. Java is entrenched in the corporate world.

If you want to learn something from learning Java - not so much.

but most company don't need a java this days

Some quick stats, according to IT Jobs Watch (a UK jobs website):

Python-related jobs make up 3.36% of permanent IT jobs in the UK. (http://www.itjobswatch.co.uk/jobs/uk/python.do)

Ruby-related jobs make up 3.54% of permanent IT jobs in the UK. (http://www.itjobswatch.co.uk/jobs/uk/ruby.do)


Java-related jobs make up 14.38% of permanent IT jobs in the UK. (http://www.itjobswatch.co.uk/jobs/uk/java.do)

C#-related jobs make up 16.97% of permanent IT jobs in the UK. (http://www.itjobswatch.co.uk/jobs/uk/csharp.do)

You can't judge the popularity of a language from the stories you're used to seeing on social news websites -- enterprise software, although it may be mundane, employs a huge portion of the developers out there today, and many of them are C# or Java developers.

I wish people would promote this fact more.

Reality is well outside what the marketing would have you believe.

Also the reason people pick c#/java etc is simply due to it being a pretty good stable standard for fungible staff with decent productivity output and the ability to scale up really complex functionality pretty fast.

I'm pretty shocked that C# has overtaken Java in number of jobs. I suppose that a lot of that growth came from cannibalizing other MS-centric languages, so it's not really comparable. But still.

This is wrong. Nearly every corporation including the likes of Google and Amazon use java extensively and ongoing. Despite what many articles predict or claim, Java is neither a declining technology nor a dying technology, on the contrary, Java is used more and more every single day.

Is it a sexy language, no, is it a hip language, no, is it a mature language with some of, if not, the largest support libraries out there, yes, and this is why it is so popular.

Not true at all! At least in Toronto most of the companies here are hiring Java programmers like crazy. Depends where you want to work, I assume in the Valley it's all Node, Ruby, iOS. I guess Android is all java as well.

I've seen many companies that still use Java. It's still a pretty popular technology, even though a lot of start ups don't typically use it anymore. However, I have noticed a bunch of start ups using Scala, which runs on the JVM. So learning Java and how the JVM works may be useful in the long run.

Depends on your motivation, if you're looking to learn a language for the sake of employability then yes Java is definitely worth learning.

On the other hand if you're interested in learning something that will make you an overall better programmer it's best to learn something different than what you're familiar with (most likely Java isn't much different than what you've used), e.g. learning C (if you haven't written lower level code) or a functional language (if you've never used one) will grow you much more as a developer than adding yet another generic object-oriented language to your skillset.

As Dave Thomas in his talk http://www.infoq.com/presentations/metaprogramming-ruby says "Java is for average programmers - a scissors with blunt knifes" If somebody wants to learn now, its good to go after the future market which would be dominated by mobile, apps on cloud. The programming trends is poised to be move towards a mix of Functional + Object Oriented, Procedural. JVM will still be around, as its battle tested but will be programmed by something else (Scala, Clojure seems to be picking up). Golang/Dart will be a deadly combination as well. HTML5 Mob Apps will pick up steam. We choose Scala, Golang, Ruby(scripting), Ruby on Rails for our tech stack at http://www.megam.co

If somebody wants to learn now, its good to go after the future market which would be dominated by mobile, apps on cloud.

The (now) largest mobile platform uses Java as its main language for applications. Lots of cloud services, including much of e.g. Google's, are written in Java.

(Scala, Clojure seems to be picking up)

We live in a bubble:


The average programmer will never write Clojure. Maybe Scala, but only as a Java with less boilerplate.

Golang/Dart will be a deadly combination as well

This almost seems an enumeration of today's hypes ;). You know that Go (the language) is practically a Java 1.0? What is so deadly about a Java 1.0-like language with green threads (which have been around a long time) and CSP-like channels (for which Java implementations were available). What's 'deadly' about it?

I like cutting-edge languages such as Haskell. However, historically, it's mostly boring languages with industry support that win. C was boring and it had UNIX, C++ started out as C with objects and had Microsoft and many others, Java was boring (a watered-down C++) and had Sun, IBM, Oracle, etc., and C# was boring (a Java clone) and had Microsoft (arguably, it did adopt more outside influences than Java ever did). Go will probably be popular as well, it's an incredibly boring language (no one could claim it to be revolutionary after Java or Erlang) and it has Google.

Note that I don't find the predicate 'boring' offensive. These languages are well-understood (except maybe C++), are standardized, have large ecosystems, have great tooling. The result is that they allow you to focus more on the actual problem than reimplementing basic libraries or fighting tooling.

'Should I still be using Java?' is the question that almost ask myself once every week. And till now my answer was 'Yes'. I have worked on many languages including dynamic languages and compiled languages.

We are making heavy investment with our code every day, and I feel no other language is close enough with 'Java' with ease of programming.

Dynamic Languages are great. But without help of IDE and easy way to debug, there is no way we can use any great language. Language on itself is useless. We need tools to be able to use it. If you are the master in programming, then you can do great stuff with dynamic languages. But 99% of programmers out there are not masters of programming.

C# is great with Visual Studio, but costly to use. Java have Eclipse which is free.

We don't need code that is small, we need code that is bug free and easy to understand.

Java also has IntelliJ which is also free (community edition).

Android Studio, based on IntelliJ, is also free.

Maybe I've got Stockholm Syndrome but so far I have not found a compelling reason to move from Eclipse. But if you like IntelliJ now there is an official and free toolchain supported by Google (N.B.: in pre-release).

yes, java strong in tools, because java was designed with tools in mind (although Delphi was very cool). Large number of non-trivial refactorings was first introduced in Java IDE (correct me).

> C# is great with Visual Studio, but costly to use.

The Windows/.NET SDK is free.

Additionally, you can make use of SharpDevelop, Xamarin IDE or Visual Studio Express editions.

Yes, I agree. The point I was trying to make is, there is C# and Java left as top contenders with good IDE. And between those two Java with Eclipse is the most open and and free choice. (considering multi platform)

Languages I think you should know:

C, Java, Bash, Javascript, one out of {Perl,Python,Ruby}, and perhaps a functional language like Lisp or Clojure. Each one will make your understanding of programming more comprehensive.

What Java offers is that it's actually a pretty idealistic language in its approach to OOP, to the point that it irritates the hell out of most of us with all the necessary boilerplate. Practically speaking, too, there are a lot of Java jobs (and probably will be for a while) and it's not very idiomatic so there's a lot of overlap w/ other languages, vs say, Prolog.

Also, by "know" I mean, have written a non-"hello world" application but not necessarily having expertise in it.

I like the functional paradigm and enjoy writing functional code, but personally, any time I look at Lisp or Clojure my eyes just completely glaze over. I understand how powerful S-expressions can be (source code can be data and vice versa), but reading them is a massive pain.

So, I've been learning Haskell and Scala instead. Is learning a Lisp-based language a necessity to be a robust, professional developer, do you think?

No, I just was suggesting learning about any functional language, those two just came to mind first.

Do you think that Camel and SOLR and Scala are worth learning? If yes, then learn some Java as well, but remember that the world of today is different than the world when most Java books were written and most Java curriculums were designed. In other words Java is NOT going to dominate the world, is NOT even going to dominate the Enterprise, and not everything in the Java ecosystem is going to last. But some parts are damn good, like Oracle's JVM, 3rd party commercial JVMs, Camel, Groovy, Scala, SOLR, Lucene, many of the projects in the Apache foundation, Eclipse, IntelliJ, many or the projects from Spring.IO, and so on.

It is probably not worth your while to become proficient with J2EE but some bits of it like JDBC are still widely useful. If you do decide to tackly J2EE be aware that you are walking the same path of the COBOL programmers of old, and you will likely spend the rest of your professional life working with Java J2EE enterprise stuff that suffers severely from the Big Ball of Mud and various other antipatterns. I guess that someone has to do it, but I also guess that most people on HN are like me, and are want to always learn new platforms and apply the latest knowledge coming out of the computer science academic world. We want to speed up innovation, and plain Java is not where it is at.

Java isn't as flexible (or hip) as Ruby or Python but it's still in huge demand, and there are far more Java jobs than jobs in those languages. Here are some reasons I listed for learning Java in my Java tutorial:

- Are going to a college that teaches Java

- Want to make Android Apps

- Want to program for a large company, like IBM

- Want strict rules to help prevent errors (at the cost of some flexibility)


As a base for a well rounded developer, I would say to pick C# or Java and Ruby or Python, and C or Go. Learn javascript. Avoid PHP, even if you're starving.

PHP has actually matured pretty well. Since the introduction of Composer and frameworks like Symfony 2, Zend Framework 2 and Doctrine 2, you can actually build very sophisticated software in PHP. However, for green field projects I personally wouldn't use it.

However, having said that, there are still plenty of guns lingers out there copying and pasting crap from PHPClasses.

Why to avoid PHP ? I am earning working on freelance project all due to PHP.

Ah Dr Dobbs. I miss the days when I waited for the next number to read it back to back including adds. Now we have so much information at our finger tips but it becomes harder to be exited about it.

This is a question I keep asking myself, specially within the web development enviroment. The company I'm currently working for wants to use Java for their web service needs (I'm trying to push a RESTful approach, but I'm have 0 knowledge of how they could start that in the Java world). So I ask: is Java worth learning for web development (scalability, lines of code, etc)? If not, why?

The company I'm currently working for wants to use Java for their web service needs (I'm trying to push a RESTful approach, but I'm have 0 knowledge of how they could start that in the Java world).

There is a standard for that (as usual in Java :)) - JAX-RS:


It's actually pretty ok, it requires relatively little ceremony. The most popular implementations (Jersey and RestEasy) work well.

I recommend checking out Play Framework for a modern Restful Java Web Development framework. I must add that the templating engine and under the hood api are written in Scala. It doesn't take long for an experienced Java dev to become a familiar enough with Scala to work with the templates though.

Absolutely, Yes. As somebody mentioned, the more languages you know, the better you understand any of them. More specifically:

You need to know at least one of the fast, compiled languages. The choices here are C++, Java or C#. Among these three, Java is by far more pleasant to work with (personal opinion). C is not really an option, unless you need to do networking, drivers, and work directly with hardware.

Please do not equate Java with J2EE or Applets! :-) J2EE sucks and Java rocks (again personal opinion). Modern Java programming style is a lot less OOP-rigid. We will have Closures and lambda functions in Java 8 in 2014. Here is a good book with more modern views on Java programming model: http://www.amazon.com/Introduction-Programming-Java-Interdis...

Here is what Java is actually good for:

- Natural Language Processing and Machine Learning. Collections APIs (Thanks to Joshua Block for designing them!) rock there. Yes, you could do the same things in C/C++ but it's a lot more painful. And no, you can not do this in Python, it's too slow.

- Information Retrieval at a large scale.

- Any large systems. Java has debugging capabilities like no other language I know. Please don't use J2EE!

If you want to work for Google, you need to know C++. C++ is 20 - 30% faster then Java and it matters at Google scale. But no one else has the Google scale in the corporate world.

JavaScript is another "must to know" these days, especially Node.js and AngularJS.

Python is the nicest interpreted languages I know. Really good for learning data analysis, machine learning and natural language processing. Tons of good libraries.

Absolutely yes! Nobody here can tell you what is good and what sucks. Your experience must not be based off a few HN comments. You must learn the facts, and then draw conclusions.

Even if you're not into Java programming, a weekend or two with the language will validate a few opinions and reject a few. I promise there's no better way to learn.

I have used many languages professionally and in my personal projects. Java is the language that makes me most productive. Why? It has the best tooling support. There are a few things that is extremely important for my productivity: - Precise autocomplete - Jump from a name to its definition - Call hierarchy - Code template - Auto formatting - Great unit test support - Stable and high quality debugger - Hot swap - Drop to frame during debugging - Remote debugging - Profiling and heap analysis

Recently, I am working on both a very large C++ code base and similarly large Java code base. In C++, I find myself routinely use logging and printf for debugging, because switching to debug build and use a debugger is such a pain. In Java, debugging is much easier. The feeling is like night and day.

As many other people have said it depends on what you want to do. You should choose a language for a project based on the project.

With that being said there are a lot of jobs available for programmers who know java, c++, and .net. If you want to do desktop developement work i would suggest being compitent in those languages but if you want to do web dev work you should probably skip those languages for the time being and focus on languages that are better suited for that domain.

yes, many older shops/businesses still use plenty of java in their stack. and it does not make sense for them to change to a newer technology due to costs. that said, i'd learn scala since it's so similar to java and really hot right now.

with more and more new developers learning scripting languages, java developers will continue to make more and more money. great language to learn right now. it may not be sexy or hipster, but it pays.

Until I can write Android apps in something else, yes. :)

Well, then you can unlearn Java right now!

http://xamarin.com/ http://phonegap.com/ http://www.orubase.com/ etc. etc. etc.

These frameworks are very limiting comparing to developing in Java. They might be easier to use (I don't know about that) but you would find yourself resorting to Java for the more complex stuff.

Can you come up with one thing that you can't do with Xamarin (C#) that you can do in Java (Android)? It's most certainly not 'very limited', I have no idea where you got that information.

You have the Xamarin extra payload and need to have someone write .NET bindings for the Android APIs.

But it is certainly a good way to write portable software across all mobile platforms.

This http://kotlin.jetbrains.org/ is the best language for Android development.

I think you should motivate 'best' :).

In general, Kotlin is a good candidate for the next Java. It removes a lot of boilerplate from Java and makes it more powerful (e.g. through extension methods), without becoming an enormous language such as Scala. It is a predictable language for anyone coming from Java.

Kotlin's largest competitor is Java itself. Java 8 does provide a lot of the advantages that Kotlin had (e.g. closures).

Java 8 unfortunately does not have closures


By that standard Haskell doesn't have closures either.

A closure is a function that uses free variables in its definition. And Java 8 closures fulfil that definition.

Depends what you want to do.

Java was my first language I learned in university back in 2000. At the timer I thought it was amazing. Then I learned Perl and realised how boring Java was and how much more expressive a language could be.

Now I use Python mainly, but looking around a jobs, the well paid senior engineers are usually Java based jobs. Python is mainly academic, or web development, and poorly paid as a result.

One other area Java is good to know right now is Big Data. Hadoop is spreading like wildfire (whether due to genuine need or buzzwordism), and knowing Java gives you access to most of the Hadoop stack. Presumably this will only increase as more companies decide they need "Big Data" and as Hadoop becomes more stable, popular, and accessible.

The best part of java is it's a good language where beginning programmers can learn design patterns and program design. I like java for this because it has single inheritance. Android is a good example of strict use of design patterns

If you want to be a startup guy then I wouldn't bother with java but if you want to be a good programmer it can't hurt

The very easy answer is "Yes, if you want to write apps for Android."

The more interesting question is "If Java is that much less desirable than other JVM languages, why hasn't Google enabled a complete, well-sorted alternative and started using it in Android system programming?"

Android software development is vibrant and growing. It is shaping how and why people learn Java. It has unique aspects like Android's modularity and IPC systems that are shaping the way people design and code.

So, why are the alternative JVM languages still on the margins when it comes to Android software development? Could it be that modern IDEs and Java work together well enough to overcome Java's flaws as a language in isolation? Are the cases where alternative JVM languages are compelling less relevant to Android apps? Are Android's APIs and modularity enough to modernize Java?

Google is about to ship their second generation (third if you count adding a JIT compiler) VM for Android without having addressed the language issue. Maybe that's just a matter of prioritization and they have something in mind. But, so far, Java has been Good Enough.

Having former Sun Java guys on Android's team counts as well.

If we are looking at the future from this point on, then in a nutshell the precise answer to this question would be NO. The only popular Java use I see is on Android by google, that is going to change sooner or later.

Absolutely, if you want access to a large number of jobs. You also need it to develop for Android.

of course not! learn haskell! it will employ you easily.

I hope that is sarcasm as I haven't ever seen a Haskell job in the EU.

Have you looked at the large investment banks (Barclays, HSBC, Credit Suisse etc) or any major hedge funds?

According to this there are around 100 advertised every 3 months in the UK http://www.itjobswatch.co.uk/jobs/uk/haskell.do which is not a lot but non zero.

That means there is Haskell in the keyword search but its not necessarily a Haskell job. A lot of companies, mine included, have problems with agents stuffing all sorts of shit in job ads just to get candidates to sign up.

Haskell seems an unlikely word to stuff in. I can find a few in a quick search (eg Jane Street who are well known for Haskell).


Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact