views:

1729

answers:

11

After spending much thought on the issue and learning a few things about my languages preferences ie. I absolutely dislike php and everything it stands for. I am wondering whether or not it would be wise to delve into the world of java while I am student.

This gives the advantage of the fact I am already proficient in java and most of my course are taught using it (CS). So while I do plan to supplement my education with various other languages that interest me along the way, particularly ruby and c, I am considering making java my primary language and learning some stuff like spring,swing,etc.

Here our my concerns:

  1. As someone with big goals, ie working on OSes, compilers is using java as my main language in the meantime harmful.

  2. The future of java, it's on top now but for how long, is it going to really end up being the next cobol?

  3. Alot of smart developers seems to really dislike java, why?

  4. Everyone else at my school knows java, so I won't have many skills to differentiate myself after graduation.

  5. It seems that java is mostly only used by enterprise, are there many small start-up style companies writing java software?

  6. The only community of smart developers and blogs seems to be all .net guys, where are the java guys?

People who have spent significant time with java what have you taken away from it? If you haven't why not are you intentionally avoiding it for any reason?

NOTE: This question may serve as the impetus of some subjective answers, please vote them down instead of closing my question. I would like for this to serve as a discussion of the pros and cons of java in development, I have used my personal experience as a jumping ground. This is a community wiki.

+2  A: 

Learn enough to show whoever is looking at your resume that you're capable of learning the necessary technologies.

So learn a scripting language, high-level language, mid-level language, and low-level language (for your interest in OSes), and your resume will show that you can learn it all.

Optionally, learn two of each.

Alex Gartrell
fair enough, do you have any specific insights to the state of java in the industry? What would you consider a mid-level vs high-level vs scripting languages? It seems fairly ambiguous.
Mark Lubin
low level: C, C++mid level: Java, .Nethigh level: Delphy, PHP, VB6
Frederic Morin
+11  A: 

We are a small startup writing desktop apps, and we do a lot of work in Java. In terms of community support, there is an absolutely massive open source community for Java libraries, applications, etc...

Not sure where you've been looking, but here are a few to get you started:

For basic to advanced stuff, but primarily focused on API use, the Java.net forums are a fantastic venue: http://forums.java.net/jive/index.jspa

On the open source side, you can take a look at any of the thousands of projects on java.net: http://community.java.net/projects/

Other high profile projects that have some incredibly smart people working on them: Any of the Apache Jakarta projects (http://jakarta.apache.org/)

IBM has a large number of very impressive OS projects as well - Eclipse is the obvious one, but there is also a very cool project called Jazz that is being spearheaded by Erich Gamma (yes, that Erich Gamma).

A quick search on source forge and Codehaus will also show a massive # of Java projects.

As a small business owner, I do a lot of interviewing of candidates. I will tell you that I am much less worried about whether someone has experience with Java vs .NET vs C++ than I am with whether a candidate understands basic programming techniques and strategies, understands how to solve logic problems and can think creatively. The most important thing for me is whether the person has taken an interest in software development outside of coursework (you wouldn't believe the number of people we interview who have never written a single line of code outside of homework assignments). Open source projects are a great way to get this type of experience, but I know a lot of people who tinker with robotics, or even writing little software utilities to do mundane things (like building a custom comics page every Sunday).

Finally, think of Java as a platform with two different aspects: The virtual machine, and the language. There are absolutely areas where the Java language is starting to show it's age, and there are a number of languages arising to meet those challenges (Groovy is one example). These languages all run on the JVM, and thus allow for a polyglot-like approach - you pick the language that is appropriate for the task at hand, and that language will interoperate with byte code from other languages.

I think that the Java language may be showing it's age - but the JVM itself is widely considered to be a very good thing. I believe at last count there were something like 250 languages that compile to run on the JVM (See http://www.is-research.de/info/vmlanguages/ if you care for the list!).

Kevin Day
Thanks for all the info Kevin, a lot of stuff to look at.
Mark Lubin
+3  A: 

There is no harm in knowing Java. The only harm is in neglecting other ways of working. I suggest learning at least one or two dynamic languages that are at a higher level than Java, such as Scheme, Common Lisp, Perl, Python, and Ruby. I also suggest learning C and some assembly for at least one platform. Even if you don't end up using C very much, you will need to debug it some day, and many of the environments that you will use are written in C. Understanding C and assembly will give you a feel for how the software stack fits together and what is going on under the hood.

Glomek
+5  A: 

DISCLAIMER: This has turned into a bit of java-bashing.

Alot of smart developers seems to really dislike java, why?

There are... many things wrong/not-ideal with it. I'm not saying it's not well-suited for certain tasks, I'm saying it clashes with the way I program. A few things:

  • No first-class functions.
  • No higher-order functions.
  • No tail-call optimization.
  • It's not fully object-oriented. You have "primitive" types like int, double, and working around them is (computationally) slow and (mentally) painful.
  • Explicit type system. This is equivalent to saying no type inference, but different than saying static type system. I'm actually moving towards the field where I believe static typing is A Good Thing. But why do I have to annotate the program myself for even the most obvious cases? Languages like Haskell and Nemerle deal with this issue wonderfully. NOTE: This also makes having any kind of complex type at all a pain (I see LinkedList<HashMap<String, LinkedList<Integer>>> way too often for my linking).
Claudiu
so use Grails or Scala running on the JVM...
Kevin Day
Wait did you just say a reference type is faster than a value type? Cause that is just wrong.
bmeck
There are JVM's that optimize Tail-Recursion.
Liran Orevi
@bmeck: This is a bit late, but no. I meant that boxing and unboxing them just to put them in lists and stuff is slow. If you instead had everything be a reference type, it would be easier on the programmer (assuming that you could use +, -, /, etc. on "Integer"s), and if you had a smart JIT, it would end up treating them as primitives anyway.
Claudiu
@Liran: true, but then you have to package your own JVM with your java code, which rather defeats the point. TBH i don't care about that point so much anymore.
Claudiu
+1  A: 

I think, this may be related to something is basically famous on commercialize.

Because, many entreprise uses Java, then some of programmers, especially the problem-solver ones, think that Java is waste of time. I am not a Java programmer, but I see the things like that.

Ok, I can agree that Lisp, Scheme or Haskell programmers are doing more on programming itself -not on commercialization; but I think everyone agrees that somebody also must care about these things. I think that's why we have plenty of programming languages -in terms of different needs.

So, in this case pros and cons depend on you. if you work with C, but get a job with no need to touch hardware that close, then you know the things...

PS. I also believe that JVM is the future.

israkir
+1  A: 

If you have the time and curiosity, definitely study Java. There may be better languages for each situation, but much of the software world has dug itself in deep with Java and like COBOL it's not going to go away. At least it's more pleasant to use than COBOL.

Java gets some disrespect due to being interpreted at the bytecode level, forcing everything to be in a class, and not having niceties such as enums. But these objections have faded away as JIT techniques have proven themselves, everyone is more familiar with OOP, and new language features have been added. All this is debatable, of course, and Google can turn up plenty of rants, praises and flamewars. Just be sure to distinguish the recent from the old.

Java is not used just in enterprisey situations. Software written in Java is used in data analysis for high energy physics, processing Cassini images of Saturn, and planning observations for the Spitzer space telesope. Big science projects that last for years require knowledgable people to maintain the mission critical software, and deal with such things as interfacing old data formats (Cassini's VICAR comes to mind) with current software technology. For that reason, it is good to have acquaintance with several languages besides the "popular" ones. What i say about science software, i'm sure is true in most other fields of Human endeavor.

DarenW
Java does have enums.
iny
Java's enums are much more useful than C++ or C# enums, too. They're first-class objects rather than mere ints, so they can encapsulate related functionality. (Enums were introduced in Java 1.5, so perhaps you had experience before then.)
Michael Myers
+1  A: 

I'm surprised nobody mentioned Joel's own The Perils of Java Schools article.

Peter Bailey
This article arguments that Java is basically "too easy" for students (and possibly rightly so). I would say that is definitely *no* reason to avoid Java for real world.
Joachim Sauer
I think the take-away from that article is "get reasonably proficient in C", not "avoid Java". Java's a nice language, but there are things you won't learn in it. Add C and Common Lisp, say, for a little breadth.
David Thornley
A: 

It depends what you want to do. For every project there is the right tool out there.

Java is comparable to .net (both mid level, compiled, both used in a lot of enterprise solutions). So it's worth it to know one of them - from a sheer business perspective - especially if you want to end up working for a large corporation (chances are they will use either .Net or Java).

HOWEVER, don't bash php and other scripting languages. You say you "absolutely dislike php and everything it stands for". Well, I can see your point. Php (like every single language out there ) has its shortcomings. But if you want a perfect language, I suggest you write one yourself, or start coding in 1 and 0. Php,Perl, Ruby and alike are excellent tools for small, medium sized sites ans web apps, and php is used for huge apps too (look at Flickr and Facebook). So, I would look at a few technologies before limiting yourself to one.

just my 2 cents

EDIT: also please note that php and java are in no way qualify for a fair comparison. php is geared towards the web. Java is multi-purpose. Just though I would mention it.

gnomixa
+2  A: 

A lot of smart developers seems to really dislike java, why?

Its a day job language and its used to write code other people want you to write. That puts it in the same class as PHP and VB. Languages we love to toss the hate at when we clock out at the end of the day.

On the other hand, languages like python, ruby, groovy, scala et are your off-work tools for code you write to have fun. And many of us still have soft spots for smalltalk, scheme and C from when we learned all those cool CompSci concepts in school

sal
+1  A: 
  1. As someone with big goals, ie working on OSes, compilers is using java as my main language in the meantime harmful.

If your aim is to pick up girls, then spending your time learning Java won't help. It depends on what you are trying to achieve.

.2. The future of java, it's on top now but for how long, is it going to really end up being the next cobol?

People have been predicting the death of Java since it started. One day it will looked upon as like cobol, by then you could be doing something completely different but even cobol has more jobs vacancies than ruby in my area, so don't knock it. :P

.3. Alot of smart developers seems to really dislike java, why?

Its more widely used than languages they prefer.

.4. Everyone else at my school knows java, so I won't have many skills to differentiate myself after graduation.

Just knowing a language isn't much these days. I suggest you find something which interests you and do that. That way you can differentiate yourself by showing an interest.

.5. It seems that java is mostly only used by enterprise, are there many small start-up style companies writing java software?

In this financial climate the real questions is; are there many small start-up companies.

.6. The only community of smart developers and blogs seems to be all .net guys, where are the java guys?

I cannot say I have come across any smart .net bloggers recently but I haven't been looking for them either.

Peter Lawrey
+2  A: 

You're putting the cart before the horse.

Don't choose to specialize in a language. Choose to specialize in solving a particular class of problems (modeling & simulation, finance, 3D graphics, games, compilers, etc) and then research the predominant languages and platforms that people use in that domain.

Eventually, as you progress through your career, you'll work in lots of different languages, and you'll care less and less about the languages themselves. A programming language is just a tool, and it's much more fun to get excited about the things you'll build with that tool than about the tool itself.

Over the last ten years, I've written code in Perl, Python, Ruby, Visual Basic, C++, D, Java, C#, Visual Basic, JavaScript, and ActionScript. Some languages have been more useful than others, and some are more or less pleasant to write.

But ultimately, programming languages are only mildly interesting, compared to the things you can use them to build.

So my advice to you is to choose a computational problem that interests you. And then look back at Java (and other languages) to see how well it helps you solve that problem.

And have fun! If you play your cards right, software development can be one of the most interesting and rewarding careers available!

benjismith
1p for being one of the best explanations i've ever read about the philisophy around choosing the best language. choose the problem first, not the other way around!
weng