
Ask HN: Is Java worth learning? - simsalabeam
Or maybe you can suggest me some of bright-future programming languages, I just started learn programming last year.
======
niftich
Java is worth learning because:

\- It's a popular programming language with a large and diverse install base;

\- It's commonly used in server-side backends, and in a modified but
recognizable form, for Android app development;

\- It's an imperative language whose dominant paradigm is object-oriented, but
Java 8 and later bring in constructs familiar from functional languages;

\- It's verbose and doesn't favor cleverness. If you think this is a drawback,
avoid it.

A comparable language that's better-designed in C#. However, in many settings,
it is less used.

A language which was designed with most of the same design goals as Java is
Go. The two nonetheless ended up perceived as quite different.

------
Sylos
It's the most commonly used programming language, according to the TIOBE
index, and its main markets, Android and servers, are still very much growing
with no real programming language competitor threatening the dominant position
of Java.

And even if people would suddenly stop writing new software in it, there's so
many systems by now that are written in Java and need to be maintained that
you'd still be able to use that Java knowledge for at least ten years.

The main selling point of Java is that it's easy to write software in it, so
that means little developer time for relatively featureful and bugfree
software. There's also a lot of tooling around Java.

It does not fare well in performance or resource usage, and is mainly geared
towards writing big software projects.

Personally, I'd say it's definitely something you want to have in your
repertoire at some point, unless you already have concrete plans on
specializing into a direction where you know that it's not useful.

~~~
mxschumacher
Kotlin is very much threatening Java's dominant position in Android
development

~~~
Can_Not
I think most kotlin teams would want you to already know Java, the parts of
kotlin that aren't basically Java under the hood are likely very easy to
learn.

~~~
pratikss
Not necessarily. One can pick up Kotlin as entirely new language. If you are
working with old Java code, then yes.

------
agibsonccc
Java itself is worth learning, but one thing to consider as a bonus: if you
can learn java and some of the associated tooling, it also gets you access to
an onramp for learning scala, clojure, kotlin, other JVM languages.

You might not use the tools immediately but the fact you can debug java stack
traces using one of the more "fun" languges certainly doesn't hurt.

Another perspective: if you ever get in to data engineering it's usually a big
requirement to know something java related.

------
blt
In my opinion, Java is not an enlightening language. In other words, learning
Java will not make you a better programmer in other languages. It is only good
for getting jobs.

If you do decide to learn it, make sure to use recent educational materials
for Java 8+, so you learn how to use advanced features like lambda functions
and unsigned integer types.

~~~
_Tev
> It is only good for getting jobs.

Beginner will either want a job or write some simple apps. "enlightening"
languages are worthless for them.

~~~
xfer
What? You do realize that lots of schools start entry level programming with
"enlightening" languages(scheme, haskell etc)? You can write simple programs
very easily with enlightening languages.

~~~
tonyedgecombe
But you won't see many jobs requiring scheme or haskell.

------
rleigh
It can't hurt to learn Java. There's a huge amount of Java code out there, and
there are lots of Java jobs. It has a future, though the hype wore off it a
long time ago.

That said, I can't say I particularly like Java, or find it fulfilling or
interesting in the same way I like elegant and clever C++, or even Python.
It's had all the sharp edges filed down, making it a pedestrian and mundane
language. But that's of course why a lot of companies use it; it's a known
quantity which you can have a team of people work with and get a working
result in a planned timeframe. On the downside, there are too many people who
only ever developed with Java, and can only think about design within the
constrained limits of what Java allows, i.e. basic OOP. Definitely learn more
than one language so you have a wider appreciation for what's possible.

Personally, I'd recommend Python 3 as a first language to get started with
today. You can rapidly get started doing interesting stuff with a minimum of
fuss and vastly less unnecessary verbosity than Java. It's also less
constraining with regard to design; it doesn't force the use of classes and
OOP like Java, so you can experiment with different ways of doing things.

------
bootlooped
It's #1 on the TIOBE index, for what that's worth.

[https://www.tiobe.com/tiobe-index/](https://www.tiobe.com/tiobe-index/)

I think the most certain thing I can say is that Java has a bright-present,
and a not-dim near-future.

~~~
sytelus
I won't put too much weight on TIOBE index (its mainly created from search
engine stats). If you are looking for rankings from jobs perspective, just
look at the direct job stats for languages. IEEE Specturm probably has better
ranking:

[https://spectrum.ieee.org/static/interactive-the-top-
program...](https://spectrum.ieee.org/static/interactive-the-top-programming-
languages-2017)

~~~
_Tev
Depends on the contry I guess, however for Central Europe that ranking seems
just wrong. Java is likely to be #1 here. JS & PHP are much higher as well.

------
jaimex2
Absolutely, its the second most used language on github:
[http://githut.info/](http://githut.info/)

that list is a nice guide on what you should learn in general.

Once learned compliment it by learning Scala.

~~~
drunkencarolina
Why Scala?

~~~
alextheparrot
Java let’s you do most of the work, Scala let’s me produce elegant enough
solutions that the complexity means I have job security. Thus, if you’re
learning Java for career reasons, Scala seems to be a natural compliment.

------
sytelus
I think every one should learn at least 3 different types of languages (my
recommendation for each below):

\- Interpreted: Current choice is Python, pretty much hands down undisputed.
Personally there is a lot to dislike about Python (who doesn't like 24 byte
integers?) but that's how things are.

\- Compiled (VM based): My choice here is C# instead of Java or Go because (1)
C# is now available cross platform and more "free-er" than Java (2) its much
more upto date in virtually every respect (3) it has great tooling and rich
library to speed up the development (4) its not owned by Oracle and it doesn't
ship with spammy browser toolbar to unsuspecting users (5) unlike Go, folks
working on C# are not stuck in excessive minimalism. Almost exact opposite,
they want C# to have good features from every other language out there with
massive new releases each year. That's great - at least for me - because I've
access to everything from very powerful lambdas to parallel paradigms to async
features, when I need them.

\- Compiled (direct to metal): I'd like to chose Rust in future but I'm going
to recommend C++ instead for now. If you are working on pretty much anything
at the deep end of the computer science including OS kernels, writing your own
compilers, building runtimes of variety of tools like TensorFlow, graphics
engines, physics engine, embedded libraries etc - then you need to learn C++.

Having said that, if your purpose is to just get job go with Python and Java.
These are #1 and #2 languages according to IEEE Spectrum in job postings:

[https://spectrum.ieee.org/static/interactive-the-top-
program...](https://spectrum.ieee.org/static/interactive-the-top-programming-
languages-2017)

~~~
_Tev
I'd say going with more than one language will just confuse beginner. I've
seen many students struggle with the language soup schools cook for them.

~~~
tonyedgecombe
Yes, better to do one thing well than two poorly.

------
ratherbefuddled
As a language, for learning purposes, no not really. It is very general
purpose and doesn't bring any notable concepts to the table that aren't more
clearly expressed in other languages. It also has some poor library design by
modern standards and can be confusing because it hasn't thrown out the old
stuff along the way so the surface area is huge and it's hard for a newcomer
to know what not to use.

It is worth learning the JVM as a runtime which is essential to many
businesses and the maven build infrastructure as the progenitor of most modern
build and dependency management systems.

If you want some suggestions from a purely learning point of view, for OO try
smalltalk, for FP try haskell, for systems programming try rust, for the JVM
try scala.

From a commercial point of view Java might be worth it. It's easy, reasonably
well compensated, and ubiquitous enough that there will be plenty of work in
Java for at least the next 30 years.

------
CyberFonic
It depends on what you want to do with your programming knowledge. Here are my
considerations:

* If you want a steady job in a large organisation then Java will probably keep consistently employed, but probably also uninspired.

* If you want to learn some powerful programming concepts and gain solid CS foundations, then I'd suggest reading SICP and learning Scheme.

* If you just want to learn something that you can be productive in quickly then Python is a good choice.

* If you just want to tinker with web pages, etc then Javascript.

It is very hard to predict which languages will be considered great in the
future. Go, Rust, Kotlin, Clojure, Erlang, Swift, etc all have their ardent
fans and when you understand their reasoning you might be in a better position
to make your own informed decision, but I would not suggest learning any of
those as your first language.

------
smt88
Java is worth learning. It'll take you a few days or weeks to get comfortable.

It may not be worth getting good at it, unless it's purely a way to get a job
at a big company.

Brightest futures seem to be Python (for data science and AI), Rust, Elm,
Kotlin, Go, maybe F#, and probably Swift.

~~~
michaelsbradley
JavaScript probably makes the same list...

~~~
thebeardedone
Care to elaborate? I havent done any frontend stuff in a few months but it
appears to be the only solution there. Even when using typescript, you still
want and need to know js.

Regarding Java, i think its a good starting point if you want to hack your
first web project together. You sort of see how everything works together.
Before that I always recommend looking at C just to know what you are missing
out on. If there is some calculation happening you can always call some C/C++
code to see if you get some speed ups by optimizing for the cache (just an
interesting experiment if youve never done it before.

~~~
thebeardedone
Woops read the wrong parent comment. Ignore me :).

------
kissmd
I've spent half of my career in java so far: the terms, structures and
patterns you learn and understand will accompany you through your life. But
you must deep dive for every single word you encounter.

------
noncoml
Yes! But not only Java. Learn as many languages as you can covering different
paradigms.

Java, C, OCaml, Haskell, Javascript, Erlang, Prolog, Lisp, Rust will all add
valuable skills

------
muzani
Java is nice for OOP. It's great for working in large groups. It's not a
hacker language - too slow and heavy, but it does things well for slow and
steady development.

I'd recommend learning Kotlin instead though. It does nearly everything Java
does, but better. One of the few new languages that feel fun to hack with but
don't feel hacky like JS.

------
BenjiWiebe
Should be an Ask HN. And I'd probably look into Rust.

------
TonnyGaric
Well, in Dutch universities one of the first courses of Computer science is
object oriented programming in Java. I think that says enough. :)

------
adamnemecek
Was on same sitch. Learned kotlin in like three days (it's similar to other
languages I've written) and got java for free.

------
ineedasername
No. Also: Yes.

Really? It depends. Its use is massively widespread, and will be for, at
minimum, the next decade (or two). So, it is a very marketable skill. But it's
not as "hot" or (for my very subjective viewpoint)"fun" to write.

So: It depends. On goals, on preferences, on _you_.

------
farooqsheikh
Yes of course.

------
imauld
In my opinion Java is great if you want to write big enterprise-y applications
but if you just want to get something done or just learn some concepts I would
suggest Python. You can do all the same things you can do with Java as a
beginner and it will mostly stay out of your way. Python also doesn't require
a build system like Java does. You can just write some Python in a plain old
text editor and run it without too much trouble. Java on the other hand will
require a build system and a full IDE.

IMO with all the other languages available Java just doesn't really offer
anything special enough to warrant it's dealing with it's awkward type system
and verbosity. Unless you want to do something with Java specifically like
Android dev it just doesn't offer anything worth the pain. If want higher
performance and the type safety that Python doesn't have I prefer Go. It's
syntax is very similar to Python and it has some interesting concepts.

Whatever you choose don't choose based off hype/promises of jobs. Most
companies will hire engineers who have never used the language(s) in their
stack as long you can demonstrate knowledge of core programming concepts.
Python's `list`, Java's `ArrayList` and Go's `slice` might have some slight
differences in implementations and different warts and what have you but deep
down they are arrays. If you are familiar with the data structures and
algorithms core to programming you can learn to use any language to solve
problems.

At the end of the day a language is just a tool. The concepts that underpin
these tools are what is important. So choose a tool you enjoy using and fits
the scenario. Here are some links that were helpful for me, hopefully they
will be helpful for you:

Python:

\- [https://blog.miguelgrinberg.com/post/the-flask-mega-
tutorial...](https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-
part-i-hello-world) \- Good tutorial written for Flask.

\- [https://docs.python.org/3/](https://docs.python.org/3/) \- Python docs,
lots of good info there

\-
[https://docs.djangoproject.com/en/2.0/intro/tutorial01/](https://docs.djangoproject.com/en/2.0/intro/tutorial01/)
\- Django tutorial. Good intro to developing applications with Django,
probably the most popular/common Python web framework.

Go:

\- [https://tour.golang.org/welcome/1](https://tour.golang.org/welcome/1)

\- [https://gobyexample.com/](https://gobyexample.com/)

General:

\- [https://www.codecademy.com/catalog/subject/web-
development](https://www.codecademy.com/catalog/subject/web-development) \-
Very basic tutorials, has Java and Python as well as others

\- [https://github.com/jwasham/coding-interview-
university](https://github.com/jwasham/coding-interview-university) \- Lots of
general CS info, this is the important stuff

------
Chloro
Go will eventually take over the space Java currently occupies, so I would go
that route. Java's days are numbered.

~~~
sytelus
Java's days have been numbered since past 27 years.

