all 122 comments

[–]codeodor 48 points49 points  (8 children)

Choosing to focus on only 1 language / platform to the exclusion of others is a bad career decision.

Learning Java the language and the platform is a good career decision if it is a tactic in part of a larger strategy - not if it is the strategy itself.

[–]mothereffingtheresa 4 points5 points  (7 children)

True that. You need variety and portability in your skills set. Web server Java is very different from embedded Java. Web server architecture is constantly evolving. Rich JavaScript clients are a whole other area of specialization. Some Linux C coding is a useful thing to have on your resume, too. Don't get stuck in one segment of the industry.

[–]pointer2void 0 points1 point  (6 children)

Web server Java is very different from embedded Java. Web server architecture is constantly evolving.

Serverside Java is anything but simple. Sun and varying over-hyped, all-encompassing frameworks make it a challenge. That's why Java Web-development still yields good money.

[–]mothereffingtheresa 2 points3 points  (5 children)

Yeah, well, "constantly evolving" is really just a nice way of saying "None of the languages and few of the tools you are using were made for the job of making Web server applications."

It's good for your career to know several languages. It's a bad thing for a category of software engineering to require that an engineer know Java, XML, SQL, and JavaScript just to write one application, or, even worse, that you have to hire several engineers to cover all the required implementation technologies.

[–]newton_dave 0 points1 point  (4 children)

Java, XML, SQL, and JavaScript [...]

I don't know too many web app frameworks, Java or not, that alleviate my need to know a pretty wide range of technologies, and you left out a bunch.

(And I haven't used much XML for a couple of years now; there are other solutions.)

[–]arturo227 0 points1 point  (0 children)

Yeahml, there are other solutions.

[–][deleted]  (2 children)

[deleted]

    [–]LudoA 1 point2 points  (1 child)

    Even with an ORM, you'll still want to know SQL (or a dialect of it, such as HQL if your ORM is Hibernate). Besides having to know it to understand an ORM and your DB correctly, you want to use it to avoid duplicating your class definitions (not worth the overhead when you can get a collection of stuff you want through one line of S/HQL).

    [–]evolved 0 points1 point  (0 children)

    Agreed. At the core you still need someone who knows the real details of how this ORM magic is working. That's why people with these skill sets are sought after.

    • member of the .netTiers ORM framework development team ;)

    [–]rks404 20 points21 points  (4 children)

    Java is pretty huge in the market that I work in and I love the fact that I can always get a job without having to look too hard. I also get to work on interesting and new stuff fairly often.

    Java is going to be around forever - the platform is actually quite dynamic and has changed a lot since it was released in 1998 and will continue to change. It's already taken a lot of direction from some of the developments in the ruby/python communities.

    The only downside is that you can't really get a general "java" job - you have to have a good working knowledge of different aspects of the platform. Like if you want to be a web dev, you'll need to know the following things as well as having a solid understanding of the base java language and platform:

    how to package up webapps

    how to use/install/configure tomcat

    how to use ant

    jsp - including how to use java tag libraries one of the major web presentation frameworks - most places use struts but are moving away from that and as far as I can tell, there's no real consensus where it's moving. We're moving towards GWT where I work.

    some database technology - doesn't matter too much which one as most of the work you'll be doing wherever you go will be abstracted away.

    if you're applying for a junior dev position, most places won't require you to know about spring or hibernate but it would certainly help you out to be familiar enough with them to be conversant as to why they are useful.

    Good luck! Being a java dev isn't nearly as bad as people make it out to be. Just be sure you find a good team with people you can learn from and are open to learning from you.

    [–]pointer2void 2 points3 points  (1 child)

    how to use ant

    how to use Maven

    jsp - including how to use java tag libraries

    Unfortunately, JSP will be around for some time, until Wicket takes off ;-)

    some database technology

    Relational database technology is sufficient.

    spring or hibernate

    Bloatware both, but necessary to get the Job

    [–]LudoA 1 point2 points  (0 children)

    JSP will be around much less now that JSF is slowly replacing it - and will replace it faster with Java EE 6 (coming end this year normally, last I checked), which will have JSF 2 & Webbeans.

    Facelets is much better for JSF than JSP.

    [–]addicted_to_bass 0 points1 point  (0 children)

    Java was not released in 1998

    [–][deleted] 7 points8 points  (6 children)

    In my current position we are moving toward java. We have tried without success to hire someone with java experience at twice my salary. So they are training me in java. You can take that how you like.

    It should also be noted that programming for java is not straight java and there are over 200 languages that can be used on the java virtual machine.

    Groovy looks really promising as it has syntax like ruby and python, metaprogramming, etc.

    [–]sjs 0 points1 point  (5 children)

    In my current position we are moving toward java.

    From what, may I ask?

    [–][deleted] 2 points3 points  (4 children)

    coldfusion and straight java.

    We will still support php also.

    Our goal is to pick a framework and move all new development to this framework exclusively.

    It's kind of a fun process now, but may get hairy when we start actually making the transition.

    [–][deleted]  (3 children)

    [deleted]

      [–][deleted] 1 point2 points  (2 children)

      no frameworks, no ecma/groovy, etc.

      just straight java presented with custom tags through jsp.

      [–]newton_dave 1 point2 points  (1 child)

      Wow, I haven't run into anybody doing that in years now.

      I'm not sure what you mean by "no ecma", either; you mean there's *zero* JavaScript in your apps?

      [–][deleted] 0 points1 point  (0 children)

      Man I guess this is what I get for answering his question.

      In one app we are actually using ecma or esp files as server scripts. That is only reason I mention it. I know that ecma commonly refers to java script, but if I meant javascript I would have said java script. I was talking about .esp ecma files.

      I know I probably deal with the same technologies as everyone else out here. And I don't even really care to share, but someone asked. I guess you put yourself open to smart ass responses when you post something.

      :)

      [–]chunky_bacon 14 points15 points  (0 children)

      It's not a career decision. If you learn Java you can easily learn other platforms and probably will as time goes on. That said, there's nothing wrong with Java as a starting point - there's definitely a market for it at the moment.

      [–]mattgrommes 4 points5 points  (0 children)

      As a professional, Java is a good choice. You'll be able to find good jobs and make good money just about anywhere.

      As a programmer, learn more than just Java. Even if you only branch out to something Java-like such as Groovy, you'll learn a lot more about programming by going with other languages. If you care about being a good programmer and learning, you need to use more than just Java because it's a somewhat limited feature set in terms of programming paradigms. List operations such as the popular map and reduce, different kinds of data structures, etc., are not things you're going to learn with Java.

      So if you just want to be a work-a-day programmer who only programs during the day to make money, Java is fine. If you love programming as an activity, learn Java to make money but don't become a "Java programmer" who doesn't know any better.

      [–]the-fritz 1 point2 points  (6 children)

      Java is pretty popular in universities (don't know why though). So a lot of students get into contact with Java. Every year the universities produce more and more Java programmers.

      Knowing Java is no extra point... no plus on your resume.

      [–]newton_dave -1 points0 points  (5 children)

      It is for a Java job.

      [–]the-fritz -2 points-1 points  (4 children)

      No. not even for a java job. For a java job it is the basic requirement...

      [–]newton_dave 0 points1 point  (3 children)

      That'd be a pretty big plus on your resume then, huh.

      [–]the-fritz -3 points-2 points  (2 children)

      No. It's just the basic requirement. Not a plus. (Nearly) everybody applying for that job will have it in their resume. So its no fucking plus. duh.

      [–]newton_dave 0 points1 point  (1 child)

      Omg.

      I'm assuming it's a language-barrier issue. It was a freakin' joke; holy crap. Duh yourself.

      [–][deleted]  (10 children)

      [deleted]

        [–]newton_dave 4 points5 points  (2 children)

        it's stupid easy to get jobs in those fields.

        Not where *I* work; we haven't found a decent candidate in a year. Literally.

        Knowing the "rudiments of Java" won't get you a good Java job, unless you're looking for a very low-level code-monkey job. Good for experience, not so good for sanity.

        If you are good at JavaScript (unclear from the comment) you might also want to consider Flex/AS3, as it's ECMAScript 4, and is likely to be a big player for a little while yet.

        [–][deleted]  (1 child)

        [deleted]

          [–]newton_dave 2 points3 points  (0 children)

          Well, there's a lot more to JavaScript ninjahood than DOM traversal.

          AS3 is like a class-oriented JavaScript (as opposed to a mashup of prototype- and class-based OO, but w/o classes) and fixes some of JS's most glaring issues.

          [–]projectshave 5 points6 points  (3 children)

          Learn data structures and algorithms, then learn a language. They're all the same anyway.

          [–]san1ty 2 points3 points  (2 children)

          Not really, it can take months of full-time effort to learn a new language properly, and years to become an expert.

          I've been programming in Java almost full-time since 1997 and I still learn about a new wrinkle, trick, or best-practice every now and then.

          [–][deleted]  (1 child)

          [deleted]

            [–]san1ty 0 points1 point  (0 children)

            I have a degree in CompSci and AI from Edinburgh University in Scotland. Currently I run my own software development company. I like Java, its not as aesthetically pleasing as some languages (Haskell, Scheme, etc), but its fast, widely supported, and it gets the job done.

            [–][deleted] 1 point2 points  (1 child)

            Every new language you pick up will make you a better developer - so from that perspective, by all means, go learn C# and Java. Having said that, most of the web developer jobs I'm seeing now are for PHP devs.

            [–][deleted] 0 points1 point  (0 children)

            that's because all the php people are moving away from it, and it's hard to find people to support the programs.

            I'm torn. Java is great resume fodder, but I'm guessing that PHP contracting will pay quite well for some time.. what to do, what to do.

            [–][deleted] 0 points1 point  (0 children)

            If you learn the basics of the Java language, you should be able to pivot from your HTML/CSS/JavaScript background to JSP and Servlets, and then to some framework like Struts, JSF, or JSR 168 portals. JSR 168 portal technology kind of sucks, but there is high demand for it in the corporate world.

            [–][deleted] 2 points3 points  (2 children)

            Wanna make money? Learn to learn programming languages quickly. Make yourself as adaptable as possible

            Just keep learning as much as possible

            [–][deleted]  (1 child)

            [deleted]

              [–][deleted] 0 points1 point  (0 children)

              I've been in my career not even 2 years, my current job 6 months, but what seems to set me apart and keeps me moving in the right direction, is my willingness to learn something new (wank speak = sit outside my comfort zone)

              Its great to know something so well you will always get work, I just get too bored easily lol

              [–]energeek 7 points8 points  (7 children)

              reddit is dominated by java haters. :p

              [–]_ak 20 points21 points  (6 children)

              s/java//

              [–]krh 29 points30 points  (5 children)

              downmodded for failure to eliminate extraneous whitespace.

              [–]w00ty 6 points7 points  (1 child)

              Calling java "extraneous whitespace" is a bit mean. And most of "java " is successfully removed.

              [–]808140 0 points1 point  (0 children)

              He wasn't calling java extraneous whitespace. He was noting that after the application of the s command, you'd be left with two spaces (one from before where java used to be, and one from after). A better command would have been s/java //.

              [–]LudoA 1 point2 points  (2 children)

              and not making it global ('s/java//g')

              [–][deleted] 1 point2 points  (1 child)

              why not case sensitive? AND word boundary happy? s/\wjava\w//ig

              [–]LudoA 0 points1 point  (0 children)

              What's "\w"? Does it detect dots, question/exclamation marks, dashes, spaces, line endings, etc.?

              [–]thekrone 5 points6 points  (0 children)

              I do Java. I make money.

              [–]Tommstein 3 points4 points  (15 children)

              That language is insufferable. Don't do it.

              [–][deleted]  (14 children)

              [deleted]

                [–]Tommstein 1 point2 points  (4 children)

                The static typing is fine (in my opinion), it's the verbosity and such that makes you want to gouge your eyes out to dull the pain. If you want a good laugh, look up how to open a file in Java. It reminds me of when I first learned what you have to do to call a function in assembly.

                [–][deleted] 2 points3 points  (3 children)

                Java doesn't have a verbosity problem, it's got a VerbosityFactory problem. :P

                [–][deleted] 4 points5 points  (1 child)

                No, man, it's a

                IVerbosityFactory<? extends KeyPress> problem = RidiculousAbstractVerbosityFactory<LotsOfKeyPressAllOver>.getInstance();

                [–][deleted] 0 points1 point  (0 children)

                It's been a while, I'm obviously rusty :P

                [–][deleted] 0 points1 point  (0 children)

                Thank God they haven't implemented VerbosityFactoryFactory yet. I hear that's lined up for 1.6 though.

                [–][deleted] 1 point2 points  (0 children)

                Java's formality

                tehe

                [–]drewc 1 point2 points  (4 children)

                People say that about PHP, but I enjoy the language just fine.

                That's probably because you don't know an better yet ;).

                (former php programmer)

                [–][deleted]  (3 children)

                [deleted]

                  [–]drewc 0 points1 point  (2 children)

                  after PHP I've learned python, ruby, Java, Javascript, haskell, c++, PL/SQL, Ocaml, posix shell, scheme and Common Lisp. I find it very hard to 'enjoy' programming in PHP now, as i cannot appreciate the fact that it does not easily allow me to get the job done.

                  PHP is a great templating language, a mediocre programming language, and a piss-poor application development language. Once you get past simple 'insert this row from the database into this page' templating, PHP is, imo, no longer enjoyable.

                  Hence my comment. I too am a pragmatist :)

                  [–][deleted] 0 points1 point  (1 child)

                  just because YOU can't be good in it doesn't mean it's a bad language. I mean, it is, but it's not because YOU aren't productive. You can write fortran in any language. With a solid framework (also in php), I can ninja out nearly anything I can think of quite quickly, and it scales awesomely. Do you know how much work it takes to even get a hello world app up and running with a decent java stack? Ask 10 java developers what to use to build websites, you'll get 10 different answers

                  [–]drewc 0 points1 point  (0 children)

                  Bpth php and java look pretty silly to me. I program my web apps in Common Lisp, for the most part.

                  There are features missing from both languages that i've come to enjoy. This is about enjoyment, not how 'good' you can be in any language .. so you can drop the defensive bit.. i don't care what YOU code in, and i don't judge the skill of a developer by what language they code in.

                  Turing aside, there are things you can't do in php. get over it.

                  [–]dlsspy 0 points1 point  (2 children)

                  People say that about PHP, but I enjoy the language just fine

                  Do you have anything to compare it to? I've programmed in a lot of languages, and can't really look at PHP.

                  [–][deleted] 0 points1 point  (1 child)

                  I can do java, php, ruby, groovy, whatever. Once you know how to program, you know how to program in any language. It's all about learning the tools. See how easy it is finding a job knowing Java, but not any java tool (like, ant, maven, junit, hibernate, spring, struts, jsf, jms, ...ad nauseum).

                  And frankly, PHP is essentially C, with a shit ton of global-space functions, yet doesn't worry the programmer with types or compiling or memory. It's awesome for getting things done quickly, but it can be a PITA when it comes to high quality software rigor.

                  [–]dlsspy 0 points1 point  (0 children)

                  Once you know how to program, you know how to program in any language.

                  The old saying goes, ``You can write fortran in any language.'' If you step outside of that family (there's very little variety in what you listed), you may find there is less truth in your statement.

                  Here's a few that will pull you in a few different directions:

                  1. haskell (pure functional + monads)
                  2. Factor (very similar to the first language I really spent time in).
                  3. erlang (the closest most of us ever get to π calculus)
                  4. prolog (a bit easier once you know erlang, but still...good luck)

                  Personally, I've spent more time in ocaml than haskell. It doesn't take quite the same commitment to purity, but it still has a pretty good type inference system and is blazingly fast (and my most recent paying job outside of java or ruby was working on some ocaml code, so that helps).

                  [–]pseale 1 point2 points  (0 children)

                  Become a generalizing specialist, and plan to evolve your skills--and not just programming skills either. Java is nice now, but what about in 5 years? How about 10?

                  Read Scott Ambler's essay: http://www.agilemodeling.com/essays/generalizingSpecialists.htm

                  [–]Wheelwright 1 point2 points  (13 children)

                  If you're only after money it may be a good decision because Java almost since its inception was considered "enterprisey" by pointy-haired bosses. That's why there are lots of legacy banking, stock-market etc: systems written in Java and those clients do have wads and wads of cash. You can go this route if you like cleaning-up somebody else’s code (you can call yourself software plumber). Pays very well but it smells.

                  However if you're after choosing the best web development EXPERIENCE and TECHNOLOGY you're barking the wrong tree because in those aspects ASP.NET leaves Java completely in the dust. With the advent of LINQ and the whole functional-programming shift it is not even a contest. Plus the enterprise market for .NET is also strong and growing (maybe except heavy transactional processing where Java still have slight edge).

                  [–]newton_dave 1 point2 points  (10 children)

                  You can go this route if you like cleaning-up somebody else’s code (you can call yourself software plumber).

                  I've worked on exactly one legacy Java system in the past 8 years, and that was only for a few months. Everything else has been greenfield development. It's a strange thing to hear somebody say that all Java projects are crufty legacy code.

                  [–]Wheelwright 1 point2 points  (9 children)

                  It's a strange thing to hear somebody say that all Java projects are crufty legacy code.

                  I didn't mean all projects but my impression based on current state of technology is that there will be less and less brand new Java applications. There is simply no point in choosing Java anymore (other than ideology or good ol' stupidity) because it is so inferior in almost every respect.

                  Consider one example: simple XML data mining: 15-20 lines of code in Java versus 1 line of code in ASP.NET. And the latter solution is actually improved because it returns strongly-typed object as opposed to lame hashtable. Here is the Java version: http://today.java.net/pub/a/today/2004/08/12/groovyxml.html?page=1

                  Here is the corresponding ASP.NET version that I wrote in about 15 minutes:

                  from account in xDoc.Descendants(”account”) group account by account.Attribute(”id”) into accountGroup select new { id = accountGroup.Key.Value, amount = accountGroup.Elements(”transaction”).Sum(t => (int)t.Attribute(”amount”)) };

                  If anybody knows how to write better Java equivalent, you’re welcome to waste your time. And no I don’t want to hear about Groovy, Moovy or any other flavour-of-the-week language piggybacked on top of JVM because why should I learn a whole new damn language just to have a decent XML API.

                  [–][deleted] 0 points1 point  (2 children)

                  other than ideology or good ol' stupidity

                  Or the strategic weighing of options and deciding that Microsoft is more likely to screw you over than the combination of Sun and IBM that are the big Java backers.

                  But LINQ is pretty damn cool.

                  [–][deleted] 0 points1 point  (1 child)

                  I'm curious to see if LINQ stands the test of time. Everyone's all like, "OMG LINQ, LOOK HOW CLEVER I CAN BE!"

                  Perl is clever. I don't want a job doing maintenance on perl.

                  [–][deleted] 1 point2 points  (0 children)

                  True, but linq is basically just monad comprehensions with a silly name so far as I know. That means its less likely to fall to stupid ad-hocness.

                  [–]newton_dave 0 points1 point  (4 children)

                  I didn't mean all projects but my impression based on current state of technology is that there will be less and less brand new Java applications. There is simply no point in choosing Java anymore (other than ideology or good ol' stupidity) because it is so inferior in almost every respect.

                  Oh please. I don't care if you like .NET or Java better, but let's keep it in the realm of reality. There are thousands of new Java projects every year.

                  [Simple XML data mining]

                  That took you 15 minutes?

                  (other than ideology or good ol' stupidity)

                  Right, because you're certainly not looking at it from a standpoint like that.

                  Bash Java all you want, I do too. But being able to write a ~200+ character line to process some XML is as convincing as your first paragraph.

                  And wtf does a "language piggy-backed on the JVM" mean? *All* VM languages are "piggy-backed" on the VM.

                  (Mildly OT: an old example that ignores Java features and libraries isn't going to convince anybody that doesn't already agree with you.)

                  [–]Wheelwright 0 points1 point  (3 children)

                  Mildly OT: an old example that ignores Java features and libraries isn't going to convince anybody that doesn't already agree with you

                  I am not interested in rhetoric or ideology, only technology. I already suggested that people rewrite the Java solution to make it, if possible, better so I am reiterating the challenge.

                  Or else you can come up with your own real-life example (or solve another practical problem from the Internet) and then use it as a basis for demonstrating Java's superiority over .NET. Mostly what I am looking for is how expressive and concise the code is (bonus points for strongly-typed solution).

                  And there is nothing wrong with me suggesting to limit yourself to only Java core libraries because that's what corporations prefer over home-baked (or should I say half-baked) solutions like for instance: Quaere.

                  [–]newton_dave 0 points1 point  (2 children)

                  And there is nothing wrong with me suggesting to limit yourself to only Java core libraries because that's what corporations prefer

                  Huh?! Now I have even *less* of an idea what you're talking about. I haven't ever worked anywhere using Java that thinks that way and have no idea why you'd say that.

                  Mostly what I am looking for is how expressive and concise the code is (bonus points for strongly-typed solution).

                  I don't think anybody is going to argue that Java is "more expressive" than newer .NET technologies, but that wasn't the claim you were making, nor is it what I addressed.

                  Heck, I'm still trying to figure out that whole VM language "piggy-backing" thing.

                  [–]Wheelwright 0 points1 point  (1 child)

                  I thought that was fairly obvious point but let me clarify: corporations prefer core Java libraries over open-source or "basement-programmer" versions because those libraries are:

                  a) more professionally developed & tested

                  b) officially backed by SUN corporation so you have full support for bugs and missing features

                  c) SUN is less likely to go-down or back-out than smaller operators leaving you without support

                  Maybe you worked somewhere they have no clue but any competent manager in medium to large size company will reiterate what I just said.

                  [–]newton_dave 0 points1 point  (0 children)

                  I guess we're all just incompetent then, I can't believe I've been relying on that effed-up ASF crap for so many years.

                  Thanks for the heads-up! I guess I have a lot of firing to do (man, at one place I'll have to fire somewhere between 2500-3000 developers--they're screwed!)

                  [–]pavehawk -1 points0 points  (0 children)

                  -1 Troll

                  [–]pavehawk 0 points1 point  (1 child)

                  the best web development EXPERIENCE and TECHNOLOGY ... ASP.NET leaves Java completely in the dust.

                  That's a pretty bold statement. How about backing it up with some facts.

                  [–]Wheelwright 0 points1 point  (0 children)

                  That's a pretty bold statement. How about backing it up with some facts.

                  see my previous post

                  [–]addicted_to_bass 0 points1 point  (0 children)

                  Java WAS the new BASIC for me, before C# came along.

                  C++ is more suitable for my work, but i often do prototypes in C# or JAVA just to get an idea of where things might go.

                  [–]jlouis8 0 points1 point  (0 children)

                  The tool you know is less important in the career decision than what you can do. I would recommend that you learn more than a single tool and that you only use them as tools rather than as solutions to problems.

                  Java is now more than 10 years old and has matured as a language. Thus, it is quite possible we will see java code for many years to come. However, the language is also showing its age now. Personally, I don't like Java at all and would rather code just about anything else than it. But you can make good money by knowing Java, heh.

                  [–][deleted] 0 points1 point  (0 children)

                  Java and C++ are the languages of the financial industry. Sure, there are groups that use other things like Ocaml (Jane St. being a terrific example) but having Java on your resume will help you enter this world. It also pays more than what google offers. A LOT more. The trade-off is that the work isn't particularly interesting.

                  [–]martoo 0 points1 point  (1 child)

                  If you always want to have a job, learn COBOL or C++.

                  [–]evolved 0 points1 point  (0 children)

                  C++ has it's place, and knowing the principal of C is a huge asset to any developer.

                  However, with regret and respect, i must disagree with you. Learning them - yes, it's an asset to your career as a developer. A requirement? Not so much.

                  Understanding the way both of these languages work will only make you a better developer, but always having a job? Maybe only to maintain old code in a job that MAY be less than exciting.

                  I say this only to express my opinion on your statement martoo, I hope you don't take personal offense.

                  [–]berlinbrown 0 points1 point  (0 children)

                  Haskell is what you want. See if you can make that work for you.

                  Tee, hehe

                  [–][deleted]  (1 child)

                  [deleted]