# Is it worth learning Java? And what's the best way to learn it?

**URL:** <https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063>\
**Category:** Factual Questions\
**Created:** [August 28, 2009, 6:37pm UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063 "2009-08-28T18:37:49Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![friedo](https://avatars.discourse-cdn.com/v4/letter/f/8edcca/32.png) [@friedo](https://boards.straightdope.com/u/friedo)\
**Post date:** [August 30, 2009, 12:48am UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/21 "2009-08-30T00:48:03Z")

</div>

:eek: I thought they stopped making Quattro Pro in the 1990s.

---

<div class="post-metadata">

**Author:** ![ultrafilter](https://avatars.discourse-cdn.com/v4/letter/u/3d9bf3/32.png) [@ultrafilter](https://boards.straightdope.com/u/ultrafilter)\
**Post date:** [August 30, 2009, 12:59am UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/22 "2009-08-30T00:59:56Z")

</div>

> [@Markxxx](#):
>
> I do websites and Java is really dying. Oh people use it, but not much, it’s being replaced largely by Flash and other Adobe applications.

Maybe people aren’t making applets any more, but other than that, Java’s doing just fine.

---

<div class="post-metadata">

**Author:** ![Alex\_Dubinsky](https://avatars.discourse-cdn.com/v4/letter/a/dbc845/32.png) [@Alex\_Dubinsky](https://boards.straightdope.com/u/Alex_Dubinsky)\
**Post date:** [August 30, 2009, 1:17am UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/23 "2009-08-30T01:17:20Z")

</div>

When learning these things (java, c#), you’re not really learning the language, you’re learning the frameworks. And there’s many of those, and each is bigger than the next. So you can learn one part of java, or you can learn one part of c# (eg, [ASP.NET](http://ASP.NET) or WPF), and you still haven’t learned anything else.

You said you do SQL. C# has this really cool thing called LINQ. It’s SQL-like querries embedded in the language itself, which can target databases, XML files, even plain data structures. You might try learning this one part of C# and it’ll be very interesting for you and useful.

---

<div class="post-metadata">

**Author:** ![Superfluous\_Parentheses](https://avatars.discourse-cdn.com/v4/letter/s/8edcca/32.png) [@Superfluous\_Parentheses](https://boards.straightdope.com/u/Superfluous_Parentheses)\
**Post date:** [August 30, 2009, 3:23am UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/24 "2009-08-30T03:23:46Z")

</div>

> [@Markxxx](#):
>
> I do websites and Java is really dying. Oh people use it, but not much, it’s being replaced largely by Flash and other Adobe applications.
> 
> I haven’t even had an inquiry into Java since 2005. I still get inquires into ActiveX

For browser programming, yes. But javascript is much better supported than flash in that respect. As for server-side programming, java is so much more popular than anything adobe has to offer it’s laughable even to bring up adobe.

ETA: except for flash video server or whatever it’s called.

---

<div class="post-metadata">

**Author:** ![scm1001](https://avatars.discourse-cdn.com/v4/letter/s/c4cdca/32.png) [@scm1001](https://boards.straightdope.com/u/scm1001)\
**Post date:** [August 30, 2009, 11:27pm UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/25 "2009-08-30T23:27:44Z")

</div>

lots of free books on java here [http://www.freeprogrammingresources.com/javabook.html](http://www.freeprogrammingresources.com/javabook.html)

I am teaching myself java right now too. After struggling through many books and just getting confused, the one that made a difference was  
“Object-Oriented Programming and Java” Danny Poo, Derek Kiong, Swarnalatha Ashok (springer 2008) [http://www.amazon.com/Object-Oriented-Programming-Java-Danny-Poo/dp/1846289629/ref=dp\_ob\_title\_bk](http://www.amazon.com/Object-Oriented-Programming-Java-Danny-Poo/dp/1846289629/ref=dp_ob_title_bk) as it spent the first three chapters clearing explaining OOP.

---

<div class="post-metadata">

**Author:** ![Alex\_Dubinsky](https://avatars.discourse-cdn.com/v4/letter/a/dbc845/32.png) [@Alex\_Dubinsky](https://boards.straightdope.com/u/Alex_Dubinsky)\
**Post date:** [August 31, 2009, 12:27am UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/26 "2009-08-31T00:27:49Z")

</div>

> [@scm1001](#):
>
> I am teaching myself java right now too. After struggling through many books and just getting confused, the one that made a difference was “Object-Oriented Programming and Java” Danny Poo, Derek Kiong, Swarnalatha Ashok (springer 2008) [Object-Oriented Programming and Java: Poo, Danny, Kiong, Derek, Ashok, Swarnalatha: 9781846289620: Amazon.com: Books](http://www.amazon.com/Object-Oriented-Programming-Java-Danny-Poo/dp/1846289629/ref=dp_ob_title_bk) as it spent the first three chapters clearing explaining OOP.

Ugh, I just read the first chapter on Amazon. I hate when people try to explain OOP by saying, “imagine an apple. imagine doing things to the apple.” It also includes a great note on how amazing Java applets will be for the web. Lol. But it’s an interesting perspective into how, historically, OOP was advocated and explained, and why people were so hyped up about it. Object was a hype word applied to everything. Whole operating systems were ‘designed’ around it. I prefer to consider the issue in more practical terms, and I think most modern programmers, though extremely appreciative of OOP and of the language syntax features which developed later, do too. Funny story: Linus Torvalds was so put off by the Object bandwagon in his youth that he has shunned C++ from the linux kernel. No doubt to the platform’s immense benefit 😃

---

<div class="post-metadata">

**Author:** ![arseNal](https://avatars.discourse-cdn.com/v4/letter/a/ecae2f/32.png) [@arseNal](https://boards.straightdope.com/u/arseNal)\
**Post date:** [August 31, 2009, 1:46am UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/27 "2009-08-31T01:46:06Z")

</div>

> [@Markxxx](#):
>
> I do websites and Java is really dying. Oh people use it, but not much, it’s being replaced largely by Flash and other Adobe applications.
> 
> I haven’t even had an inquiry into Java since 2005. I still get inquires into ActiveX.
> 
> Some sites still use Java, but when the come to redesing them a smart designer would leave Java and use a more up-to-date application.
> 
> Should you learn Java, sure if you want the job.
> 
> It’s like asking which is better ASP, Coldfusion or PHP, they each have their strengths and abilities and some people will only use certain ones on their sites.
> 
> I recently went on a job interview and the H/R woman insisted on Quattro Pro. Now I have advanced Excel skills and wouldn’t have any difficulties with Quattro Pro, but she was convinced that Quattro Pro was some kind of specialty.
> 
> So people who like Java, will demand it. If you want the job and it pays well learn it.

Yeah, as others have touched on, this only applies to java applets. No one uses those anymore, this much is true.

But to ignore J2EE and say “java is dying” for “websites” is very misleading. It’s very much one of the top techologies for server-side applications, which frankly is where all the real work is done these days. At least for business apps. Browser-based gaming industry is also becoming huge tho and flash/activeX will be the main players in this space.

---

<div class="post-metadata">

**Author:** ![Sage\_Rat](https://sea3.discourse-cdn.com/straightdope/user_avatar/boards.straightdope.com/sage_rat/32/399_2.png) [@Sage\_Rat](https://boards.straightdope.com/u/Sage_Rat)\
**Post date:** [August 31, 2009, 1:52am UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/28 "2009-08-31T01:52:28Z")

</div>

> [@batsto](#):
>
> I’ve noticed a number of job postings at my job that want a working knowledge of Java, and I’m curious if this is a big deal to learn–and is it really a useful thing? Is it the sort of thing that’s worth learning?  
> and if so, is it terribly difficult to learn? (Right now, I use mainly SQL in my job, and in the past I’ve worked with Perl. I also know html and basic javascript, so I’m not a total stranger to programming, but I don’t really know anything about this language)

Given those skills, I’d say that you’re _largely_ a total stranger to programming. Learning Java would be a good start.

---

<div class="post-metadata">

**Author:** ![qazwart](https://avatars.discourse-cdn.com/v4/letter/q/5fc32e/32.png) [@qazwart](https://boards.straightdope.com/u/qazwart)\
**Post date:** [August 31, 2009, 3:34am UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/29 "2009-08-31T03:34:34Z")

</div>

> [@Jragon](#):
>
> Personally I’d go with C# personally, C# is like Java: Collector’s Edition. Functionally, if you can program in either you can probably switch on the fly but I find C# much easier to learn (and much easier to program for once you know it). You may make a few mistakes when switching, like using brackets to get an element in a collection or forgetting there’s no string primitive in Java, but they’re so close I’d just go with what’s easier.

C# itself is quite similar to Java. Microsoft originally tried to combine Java with its proprietary technology, but Sun successfully sued. Therefore, Microsoft created C#. In many ways, C# is a better language than Java itself, but C# is only a tiny piece of what Microsoft had in mind. If you know Java and Java alone, you could probably be a good developer. If you know C# and C# alone, you won’t get anywhere.

C# is part of the larger .NET platform and the interface from C# to .NET is 90% of the programming.

Officially, C# is just a programming language, and you could use almost any programming language – even in theory Java – to work in a .NET environment, but that’s just a cover story. There is absolutely no independent C# programming without The truth is that C# programming is immersed in Microsoft technology and interfaces. The whole purpose of C# and .NET is to push Microsoft technology. If you are familiar with VisualStudio development environments in C and C++, learning C# will be simple. However, if you don’t know the Microsoft environment, learning C# won’t get you too far.

Yes, there is still a lot of Perl out there. I love Perl 5, but I see the writing on the wall. I work in the Subversion project, and almost all of the Perl scripts have been replaced with Python scripts. ViewVC was rewritten from Perl to Python. Google does no Perl programming – only Python. Almost all the new stuff I see today is now in Python and not Perl.

I hate Python for many reasons. First of all, it is white space sensitive. The idea is that indenting is suppose to show the start and end of if/then/else and while loops instead of curly braces, but I like breaking up long lines into shorter lines for readability, and Python won’t let me do that very easily. Python is also 100% object oriented whether you like it or not, and sometimes I find that gets in a way of a simple clear script. And, Python error messages are completely befuddling to me. Most of the time, they’re absolutely meaningless and cannot even point to the line with the actual error in it.

Yet, that’s the way the world is going, so I shall go there too.

---

<div class="post-metadata">

**Author:** ![Alex\_Dubinsky](https://avatars.discourse-cdn.com/v4/letter/a/dbc845/32.png) [@Alex\_Dubinsky](https://boards.straightdope.com/u/Alex_Dubinsky)\
**Post date:** [August 31, 2009, 4:03am UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/30 "2009-08-31T04:03:21Z")

</div>

> [@qazwart](#):
>
> use almost any programming language – even in theory Java – to work in a .NET environment

It’s not just theory. You can install Visual J# if you really want Java-on-.NET. But it’s dumb. C# started out very similar to Java, but it’s advanced a lot with each version. Today, C# 4.0 has language fatures that Java can only dream of (eg dynamic typing! built-in SQL! lambdas! extension methods!).

> [@](#):
>
> The whole purpose of C# and .NET is to push Microsoft technology.

Yeah, I guess. But soon Java will be used to push Oracle technology. (Oracle is buying Sun.) How fun will that be?  
Btw, the flipside of “C# is easy, the giant set of frameworks is hard” is that once you learn the frameworks, you can switch to other languages. Think Python syntax is the best (I sure do) and that dynamic typing should be the norm? You can switch to IronPython (or Boo) within a week and carry over all your framework knowledge.

---

<div class="post-metadata">

**Author:** ![scm1001](https://avatars.discourse-cdn.com/v4/letter/s/c4cdca/32.png) [@scm1001](https://boards.straightdope.com/u/scm1001)\
**Post date:** [August 31, 2009, 9:23pm UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/31 "2009-08-31T21:23:37Z")

</div>

> [@Alex\_Dubinsky](#):
>
> Ugh, I just read the first chapter on Amazon. I hate when people try to explain OOP by saying, “imagine an apple. imagine doing things to the apple.”  
> 😃

To a proper programmer the book is far too easy and obvious. If like me you are struggling to get a grip on OOP then it is a good starter, much better than most of the books which throw you cold into coding in the first chapter

---

<div class="post-metadata">

**Author:** ![kombatminipig](https://avatars.discourse-cdn.com/v4/letter/k/b5ac83/32.png) [@kombatminipig](https://boards.straightdope.com/u/kombatminipig)\
**Post date:** [September 1, 2009, 8:03am UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/32 "2009-09-01T08:03:18Z")

</div>

I want to add (as a programmer myself), that taking a job as a JAVA programmer puts as much emphasis on the word \*programmer \*as the language. Most programmers will tell you that what language you work in doesn’t really matter very much, it’s all Turing-complete and you’re basically solving he same problems either way.

What will be expected of you is a knowledge of datastructures, algorithms, program design, paradigms (with emphasis on Object Orientation), probably also Object Relation Mapping, MVC and Inversion of Control if you’re going into EE, and programming patterns. And you’re even going to need to know some computer science at some point…complexity and operating system architecture.

See it as taking an accounting job in France. On one hand you need the language, on the other hand you need a good grasp of economy, law and accounting.

But to answer your question: Yes, JAVA is a good language. It’s used widely, the VMs are fast and it has some fantastic libraries such as Spring and Hibernate, and there are plently of jobs for programmers. On the other hand, what language you use doesn’t really matter very much. I’m a JAVA and C++ programmer, but I could switch over to C# in a matter of weeks (and I could start working in it this afternoon). So expect the actual language to only be the first step on the way.

---

<div class="post-metadata">

**Author:** ![Alex\_Dubinsky](https://avatars.discourse-cdn.com/v4/letter/a/dbc845/32.png) [@Alex\_Dubinsky](https://boards.straightdope.com/u/Alex_Dubinsky)\
**Post date:** [September 1, 2009, 3:31pm UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/33 "2009-09-01T15:31:53Z")

</div>

But the algorithms, program design, paradigms, and patterns you will use depend on the facilities and libraries of the language you are using. Consider the fact that C++ possesses OOP influences program design vs C which does not. Similarly for garbage collection in Java vs C++, but also for many much smaller and more focused features. No, you definitely need to be familiar with the technologies you’re using. You need to know when you can pull up a library function to do the work of 100 lines, or when you can use databinding instead of brute force, a closure instead of some complex IPC, etc.

Turing completeness has little to do with it. (Whenever anyone mentions turing completeness, what they’re saying is almost always bunk.)

---

<div class="post-metadata">

**Author:** ![Shot\_From\_Guns](https://avatars.discourse-cdn.com/v4/letter/s/ccd318/32.png) [@Shot\_From\_Guns](https://boards.straightdope.com/u/Shot_From_Guns)\
**Post date:** [September 1, 2009, 8:43pm UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/34 "2009-09-01T20:43:31Z")

</div>

To pick a nit, HTML and Javascript aren’t programming languages–they’re markup languages.

I took a Computer Science minor for fun in college, and the first programming class any CompSci student took used Java. In addition to doing more work with Java, I went on to also become decently familiar with C (through my Operating Systems class), as well as doing a bit of programming in FORTRAN 77, Perl, Lisp, Smalltalk, and Prolog (in my Programming Languages course). For me, Java served as a very good introduction to programming and worked well as a springboard for the other languages.

I wish I could remember the title of the text used for my first course–it was by far the best CompSci text I ever had. If I think of it, I’ll check my shelf when I get home.

---

<div class="post-metadata">

**Author:** ![friedo](https://avatars.discourse-cdn.com/v4/letter/f/8edcca/32.png) [@friedo](https://boards.straightdope.com/u/friedo)\
**Post date:** [September 1, 2009, 8:47pm UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/35 "2009-09-01T20:47:59Z")

</div>

> [@Shot\_From\_Guns](#):
>
> To pick a nit, HTML and Javascript aren’t programming languages–they’re markup languages.

Javascript is most definitely a programming language. It is Turing-complete, object-oriented, garbage-collected, and can implement any algorithm.

---

<div class="post-metadata">

**Author:** ![Sofis](https://avatars.discourse-cdn.com/v4/letter/s/e5b9ba/32.png) [@Sofis](https://boards.straightdope.com/u/Sofis)\
**Post date:** [September 1, 2009, 10:06pm UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/36 "2009-09-01T22:06:21Z")

</div>

If you want to pick out languages in the OP that aren’t programming langauges, SQL would be the other offender.

---

<div class="post-metadata">

**Author:** ![kombatminipig](https://avatars.discourse-cdn.com/v4/letter/k/b5ac83/32.png) [@kombatminipig](https://boards.straightdope.com/u/kombatminipig)\
**Post date:** [September 1, 2009, 10:23pm UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/37 "2009-09-01T22:23:51Z")

</div>

> [@Alex\_Dubinsky](#):
>
> But the algorithms, program design, paradigms, and patterns you will use depend on the facilities and libraries of the language you are using. Consider the fact that C++ possesses OOP influences program design vs C which does not. Similarly for garbage collection in Java vs C++, but also for many much smaller and more focused features. No, you definitely need to be familiar with the technologies you’re using. You need to know when you can pull up a library function to do the work of 100 lines, or when you can use databinding instead of brute force, a closure instead of some complex IPC, etc.
> 
> Turing completeness has little to do with it. (Whenever anyone mentions turing completeness, what they’re saying is almost always bunk.)

At what point did I tell him to not familiarize himself with the tool being used? I pointed out the fact the language is merely the first step on the way. Of course he needs to under stand OO vs imperative vs logic vs functional.

Algorithms and datastructures are on the other hand universal concepts. A recursive function works the same in Java as in Haskell, it’s just implemented and compiled differently. The order a sorting algorithm is the same, no matter in what language it’s written in. Give me a programmer who knows the theory and I’ll give him time to learn the tool. Give me a programmer who knows the tool but not the theory, and I say hit the books some more.

---

<div class="post-metadata">

**Author:** ![friedo](https://avatars.discourse-cdn.com/v4/letter/f/8edcca/32.png) [@friedo](https://boards.straightdope.com/u/friedo)\
**Post date:** [September 1, 2009, 10:33pm UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/38 "2009-09-01T22:33:36Z")

</div>

> [@Sofis](#):
>
> If you want to pick out languages in the OP that aren’t programming langauges, SQL would be the other offender.

No, SQL also is a programming language. It’s just declarative instead of the usual imperative languages that most people are used to.

---

<div class="post-metadata">

**Author:** ![friedo](https://avatars.discourse-cdn.com/v4/letter/f/8edcca/32.png) [@friedo](https://boards.straightdope.com/u/friedo)\
**Post date:** [September 1, 2009, 10:36pm UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/39 "2009-09-01T22:36:31Z")

</div>

> [@kombatminipig](#):
>
> Algorithms and datastructures are on the other hand universal concepts. A recursive function works the same in Java as in Haskell…

Not all of them. Java doesn’t have tail-call optimization. 😛

---

<div class="post-metadata">

**Author:** ![Sofis](https://avatars.discourse-cdn.com/v4/letter/s/e5b9ba/32.png) [@Sofis](https://boards.straightdope.com/u/Sofis)\
**Post date:** [September 1, 2009, 10:49pm UTC](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063/40 "2009-09-01T22:49:45Z")

</div>

> [@friedo](#):
>
> No, SQL also is a programming language. It’s just declarative instead of the usual imperative languages that most people are used to.

Well, I could certainly be wrong about that. I am extremely far from an SQL expert, so it certainly wouldn’t surprise me if the language has capabilities I am unaware of. That said, programming language or no, it certainly seems pretty imperative to me.  
UPDATE employee SET salary = salary\*10 WHERE name = ‘Sofis’;  
seems like a “do this to that” kind of statement to me.

[Previous page](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063.md?page=1)

[Next page](https://boards.straightdope.com/t/is-it-worth-learning-java-and-whats-the-best-way-to-learn-it/508063.md?page=3)
