Slashdot Mirror


Java, Where To Start?

I'm a web developer who has design and programming experience. So, VB, ASP, PHP, Coldfusion, Perl, even C and C++ I have in my belt. I also use Dreamweaver and/or do a lot of my HTML/XHTML/JavaScript coding by hand. So, the DOM, DHTML, etc, all good to me and even OOP thinking and design I have when I code. And I even have MySQL and other databases, again, not an issue here. So, my weak point is — Java — I see so many jobs out there with J2EE, Hibernate, Eclipse, Netbeans. Beside the obvious, which is to learn Java the core language, I don't know where else to go from there. There is so much! What should I read? in what order? What software do I require? UML? Swing? I mean, what is the curriculum required for someone to say they are a solid Java developer? Even assuming I have to go through Java itself, what are the good books out there?

558 comments

  1. Don't by johnjaydk · · Score: 1, Insightful
    I would say don't.

    Everyone and his dog does Java these days. Including 100.000 guys in India.

    Be smart and find something new, cool and on the rise.

    --
    TCAP-Abort
    1. Re:Don't by Anonymous Coward · · Score: 0, Offtopic

      Erlang...

      That's what I'm learning

    2. Re:Don't by O('_')O_Bush · · Score: 5, Insightful

      I don't understand your logic. Java is fast, powerful, portable, and clean. Just because a lot of other people have realized how great it is doesn't mean that one shouldn't learn it. Java seems to be one of those things that people don't want to use just because it's "too" good.

      --
      while(1) attack(People.Sandy);
    3. Re:Don't by Anonymous Coward · · Score: 5, Informative

      As someone who's worked in Java with some of those 100.000 guys in India, they may know Java, but most don't know java well. The vast majority of programmers either here or there can solve a problem, but not consider the security risks in their solution, nor necessarily come up with an elegant design for doing so.

      Having said that, I've used hibernate (once, to get it set up and configured, it works well enough we didn't have to go back and change it), struts/struts2, and tiles. Most of these are XML configuration rather than coding. If you can do make files, and handle any markup language, these won't be a problem.

      It sounds like your main concern is learning java itself. Since you know C/C++ the syntax and conceptualizations won't jump out and bite you. I'd recommend grabbing a project that interests you (or that needs to be done), and just doing it. Use Eclipse, its tools will make your life MUCH easier (unless you like coding c/c++ in a vi-like environment, in which case by all means use emacs/vi/editor of choice). I'll probably get slammed for saying this, but learning java isn't any harder than learning VB, (easier than C/C++ which is what I'm currently picking up), it uses a different namespace, and slightly different approach, that's all. If you're a competent programmer (and from your post, it sounds like you are) then it's just going to take some time/hard work to get used to the new language's quirks.

    4. Re:Don't by Anonymous Coward · · Score: 2, Insightful

      so what, you can do something smart, new, cool and on the rise in Java, if the indian guys scare you, change career to plumbing.

    5. Re:Don't by sabit666 · · Score: 1

      And you wonder why they "took yer jub!".

    6. Re:Don't by Anonymous Coward · · Score: 0

      I beg to agree

    7. Re:Don't by alex4u2nv · · Score: 4, Interesting

      I would have to agree here, as someone who knows J2EE.

      I studied J2EE application development a couple years ago, when it was supposed to be the "new" next big thing.

      I was already bought, and for all my term papers, in every language course that I wrote, was touting how the future was Java and J2EE.

      In the real world? Its not. I would say, stick with the languages under your belt as they're the most marketable tools in the world.

      My opinion was completely reversed, because in a world where opensource is aspiring and component based development is becoming cleaner and easier, the languages with most opensource software, such as C/C++, PHP, Perl, MySQL, etc will grow even faster.

      Look at it this way, Php 4.x as a non object oriented language, and php 5 as a 80% object oriented language has more freely available software available for coupling than Java does.

      Client/Server Development -- I would focus on the Javascript framworks, Flex, Google Gears, Adobe AIR, etc. + what you already know.

    8. Re:Don't by pak9rabid · · Score: 1

      http://www.dickbaldwin.com/tocint.htm

      By your logic nobody should take the time to learn English because lots of others do.

    9. Re:Don't by Z00L00K · · Score: 4, Interesting

      Maybe, but I'll say that it's not a bad thing to be able to know Java.

      There are benefits and there are drawbacks with Java, as there are with other languages. The drawback with Java is that you don't have any control over memory management, but the benefit is that it's easy to program in if you have been working with C and C++. And you will at least not suffer from some weird bugs that you can get in C or C++.

      For beginners in Java I usually recommend JavaRanch.

      And to develop I recommend Eclipse. It works fine and can give you instant feedback on many issues. Of course - it has some quirks too, but so does every tool.

      And if you want to select a more extreme language I would recommend Erlang. It has a completely different approach than normal procedural languages, but sometimes it makes more sense.

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    10. Re:Don't by Anonymous Coward · · Score: 0, Flamebait

      Did you just call Java fast and clean?

      Really?

    11. Re:Don't by darkpixel2k · · Score: 3, Insightful

      Did you just call Java fast and clean?

      Really?

      I'm sure he means 'compared to the .NET framework'.

      --
      There's no place like ::1 (I've completed my transition to IPv6)
    12. Re:Don't by Anonymous Coward · · Score: 0

      Agreed. Java is banned here. :)

    13. Re:Don't by dintech · · Score: 1

      When I started out learning Java nearly 8 years ago, I used IntelliJ IDEA as my IDE after doing some research into the best choice at the time. IntelliJ is certainly one of the most helpful development environments in terms of staying out of your way unless it's adding value. It can often help you overcome a few of the basic coding mistakes at first and generally makes development much more fun since you're not clambering over a pile of compile errors when you want to run your code. Eclipse is a bit more heavy-weight but on the other hand it's also free...

    14. Re:Don't by evilklown · · Score: 0

      I would not recommend listening to the hordes of people that have said that Java is not/will not be worthwile, as there are many companies that are using Java. I would say that it is a worthwhile tool in your belt, but it is important to not let it be the only tool in your belt. I think that one of the best things you could do to learn Java would be to enroll in a class at a local college or university. There will most likely be a class that focuses on Java development and, if the college or university is doing the majority of instruction in Java, they will have an advanced or more in-depth Java course that skips the basics of programmig/OOP and gets right into using the Java framework.

    15. Re:Don't by Ashcrow · · Score: 2, Interesting

      I more or less agree. Java really is the language of the now ... and it's a huge language. The problem with picking it up this late in it's life is that by the time your marketable with the language you will probably only be working on legacy upkeep applications.

      Learning Java is a good thing, but like John said pick up Ruby or Python to be marketable in the future (or Erlang as it seems it's getting some steam as well), and Java so that you can understand this gen's applications.

      Book wise I've heard "Head First Java" is quite good (though it is probably out of date). I personally liked the books directly from Sun. I also recommend you look at Java security as there are a lot of folks who can write Java, not very many who can write Java in a secure manor (or so it seems from experience).

    16. Re:Don't by Titan3025 · · Score: 1

      I think Java is the right choice even if there are thousands of java programmers in cheap labor countries.

      I think if you are being afraid of being outsourced your doing something wrong anyways. Independantly of java being popular.
      If your choice of programming language alone saves you in your job I feel sorry for you.

    17. Re:Don't by SageMusings · · Score: 0, Redundant

      Please, take the time to back up your assertion. How is the .Net Platform so much worse than Java? I've seen people like you make this claim and then never go on to explain why?

      I am interested in knowing why. I personally do 90% of my coding in C# nowadays and have had a very positive experience (and the money is decent, too). My mind is not closed to other languages and methodologies, so do not mistake my inquisitiveness for a snide remark; I would really like to know how Java is faster and cleaner.

      You were modded as funny but it's time people like you put all your cards on the table. I don't code in Java but I don't debase the language. I honestly don't know enough to argue one way or the other for Java. I suspect you don't know enough about .Net to do so either.

      And a little off topic for this thread but keeping with the spirit of the parent story: It doesn't matter what language you use. Your company can always outsource it. There are too many people outside the U.S. willing to work for very little at all hours of the day...plus...U.S. labor laws do not apply. It's a corporate wet-dream with Congress fully behind it.

      --
      -- Posted from my parent's basement
    18. Re:Don't by Dan667 · · Score: 2, Insightful

      I completely agree. As many bad client side java and tomcat projects as I have inherited I would looks for something else. Bad or no error messages (does it really take 50 lines to say which class failed). Can be slow if run interpreted so it can almost be multi-platform. I just don't see the appeal of java. Find something else that one of best in the business uses (like Google uses Python)

    19. Re:Don't by EkriirkE · · Score: 1

      Flamebait? Really? I need me some mod points to bump this and the parent to "Funny"

      --
      from 09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
      to 45 2F 6E 40 3C DF 10 71 4E 41 DF AA 25 7D 31 3F
    20. Re:Don't by EkriirkE · · Score: 1

      That's the exact logic I use for myself as a Californian regarding learning Spanish. Why bother?

      --
      from 09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
      to 45 2F 6E 40 3C DF 10 71 4E 41 DF AA 25 7D 31 3F
    21. Re:Don't by Anonymous Coward · · Score: 1, Insightful

      I'm almost willing to put money he never replies to you. Usually these people mutter some form of the groupthink, get their mod points, and ignore any attempts at discussion.

      Closer to the point, I'll add in a little something. Having worked with both languages, the .NET base class library is slightly better and more consistent than Java's. Java's concurrency classes, however, rip .NET a new one and really let the programmer think about the problem on a higher level. C#, as a language, is more daring than Java in terms of features and a lot more pragmatic. Lack of unsigned integers in Java is a huge mistake that I have yet to see anyone adequately explain.

      They're both good languages. I just occasionally get the feeling that Java hates me as a programmer sometimes because I have the audacity to want a little more control over things.

    22. Re:Don't by Moochman · · Score: 1

      Funny, I always see IntelliJ as "heavyweight" and Eclipse as lightweight in comparison... maybe it depends on the machine. IntelliJ is quite cool and has more functions and keyboard shortcuts than anyone but the IntelliJ team themselves are capable of remembering, but as said, not free. If your employer happens to provide you with IntelliJ, go for it. Otherwise Eclipse will do you fine.

      Anyway, it all comes down to how easily distracted you are. If you don't mind things popping up at you left and right, then IntelliJ or Eclipse is the way to go. In contrast to many accomplished C programmers that pride themselves on a bare-bones approach of vim/emacs thankyouverymuch, many accomplished Java programmers pride themselves on having mastered the sorts of IDEs that give you everything but the kitchen sink--and they really are more productive with them. However, at first they might be a little overwhelming. If you're the type that likes to not be distracted, then a free program like jEdit, or if you're on Windows, JCreator LE, will be a fine start.

    23. Re:Don't by bytesex · · Score: 1

      No. There are valid points to be made against java; even things that seem to go against what it's supposed to be great at. I shall not repeat them here, but there are.

      --
      Religion is what happens when nature strikes and groupthink goes wrong.
    24. Re:Don't by chris_mahan · · Score: 2, Insightful

      > but it is important to not let it be the only tool in your belt

      Well, that's the real problem. The world of Java is so complex that by the time you've invested the 3-4 years learning how to be a corporate java developer, your other skills will have atrophied to the point where you can barely get a job using them...

      I work at a fortune 500 and we have java developers who don't understand the difference between an apache mod and cgi, who can't understand that python is interpreted and that the amazing functionality of mediawiki is programmed in php.

      In order for you to become a specialist in Enterprise Java, you are going to have to forego any other specialization. If that's what you want to do, fine. But that makes you much more vulnerable to economic instability. Better to make less money per hour but be guaranteed work for the foreseeable future.

      What do you think would happen to java if Sun Microsystems went bankrupt? Who can tell what the future holds? Don't put all your eggs in one basket.

      --

      "Piter, too, is dead."

    25. Re:Don't by mcvos · · Score: 1

      My opinion was completely reversed, because in a world where opensource is aspiring and component based development is becoming cleaner and easier, the languages with most opensource software, such as C/C++, PHP, Perl, MySQL, etc will grow even faster.

      Are you saying there is not a lot of open source Java software? Ever heard of Apache? It's all about component based open source. And so are tons of other Java projects.

    26. Re:Don't by jambox · · Score: 1

      Yeah of course it's not that hard IF you understand the design principles. A really good programmer should be able to adapt easily to a new syntax (except horrible crap like COBOL). But the point of the question is, which technologies are used to bolt on to Java in real projects?

      --
      You thought you could break the laws of physics without paying the PRICE?
    27. Re:Don't by EEBaum · · Score: 4, Informative

      Portable? Clean? Try mobile development some time. Maintaining a large handful of project files because of different screen sizes is a joy, not to mention interacting with different phone providers' frameworks, plus a buttload of special-case code strewn about to deal with the inconsistencies and quirks (including missing and misbehaving features) of each device's particular implementation of the VM. Languages like C have a preprocessor that allows such variables to be put in #ifdef blocks... no such luck with Java. All that, and the program will look like absolute crap on anything but a phone.

      Portability is a nice word that Java people like to throw around, but in my experience, the program has to be set up separately for just about every target. You can do that just as well with C (Brew, as far as phones are concerned), and without a handful of different project files to include or not include target-specific files.

      Not to mention that, on comparable phones, Java performace is abysmal compared to Brew. Not fast.

      Java has its place, where its benefits can be well exploited. That place is, as far as I've seen, largely restricted to situations where the systems it'll be running on are not terribly diverse, e.g. Linux servers, where portability really isn't that much of a concern.

      --
      -- I prefer the term "karma escort."
    28. Re:Don't by darkpixel2k · · Score: 1

      Please, take the time to back up your assertion. How is the .Net Platform so much worse than Java?

      Actually, it was partly a joke. Both .NET and Java have (earned or not) a reputation for being huge bloated frameworks when compared to simpler languages like C.

      Honestly, I've never searched for or run my own tests on the speeds of various languages.

      One small argument in my defense is that I download a
      To develop in Java, I end up having to download several hundred megs of tools, the development kit, etc... (I'm not a Java developer, so maybe it's possible to develop Java apps with notepad for all I know)

      Like Scotty says though, use the right tool for the right job. I've never had a job that required Java knowledge. I developed in VB6, and the first ASP.NET release back around 2000 or so. Since then I haven't had to touch either.

      My personal preference in languages though is Python (out of all the .NET languages, C, C++, Java, Erlang, Ruby, BASH scripting, Powershell scripting, and PHP). But that's simply my preference.

      --
      There's no place like ::1 (I've completed my transition to IPv6)
    29. Re:Don't by Anonymous Coward · · Score: 0

      I AM Indian, you insensitive clod!

    30. Re:Don't by moro_666 · · Score: 1

      I agree, don't start anywhere.

        Having skills in that many languages already means that your concentration is getting fuzzy. The more languages you add the fuzzier it gets.

        A superior programmer in 2-3 languages is worth way more than a guy who knows a little about everything.

        The "superior" java jobs are already taken, the jobs you would get as a java "freshman" are nowhere where you would like to be. Instead advance yourself in languages you already now and dig more deeply.

      --

      I'd tell you the chances of this story being a dupe, but you wouldn't like it.
    31. Re:Don't by tacocat · · Score: 1

      There is a lot of truth in this statement. Adding Java to your arsenal gives you little if any advantage in a job. There are far too many other people in the world who do Java already. If you want to learn it, you can learn it by doing. But if you want to add it to your resume there's not much value to it.

      I think Java is over rated. It's got a place in the world, but it's not the answer to everything.

    32. Re:Don't by RockDoctor · · Score: 1

      Everyone and his dog does Java these days. Including 100.000 guys in India.

      You have some reason for believing that the guy asking the question isn't in India?

      --
      Birds are not dinosaur descendants;birds are dinosaurs, for all useful meanings of "birds", "are" and "dinosaurs"
    33. Re:Don't by cheesybagel · · Score: 1

      What do you think would happen to java if Sun Microsystems went bankrupt?

      IBM would pick it up?

    34. Re:Don't by cheesybagel · · Score: 1

      Apache HTTP server is not written in Java. Try reading the source code (hint its written in C). The are many Java project in the Apache Foundation website, but that is a different kettle of fish.

    35. Re:Don't by mcvos · · Score: 1

      The are many Java project in the Apache Foundation website, but that is a different kettle of fish.

      That's exactly the kettle of fish I'm talking about.

    36. Re:Don't by Lysol · · Score: 1

      I agree with the premise "don't". I've spent a lot of years on a lot of projects on Java, including a major airline site and a mobile app for a worldwide bank. I've seen the industry change. I've probably used every major app server and framework/library out there. I've definitely used every big Java IDE. Deployed on every major J2EE server. Done all the best practices, used all the 'right' patterns.

      But now, I won't touch it. The Java ecosystem is a mess, a jungle, a chaotic soup. Frameworks/libs/whatever like Spring, Hibernate, Struts, Tapestry (omg..), etc are so over engineered it's ridiculous. And the fact that everyone configures everything with xml is just plain gross to me.

      Java, like any successful endeavor, is a victim of itself - or actually, its community. I would still consider standalone servers via J2SE as those are still fairly 'fun' to do, but anything that touches an 'app server' via some crappy, convoluted framework, is something I have no desire to work on. Frankly, I'd rather do a C++ app or even, an a obj-C app.

      Java is now the 'old dudes' language. Seriously. It's now the stable choice. Hence, tons of jobs. Most of my developer friends though, are ditching it for something 'funner'.

      And those languages are Python and Ruby - right now. You'll find much more exciting opportunities learning Django or Rails than you will the old dudes server language. And not only that, you'll be working with dynamic languages, so no compile and 5 min deploy of your app to some 'enterprise server'.

      Over the next few years, Python and Ruby will become much more popular - there is already a shortage for them for Internet apps. Plus, you're not going to get caught in the morass of Sun/Java 'best practices'. Gazillions of patterns you should use 'just because'. Here, there is no answer to the why, no answer for the reason...

      I would say don't even waste your time on Java, especially if you know C++. Go straight to Ruby or Python. You'll be much more productive and will find much more exciting opportunities in the development world.

    37. Re:Don't by Anonymous Coward · · Score: 0

      I had to read this twice when I realized it was modded insightful instead of funny

    38. Re:Don't by atraintocry · · Score: 1

      Damn, someone with modpoints was trying to eat greasy fried chicken and hold the mouse again.

      The OP said "don't go where the work is, do something *cool*". The reply was Erlang. I thought it was brilliant, if you must know. At the very least, it was on-topic.

    39. Re:Don't by andref82 · · Score: 1

      It's impressive what you can do when you apply the basics of Java to other languages... Is Java fast ?! There are applications and applications...

    40. Re:Don't by andref82 · · Score: 1

      "nor necessarily come up with an elegant design for doing so" I personally believe that the problem is getting to the design, because sometimes I get myself doing all this code that eventually is complicated but there's something that you can take out of it and apply it to different projects. Other cases you get a fast development and a code that just works...

    41. Re:Don't by Anonymous Coward · · Score: 0

      Isn't this an issue with the relative immaturity of small portable platforms rather than Java per-se?

      For most developers, "Cross-platform" is more like Mac vs. Pc., which is pretty decent unless you're using some external library or JNI or something.

  2. Java makes me sad by Anonymous Coward · · Score: 0, Insightful

    I'm continually surprised by the number of shitty jvm-version-dependent apps that people get paid to crank out. Don't be that guy.

  3. Wrox Press by dnoyeb · · Score: 5, Informative

    I started Visual C++ 5 with a book called "Beginning Visual C++ 5" by Ivor Horton from Wrox Press. When I started in Java I bought a book titled "Beginning Java" by Ivor Horton.

    I would start there. Java is really straight forward OO language. The only issue you will have coming from C++ is to let go of destructors and realize Java does not use them. Many from C++ take about 6 months to stop tryng to make a finalizer into a destructor.

    1. Re:Wrox Press by Anonymous Coward · · Score: 0

      I started Visual C++ 5 with a book called "Beginning Visual C++ 5" by Ivor Horton from Wrox Press. When I started in Java I bought a book titled "Beginning Java" by Ivor Horton.

      I would start there. Java is really straight forward OO language. The only issue you will have coming from C++ is to let go of destructors and realize Java does not use them. Many from C++ take about 6 months to stop tryng to make a finalizer into a destructor.

      Huh?

      VC++ went from 4.something to 6.0.

    2. Re:Wrox Press by multipartmixed · · Score: 2, Interesting

      Does Java uses finalizers? If so, how do they differ from C++ destructors?

      (Honest question - I'm not a Java guy but IIRC I found the finalizer concept in Java useful in understanding finalization (called during GC) in Spidermonkey.)

      --

      Do daemons dream of electric sleep()?
    3. Re:Wrox Press by jfim · · Score: 4, Informative

      Does Java uses finalizers? If so, how do they differ from C++ destructors?

      Yes, it does. They differ from C++ destructors as they are not called explicitly(or implicitly when variables get out of scope, as in C++). Rather, finalizers are called when an object is garbage collected.

      The usual advice is not to use finalizers, except to make sure that underlying native resources are released(ie. file handles, sockets, etc.). Even then, there should be a mechanism to release those resources without relying on the finalizer being called, such as a close() method or an equivalent. The finalizer is only guaranteed to be called when the object is GC'ed, which may happen much later than expected if there is not a lot of pressure on the memory system or if there is still a reference to the object.

      There is no guarantees that finalizers will ever be called for an object, as the VM can be forcibly interrupted via Runtime.halt() and finalization of all objects on VM shutdown can be disabled.

    4. Re:Wrox Press by zarr · · Score: 1

      The the most inportant thing to know about finalizers it to never use them. The thing is that, when the finalizer is running, the state of the object is kind of undefined... Instance variables may or may not already have been finalized (and deleted from memory), etc. If you think you need a finalizer, you're likely much better off defining a dispose() method, and calling that in a controlled manner instead.

    5. Re:Wrox Press by Anonymous Coward · · Score: 0

      Yes, it has finalizers but they aren't very useful. Because of the garbage collector, they aren't invoked in a deterministic fashion. In fact, they may never be called at all.

      -ec

    6. Re:Wrox Press by JohnCC · · Score: 2, Informative

      I would skip the Ivor Horton book. I bought it when I first started to learn Java and found it woefully slow placed. Over the course of the tomb you develop a fairly basic app along the lines of C++ and not Java (overly simplified OO design etc). The best stuff out there is actually free. Don't buy the official Java language books because they are usually out of date (we have them in the office collecting dust). To learn the basic core language I'd recommend the Java tutorial and for reference the API JavaDocs. Also forget about Swing and Hibernate until you understand the basic language. http://java.sun.com/docs/books/tutorial http://java.sun.com/javase/6/docs/api John

    7. Re:Wrox Press by ChrisLambrou · · Score: 1

      Finalizers are only superficially similar to destructors in C++. In C++, destructors are frequently used to deallocate resources, typically memory or internal references to other objects, that were allocated during construction. The Java garbage collection model makes this kind of activity unnecessary. Objects that are no longer in use are simply reclaimed by the garbage collector behind the scenes. Finalizers are invoked during garbage collection, but there are a number of restrictions placed upon code running in a finalizer. These restrictions are severe enough that the best advice is simply to avoid using finalizers. Here's a good IBM Developerworks article that describes the problems with finalizers.

    8. Re:Wrox Press by TheRaven64 · · Score: 3, Informative
      A lot of OO languages split the allocation and initialisation calls into two separate methods. Objective-C uses alloc and init. C++ uses operator new and the constructor. One is responsible for allocating memory for the object, the other is responsible for initialising its state. Destructors and finalisers are the equivalent pairing in the opposite direction. A finaliser is responsible for the inverse operation to init while a destructor is responsible for the inverse operation to alloc. In many languages these are both implemented in the same method.

      In a garbage-collected environment you typically don't provide the allocator or destructor. Similarly, you don't need your finaliser to handle destruction of instance variables, since the garbage collector will do this for you. The only thing you need a finaliser to do is release any resources that are not managed by the garbage collector. This includes locks, I/O handles, and so on. In Java these are typically wrapped in an object of some kind, so you don't need to explicitly release them either, since the object encapsulating them does this. You would use a finaliser in a class which used the native code interface to acquire resources from the operating system or some other source outside the JVM. Without doing this, you would leak.

      --
      I am TheRaven on Soylent News
    9. Re:Wrox Press by Cyberax · · Score: 2, Informative

      There's a useful trick with finalizers:

      public class Something implements Closeable
      {
            public Throwable stack;

            public Something()
            {
                try
                {
                    throw new IllegalStateException();
                } catch(Throwable t) {stack=t};
            }

            public void close()
            {
                  stack=null; //...
            }

            public void finalize()
            {
                  if (stack!=null) stack.printStackTrace();
            }
      }

      So you can use finalizers to detect 'leaked' objects. I.e. objects which must be explicitly closed/disposed/whatever but you forgot to do it.

    10. Re:Wrox Press by Reality+Master+101 · · Score: 2, Interesting

      I would avoid Wrox on general principles. This was hammered home to me when I was offered a contract to write a single chapter for a Wrox book. Apparently they go out and find people who will work *extremely* cheap. I mean, the pay was in the three digits -- I turned them down, needless to say. And as near as I could tell, they didn't do much vetting of my expertise. They just take all these chapters and throw them together into a book. You're just not going to get a cohesive publication that way.

      They put a positive spin on this by saying it's written "by programmers for programmers", but I was pretty soured on the quality of their stuff after this experience. Maybe some of their stuff is better organized or better paid these days. This was probably 5-10 years ago.

      --
      Sometimes it's best to just let stupid people be stupid.
    11. Re:Wrox Press by Reality+Master+101 · · Score: 1

      Ha! I just read the Wikipedia entry on Wrox, and they went bankrupt five years ago. So who knows what they're publishing these days.

      --
      Sometimes it's best to just let stupid people be stupid.
    12. Re:Wrox Press by pjt33 · · Score: 1

      Why go to all the hassle of throwing that exception? It's totally unnecessary: the stack is filled in on construction. Just write

      stack = new IllegalStateException();

      or do it "properly" (with phantom references rather than finalize).

    13. Re:Wrox Press by Anonymous Coward · · Score: 0

      Java has finalizers, but they don't work like destructors (and if your object is killed when the program exits, it's not even guaranteed to run, IIRC). Also, because Java is garbage collected, there's no guarantee of the order objects are finalized in: i.e. if you're writing a finalizer for class Foo which contains Bars, you can't assume that your Bars haven't already been garbage collected by the time Foo's finalize method is called.

    14. Re:Wrox Press by zarr · · Score: 1

      I think, in theory your finalizer could throw a NPE. If the particular JVM you're using has a GC algorithm that runs finalizers and deletion of objects in separate threads, the reference to stack could become null between the comparison and the printStackTrace call. It's probably a far fetched example, but it illustrates some of the problems you will not have to worry about if you just avoid finalizers completely.

    15. Re:Wrox Press by Cyberax · · Score: 1

      No. It's not possible.

      Garbage collection should not start until the method 'close()' is finished, it's guaranteed by JLS.

      Also, this is a trick you use during debug when you don't really care about fine details of Java Memory Model. It should be turned off on production systems.

    16. Re:Wrox Press by glitch23 · · Score: 1

      I started with Core Java 2 Fundamentals Volume 1 since it was the textbook for my Java class. It's a good book but I didn't have to read it much. I read over it to help me with listeners but that was about it. Everything else came from lectures or tutorials. I didn't have any trouble getting over not having to write destructors. What I had trouble with was the idea of not having to setup a mouse listener to watch for click events for basic clicking on buttons like I had to do in GTK- under Linux. The ActionListener does that for me and you only need a MouseListener for more "advanced" stuff. I guess that was just part of the fact that Java abstracts more than GTK- and other languages do so I didn't have to worry about the low-level stuff as much. I liked that part. I'm more productive that way.

      --
      this nation, under God, shall have a new birth of freedom. -- Lincoln, Gettysburg Address
    17. Re:Wrox Press by gbjbaanb · · Score: 1

      That's a overly simplistic view of finalisers. See, GC is good for memory resources, but dreadful for anything else. So imagine you have an object that contains a file handle or a socket or a database connection. When you 'delete' the object the GC will eventually clear it up, but in the meantime - firstly your non-memory resource is still in-use, and secondly, unless you have code in a finaliser it will never get de-allocated.

      The penalties for using finalisers are pretty bad, but you have to use them. The alternative is to code your application using structured programming methodologies where you explicitly call a dispose or closehandle method before throwing your object to the GC. Of course, in such cases, you might as well not have bothered with a GC if you're suddenly having to perform explicit object cleanup yourself.

    18. Re:Wrox Press by jfarina · · Score: 1

      I was thinking of Ivor Horton's Beginning Java. It's what I used prior to taking 101 programming, and I was able to blow through the course easily. It's a great book, very well organized with good, practical self-testing problems.

    19. Re:Wrox Press by bckrispi · · Score: 1

      If you follow the practice of closing your database connections and files as soon as you're done using them, you won't need to do it in a finalizer. In 10 years of Java programming, I can count on one hand the number of times I've needed to write a finalize() method.

      --
      Xenon, where's my money? -Borno
    20. Re:Wrox Press by nwf · · Score: 2, Insightful

      I've had the misfortune of purchasing a few Worx titles, and they are indeed incoherent, gigantic and largely useless. I've generally had good experiences with O'Reilly books, however.

      But the most useful has really just been google. Finding interesting examples and work through stuff, as most books on modern Web technology tends to be rather out of date by the time it hits the bookstore.

      --
      I don't know, but it works for me.
    21. Re:Wrox Press by zarr · · Score: 1

      That's not what I meant, but you're still correct :) It's not possible because memory reclamation is never done on objects that are reachable by finalizers, until those finalizers have been run. Yeah, I had to look up the fine details...

    22. Re:Wrox Press by gbjbaanb · · Score: 1

      exactly my point - its not using as much OO features, or GC features if you have to manage your resources manually. You might as well be coding in C.

      People think of GC as a mangic bullet that solves all problems, obviously its not, but I like to challenge the hype (yes, I'm mostly looking at new C# devs).

    23. Re:Wrox Press by Timothy+Brownawell · · Score: 3, Insightful

      I thought destructors were the inverse of init (constructor) and C++ has operator delete as the inverse of alloc (operator new), the difference between a destructor and a finalizer being that you can't rely on a finalizer being called at a particular time, or even being called at all.

    24. Re:Wrox Press by ruphus13 · · Score: 1

      As mentioned earlier, since there are no guarantees as to when the GC gets called, if you do need house keeping on your methods, as opposed to objects, you should use a try/catch/finally block. The "finally" clause is called regardless of whether an exception is thrown or not. This way, you are guaranteed predictability in execution, as opposed to overriding finally(), which may never get called if you have a reference to the object. In C++, since the destructor is always called when the object goes out of scope, you can bank on its execution, but since finally gets called on garbage collection, it may never be called (as mentioned earlier too).

    25. Re:Wrox Press by abdulla · · Score: 1

      Sounds like I'd be better off with destructors and RAII. Less code and precise control of object lifetimes.

    26. Re:Wrox Press by cibyr · · Score: 1

      This is exactly why I like C++ destructors (and the RAII idiom) - while memory management requires a little more thought than in a garbage collected language, management of non-memory resources is so much easier. Once you get used to RAII, you only do manual memory management in one or two places anyway and then you use the same pattern to manage everything.

      Reading a file threw an exception which you didn't handle (maybe you handle it in a further-out scope)? The exception unwinds the stack, your file object gets destroyed, file gets closed - all automatically - and no resource leak! Try that in Java - you have to write a whole bunch of try{}catch{} crap everywhere, which messes with your variable scoping and eventually you figure you're fighting a losing battle when you find out that close() itself can throw an exception!

      --
      It's not exactly rocket surgery.
    27. Re:Wrox Press by bckrispi · · Score: 1

      Hardly. So you have to be careful with file and database connections. Big friggin deal. 99.9% of the other Objects you work with clean up after themselves without a problem. RTFM and get on with your life.

      And I've never met a competent Java developer who thinks GC is a "magic bullet". It has its nuances just like everything else does.

      --
      Xenon, where's my money? -Borno
    28. Re:Wrox Press by gbjbaanb · · Score: 1

      no, you have to be careful with any object that contains non-memory data. That includes other objects.

      So if you have a controller object that contains an object that itself contains a db connection, you have to be careful deleting the controller. Mostly its straightforward, but you do need to clean up yourself.

      Like I said, I deal with new C# developers who do think GC is magic (probably something to do with MS marketing) and I have read many such horror stories (eg, "I have this loop and after a while I get a DB exception - too many cursors, how do I fix it". Too often the answer is "call gc.collect more often" ). The same problems also apply to Java, so I highlighted it for the OP.

    29. Re:Wrox Press by Anonymous Coward · · Score: 0

      In fact, the only thing you can actually say about a finalizer is that it will never be invoked more than once. Even if an object is GC'd multiple times, the finalizer will only ever run the first time.

      And when explaining that there are no guarantees that a finalizer will ever be called, the example I like to use is pulling the power cable out of the server...

      --cfmdobbie

    30. Re:Wrox Press by CSLarsen · · Score: 1

      Ivor Horton, is that you?

      --
      Claiming to be pedantic on Slashdot is asking for trouble
    31. Re:Wrox Press by cheesybagel · · Score: 1

      I prefer to use the leak check tool in Eclipse instead of adding inane fluff code in my application, thank you.

    32. Re:Wrox Press by angel'o'sphere · · Score: 1

      Objects can't be multiple time GCed ... seems you have a misconception in your mind how a GC works.

      Your example: "pulling the power cable from the server" makes no sense. We talked about the difference of a destructor and a finalizer. If you "pull the power cable from the server" the destructor is not called either!! How could it?

      The concepts of a destructor and a finalizer overlap.

      C++:

      void doSomething() {
      SomeObject a; // <- constructor call
      return; // <- destructor call (implicite by the compiler generated) ... if there was a finalizer, it would be called as well
      }
       
      void doSomethingMore() {
      SomeObject *a = new SomeObject(); // <- constructor call
      return; // no destructor call, destructor is only called if you do somewhere a delete a; also the finalizer is also only called when "delete a" is somewhere executed
      }

      In C++ the programmer always knows (should know) where the destructor is called.

      In Java there are no "plain Objects", only references to objects, in C++ speak that are pointers.

      Java

      void doSomethingJavaish() {
      SomeObject a = new SomeObject(); // <- constructor call
       
      // there is no destructor, so the compiler does not generate code to call it
      }

      At some point the object will get GCed, if that is the case, the finalizer will be called.
      If the object never gets GCed the finalizer will not be called.

      Problem:

      void read1Millionfiles() {
              for (int i =0; i< 1000000; i++) {
                  InputStream is = new InputStream("file_"+i+".txt"); // open the file, using up a system file handle (probably under user quota etc.)
                  Byte[] content = is.read();
      // note: object is allocated with new ... we are in Java and <b>here</b> is no delete
      // in C++ you would not use a pointer here, so a destructor would be called at end of scope
              }
      }

      The above code is Java'ish, using new to allocate an object of type InputStream ... that object opens a file and consumes a file handle.
      You have far than enough memory to open 1 million files, but you likely can only open a few thousand files before running out of handles.
      Because you don't run out of memory, the GC wont be executed (oki, that was simplified ;D) so the finalizers wont be called, so the file handles wont be released.

      In Java you fix this by calling is.close() explicitely. In C++ you would rely on the "resource allocation is initialization" idiom (which is ofc more fool proof).

      angel'o'sphere

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    33. Re:Wrox Press by angel'o'sphere · · Score: 1

      Yopu are right, and yoour parent is wrong :D
      Imagine "Managed C++" ... they have finalizers *and* destructors, what a night mare :-/

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    34. Re:Wrox Press by Anonymous Coward · · Score: 0

      > Objects can't be multiple time GCed ... seems you have a misconception in your mind how a GC works.

      I beg to differ. This is one of the quirks of Java that many very experienced developers aren't aware of!

      An object can have no references left, become eligible for GC and flagged. At some point the GC will execute its finalizer. At some point after this another reachability check is made to ensure the object still cannot be reached.

      There is absolutely nothing to stop the finalizer causing the object to become reachable again!

      If it cannot be reached, the object is disposed of and memory reclaimed. However, if the object can now be reached again, it is left alone.

      At some point later, the object may become eligible for GC and flagged again. The whole process is repeated, with the exception that this time *the finalizer is not executed*.

      On the other point, maybe I wasn't clear regarding my comment about pulling the power cable from a machine - that is my response to people who claim that you *can* guarantee a finalizer will be run. It is not intended to demonstrate any differences between Java and C++, as yes, the argument is equally valid in both cases.

      --cfmdobbie

    35. Re:Wrox Press by Cyberax · · Score: 1

      What tool are you speaking about?

    36. Re:Wrox Press by cheesybagel · · Score: 1

      What tool are you speaking about?

      It is part of Eclipse TPTP. TPTP also does profiling and other stuff. It is useless to add your own code to an app to debug leaks even if you are a C programmer, where tools like valgrind can find leaks.

    37. Re:Wrox Press by Cyberax · · Score: 1

      Can you point me to a manual which explains how to set up resource leak detection?

    38. Re:Wrox Press by ChrisLambrou · · Score: 1

      You're right of course. My original description of finalizers was rather simplistic. The best advice I can give to new Java developers (or C# developers, come to think of it), is to completely avoid using finalizers to dispose of non-memory resources such as file streams, sockets and database connections. It's just too easy to introduce bugs this way, and they're often the type of bug that's hard for a new developer to track down the cause.

      There are two common alternatives to using finalizers. The first is to avoid retaining references to non-memory resources, wherever possible. As bckrispi mentioned above, it's good practice to close sockets and file streams as soon as you've finished with them (or in the case of database connections, relinquish then to a common pool).

      The second is to expose lifecycle management methods on your class, typically by providing a close() or dispose() method, which passes the responsibility of lifecycle management to the code using your class. Needless to say, the first option is definitely preferred over the second.

      In 15 years of Java and C# coding, I can honestly say that the only time finalizers have been useful is in trying to detect the case where client code hasn't invoked the relevant close() or dispose() method, in order to issue a debug logging call so that this can be trapped, and then make a final attempt to call close() or dispose() within the finalizer and hope for the best.

    39. Re:Wrox Press by angel'o'sphere · · Score: 1

      Oh yes, you are right. In this sense an object can indeed be GCed multiple times.

      A nice summary to the problem you mention (finalizer making the object again reachable by putting it into some "global variable" e.g.) is written here: http://java2go.blogspot.com/2007/09/javaone-2007-performance-tips-2-finish.html

      angel'o'sphere

      P.S. you should not post such important stuff as AC, AC only rarely ged modded up

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    40. Re:Wrox Press by dnoyeb · · Score: 1

      You do not have to use finalizers. That was my point in the original post. If you still think you do, you should do more studying.

      If you are trying to destroy resources you should be using phantom references. Just having a finalizer will affect when your object gets GC.

      Use finalizers for debugging but not for production work.

    41. Re:Wrox Press by gbjbaanb · · Score: 1

      eh? Phantom references just pass the collection along a level - if you store a db connection in an object, but place that object in another as a phantom reference simply ensures the db object gets collected after the enclosing object is collected.

      Weak and phantom references are always collected if their referent is not marked. When a phantom reference is processed, its referent is marked so it will persist until the following garbage collection cycle or until the phantom reference is processed if it is associated with a reference queue. When it is determined that a reference is eligible for collection, it is either queued to its associated reference queue or removed from the reference list.

      It persists until the following GC cycle.. sounds like one problem that finalisers are accused of.

      Still, you need to execute code to clear the DB connection - GC of a phantom reference still does not process code when collected, you still need a finaliser to do that. If you never call the db close method (or whatever is required) the connection will remain in-use and effectively leaked.

  4. Just a thought.... by jtcedinburgh · · Score: 4, Insightful

    Isn't it better to specialise in a few of the varied languages and systems you have worked on, rather than trying to spread yourself thin?

    There is truth in the saying 'jack of all trades - master of none'.

    So, maybe concentrate on building up the other skills, rather than trying to 'bag' a new technology. I used to try to gain exposure to loads of different technologies but found that when you do so you do at the expense of the 'depth' of knowledge you have in any one.

    1. Re:Just a thought.... by skrolle2 · · Score: 1

      For programming, that reasoning is bullshit. The more code you see and write, the more programming paradigms and syntaxes you have seen and used, the better programmer you will be.

    2. Re:Just a thought.... by OG · · Score: 1

      I don't think that jtcedinburgh meant that the OP should remain ignorant of other languages or technologies. Of course it's important for a programmer to stay on top of new technologies and recognize how they fit into the bigger picture.

      On the other hand, I do agree with him that, while having knowledge of many tools is admirable, if you spend your time trying to learn some of everything, the likelihood of becoming a true master of any one language or technology dwindles. It's important to try to reach a balance and not be too specialized or too broad.

      If I'm hiring a developer, I'm more interested in someone who can do the task incredibly well and efficiently as opposed to someone who has many abbreviations on their resume, but in reality only kind of knows how to use a language, In the end, people who become too broad aren't going to know how to use a language's features to their greatest extent (or truly recognize the limitations of a given language or technology).

    3. Re:Just a thought.... by cronot · · Score: 4, Insightful

      The problem as I see it (I'm in the same situation as the poster - I have experience in almost all languages / DBs / etc. he has, except Java) is that he has experience in areas that are saturated and / or in a decline trend, and none in an area with a growing demand.

      So I think it's not really a matter of being a "jack of all trades", as you put it, but keeping up with the market demands. I actually wouldn't like to learn Java right now, as I think I can do pretty well with my current experience. I'm more interested in learning other newer languages / technologies that seem more interesting and more promising than Java (even if sometimes not as mature or proven), like Ruby, Python, etc... Unfortunately, none of these has nearly as much demand as does Java, so I'm more compelled to learn it to keep myself hireable.

      Btw, it's not that I think Java is a worse language than the ones I'm more interested in, it's just that I think that learning Java wouldn't be as fun or rewarding than the alternatives. But I'm more than willing to be convinced that I'm wrong, so I'll watch this discussion closely for tips.

    4. Re:Just a thought.... by Mr2cents · · Score: 5, Insightful

      After nearly 20 years of programming experience, I have come to the conclusion that programming languages are totally irrelevant when it comes to "being a master". The real art lies in being able to analyze the problem, and making abstractions to come up with an elegant solution. The rest is implementation, and wether you write it in C++, Java or bash, it all remains more or less the same.

      You can know every little detail of C++ e.g., and still be a lousy programmer. There is a phase in most programmers life (mine too) where they think "Cool, C++ has multiple inheritance, so I'm going to use that if I can". But after a while you'll learn to say "I'm going to use that if I really have to".

      So, please, go ahead and learn new languages if you want, it won't do any harm, but you'll only advance as a programmer by constantly questioning your own designs and thinking about how they can be improved.

      --
      "It's too bad that stupidity isn't painful." - Anton LaVey
    5. Re:Just a thought.... by dubl-u · · Score: 1

      So I think it's not really a matter of being a "jack of all trades", as you put it, but keeping up with the market demands.

      Along those lines, I'd strongly suggest to houbou, who posted the original question, that he learn test-driven development. Given the list of languages he has specialized in, he may not know it yet. In the Java world it's becoming more and more important. I now don't hire people without at least a year of unit testing experience unless they're absolutely stellar in other regards.

      A good book to start with for that is "Test-Driven Development by Example" by Beck, and for Java the "JUnit Recipes" book is handy.

    6. Re:Just a thought.... by arevos · · Score: 2, Insightful

      After nearly 20 years of programming experience, I have come to the conclusion that programming languages are totally irrelevant when it comes to "being a master". The real art lies in being able to analyze the problem, and making abstractions to come up with an elegant solution.

      The problem with that theory is that different programming languages favour different kinds of abstractions. A programmer only familiar with Java will only be familiar with the abstractions that work well in the Java environment. Compared to some other languages, Java is pretty limited in what abstractions can be practically implemented, so it greatly restricts the amount of solutions available to the programmer.

    7. Re:Just a thought.... by ShieldW0lf · · Score: 1

      Along those lines, I'd strongly suggest to houbou, who posted the original question, that he learn test-driven development. Given the list of languages he has specialized in, he may not know it yet. In the Java world it's becoming more and more important. I now don't hire people without at least a year of unit testing experience unless they're absolutely stellar in other regards.

      You can make some awfully shiny turds that way. Not that it can't work, but it's not a silver bullet...

      --
      -1 Uncomfortable Truth
    8. Re:Just a thought.... by skrolle2 · · Score: 1

      I completely disagree, it's the people that have a broad experience of languages that will truly recognize the limitations of a given language or technology much much faster than the people who only know one language.

      If I'm hiring someone for a position that involves a lot of programming in language X, I would *much* rather pick someone that has a broad experience and some of langauge X or close langauges, than someone who only has 15 years experience or whatever of langauge X. The first person has an interest in learning new things, the second person is completely uninterested, and therefore probably also not a very creative person. That's not someone I would want to hire for a creative job.

    9. Re:Just a thought.... by skrolle2 · · Score: 1

      I would also never hire someone who couldn't spell "language" properly!

    10. Re:Just a thought.... by dubl-u · · Score: 1

      You can make some awfully shiny turds that way. Not that it can't work, but it's not a silver bullet...

      True. So?

    11. Re:Just a thought.... by ShieldW0lf · · Score: 1

      I find doing a more rigorous requirements gathering process, then writing the spec and a code generation engine that consumes the spec is a process more conductive to maintaining long term focus and vision than your typical extreme/test-driven development style, which often seems to drift a bit and lack a certain focus. However, when tests are constructed automatically by the code generation engine, which is consuming the signed off spec, it can be a useful tool for management to track progress being made by the team and locate bugs and errors, so it certainly has its place.

      --
      -1 Uncomfortable Truth
    12. Re:Just a thought.... by gbjbaanb · · Score: 1

      Unfortunately, Java is a declining trend. To keep your skills 'current' you're going to have to get down on your knees and start sucking on Microsoft's bloated development tools.

      *ahem* sorry about that.

      Java is declining now (from 35% of all UK IT Jobs in 2004 to 25% now). I can't help think its due to C# and possibly the rise of scripting languages like Ruby/Python and PHP. I can't be sure though, I think Linux and OSS development is a rising trend (Evand Data says in 2006 74% of all devs targetted Windows, in 2007 it was 65% - hence MS getting all generous with Zend and the Apache foundation, if you are going to do OSS dev, they want you to do it on Windows).

      Scripting languages are going places - from next to nothing in 2004, to over 10% today. That's impressive, add javascript (at 15%) to that and knowing a new script language won't hurt.

      Incidentally, average C# salary = £41k, average python salary £45k, ruby £44k.

    13. Re:Just a thought.... by maestroX · · Score: 1

      So, please, go ahead and learn new languages if you want, it won't do any harm, but you'll only advance as a programmer by constantly questioning your own designs and thinking about how they can be improved.

      And remember, while the road might seem harsh & cold and mountains too steep to climb, there always will be PERL.

    14. Re:Just a thought.... by vux984 · · Score: 4, Insightful

      After nearly 20 years of programming experience, I have come to the conclusion that programming languages are totally irrelevant when it comes to "being a master". The real art lies in being able to analyze the problem, and making abstractions to come up with an elegant solution. The rest is implementation, and wether you write it in C++, Java or bash, it all remains more or less the same.

      Agreed. However, 'being a master' programmer and then picking up a new language is still going to leave you making noob mistakes with it. Additionally, some languages are enough of a paradigm shift (C++ to Lisp, for example) that the elegant abstractions you might make for C++ is like ramming a square peg into a round hole if you apply it to Lisp.

      To put it another way, when you are a master with a hammer, every problem becomes one of how to bang a nail... if someone hands you a pair of pliers... you might find yourself using it expertly to hammer something.

      You can know every little detail of C++ e.g., and still be a lousy programmer.

      Agreed 100%. But not knowing the language you are using isn't a recipe for success either. ;)

      There is a phase in most programmers life (mine too) where they think "Cool, C++ has multiple inheritance, so I'm going to use that if I can". But after a while you'll learn to say "I'm going to use that if I really have to".

      20 years experience you said. You should hit the point of saying, "I'm just not going to use multiple inheritance. Period." soon. I kid, I kid.

      So, please, go ahead and learn new languages if you want, it won't do any harm, but you'll only advance as a programmer by constantly questioning your own designs and thinking about how they can be improved.

      Exposing yourself to more languages is helpful for multiple reasons. It helps you learn to separate the programming problem from the language. Its much easier to think in abstract terms if you have multiple languages in your belt. And of course, having more tools in your belt means that when you approach a new problem you can reach for the best one.

    15. Re:Just a thought.... by dubl-u · · Score: 1

      Just to be clear, unit tests are how programmers verify that code conforms to programmer expectations. You seem to be talking about something else: verifying that the code conforms to business, customer, or product management expectations. So I think he should regardless learn unit testing.

      I find doing a more rigorous requirements gathering process then writing the spec

      For many projects, this is effectively impossible Competitors launch new products. Governments issues new regulations. Customers get new expectations. Vendors change their products. The behavior of users changes once they start to use your product. A community develops around your creations, leading to entirely new uses and interaction patterns. And once people see what they ask for, they realize they wanted something else.

      Some of that change might possibly be predictable. Some of it isn't even in theory, as your competitors are actively hiding information from you. Much of it is just in practice too expensive to predict accurately.

      Of course, you may work in a field where things actually are predictable. In which case, good for you. Setting that aside:

      writing the spec and a code generation engine that consumes the spec is a process more conductive to maintaining long term focus and vision than your typical extreme/test-driven development style

      I look forward to seeing examples of the approach you're thinking of.

      From the way you describe it, this is generally what agilists call "acceptance tests", which are written in some fashion that a business person can understand them and hopefully write them. There is a lot of innovation in this area, including Fit & Fitnesse, browser-focused tools like Selenium, the behavior-driven design movement, and the domain-specific language movement.

      Some of those things can use a code generator; many don't. But it's a commonplace in the agile world that automated tests are just specs that a computer can verify.

    16. Re:Just a thought.... by Anonymous Coward · · Score: 0

      No, I'm sure that is correct. Would you hire anyone at all?

    17. Re:Just a thought.... by TheGermsFromSpace · · Score: 1

      Here, Here!! I'm not sure I've ever seen this point expressed this concisely on /. I just went through a job search and I would express this point at every interview. People would look at me like I was crazy and then of course, not hire me. Finally I found a company of forward thinkers, not concerned with language semantic masturbation, but simply with whether I could produce results. I have a job now. :-)

    18. Re:Just a thought.... by mhall119 · · Score: 1

      Isn't it better to specialise in a few of the varied languages and systems you have worked on, rather than trying to spread yourself thin?

      There is truth in the saying 'jack of all trades - master of none'.

      "Java" isn't a trade, "Programming" is a trade. As some already commented, you become a master of the logic and the problem solving, not of the tools.

      What you're advocating is essentially to make yourself a master of the hammer, and not bother learning how to use a screwdriver.

      --
      http://www.mhall119.com
    19. Re:Just a thought.... by Dogtanian · · Score: 1

      Compared to some other languages, Java is pretty limited in what abstractions can be practically implemented, so it greatly restricts the amount of solutions available to the programmer.

      I'm not sure that this was unintentional. From my very limited exposure to C++ (admittedly about 5 year ago), it seems that it gives you the flexibility to do a whole load of things that seem very clever and desirable at first. However, it also seemed that if implemented wrongly, or if the (often subtle) implications of using such power were not fully understood, then it could hide exceptionally subtle and nasty problems within apparently straightforward code. IIRC, this applied particularly to operator and type behaviour.

      When I considered the implications of all those C++ facilities, I understood *exactly* why Bjarne Stroustrup had said "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off."

      Now, you could argue that it's nice to have that power if you want it, and use it sparingly. But my guess is that in the real world, where it only takes one slightly inexperienced programmer's flawed overcleverness to cause nightmares for everyone relying on that code- whether they realise it or not- the ability to do intellectually clever things just isn't worth the major risks involved.

      Even worse, from what I remember is that it's possible to write C++ code that claims that (e.g.) your variables won't be modified, but doesn't always enforce such guarantees.

      --
      "Slashdot - News and Chat Sites Deviant". (Click "homepage" link above for details).
    20. Re:Just a thought.... by telbij · · Score: 1

      Its much easier to think in abstract terms if you have multiple languages in your belt

      Too true, but some languages are much more valuable than others. For instance, how would learning Java help the abstract thinking of a Lisp expert? They might have a few ah-ha moments about interfacing with the OS, but that's about it :)

    21. Re:Just a thought.... by earthsoft · · Score: 1

      Very true, it's a very good thing to learn a new language -- as long as you put in the time to get past that superficial "I created a Hello World program so I can put this language on my resume now".

      Sounds like the goal is to get hired as a Java developer. As a web development manager that has a mostly Java staff, I can tell you that it's not easy to find good Java developers. Not awesome but simply good. When I interview Java developers it's amazing how many of them do well in written multiple choice tests but fail miserably when asked to actually write a simple program or write down what their object hierarchy for X program would be like.

    22. Re:Just a thought.... by bigman2003 · · Score: 1

      I hear this a lot on Slashdot.

      I also have a sneaking suspicion that MOST people on Slashdot aren't the ones doing any of the hiring.

      I do hire people. And while I do look for a somewhat broad knowledge base, depth is far more important to me.

      Why?

      Because when Mr. Broad gets hired, he wants to do everything differently. "We should use this, we should use that..."

      Great for Mr. Broad, because he is planning on moving on in 2 years and using 17 different languages looks good on his resume. Then I am stuck with the problem of replacing him with someone else who has the same combination of skills. But unfortunately that combination doesn't exist much.

      I would rather have someone who REALLY understands the language/platform we are using. Someone who isn't excited to bring in a ton of nifty 3rd party tools they found last month (and will stop being supported in a year)...someone who understands that long-term thinking is far more important to business than constantly running to 'the next cool thing'.

      It's just the difference between seeing tech as a toy, or tech as a tool for business. When I am dealing with code that is older than 10 years, I need people that truly understand what is going on. Not someone who wants to just replace everything with something new all the time.

      --
      No reason to lie.
    23. Re:Just a thought.... by Anonymous Coward · · Score: 0

      You can know every little detail of C++ e.g., and still be a lousy programmer.

      Someday, someone is going to create a (probably scripting) language and call it the "lousy programming language".. and then everyone will want to be a lousy programmer.

    24. Re:Just a thought.... by Mr2cents · · Score: 1

      Let me be clear: nothing against learning new languages, you'll always learn something new, and I can't imagine many professional programmers not knowing at least 3-4 programming languages after a while (hey, in college I saw a dozen), but you shouldn't think that by mastering a language you become a good programmer. And "favoring different kinds of abstractions" is mostly BS. I've written object-oriented code in assembler! It's just a paradigm, and the only thing a language can help you with is syntactic sugar.

      --
      "It's too bad that stupidity isn't painful." - Anton LaVey
    25. Re:Just a thought.... by Mr2cents · · Score: 1

      I've seen that look too :). But hey, if they can't cope with that it's their problem. I'm glad you found a job, and I'm sure you'll be hapier there than at those other places.

      --
      "It's too bad that stupidity isn't painful." - Anton LaVey
    26. Re:Just a thought.... by Anonymous Coward · · Score: 0

      One advantage of learning multiple languages, though, is that you learn to appreciate some things that each language does, such as multiple inheritance, or all the fancy things going on in LISP, and you can realize that those ideas are better for certain situations, and using them. So while it's true that you can only advance by questioning your own designs, learning new languages will help you find answers to the questions that you pose yourself.

    27. Re:Just a thought.... by arevos · · Score: 1

      And "favoring different kinds of abstractions" is mostly BS. I've written object-oriented code in assembler! It's just a paradigm, and the only thing a language can help you with is syntactic sugar.

      I strongly disagree. There are many abstractions commonly used in other languages that are rarely, if ever, used in Java. For instance, Lisp programmers commonly write macros to transform the structure of their code, whilst in Java, it is extremely rare for a library or framework to delve into bytecode manipulation.

      Similarly, a common abstraction in Haskell is the monad. To my knowledge, there are no libraries or frameworks that use this abstraction in Java. Again, this may lead one to ask why is such a common and presumably useful abstraction missing from everyone's Java code.

      The problem is that Java doesn't handle these abstractions particularly well. In Lisp, code is defined in terms of lists within lists, and this basic syntax makes it very easy to manipulate. Java's syntax is obviously far more complex, and the compiled bytecode bears little resemblance to the original Java, making byte manipulation a very complex operation.

      Likewise, Java's primitive type system makes monads a difficult concept to implement at best. A single line of Haskell loses much of it's clarity when reduced to a page of anonymous classes and interfaces, heaped together in a morbid parody of Church's lambda calculus.

      I haven't found any complete implementations of monads in Java, so I can only speculate at what the eventual monstrosity would look like. For comparison, we can refer to a simpler construct, the Y-combinator. In Haskell, it can be defined in one line:

      y f = f (y f)

      In Java, it's... well, it's just a few more lines.

      Now, I'm not claiming that it always takes a page of Java and the google-collections library to implement the equivalent functionality of 13 bytes of Haskell. This is obviously an extreme example. However, hopefully it demonstrates my point that there are some forms of abstraction that Java does not take at all kindly to. In this case, lazy evaluation and first class functions.

    28. Re:Just a thought.... by mike_sucks · · Score: 1

      If you're a career programmer - sure. Those COBOL guys are making a lot cash these days (all 12 of them).

      "I've been writing PHP apps for 43 years son, don't gimme no nonsense about yer newfangled programmin' languages."

      /Mike

      --
      -- "So, what's the deal with Auntie Gerschwitz et all?"
    29. Re:Just a thought.... by Anonymous Coward · · Score: 0

      I fully agree! I like Java and I've been working with that language since version 0.97 or something. But still, first try to learn what you're supposed to implement. In most cases the programming language is the least of your problems.

      However, whenever you have a chance, try to get familiar with new tools - programming languages included. That's the only way to be able to pick up the correct tool for the job. "If your only tool is a hammer..." and so on.

    30. Re:Just a thought.... by PinkyDead · · Score: 1

      I think you missed the GPs point.

      The newbie should learn Java (or C++ or C# or whatever) and master it; understand the nuances, get a handle on the best way to do things and get a strong feel for how the design holds the systems together.

      Doing this while trying to concentrate on all sorts of different languages is only distracting and will lead to a poor understanding of the theory of good design and development in favour of the quirks of different implementations.

      Once you have a decent grasp of the important concepts - then there is a huge amount to learned from another language, from the things you've always assumed to be invariant. e.g. moving from C++ to Java - reflection is mad, but very useful - you miss the preprocessor, yet you learn very quickly that it was quite a dangerous feature. That's not to say you will dump such features but you will be more judicious about their use.

      --
      Genesis 1:32 And God typed :wq!
    31. Re:Just a thought.... by The_reformant · · Score: 1

      I actually agree with the GP, languages are trivial, architecture is not.

      --
      I have discovered a truly remarkable sig which this post is too small to contain.
    32. Re:Just a thought.... by bwcbwc · · Score: 1

      On the other hand, a jack of all trades is the only person who can interface between the overspecialized network admins and the overspecialized application developers (for example).

      --
      We are the 198 proof..
    33. Re:Just a thought.... by vux984 · · Score: 1

      I actually agree with the GP, languages are trivial, architecture is not.

      The traditional response to that is: "Did you ever see architect try to build something?"

      I'm not saying languages are as hard as architecture, but don't kid yourself, being a great software architect doesn't confer you mastery of any and all languages with trivial effort. You still need to clock in some serious time to master a language.

    34. Re:Just a thought.... by Anonymous Coward · · Score: 0

      So true.

      But if you oinsist on learnoing mew languages, learn langiages with meanongful paradigms like lisp(functional), smalltalk (oo), prolog(logic), mathematica (math) and sql(relational).

      Other than that, i would say they r a complete waste of time and effort.

      Sent from my blackberry. Please excuse any typos.

    35. Re:Just a thought.... by Anonymous Coward · · Score: 0

      Although I agree with you in the bottom of my heart, there is a way to program in Java that leads to good result independently of the size of the program.

      There is no such a thing in C++. C++ is the wrong solution to every problem.

    36. Re:Just a thought.... by Anonymous Coward · · Score: 0

      The full saying is "Jack of All Trades, master of none; but oftentimes better than master of one."

      Funny how that last bit keeps getting lost...

  5. In the same boat... by Foofoobar · · Score: 0

    I started with Eclipse (as I use it for LAMP development) and switched to Tomcat since I was already doing web dev and it was the quickest paradigm to switch to. I'm also trying to pick up STRUTS2 which judging from your background may also be a good choice for you. From there, the options are based upon your needs. For a book, I would not suggest Java headstart as you obviously are a bit further along in your development knowledge. Perhaps an O'reillys book on java.

    --
    This is my sig. There are many like it but this one is mine.
    1. Re:In the same boat... by SirLurksAlot · · Score: 4, Informative

      I started with Eclipse (as I use it for LAMP development) and switched to Tomcat

      Ummm, what? Eclipse is an IDE, Tomcat is a container for web servers. Tomcat and Apache can be used with Eclipse with a nice little plugin for testing.

      --
      God, schmod. I want my monkey man!
    2. Re:In the same boat... by Anonymous Coward · · Score: 0

      Learn Stripes instead of Struts 2. It's like of like Struts merged with Ruby on Rails.

      http://www.stripesframework.org

    3. Re:In the same boat... by Foofoobar · · Score: 0, Flamebait

      Duh. But he may want to know what tools to use. Eclipse is a great tool for Java development. He may want to use a different tool but Eclipse is one that alot of Java developers use.

      --
      This is my sig. There are many like it but this one is mine.
    4. Re:In the same boat... by SirLurksAlot · · Score: 5, Informative

      Ok, you're missing my point, which is that Eclipse and Tomcat have absolutely nothing to do with each other. You don't need to "switch" from one to the other because they are used for entirely different purposes. Yes, they're both tools, but it doesn't make any sense to tell the parent that you switched because one is used to write code and the other is used to serve applications. It makes you sound like you don't know what you are talking about, and will only confuse new developers.

      --
      God, schmod. I want my monkey man!
    5. Re:In the same boat... by romango · · Score: 1

      I agree. Get Eclipse, install Tomcat locally. get the Eclipse Tomcat plug-in. Use STRUTS. OJB works well with MySQL. It takes awhile to get it all configured.

    6. Re:In the same boat... by Foofoobar · · Score: 1

      I imagine that a million people will list books; I listed the most common tools that he will need to familiarize himself with as he seems to be coming from a web dev background. This was the hurdle for me when transitioning over... not the language. So from my perspective as a web dev (similar to him), the hurdle would be learning all the new tools and not so much the language as the language is very logical and easy to follow.

      --
      This is my sig. There are many like it but this one is mine.
    7. Re:In the same boat... by Anonymous Coward · · Score: 0

      His gripe was with your english.
      You wrote:

      I started with Eclipse (as I use it for LAMP development) and switched to Tomcat

      Which, for the uninformed, sounds like Eclipse and Tomcat are tools for the same porpouse (i.e. IDEs), which they are not.
      And so it is confusing.

    8. Re:In the same boat... by Foofoobar · · Score: 1

      so he is arguing about semantics? what a lamer.

      --
      This is my sig. There are many like it but this one is mine.
    9. Re:In the same boat... by roman_mir · · Score: 1

      Learn to express yourself, you sounded like a lamer with this

      I started with Eclipse (as I use it for LAMP development) and switched to Tomcat

      - totally sounds like you switched 'from Eclipse' (an IDE) 'to Tomcat' (a web server/servlet container). Sounds like something a lamer would say who wants to pretend he knows what he is talking about but has no clue.

    10. Re:In the same boat... by kalidasa · · Score: 1

      No, he's arguing with your inability to distinguish between an IDE and a web platform. You committed a category error, analogous to saying "I started using English, but then I switched to motion pictures."

    11. Re:In the same boat... by Foofoobar · · Score: 1

      no... I included two statements in the same sentence (ie I did one thing and I did another thing). As in I chewed bubble gum and used my brain at the same time. Something you seem incapable of since you can't seem to comprehend the original statement beyond your minimalistic interpretation of what was meant. Pick up your knuckles sometime.

      --
      This is my sig. There are many like it but this one is mine.
    12. Re:In the same boat... by Foofoobar · · Score: 0, Troll

      If you used your brain for two seconds and read the original statement, you'd have realized that it was two separate statements joined (hence the AND). The sentence CAN be interpreted two different ways; you and the retard patrol just happen to have jumped to a conclusion. Learn how the english language works before trying to correct someone. You sound less retarded when you know what your talking about.

      --
      This is my sig. There are many like it but this one is mine.
    13. Re:In the same boat... by roman_mir · · Score: 1

      whatever you say, chief, but it's SirLurksAlot who has 5 Informative, so you must have said something and whether it is your improper use of the language or an attempt to hide your incompetence in the subject matter, the crowd believes whatever it wants to believe. Cheers.

    14. Re:In the same boat... by Foofoobar · · Score: 1

      Yeah and points on Slasdot are about as significant as Republican polls in red states. They are only as significant as the loser who wants to blows his mod points. Thanks for blowing yours on my last post by the way, you affected me not as I have points to spare otherwise I wouldn't waste time taunting losers like yourself. Now begone or I shall taunt you a second time.

      --
      This is my sig. There are many like it but this one is mine.
    15. Re:In the same boat... by roman_mir · · Score: 1

      You are really a strange beast, also very defensive, which is a sign of weakness. I didn't have mod points and even if I had I wouldn't be moderating something as silly as this.

    16. Re:In the same boat... by Foofoobar · · Score: 1

      'You are defensive' says the Pot to the kettle as he continues to attack. Gee I wonder why? Hmmm... think you can figure this one out on your own there genius? You haven't to date even with me holding your hand like a child. Somehow I doubt this will be any different. I wait with baited breath for your 'brilliant reply; I'll bet it will be as illuminating as a burnt out light bulb in a broom closet.

      --
      This is my sig. There are many like it but this one is mine.
    17. Re:In the same boat... by roman_mir · · Score: 1

      you use 'attack' and 'defensive' as if they are interchangeable, that's one of your problems, not being able to understand the finer intricacies of the language of which you are supposedly a native speaker. Also I hope you get something useful out of this conversation, because I sure don't. Cheers.

    18. Re:In the same boat... by Foofoobar · · Score: 1

      Wow. You really do have no life. What do you do? Sit in your moms basement all day checking Slashdot every 5 seconds awaiting my response. Cool! It's nice to know I have a troll waiting on my beck and call... ok now troll. Dance for me, DANCE!

      --
      This is my sig. There are many like it but this one is mine.
  6. Thinking in Java by yanyan · · Score: 5, Informative

    Thinking in Java is nice. And it's free. http://www.mindview.net/Books/TIJ/

    1. Re:Thinking in Java by joshuadmorris · · Score: 1

      I recently did a personal review of most of the books out there to help a friend find the same thing. Since you are already a developer and familiar with software development, I think this is the best book out there. It is very in depth and truly does a good job of explaining how to approach a problem from a "Java" perspective.

      As far as learning the J2EE stack, I would not begin that until you have a firm handle on Java. I haven't checked those books out yet since my friend is just beginning. I am sure others have some good input on what's available.

    2. Re:Thinking in Java by Pengo · · Score: 2, Interesting

      Yup, I agree 100%.

      I started reading this book from the internet in 1999 when I started my career in programing Java. It was a great place to start, there might be better material out now but that's what gave me my jump start.

    3. Re:Thinking in Java by dubl-u · · Score: 2, Insightful

      I second that recommendation.

      However, I'd suggest you go pretty light on actually reading the books. Just get in there and build something.

      Sure, you can use the books as references. I'd get O'Reilly's "Java in a Nutshell" reference, and also one or two of their Java cookbooks, so you can look at some reasonably clean example code.

      But you should mainly pick a number of small projects and build them. Java is a mature platform with a lot of history and extensions for all sorts of circumstances. That can be interesting, but you'll need very little of that for a working knowledge. As you build things you'll discover which areas you really need to know more about.

    4. Re:Thinking in Java by renoX · · Score: 1

      It's a good book about the Java language but if memory serves, there's not much the Java's ecosystem: J2EE etc.

    5. Re:Thinking in Java by bacchu_anjan · · Score: 1

      hi there,

          Thinking in Java, 4th Ed(http://mindview.net/Books/TIJ4) is a good book that is good for both the breadth(mostly) and depth of java 1.5.

          you will come away with understanding how you can put java to use for various scenarios. However, this might NOT be the best book for doing web apps.

      If you're looking for the best book in java for server side + web, I would suggest that you go for "Professional J2EE" (http://www.amazon.com/Professional-Java-Server-Programming-J2EE/dp/1861005377). Although this Wrox press book is very old (7 years), it is still the best for a beginner.

          Once you have these 2 books, you should be able to go to get the
      1) Expert J2EE one on one, by Rod Johnson
      http://www.amazon.com/Expert-One-Design-Development-Programmer/dp/0764543857/ref=sr_1_1?ie=UTF8&s=books&qid=1220286715&sr=1-1
      2) Hibernate : "Java persistence with Hibernate" -- http://www.manning.com/bauer2/
          If you want a kick start on Hibernate, then "Hibernate quickly" -- http://www.manning.com/peak/ will serve you good.

      I'm not sure if I can recommend one book that fully covers stack J2EE with Struts, Spring and hibernate to you. The closest is "Spring Primer" by Matt Raible -- http://www.sourcebeat.com/books/springlive.html. I've read an earlier edition of this book and it was pretty good and the author is a pragmatic developer.

      BR,
      ~A

    6. Re:Thinking in Java by Kent+Recal · · Score: 1

      Thinking about java is better: http://brizzled.clapper.org/id/75

    7. Re:Thinking in Java by Anonymous Coward · · Score: 0

      As a judge for the Jolt Awards (and a former reviewer for Software Development magazine, of fond memory), I see a lot of books. A LOT of books. And Thinking in Java is the one I'd recommend. The alternative is Head First Java, which is also quite good. Head First's pedagogy will probably help the concepts stick better than even Eckel's lucid style; OTOH, in TIJ Bruce introduces you to quite a bit more than just the core language.

      Go to your favorite tech book section, pick up these two, and riffle. If you haven't read a Head First book before, don't be put off by the cutesy picture-laden format -- they have put some serious thought into the learning theory behind their books, and (for me at least) it works.

      For a Web developer, the next book is definitely Head First Servlets and JSP. Next step would likely be Head First J2EE (which I haven't read) or something similar, but servlets/JSP will get you more bang for the buck IMHO.

      Get these basic technologies under your belt before you worry about Spring, Hibernate, EJBs, and the rest. I agree with the fellow who points out that the frameworks come and go; master the underlying tech and you can add a framework faster than the Ruby guys can type "rails order_entry_app".

      OK, not that fast :-)

  7. If you have ColdFusion by Anonymous Coward · · Score: 1, Informative

    You have Java. You could start by figuring that out.

    1. Re:If you have ColdFusion by Sczi · · Score: 1

      ColdFusion the language, and Java the language have absolutely zero in common in this context, but nice try. If you don't believe me, go ahead and reply to some job ads for Java programmers, and tell them "no, but I'm great with ColdFusion". However, note that the opposite approach may actually work if it's a big CF shop (if such a thing even exists anymore, sniff).

    2. Re:If you have ColdFusion by Anonymous Coward · · Score: 0

      Never said that they did, but you can mix coldfusion and java in the same pages and start relating the two. If someone has coldfusion experience, it's not a bad way to get a start.

    3. Re:If you have ColdFusion by AKAImBatman · · Score: 1

      The current revision of ColdFusion is based on a J2EE server. The ColdFusion part of it is simply a scripting language running in a servlet container. The end result is that the developer can mix and match Java with ColdFusion, thus using his existing ColdFusion knowledge to extend into Java.

      Or so the theory goes, at least. In practice, it seems to give CF developers the wrong idea.

  8. Re:Good place to start... by kannibal_klown · · Score: 1, Informative

    I never really liked NetBeans, I tried it with ver 5 and decided to stick with IntelliJ and Eclipse.

    Recently I decided to give NetBeans 6.1 a try and was quite impressed. There was little/no noticeable lag, unless I was coding while I was "running/debugging" a long-running process.

    There are many things it does that I like over Eclipse.

  9. What about C# by coop247 · · Score: 0

    I would suggest C# instead of Java. They are very similar languages but I find C# to be easier and more powerful. The Visual Studio development environment just blows Eclipse out of the water. I know its easy to hate MS, but their dev tools are just better than everyone else. Also, there are just as many if not more .NET jobs out there.

    --
    //TODO: Insert catchy phrase
    1. Re:What about C# by the+eric+conspiracy · · Score: 2, Informative

      Dice.com -

      Search Java - 14480 hits
      Search C# - 7146 hits

    2. Re:What about C# by skrolle2 · · Score: 1

      I agree that C# is a nicer language than Java, but Eclipse is so much better than Visual Studio out of the box. I use an add-on called ReSharper which makes VS almost as good as Eclipse, but not quite.

      Also, knowing java allows you to learn C# very, very quickly, and then you can decide for yourself which language you like better.

    3. Re:What about C# by Anonymous Coward · · Score: 1, Interesting

      In what ways is C# better than Java? Same with Visual Studio being better than Eclipse. You're making one of those "more better" statements without actually qualifying it.

      My recipe for learning Java is to get Netbeans, Findbugs and PMD and start here.

      http://www.netbeans.org/kb/index.html

      You should also learn Groovy/Grails for getting stuff done quickly. Netbeans 6.5 will ship with these plugins. It's pretty cool stuff.

    4. Re:What about C# by coop247 · · Score: 1

      Wow, a one word query, bravo. Unfortunately Java is included in nearly every programming ad, whether or not it is the main dev language required. My last 3 jobs had Java in the ad, yet every one of those companies did all new dev in C#. I'm not saying Java it isn't popular, but .net is right up there with it in terms of use.

      --
      //TODO: Insert catchy phrase
    5. Re:What about C# by the+eric+conspiracy · · Score: 1

      Unfortunately Java is included in nearly every programming ad

      Dice search -
        C# Java - 1807 hits.

      Apparently NOT.

    6. Re:What about C# by cyberjessy · · Score: 1

      Also, knowing java allows you to learn C# very, very quickly, and then you can decide for yourself which language you like better.

      That used to be true, but - not - anymore.

      I am not interested in commenting on this thread, just wanted to dispel the notion that C# is still a Java clone.

      --
      Life is just a conviction.
    7. Re:What about C# by Z00L00K · · Score: 2, Interesting

      I wouldn't say that C# is easier or more powerful. It's similar to Java, but also different.

      And personally I don't like the Visual Studio environment. It has some advantages if you develop specifically for Microsoft environment, but if not you are at a dead end. (Yes I know that Mono exists, but still)

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    8. Re:What about C# by Anonymous Coward · · Score: 0

      try .net vs java...

    9. Re:What about C# by coop247 · · Score: 1

      My years of experience as a Java/C# developer are no match for you magical "dice." Someone alert the scientific community, knowledge and experience are useless, magical "dice" will reveal all.

      --
      //TODO: Insert catchy phrase
    10. Re:What about C# by abdulla · · Score: 1

      That does not make it significantly different. I'm sure in time you'll see something similar in Java too, they seem to follow each others lead quite a lot.

    11. Re:What about C# by jhol13 · · Score: 1

      I sincerely hope Java will not get closures.

      The generics fiasco was bad enough (The tutorial http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html has over 400 pages ...).

      Unfortunately I cannot find the web page I had in mind now ...

    12. Re:What about C# by extrasolar · · Score: 1

      I'm surprised you didn't mention that Java is also a popular beverage as well as a major city.

      To be fair C# is a musical note.

    13. Re:What about C# by extrasolar · · Score: 1

      My bad. Didn't read the grandparent carefully enough :)

  10. Thinking in Java by lurker-11 · · Score: 5, Informative

    Thinking in Java is a good book on the Java language. You can read it online at the author's web site: http://www.mindview.net/Books/TIJ/

  11. If you know C++ ... by cpu_fusion · · Score: 2, Insightful

    ... then learning Java, EJB, etc. ... it should be a walk in the park. You shouldn't even need a book. Just go get the specifications from the Sun site and read them.

    Seriously, Java is orders of magnitude more simple than C++. (That's a pro and a con.)

  12. where to start by Anonymous Coward · · Score: 2, Funny

    public static void main () {

    1. Re:where to start by JasterBobaMereel · · Score: 1

      In the Words of Lewis Carroll

      "Begin at the beginning and go on till you come to the end; then stop"

      --
      Puteulanus fenestra mortis
    2. Re:where to start by LizardKing · · Score: 3, Funny

      I assume this Lewis Carroll fellow was only writing batch programs.

    3. Re:where to start by jzuccaro · · Score: 1

      public static void main(String args[]){
      System.out.println("there, fixed for you");
      }

  13. Try javabat.com by icknay · · Score: 5, Informative

    For basic coding practice, try the free http://javabat.com/ -- it has little coding problems (logic, strings, arrays, recursion) that run right in the browser, so you get immediate feedback. It's great for building skill in the basics, but it's no substitute for building larger programs. Disclaimer: I built it

    1. Re:Try javabat.com by Anonymous Coward · · Score: 0

      Wow, this is awesome to say the least thanks for the link!

    2. Re:Try javabat.com by Yhippa · · Score: 1

      Great website, I like it. Honestly most of the websites and books out there just go over how to do things but rarely go over exercises. Actually doing what you're reading about is incredibly important IMHO to really learning this stuff.

    3. Re:Try javabat.com by Cow+Jones · · Score: 1

      This is a lot of fun, thank you!

      BTW, I sure hope you're not logging all those embarrassing newbie mistakes :-)

      --

      Ah, arrogance and stupidity, all in the same package. How efficient of you. -- Londo Mollari
  14. Comment removed by account_deleted · · Score: 1, Informative

    Comment removed based on user account deletion

  15. Servlets by Anonymous Coward · · Score: 0

    Learn servlets, and database connection pooling.

    Don't get pushed into learning the full J2EE. Any project using EJB's is going to be a complete mess.

    To work with just servlets and database connection pooling, get Tomcat http://tomcat.apache.org/ and DBCP http://commons.apache.org/dbcp/ from Apache.

    Once you have some idea of how to work with those those two, you can use JSP with Struts or Spring and Hibernate, or whatever.

  16. Re:Good place to start... by thermian · · Score: 1

    Eclipse is pretty good actually, I hated netbeans too.

    --
    A learning experience is one of those things that say, 'You know that thing you just did? Don't do that.' - D. Adams
  17. Read some core Java books by Anonymous Coward · · Score: 1, Interesting

    I would read:
    Head First Design Patterns
    Effective Java
    Pragmatic Programmer
    I found it useful when I was learning the language to have Java in a nutshell

    If you want to do Java web programming learn Struts.

    1. Re:Read some core Java books by Larry_The_Canary · · Score: 1

      Good list! When I first read the question the first thing that popped into my mind was design patterns. I would add 'Unit Testing in Java' to that list. Also I don't know if one exists but if you can find a book/article on effective use of java-doc not only will you benefit but you'll be more popular with the group of people who have to read your code.

  18. sun certified developer. by leuk_he · · Score: 4, Informative

    Sun has developed a program to train for java.

    read at the sun site

    java is relative simple. Those certification programs give you a guideline what is involved in certain roles. But java is MUCH and lots of simple libraries. that is what people underestimate.

    I understand you might not need certification, but the knowledge described there gives a good idea what you need/can put on your CV.

    1. Re:sun certified developer. by dubl-u · · Score: 1

      I understand you might not need certification, but the knowledge described there gives a good idea what you need/can put on your CV.

      I'd mostly agree, but I encourage young'uns to be very careful around certification programs. Certifications might be swell if you're looking for some sort of sucky junior programming job at a bank. But if I see a bunch of Java certifications on a resume, that's a big red flag to me. The best programmers I've hired don't have certifications, they have accomplishments.

    2. Re:sun certified developer. by Anonymous Coward · · Score: 0

      The Sun certification isn't worth it. Going through the process may teach you some of the finer points of the language, but as far as real world job skills goes, it's useless. Anyone on my team who *ever* pulled some of the coding crap they do in the test problems and examples would be fired. Period. Learning how to do that is not conducive to working with a team.

    3. Re:sun certified developer. by bckrispi · · Score: 1

      True, but an entry-level Java programmer won't have many accomplishments, will he?

      --
      Xenon, where's my money? -Borno
    4. Re:sun certified developer. by dubl-u · · Score: 1

      True, but an entry-level Java programmer won't have many accomplishments, will he?

      I would hope they do.

      If somebody has minimal work experience, I want to see a portfolio of things they've built on their own. They don't have to be particularly mighty, but they should at least work for them. They get bonus points if other people are using them. E.g., via the web or via an open source project.

      I'm not interested in hiring somebody who only builds things when a boss tells them to. I want people who are so excited about programming that they'll be doing it whether or not somebody pays them for it.

    5. Re:sun certified developer. by LarsWestergren · · Score: 1

      As someone who has taken several of these - Java Associate is for those completely new to programming, if you can write anything above Hello World you won't need it.

      Java Programmer is worth taking, and is mandatory to do the rest. Also worth it is Java Developer where you write a small app from a deliberately ambiguous specification and have to demonstrate that you understand the basics of threading, encapsulation etc.

      Business Components is (last time I looked) based on old, heavyweight EJB 2, and a huge part of the exam consists of memorizing XML config files and the exact name and parameters of methods in the APIs. Not fun to learn, and not fun to work with. Web Components (servlets, JSP) is better, but that too has a little too much XML stuff and is getting a bit aged.

      --

      Being bitter is drinking poison and hoping someone else will die

    6. Re:sun certified developer. by jalefkowit · · Score: 1

      java is relative simple

      (Head explodes)

    7. Re:sun certified developer. by leuk_he · · Score: 1

      If your head explodes you need a neuro surgeon. Now we are speaking about a complex job.

      PS mod me as funny.

    8. Re:sun certified developer. by Anonymous Coward · · Score: 0

      Link down or broken...

  19. Head first by oliderid · · Score: 3, Informative

    My first Java book was: head first. http://oreilly.com/catalog/9780596004651/

    This great if you have little experience with an object oriented language. They state that they are funny...Well sometimes they are :-).

    Another way to learn java is to code a little Java mobile App. This is fun, the API is quite limited usually and so you don't need hours of documentation before seeing something nice.

    The blackberry IDE was free and really nice to use back in my early days. You get the basic before heading to more serious things.

  20. Job or knowledge? by Anonymous Coward · · Score: 2, Insightful

    If you want a Java job, just update your resume to say that you know Java. I have met lots of J2EE experts at work, who would not be able to code a "Hello World" program, if their jobs depended on it. Also learn lots of buzz words.

    If you want to learn Java for knowledge, join a community college, install Eclipse and get started.

    1. Re:Job or knowledge? by turingcomplete · · Score: 1

      I would never take a job if they didn't give me thorough technical interview, including writing actual code. Otherwise you take a big chance of working with a bunch of chumps, which sounds exactly like what happened to you.

    2. Re:Job or knowledge? by mpcooke3 · · Score: 2, Insightful

      Only problem with this strategy is that the only companies that will employ you are full of numptys that don't know what they are doing.

      These places are usually god damn awful places to work.

    3. Re:Job or knowledge? by dubl-u · · Score: 2, Interesting

      I have met lots of J2EE experts at work, who would not be able to code a "Hello World" program,

      Just for those who think he's kidding:

      Having people do "Hello World" on the whiteboard is one of my standard interview questions. I'm pretty good at weeding out the enterprise 'tards by resume alone, but I'm still surprised how many people are unable to write a working "Hello World" program from scratch. Maybe a third of my first-round interviewees fail this.

    4. Re:Job or knowledge? by MillionthMonkey · · Score: 5, Funny

      Hello World? That's easy!
      public interface MessageStrategy {
            public void sendMessage();
      }

      public abstract class AbstractStrategyFactory {
            public abstract MessageStrategy createStrategy(MessageBody mb);
      }

      public class MessageBody {
            Object payload;
            public Object getPayload() {
                  return payload;
            }
            public void setPayload(Object payload) {
                  this.payload = payload;
            }
            public void send(MessageStrategy ms) {
                  ms.sendMessage();
            }
      }

      public class DefaultFactory extends AbstractStrategyFactory {

            private DefaultFactory() {}

            static DefaultFactory instance;

            public static synchronized AbstractStrategyFactory getInstance() {
                  if (null==instance) instance = new DefaultFactory();
                  return instance;
            }

            public MessageStrategy createStrategy(final MessageBody mb) {
                  return new MessageStrategy() {
                        MessageBody body = mb;
                        public void sendMessage() {
                              Object obj = body.getPayload();
                              System.out.println((String)obj);
                        }
                  };
            }
      }

      public class HelloWorld {
            public static void main(String[] args) {
                  MessageBody mb = new MessageBody();
                  mb.setPayload("Hello World!");
                  AbstractStrategyFactory asf = DefaultFactory.getInstance();
                  MessageStrategy strategy = asf.createStrategy(mb);
                  mb.send(strategy);
            }
      }

    5. Re:Job or knowledge? by dubl-u · · Score: 1

      Hah! That's awesome.

    6. Re:Job or knowledge? by Anonymous Coward · · Score: 0

      5, Insightful?
      This was funnier than hell!

    7. Re:Job or knowledge? by MillionthMonkey · · Score: 1

      Crap, I thought I removed that cast to String. It makes the factory class type-specific for no good reason.

    8. Re:Job or knowledge? by glgraca · · Score: 5, Funny

      You really should use some XML to configure this application.

    9. Re:Job or knowledge? by HungWeiLo · · Score: 1

      This is actually true. I applied for a Java job that requires Spring and Hibernate knowledge. I was a C/C++ embedded guy. They required me to pass a Brainbench Java test before an interview. I read a few Wikipedia articles on Java, Spring, and Hibernate and passed the test with flying colors. (Disclosure - I've had a little Java experience before, but nothing beyond simple data structures and some Hello World's dealing with file I/O).

      I went in the interview and made an offer right on the spot. All I needed was a working knowledge of OO basics and a smattering of SQL and the keywords "extend" and "implements".

      Either the standards were not that high or they figured I could learn on the job.

      --
      There are a huge number of yeast infections in this county. Probably because we're downriver from the bread factory.
    10. Re:Job or knowledge? by MillionthMonkey · · Score: 2, Funny

      And it should be retrofitted to use the org.springframework.helloworld.core.* classes.

    11. Re:Job or knowledge? by arethuza · · Score: 1

      Shouldn't there be a SOAP webservice in there too - otherwise how will this scale to tens of users?

    12. Re:Job or knowledge? by wdsci · · Score: 1

      All the cool geeks use generics these days ;-)
        public class MessageBody<T> { ...
        }

    13. Re:Job or knowledge? by Anonymous Coward · · Score: 0

      It needs struts. Everything works better on struts/rails/skis, etc.

    14. Re:Job or knowledge? by Anonymous Coward · · Score: 0

      LOL! This is hilarious - what a classic!

  21. Don't use Java by Anonymous Coward · · Score: 4, Informative

    As a person in charge of desktop imaging and 3rd level support at a company of 100,000 desktop and notebooks, I'd first say, "don't use Java at all". My second thought is, "well, if you must use it at all, use it only on the server.".

    Unfortunately Sun, in its infinite wisdom, has no idea at all how to patch. They have security vulnerabilities all the time and they make you install a completely new version of Java in a new folder each time. Their "updates" leave the older vulnerable versions behind (and still accessible by malicious code). Their updates break applications all the time. We are constantly having to deal with issues like the current one we have: there are known vulnerabilities in JVM 1.6.0_05b13, but there are some serious problems with deploying the "fixed" version as it causes bizarre error messages and slows Internet Explorer down. Both are acknowledged bugs, but won't be fixed soon. So you end up stuck between securing the systems and having the systems actually work right.

    Sun Java is a continual nightmare.

    I'll say one thing from Microsoft - when you could use MS Java it never (not once in the several years we supported it) broke apps and patches were actually PATCHES and not whole new broken versions.

    Java - just say no until they actually learn how to update and patch correctly.

    1. Re:Don't use Java by RedK · · Score: 1

      I'll say one thing from Microsoft - when you could use MS Java it never (not once in the several years we supported it) broke apps and patches were actually PATCHES and not whole new broken versions.

      Rewritting history much ? MS Java almost killed Java by breaking every app written to the Java standard. They stuck with an old specification which they then extended with proprietary stuff and made developpers believe that it was Java when in fact it wasn't even at all by the time the court case forced them to remove it from circulation and stop calling it Java.

      --
      "Not to mention all the idiots who use words like boxen."
      Anonymous Coward on Monday August 04, @06:49PM
    2. Re:Don't use Java by multipartmixed · · Score: 1

      What's REALLY odd is that the Sun Solaris guys *do* know to patch. They've been doing a great job for over a decade.

      Well, although, recently, they've had their heads messed with by the people who want to sell support licenses.

      But I can't for the life of my understand why the Java group is so thorough thick. It's as though when they started the Java project they hired ONLY noobs, and even today, have only promoted from within and forbidden senior developers or experienced managers from joining the group.

      --

      Do daemons dream of electric sleep()?
    3. Re:Don't use Java by Anonymous Coward · · Score: 0

      They have security vulnerabilities all the time and they make you install a completely new version of Java in a new folder each time. Their "updates" leave the older vulnerable versions behind (and still accessible by malicious code).

      It's even better than that. They actually do package their updates as patches to previous versions.

      So what happens when you're installing 1.6.0_07 is that it creates the new 1.6.0._07 directory and then installs 1.6.0 into it. It then patches it to 1.6.0_01, then 1.6.0_02, and so on up to 1.6.0_07.

      Which completely misses the entire point to using patches in the first place!

      And on that note:

      java -version
      java version "1.6.0_06"

      Odd, I could have sworn I patched that to 1.6.0_07 ... oh, I did. Java 1.6.0_06 is still sticking around and apparently Java neglected to update the little Java stub it sticks in C:\WINDOWS to the new location. Son of a bitch.

    4. Re:Don't use Java by Anonymous Coward · · Score: 0

      What's your point? If you were using Java around the time Sun sued Microsoft, you'd know that Microsoft's implementation of Java was far superior to Sun's. Why do you think Sun sued them? Because Microsoft was better at Java than they were!

      In fact, Sun's Java didn't really catch up to Microsoft's Java until, let's say, Java 2, which was several years after the lawsuit ended.

      Sun's Java tools didn't really catch up to Microsoft's until Java 1.4. (That's after Java 2 thanks to Sun's incredibly stupid version scheme: the major versions of Java have been 1.0, 1.1, 2, 1.3, 1.4, 5, and 6.)

      You're right, Microsoft's Java was non-standard, because Microsoft added in the massive load of things that were missing from early versions of Java. Sun didn't finally get around to adding them until well after they sued Microsoft.

      There's nothing that says Microsoft couldn't have made a better Java than Sun while still being incompatible with Sun's Java. In fact, it's pretty much guaranteed that by being a better Java than Sun they'd be incompatible.

    5. Re:Don't use Java by danieltdp · · Score: 1

      Funny. At my job we too have hundreds of worstations (both windows and linux) running at least a coulpe of critical java apps and we don't have 1% of the problems you are reporting.

      --
      -- dnl
    6. Re:Don't use Java by Z00L00K · · Score: 1

      Overly exaggerated.

      But the MS Java was the absolutely worst thing that could happen to Java since Microsoft thought that it should be done their way instead of the compatible way.

      There are reasons behind the version handling too, and that's for good and bad... Just because Microsoft has one way of handling patches doesn't mean that it is the right way.

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    7. Re:Don't use Java by Anonymous Coward · · Score: 0

      There's a difference between a patch and a release. Patches are something you slap on haphazardly as needed to make incremental repairs. A release is an integrated unit that incorporates all the changes, not just a smorgasbord, and - for Sun at least - that integrated release has been submitted to extensive testing for all target architectures and OS's.

      Java is managed with sufficient discipline that a continuous stream of patches and hotfixes are not normally necessary. Were it otherwise, Sun certainly has the experience to supply patches, just as IBM has before them. I remember the joys of SPZAP. Thanks, but no thanks.

      I don't know what you're running that breaks between Java releases, but it's atypical. First, because Sun doesn't screw around with API's after they've been made part of the standard, no matter how badly. At best, they mark stuff deprecated so you have time to repair it outside of panic mode. That's something Microsoft doesn't feature.

      Secondly, unlike Microsoft and their database interface-of-the week or their SOAP interfaces, Sun doesn't release it, then discard it for something essentially similar but totally incompatible. I've never forgiven Microsoft for what they did to their SOAP APIs right in the middle of my developing the app.

      I can list a LOT of things not to like about Java, but saying that Microsoft is a more stable and manageable environment is just off the scale. Last week I took a complex app developed in Java in 2001 and got it running a matter of days after replacing some obsolete 3d-party resources. If I'd tried that under Windows, it would have taken me days just to get all the infrastructure required to compile something that old back up and running. Including probably dragging out my original NT install CDs. As for upgrading to run native on Vista? I don't even want to think about it.

    8. Re:Don't use Java by jzuccaro · · Score: 1

      Yep, and if you, by any chance, update the java security policy in order to give especial privileges to certain code you lose all that with every new version.

    9. Re:Don't use Java by MillionthMonkey · · Score: 1

      If you were using Java around the time Sun sued Microsoft, you'd know that Microsoft's implementation of Java was far superior to Sun's.

      Microsoft's "implementation of Java" only worked on Windows. They should have just called it C# from the beginning and let it compete on merits instead of trying to confuse everyone with the name.

    10. Re:Don't use Java by Anonymous Coward · · Score: 0

      So? Sun's implementation at that time ran on a total of two operating systems: Windows and Solaris.

      And almost everyone using it was using Windows. And it ran best, when it ran at all, under Windows.

      Java's "write once debug everywhere" promise never really came about until around Java 1.4 when they finally started supporting more UNIX-like environments than just Solaris, and that was WELL after the whole Microsoft suit.

    11. Re:Don't use Java by Anonymous Coward · · Score: 0

      Having worked on Java under Windows, I can honestly say that it leaked resources and garbage collection caused infrequent pauses.

      The best thing about Java on Windows is that it taught Microsoft an important new paradigm: virtual machines enable complete CPU architecture abstraction, which allowed compiler development to be platform independent and shift the focus towards offering more varied and richer languages. This gives Microsoft the option which they were afraid Sun would realise before them - that of running their software on every platform.

      Today Microsoft don't even allow Java to be enabled by default in their browser, which shows unparalleled guile since Sun's VM paradigm is now at the heart of Microsoft's philosophy.

    12. Re:Don't use Java by julesh · · Score: 1

      I'll say one thing from Microsoft - when you could use MS Java it never (not once in the several years we supported it) broke apps and patches were actually PATCHES and not whole new broken versions.

      That's because they never bothered adding new features to it. When they withdrew it in -- what, 2003? -- it was functionally equivalent to Sun's v1.2, which was released in 1998. It's easy to ensure patches don't break stuff when you're implementing a 5 year old standard.

    13. Re:Don't use Java by Anonymous Coward · · Score: 0

      odd, i've never had this problem when dealing with non microsoft desktop environments. maybe youre problem might be microsoft specific? i mean, it's not like a reputable convicted monopolist like microsoft has an incentive to keep crossplatform technologies off of their systems or anything.

    14. Re:Don't use Java by The_reformant · · Score: 1

      Java isnt just for applets you know. Nowadays most apps will install their own JVM to be sure they're running on a supported level and so shouldnt impact someone doing imaging at all. Sun is also not the only provider out there.

      If you're major concern about java is in internet explorer then you don't really understand java.

      --
      I have discovered a truly remarkable sig which this post is too small to contain.
    15. Re:Don't use Java by Anonymous Coward · · Score: 0

      That's a no-go. If that JRE has a security hole in it, you MUST be able to patch it to a version that doesn't.

      If the app doesn't allow that (and they won't, for a variety of reasons) then you simply can't use the app.

      And, yes, this has come up before. Just say no to apps with bundled JREs. Which, as you point out, is basically all Java apps.

      So just say no to Java.

    16. Re:Don't use Java by Anonymous Coward · · Score: 0

      So... What's stopping you from uninstalling the old version and keeping the new one?

      The only reason they keep the old version is that some third-party apps require a specific version of Java to run. Generally these are business apps that stupidly check for a specific version number in the registry, or look for a specific path.

      So delete the old version and install the new one.

      What's the big deal?

    17. Re:Don't use Java by Anonymous Coward · · Score: 0

      Or if you're not a moron, just don't use the bundled JREs to run the code that they were bundled with...?

      Sure, there are occasional bits of code that are compiled for a newer JRE than the one you have, but I recall needing to download new .Net runtimes too.

  22. I beg to disagree by thermian · · Score: 5, Insightful

    Java is a good language to learn for the current marketplace.

    The real problem thats putting people at risk of outsourcing is not the choice of language.

    Its all about your skill as a programmer. If you're average, then there are plenty of average coders willing to work for less in India.

    No, you've got to be better then average, great even, and that takes a lot of work.

    --
    A learning experience is one of those things that say, 'You know that thing you just did? Don't do that.' - D. Adams
    1. Re:I beg to disagree by MrNaz · · Score: 4, Interesting

      Come on now. I'm getting tired of all the "I'm thinking of learning $fooCommonThing and I need Slashdot to spoon feed me Google results." type questions.

      I cannot believe this made front page when there are other, rather good questions in the firehose that would result in good dialog and idea exchange, but that get rejected.

      Seriously, is there some shortage on Java dicumentation out there or something? Granted, I don't know the language as I never had a need for it, but I can't trip over without falling into a pile of Java tutorials.

      Here's my answer to this particular Ask Slashdot.

      --
      I hate printers.
    2. Re:I beg to disagree by Anonymous Coward · · Score: 2, Insightful

      Companies are perfectly willing to sacrifice good code for mediocre as long as they can pay the programmer less.

    3. Re:I beg to disagree by morgan_greywolf · · Score: 2, Insightful

      Agreed. I don't see how anyone would be unable to find information about Java. I search for obscure and finer points of HTML, CSS, Python, Perl and other stuff all the time and run into Java stuff in my search results. I see so much information about Java that I sometimes puke Java in my sleep!

      Seriously.

      It's not that hard to find.

    4. Re:I beg to disagree by prenk20 · · Score: 3, Insightful

      Agreed, if you are as familiar with php C/C++ like you claim to be, then you should find migrating to Java no problem at all, it is afterall a C derived syntax.

      --
      >JJ
    5. Re:I beg to disagree by Anonymous Coward · · Score: 2, Funny

      so, the garbage cleanup is a good function for you?

    6. Re:I beg to disagree by ScuttleMonkey · · Score: 5, Insightful

      Frankly I'm a little tired (although not surprised) of the constant "omg just google it...I know lots about this subject so it is clearly not worth discussing" that seems to appear on the ask slashdots. I'll refrain from a tiresome rant that I'm sure we all can visualize without actually having to write it down.

      However, wrt to this particular question, if you look closely he wasn't asking "how do I learn Java" or "where can I find info about Java", he was asking for those with experience to help direct his path of learning. It is precisely the abundance of Google results that probably prompted this question.

      I know that on broad topics I am often frustrated by the abundance of crap that I have to wade through in order to get to the few gems that are worth reading. When it comes to long-winded textbooks and weeks-long learning processes I would be more than happy to allow someone with years of experience to direct me to the optimal path of learning (why going to school still makes at least a little sense).

    7. Re:I beg to disagree by phidipides · · Score: 5, Insightful

      "Come on now. I'm getting tired of all the "I'm thinking of learning $fooCommonThing and I need Slashdot to spoon feed me Google results." type questions."

      As someone who has interviewed and hired a lot of Java developers I'd tend to agree with the parent. In interviews it's very easy to figure out who learned Java simply to put it on a resume and who actually knows how to use the language, and the submitter seems like the latter. Rather than setting out to put Java on your resume, pick a project, find the best tools, and then put that on your resume. For example, set up a personal web site and create a Java message board - you'll probably learn a bit of JSP, Tomcat setup, and JDBC in the process. Alternatively, set a goal of contributing to any one of the ten bazillion open source Java projects out there, or find some other project that interests you. But don't come on Slashdot and basically say "I want to get Java on my resume" - every resume I see has "Java" on it, and it's easy to tell the folks who have experience doing something with Java from those who read a couple of O'Reilly books thinking it would get them a job.

    8. Re:I beg to disagree by phidipides · · Score: 1

      "In interviews it's very easy to figure out who learned Java simply to put it on a resume and who actually knows how to use the language, and the submitter seems like the latter."

      Dammit, that should read "seems like the former". I even previewed...

    9. Re:I beg to disagree by Spy+der+Mann · · Score: 5, Insightful

      Agreed. I don't see how anyone would be unable to find information about Java.

      Doh! Ever heard of the term "Information overload"? The problem isn't that he can't find info about java. The problem is that java is so f***ing complicated that you would need a 3D map to start with it.

      Where I live there are very often job postings requesting java programmers expert in X,Y or Z framework (struts is a famous one), who have also worked with Netbeans and some other stuff, and it's preferred if you have worked in XX, YY and ZZ java stuff.

      See, one thing is knowing PHP and a couple of frameworks like Drupal / Joomla, and some standard toolkits like PEAR. But java is a super-complicated behemot. Some guy showed me a diagram of java classes and it was a poster that occupied the space of an entire whiteboard (the big ones used in classrooms). How can you expect someone not to get scared at that thing?

    10. Re:I beg to disagree by CountBrass · · Score: 0, Offtopic

      I agree with you. He'll also get comments like mine (I've been developing Java apps since it first released in 1472) begging him to run as fast as he can and pick something else (C if he wants to be a real programmer, Ruby on Rails if he wants to be happy).

      --
      Bad analogies are like waxing a monkey with a rainbow.
    11. Re:I beg to disagree by mrops · · Score: 5, Informative

      Doing java dev for more than 10 years, I think this is a valid question. Java is not about the core J2SE anymore, I was fortunate that java evolved along with my career, so i picked things up as they came to market. Further google is excellent if you know what you are looking for, however in this case, the author does not even know what he is looking for.

      Now to answer the question.

      First read Just Java by Peter van der Linden (if I spelled the name correct). Excellent book.

      Get Eclipse IDE and learn jdbc, JSP/servlets, and struts preferable in that order. Except for struts Just Java should give you a primer on each, struts has a decent website with tutorials.

      I would skip EJB/J2EE for now and jump to spring and later hibernate. You will find great tutorials on their websites.

      Somewhere along the process also introduce yourself to JNDI, particularly JNDI when it talks to LDAP, this is a given when u are coding an enterprise app.

      At this point you would know enough to do a decent job as a java developer, more importantly you would know what to do next.

      This is what I can think of on labour day long weekend :)

    12. Re:I beg to disagree by ccguy · · Score: 4, Insightful

      Its all about your skill as a programmer. If you're average, then there are plenty of average coders willing to work for less in India.

      I read this argument often here in slashdot...you seem to believe that all Indian programmers are average or below average (compared to American programmers) so not being outsourced just a matter of working hard.

      Guess what, because their population is almost 4x the US' and generally speaking they have more serious unsatisfied needs, your solution will not work. In fact it will do the opposite, as everyone (worldwide) will work harder therefore giving more for the same money.

      I don't have a fair solution to the global outsourcing problem but it can't be 'working harder'. Time for other things is important, you know.

    13. Re:I beg to disagree by morgan_greywolf · · Score: 5, Informative

      You have to start somewhere. Just like if you wanted to learn PHP, the PEAR toolkit, and Drupal or some other 'framework' for Web applications in PHP, or whatever. Or, as an example I'm more immediately familiar with would be knowing Python, mod_python, Django, WSGI and a database like MySQL or Postgres.

      You start by learning Python. Then you move on to MySQL. And then you might learn mod_python and finally WSGI and then Django. But you have to start with one concept and move on the next and the next and the next until you have enough knowledge to cover what you need to know.

      So with Java, you might start with Java, move on to Netbeans, etc. Learn any frameworks, etc. You start with one thing and move on to the next. YOu need to learn increasing levels of complexity. SO obviously you need to have a grounding in Java before you learn Swing. And Java basics before J2EE. And so forth.

    14. Re:I beg to disagree by Anonymous Coward · · Score: 0

      Maybe someone wants to post a question asking people in a setting where he trusts their opinion instead of leaving it open to Google - your taking the time to gripe about this even though you don't work with Java also signifies that you'd rather nitpick on others rather than just realize that other people who use this site have other interests than you.

    15. Re:I beg to disagree by Spy+der+Mann · · Score: 1

      So with Java, you might start with Java, move on to Netbeans, etc. Learn any frameworks, etc. You start with one thing and move on to the next. YOu need to learn increasing levels of complexity. SO obviously you need to have a grounding in Java before you learn Swing. And Java basics before J2EE. And so forth.

      Thanks for the answer. So, in your experience, what toolkits/frameworks/examples/whatever do you recommend to start with? Something not complicated to learn, that might actually be used in one of today's jobs?

    16. Re:I beg to disagree by Anonymous Coward · · Score: 0

      I know that on broad topics I am often frustrated by the abundance of crap

      I agree, by the way, I am learning Perl, which should I do first? Learn how to use WWW::Mechanize or LWP? DBIx::Class or plain DBI? Should I start with a framework like Catalyst or give a go at CGI and hope for the best?

      I googled all these but I got so many results that it was hard for me to pick one to start first. I'd start reading the manuals available on CPAN but they're such large and hefty technical documents that it's a big timesink and I don't want to commit any time researching these subjects properly.

      The good news is though, that totally unrelated to this I already master teh rubies and teh pythons. Somehow I managed to find suitable material for learning those languages and the libraries and frameworks that come with them, while they have a boatload of results on google too. I wonder how I managed to do that without asking slashdot.

      Frankly I'm a little tired (although not surprised) of the constant "omg just google it...I know lots about this subject so it is clearly not worth discussing" that seems to appear on the ask slashdots. I'll refrain from a tiresome rant that I'm sure we all can visualize without actually having to write it down.

      I'm not going to refrain from a long rant here.

      Frankly, I'm getting a little tired of slashdot itself lately. I've gone from reading slashdot daily nearly 10 years ago, to reading the headlines on an RSS feed and visiting the site about once a month.

      You keep improving the technical aspects of the site, but the quality of the content itself declines rapidly. Look at the past Ask Slashdots, and count how many questions can be answered with a single sentence or abreviation (RTFM doesn't count).

      • Typical Home Bandwidth Usage? Use SNMP or iptables for a couple of months, barring that ask the people around you (friends, coworkers) whose habits you know best.
      • Any Suggestions For a Meaningful Geeky Wedding Band? Can't you even decide on the ring for the woman you love?
      • How Can Nerds Make a Difference In November? VOTE
      • What To Do With All of My Gadget Chargers? Sort them alphabetically or by popularity, do not insert into bodily orifices.
      • Are IT Security Professionals Less Happy? No, happiness depends on several factors not all work-related.
      • Providing a Whitelisted Wireless Hotspot? openwrt, iptables, squid, and for the love of god at least check it with nmap and make sure your acls in squid are correct
      • How Do I Prevent Lan Party Theft? Hire security, have people tag their stuff with their name, and put up a large sign saying "We're not responsible if someone steals your stuff"

      Ask slashdot is reaching an alltime low lately, and the only thing that keeps it from becoming the main competitor for Yahoo Answers is the fact that its users have discovered the spellchecker and usually ask somewhat geek-related questions.

      With no disrespect intended, slashdot itself has become inferior in quality lately (and with lately I mean the past couple of years).

      • Press releases copied verbatim onto slashdot promoting some product
      • single link articles to some angsty teenager and his crusade against the big evil microsoft empire or some paranoid highschool student who's been smoking too much pot claiming his windows has been spying on him (without a single credible bit of proof)
      • no link articles without the editor even bothering to read the content
      • Idle articles full of slashdot "fanmail" (I forgot the creative term the editor used in the first batch) which isn't even remotely funny or interesting

      You'd think that firehose would improve the content somewhat, but instead it's subjected to the same stress as the moderating system: abuse. Add to that the fact that some of your editors seem all too keen on picking the worst stories they can get their hands on, and making them front pag

    17. Re:I beg to disagree by ChrisCampbell47 · · Score: 1

      Here's my answer to this particular Ask Slashdot.

      You've ripped off the original. Which you can use to actually provide a useful query string instead of just snark.

    18. Re:I beg to disagree by poopdeville · · Score: 1

      Beginners can't make informed decisions.

      I have a copy of an out of date Java 6 book right next to me, because it tied itself to the wrong framework flavor of the month. That money sure was well spent.

      --
      After all, I am strangely colored.
    19. Re:I beg to disagree by ardle · · Score: 4, Informative

      Look out for Java books by Cathy Sierra, very insightful and easy reading. Get to know Collections API (part of Java) early: you'll learn important stuff along the way that you can take anywhere.
      As regards frameworks, take a look a Spring - but not until you understand core Java (the principles, not the libraries). Spring has a Web Container but Tomcat is better if starting from first principles (or, at least, it used to be good. It's the "reference" Servlet container, for what it's worth). EJB container: do it with Spring (or some such). JBoss has (is? I don't know any more) an EJB container. EJBs are low-priority: they're really just a kind of "sandbox" environment where resources are closely managed. Thankfully, that environment has just become easy to program.
      As regards IDEs, Eclipse is what I use ATM. Most vendors' IDEs (IBM, Oracle) are built around Eclipse. It's pretty easy to run simple programs there but the interface isn't very familiar (jargon-wise) to newcomers. I hear that NetBeans is very good these days.

    20. Re:I beg to disagree by poopdeville · · Score: 1

      I agree, by the way, I am learning Perl, which should I do first? Learn how to use WWW::Mechanize or LWP? DBIx::Class or plain DBI? Should I start with a framework like Catalyst or give a go at CGI and hope for the best?

      Catalyst paired with DBIx::Class is a very good approach. WWW::Mechanize versus LWP is a trivial issue -- their interfaces are tiny. Regarding DBI, you will pick some up when you configure DBIx::Class.

      See, you can answer a simple question without being a pompous ass. Well, I can. Or, more generally, "one can".

      --
      After all, I am strangely colored.
    21. Re:I beg to disagree by cjalmeida · · Score: 1
      My "Java path" would be as follows:

      J2SE: Duh! Forget Eclipse/Netbeans for now, use Notepad++ or Vim as you need to get a grasp for classloading, packaging, etc.

      JDBC, then Hibernate, then JPA: These are the standard when talking about persistence. Now you can use Eclipse/Netbeans.

      Tomcat/JSP/Servlets: The building blocks of web development.

      Swing/threads: only if you need to develop local apps.

      Those should give you the "Average Java Developer" sticker. Now it depends of where you're heading. If it's large enterprise, J2EE application server's basic services like authentication, integrated web server, EJBs, CMP, JSP/JSF, etc.

      If it's "lighter" web development struts is good if dealing with legacy apps; spring or seam excels at newer apps.

      I personally favors Seam since it leverages Java standards - I like to call it "J2EE done right". And the main leader, Gavin King is working to create a Seam-like J2EE core technology like he did with EJB3. It's a plus when dealing with corporations.

    22. Re:I beg to disagree by mcvos · · Score: 4, Insightful

      Seriously, is there some shortage on Java dicumentation out there or something?

      Quite the opposite. There's such a fucking huge load of Java stuff out there, that it really is hard to figure out where to start. In fact, the immense amount of Java architecture is the single largest hurdle for new Java programmers.

      So here's my advice:

      Do:

      • learn Hibernate, JDBC, OJB and database stuff in general
      • learn JSP or JSF, and then possibly one of the cooler web frameworks like Wicket or Tapestry. Possibly even Cocoon.
      • learn Spring. Also learn to avoid it, but you will encounter Spring nonetheless.
      • learn to use Eclipse or Netbeans. This shouldn't be too hard, because the basics of all IDEs are easy.
      • learn the difference between a jar, uberjar, war and ear.
      • learn to use an application container, like Tomcat or Jetty.
      • learn let maven2, maven or ant build your project and handle your dependencies

      Dont:

      • Swing. It's not bad as such, and it is getting used, but it's just not what Java is really about these days. Java rules the web backend, not the desktop frontend.
      • Struts. Yes, big and popular web framework, but do yourself a favour and avoid this brain damage.
      • Don't try to memorize every single class. That's what api docs are for. Learn to find and use them instead.
      • EJB. Way overrated, and nobody really uses it anyway. EJB3 is actually not that bad, but most people just use Hibernate instead.
      • Don't get intimidated by J2EE. I work in J2EE environments all the time, and I have no idea what makes it so special.

      All of this just IMHO ofcourse. YMMV HTH HAND.

    23. Re:I beg to disagree by DeathElk · · Score: 1

      Some companies are perfectly willing to sacrifice good code for mediocre as long as they can pay the programmer less.

      There, fixed that for you.

    24. Re:I beg to disagree by mollymoo · · Score: 4, Insightful

      Learning the syntax of a new language is the easy part.

      --
      Chernobyl 'not a wildlife haven' - BBC News
    25. Re:I beg to disagree by Doctor+Memory · · Score: 5, Informative
      1. Get a copy of Head First Java .
      2. Download the latest version of Java.
      3. Download Netbeans or Eclipse (I prefer Netbeans, but I use Eclipse at the office, and I don't have a problem recommending either one). Make sure you get a version that includes either Glassfish (Netbeans) or Tomcat (Eclipse), so you can run some servlets.
      4. Start going through the book. You'll learn the Java syntax and conventions in the first part, then learn about web development. Since you've got web development experience, you can probably skip a lot of the intro (web apps use the HTTP request/response cycle, are stateless unless you stick stuff in the session, etc.) and dig into some JSPs.
      5. Once you can get data from the browser to the server, pick up JDBC and stick it in the database. If you've used ODBC with VB, then you'll have no trouble picking up JDBC.
      6. Pick up a Spring book (I'll recommend Spring in Action) and learn about dependency injection. It's a pretty simple concept, but you'll be amazed what you can do with it.

      That should give you enough to get started and maybe even get your first Java gig. Hibernate's good to learn, too, but on most of the projects I've been on, you don't use it in day-to-day development (that is, you don't have to reconfigure or redeploy anything, unless your data model changes). With Spring, just about everything you write will require that you modify a context file or two, so you need to know what's going on.

      --
      Just junk food for thought...
    26. Re:I beg to disagree by cmdotter · · Score: 1

      As a developer with so many languages 'under your belt' then the Java language itself should be a snap. I concur with the parent however wrt picking a 'path' to try out. My choice was mobile applications and consequently I now know j2me pretty darn well.... and I still don't know anything about TomCat or jsp. So, choose applets/utilities to write that are helpful to you and ask questions specific to that.

    27. Re:I beg to disagree by sammyo · · Score: 1

      I had one of those charts, it's ancient, way before struts and hibernate. The ecology has grown so much more tendrils.

      As someone working back into java (been a rubiest for a while), I'd say what's most important is learning how to drill down into the various branches. I find it's a mix of the javadocs, googling forums, small tests and occasionally dipping into a manual.

    28. Re:I beg to disagree by kramulous · · Score: 1

      I learned Java via the Deital and Deital (How to Program) books. I find them useful for quick reference as well. They may not be the definitive reference but are pretty good and have been sufficient for my needs.

      --
      .
    29. Re:I beg to disagree by roman_mir · · Score: 1

      f***ing complicated that you would need a 3D map to start with it.

      - sorry to hear you have such weird misconceptions. As a language Java is quite straightforward. I use it for its main features and a rich library. It is just a language, whatever you call

      super-complicated behemot

      is an ecosystem of applications built in Java for development of larger applications, it is not the language itself.

      Actually what this means is that Java is a very successful language used for so many projects that common sub-projects were factored out and became libraries/servers/frameworks.

      My suggestion to those trying to understand Java is to learn core and only to bother themselves with frameworks/servers/libraries when they need them for a particular reason. Learn Java itself, but when presented with some problem like a build system or a web app framework or whatever, then research and find what suits your needs best (maybe nothing, in which case you can just use plain Java).

      Don't confuse Java language / environment and various projects built in Java.

    30. Re:I beg to disagree by Anonymous Coward · · Score: 0

      Yes you can, but you can't refute the point that this site has become trash, and where reasons and examples are provided, by simply calling someone a name. In fact that just proves the point. So if you were offended by the idea, why reinforce it? If your neighbor accused your household of being a bunch of rednecks, would you put a washing machine in your front yard to teach him a lesson? LOL Sadly, with most of the intelligent people having moved on, about all that's left here is the astoundingly dumb, like you. And the imbecile-targeted topics that the editors put up to keep what undesirable demographic they have left.

    31. Re:I beg to disagree by dashslotter · · Score: 1

      Gawwwd. Just learn to be an embedded programmer and skip all this flavor of the month nonsense.

      --
      I was flipping bits on an abacus, newb.
    32. Re:I beg to disagree by poopdeville · · Score: 1

      Yes you can, but you can't refute the point that this site has become trash, and where reasons and examples are provided, by simply calling someone a name.

      Actually, yes. You can. The whole rant was a misguided troll. It is not worthy of my, or your, attention.

      Here's the simple fact: Slashdot was never good.

      The "I RTFM, You Should Too" attitude doesn't even apply in this case. The submitter is asking for book recommendations, so that he can read them.

      --
      After all, I am strangely colored.
    33. Re:I beg to disagree by jhol13 · · Score: 1

      If you're below average, then there are plenty of below average coders willing to work for less in India.

      That is my experience with Indian coders. Well, obviously "average" is quite dependent on the environment ...

    34. Re:I beg to disagree by prenk20 · · Score: 1

      I would call it a language whose syntax is deriven from C/C++ as I've previously said above. This link backs up my claim in the first few lines. It is something that was explained to me in both college and more recently university on my Computer Science degree course.

      --
      >JJ
    35. Re:I beg to disagree by Allador · · Score: 1

      This is excellent advice.

      I'd supplement it to say (mostly in agreement):

      After your core java stuff, get some experience with Spring and Hibernate.

      EVERYTHING nowadays uses Spring and Hibernate, in my experience (including our stuff).

      Get familiar with the libraries and helpers available on Apache Commons and some of the ex-projects on Apache Jakarta.

      In Commons, particularly pay attention to stuff in the easy to miss Lang area, which has huge amounts of handy utilities and helpers.

      If you're doing web apps on Java, you'll have to pick a web framework (ick). I cant help much there, as I hate them all equally.

      JSP is the devil.

    36. Re:I beg to disagree by RotHorseKid · · Score: 1

      The decision to post this question was a purely economical one. ScuttleMonkey's car needs a new carburator, so the additional traffic from India a story titled "Java, Where To Start?" generates is desperately needed.

      --
      Nobody writes jokes in base 13. - DNA
    37. Re:I beg to disagree by hotfireball · · Score: 1

      The problem is that java is so f***ing complicated that you would need a 3D map to start with it.

      With all respect to you, but I'd say this is complete BS. I am telling you, man, on the time ago when I had to start with Java thing, it took for me a week to figure out entire language and basic frameworks to start making SOA on GlassFish and Swing clients just as it is. All you have to do is to learn how to read books...

      Java is very easy language in compare to C/C++...

      Answering question to the author, it is like this:

      • Have fun!

      P.S. Works for me...

    38. Re:I beg to disagree by hotfireball · · Score: 1

      Oh, I did exactly the same, but replaced "Head First Java" with Sun's online tutorial. :-)

    39. Re:I beg to disagree by dolmen.fr · · Score: 1

      I've been developing Java apps since it first released in 1472

      Which calendar do you use?

    40. Re:I beg to disagree by csrster · · Score: 1

      My advice would be to start with the Head First book and then do the Sun Certified Java Programmer course. That'll give you a piece of paper which proves that you understand the basics of Java programming better than 90% of the "hotshots" out there with their fancy "frameworks" and "IDEs".
      Then go out and learn how to write webapps with struts and eclipse, and maybe an ejb3 persistence layer for added brownie points.
      If that isn't enough to get you a job where you can get somebody else to pay you to take your skills to the next level then you're doing something wrong.

    41. Re:I beg to disagree by khakipuce · · Score: 1
      Hallelujah brother, I couldn't have said it better, I have worked with J2EE for the last 9 years and still canâ(TM)t see why it is perceived as so special (I have also done ASP, .Net, PHP along with C, C++, Swing, VB, Fortran, and others as well over the years).

      I may disagree with you about Faces - like EJB it seems a step too far, better to learn to write your own JSP tags and develop stuff that is clean, focused on what you need and that you understand.

      --
      Art is the mathematics of emotion
    42. Re:I beg to disagree by mcvos · · Score: 1

      I may disagree with you about Faces - like EJB it seems a step too far, better to learn to write your own JSP tags and develop stuff that is clean, focused on what you need and that you understand.

      I'm not really a big fan of JSP or JSF, but they're what everybody's doing these days. That's the main reason I'm recommending it. Personally I prefer a framework that separates markup from code, like Wicket. But it's hard finding a job with that.

    43. Re:I beg to disagree by torgis · · Score: 1

      Oh yes, because obviously a simple google search for "java" will point him in the right direction.

      google java...
      Results 1 - 10 of about 480,000,000 for java

      Damn. Well, I bet I can narrow down that list by being a bit more specific...

      google java book...
      Results 1 - 10 of about 7,810,000

      Now that's more like it. Instead of half a billion hits, I'm down to a managable 7.81 million.

      See how easy it is? Clearly, asking Slashdot is an utter waste of time when there is so much information freely available to anyone with a browser and this interweb series of tubes at their disposal.

      Before you know it, you'll be well on your way to the sort of satisfied smugness that you can only know by feeling and being far superior to all others around you. Huzzah!

    44. Re:I beg to disagree by jalefkowit · · Score: 1

      I know that on broad topics I am often frustrated by the abundance of crap that I have to wade through in order to get to the few gems that are worth reading. When it comes to long-winded textbooks and weeks-long learning processes I would be more than happy to allow someone with years of experience to direct me to the optimal path of learning (why going to school still makes at least a little sense).

      Perhaps ./ could help here by finding and mobilizing some experts within its vast community to develop resources like this for common needs (languages, frameworks, etc.)?

      Such documents would cost practically nothing to put together, and if they were done right should attract lots of pageviews (and hence, ad revenue)...

    45. Re:I beg to disagree by AmaDaden · · Score: 1

      Get a copy of Head First Java.

      I filly agree. Head First JSP is also a great book. Also if you want to get really good at it you should read the Java Core books. You can get away with not reading them but they can teach you lots of things that are hard to learn other wise. Good for anyone really serious about learning and using Java. For a week I googled the hell out of Java Annotations. It was only when I read the chapter on them in core vol 2 that understood what the JVM did with annotations and why.

    46. Re:I beg to disagree by Anonymous Coward · · Score: 0

      Someone who's research skills are limited to googling for "$topic book" should not be programming anything for use in a business.

      How about looking at a reputable book series like O'Reily? Or perhaps going to a well-respected tutorial site?

      Or, perhaps, Googling with a sensible search string?

    47. Re:I beg to disagree by Raenex · · Score: 1

      I'm going in the opposite direction, from Java to C++, and felt no need to ask for help. Google is fine. There are so many open source projects, blogs, forums, articles, tutorials, you name it, and Google search orders results so well, that it's trivial in this day and age to become an expert on any major topic. 15 years ago you had to be connected and get advice from experts. Today you Just Fucking Google It.

      You do, however, need to rub a couple of neurons together if you don't want to be spoonfed. Any developer worth his salt with some basic Google-fu can figure this out. I really hope Slashdot isn't going to be filled with "How do I become an X programmer" stories.

    48. Re:I beg to disagree by mollymoo · · Score: 1

      Java is the language we are discussing, so the page is relevant. Try reading beyond the title of the page, to the first few sentences, where you were directed. Specifically, the second sentence.

      I wonder if you know what "syntax" actually means, as the similarities are obvious. Ask yourself this: Does Java code look like Lisp code? Like Pascal? Like Forth? Like Basic? Like assembly? No, it looks like C/C++, because it was designed with a C/C++-derived syntax.

      --
      Chernobyl 'not a wildlife haven' - BBC News
    49. Re:I beg to disagree by Anonymous Coward · · Score: 0

      Most companies are perfectly willing to sacrifice good code for mediocre as long as they can pay the programmer less.

      There, fixed that for you.

      There, fixed that for you.

    50. Re:I beg to disagree by texwtf · · Score: 1

      How DARE you answer the question? This is slashdot!

    51. Re:I beg to disagree by torgis · · Score: 1

      Apparently my sarcasm was lost in translation.

      But see, it proves my point exactly.

      A "reputable book series?" O'Reily? Ok, good information. Someone might thank you for that.

      A "well-respected tutorial site?" Wasn't this the point of the question in the first place? To seek out well-respected tutorial sites with which to begin? This smug little reply did a pretty good job of emphasizing my point - namely, that there is a ton of information out there but not many people know exactly where it is. Many people CLAIM to know this, and then tell you arrogantly to go find it.

      Do you, perchance, have the NAME of a well-respected tutorial site for Java that's not full of blinky banner advertisements or embedded malicious code? Or do you like to just hint at the vast wealth of information that you keep as a jealously guarded secret?

  23. Start simple. by Anonymous Coward · · Score: 5, Insightful

    Please, for the love of God, forget the frameworks. They come and go pretty quickly and each one is usually over-hyped to begin with.

    Learn to be a great Java programmer. That means knowing the standard library in and out. Develop really good OO modeling skills. Learn what it means to write robust code. Understand and use exceptions effectively instead of littering blank catch blocks everywhere. All of these skills will serve you far better than knowing what arguments the RegistrarClassFactoryStubGeneratorJarBridge uses in its create() method. From there, as needs come up, you can experiment with higher-level abstractions. But please do NOT become one of those people that 'learns' that all database access should be handled through *insert-ridiculously-overcomplicated-framework-with-50-config-files-that-must-be-in-special-places.*

    Aside: the reason Rails became so popular is because it managed to 'just work' without all of this inane configuration and magic files. The Java community is practically in love with complexity, since it is very enterprise-y.

    1. Re:Start simple. by fbjon · · Score: 2, Interesting
      I agree. The standard library is the most important library of them all. Many people seem to fancy rolling their own when they need something, without realising that it's already in the standard library. For instance, a couple of years went by before I realised that there's a Logger class to handle all logging needs.

      As far as I know and can see, there are no must-have frameworks or libraries, only sometimes-good-to-use frameworks and libraries.

      Speaking of exceptions, do not catch Exception, and do not catch Throwable, unless you know exactly why you should do that.

      --
      True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
    2. Re:Start simple. by _xeno_ · · Score: 3, Informative

      Many people seem to fancy rolling their own when they need something, without realising that it's already in the standard library. For instance, a couple of years went by before I realised that there's a Logger class to handle all logging needs.

      Logging's a bad example. There were a ton of logging libraries around because Sun didn't bother adding logging until Java 1.4, and even then, their logging implementation is subpar compared to some other packages out there.

      Speaking of exceptions, do not catch Exception, and do not catch Throwable, unless you know exactly why you should do that.

      Oh God yes. I've forgotten the number of times I've seen the anti-pattern:

      public Object getFoo(int id) {
          try {
              return database.lookup("foo", id);
          } catch (Exception e) {
              return null;
          }
      }

      The great thing about that is that it means that there's no way to tell the difference between "an error occurred" and "the object doesn't exist."

      I'd like to say this is less common now, but the last time I ran into it was last Friday, i.e., the last time I was at work. I spent a good chunk of time making methods throw exceptions.

      This isn't to say that catching exceptions and ignoring them is never safe, sometimes it is. But unless you can come up with a good justification (and then leave a comment explaining it!), don't do it. It'll just piss off other developers when the applications randomly stops working for no readily apparent reason.

      --
      You are in a maze of twisty little relative jumps, all alike.
    3. Re:Start simple. by fbjon · · Score: 1

      Yes, a situation might be that you don't want to exit the JVM just because of a random unchecked error somewhere. Anyway, commenting every empty catch block should be mandatory in the Java specs. I put in at the very least a //NOOP just to show that I acknowledge that it's empty, and that there's no need to act upon the exception. Or a //TODO if it's half-finished.

      --
      True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
  24. It's not the language - it's the libraries by petes_PoV · · Score: 5, Insightful
    Learning the mechanics of the Java language are the easy bit - when it boils down to the basics of the syntax, there's not much to it (since you already have many other, similar languages).

    The key is the libraries: that's where it goes from being merely another OO language to being able to do something useful. I'd start by getting a simple "hello world" program running, then thinking up a home project which allows you to start adding features and functions.

    Most of the documentation I've seen is pretty poor - it gives argument lists and describes functionality in isolation, but misses out the higher level WHY you would want to use a function. Learning that is where the gold is.

    --
    politicians are like babies' nappies: they should both be changed regularly and for the same reasons
    1. Re:It's not the language - it's the libraries by Anonymous Coward · · Score: 1, Insightful

      This right here is the key. The biggest selling point of Java, IMO, is the (huge) standard library.

      I remember fixing up some programs done by a guy with barely any knowledge of the library. A few thousand lines of reimplementing the wheel. Pages of functions that boiled down to one or two lines of calling library objects and methods. It pays to just have an idea of what part of the library does what so you can go fishing into the docs if you run into a particular problem.

      All you need is an IDE (for the autocompletion features) and a copy of the API documentation.

  25. There is no single answer. by MythMoth · · Score: 4, Insightful

    Java's an entire ecosystem unto itself these days. So there's no simple answer - you have to figure out what kind of apps you want to be involved in building, then that will inform your choice of Java based technologies. For the most part I do enterprise web site development, and that mostly on the server-side, so I'm a Java EE/Hibernate/Spring/Eclipse person. Plenty of professional experienced Java developers will never use any of those technologies!

    Once you've figured out what kind of apps you want to be building, I'd suggest visiting the Sun Forums if you have any technical question and then poking around the Java.net site, theserverside.org, JavaRanch and the java usenet newsgroups to get a better feel for what's out there and how it's rated by developers. Feel free to drop me an email if you have any questions that you want to ask offline.

    Ignore the naysayers - for the most part they don't know what they're talking about. Sure you should have other languages under your belt, sure there's offshore competition, but still, Java experts are in demand and they will be for a long time yet.

    --
    --- These are not words: wierd, genious, rediculous
    1. Re:There is no single answer. by Anonymous Coward · · Score: 0

      A person that asks such a stupid question at /. is *not* going to be a Java expert, but a replaceable grunt.

    2. Re:There is no single answer. by Tablizer · · Score: 1

      A person that asks such a stupid question at /. is *not* going to be a Java expert, but a replaceable grunt.

      You gotta start somewhere. One does not *start* at the top.
             

    3. Re:There is no single answer. by Anonymous Coward · · Score: 0

      Java's an entire ecosystem unto itself these days.

      ecosystem = ecological system
      What is so ecological about Java?

    4. Re:There is no single answer. by Anonymous Coward · · Score: 0

      Perhaps you should go and look up the term metaphor?

  26. My opinion of what Java APIs are worth learning by hattig · · Score: 3, Interesting

    The language itself won't be a problem if you've done C and C++, nor should OO concepts. So the difficulty is with APIs - what is worth it, and what isn't.

    In terms of Java APIs (core or otherwise), I'd learn in roughly this order:

    * Collections
    * Reflection
    * IO
    * Servlets & JSPs then Struts, Tiles, Spring, etc
    * JDBC, then Hibernate
    * Axis (web services) and Apache HTTPClient

    You don't need to learn them off by heart - I've seen people advance very slowly because they're trying to do that. It is enough to know what is what, so that when you have a problem, you know there is a solution, and where it is.

    In terms of interfaces, I wouldn't bother with Swing or AWT really, until you need them. SWT ain't too bad (Eclipse uses it, and it's cross platform enough - Windows, Linux, Mac, Pocket PC, ...). Maybe you could be fancy and learn Fenggui instead! Then you could learn JOGL and write 3D games and the like.

    Oh, and learn how to do Java on the command line first, use ANT to build and compile and deploy, then try Eclipse or NetBeans as an IDE. This way you'll avoid all the niceties that the IDE gives you that inhibits your initial learning.

    I wouldn't bother with half of the enterprise wank, like Enterprise Beans and all that.

    1. Re:My opinion of what Java APIs are worth learning by fbjon · · Score: 1

      I would put IO before reflection, since I've had much more use of it. But I agree with command line compiling to learn. If you need to code GUIs, once you know the basics, NetBeans has a nice editor for generating the UI code without too much hassle.

      --
      True confidence comes not from realising you are as good as your peers, but that your peers are as bad as you are.
    2. Re:My opinion of what Java APIs are worth learning by Anonymous Coward · · Score: 0

      agreed.

      Instead of reflection I'd substitute synchronization in java.

      Instead of ant I highly suggest using maven 2. In my experience, while being one of the most powerful build management tools, maven is more easy to use than any other build system including ant. Furthermore, maven covers the full release cycle of your software at the ease of a few lines of XML code. I'm using it for java AND c++ projects to provide fully automated snapshot builds.

      One other thing to keep in mind for java, if your problem is not very domain specific or part of it, then it's very likely that there is a free open source project available, e.g. networking, cryptography, caching. A good place to look at is the apache foundation which hosts a number of high quality open source project with a license that most likely fits your needs (e.g. free use in commercial environments).

      just my 2 cents.

      s_

    3. Re:My opinion of what Java APIs are worth learning by SirLurksAlot · · Score: 1

      * Collections
      * Reflection
      * IO
      * Servlets & JSPs then Struts, Tiles, Spring, etc
      * JDBC, then Hibernate
      * Axis (web services) and Apache HTTPClient

      Collections and Reflection before I/O? Seriously? Servlets and JSPs before the JDBC? Wow. I/O is a core activity for any programming language and should be taught (or learned) as early as possible (meaning after the absolute basics). It's hard to do anything without any data, and unless your applications are completely trivial (in which case you're probably not learning anything anyway) you'll have to know how to get data into and of various data sources. The JDBC should be taught after I/O and preferably after advanced OO concepts so students learn to abstract out DB calls as early as possible. Struts and JSPs won't do you much good unless you know how to make calls to the database first. As for Tiles, Spring, etc, these should be saved to the very end when they'll actually be useful.

      Here is my version of your list:

      1. I/O
      2. Collections
      3. JDBC
      4. Reflection
      5. Servlets, JSPs, Struts, etc
      6. Axis
      7. In terms of interfaces, I wouldn't bother with Swing or AWT really, until you need them. SWT ain't too bad (Eclipse uses it, and it's cross platform enough - Windows, Linux, Mac, Pocket PC, ...). Maybe you could be fancy and learn Fenggui instead! Then you could learn JOGL and write 3D games and the like.

        Granted that Swing and (especially) AWT are falling out of fashion they are still worth learning because they are still core to Java. Even if you never use them it is good to be able to say you are familiar with them. I haven't heard one or the other that SWT is all that popular, or if it is living up to its promise of being more flexible than Swing.

        Oh, and learn how to do Java on the command line first, use ANT to build and compile and deploy, then try Eclipse or NetBeans as an IDE. This way you'll avoid all the niceties that the IDE gives you that inhibits your initial learning.

        I agree with you completely here, and honestly I wish I had learned the command line first. Now I'm doing it the hard way (e.g. backwards). The little experience I have with Ant has shown me how tremendously useful it is, and I wish I had learned it first.

        I wouldn't bother with half of the enterprise wank, like Enterprise Beans and all that.

        I don't know if I would go that far. It seems that most Java-related job postings out there are asking for these skills, and it would be worth their time to learn them.

      --
      God, schmod. I want my monkey man!
    4. Re:My opinion of what Java APIs are worth learning by hattig · · Score: 1

      Yeah, I wrote "in order" at the end of writing my post, then forgot to change the order. :)

      ANT is nice though, even if Maven is meant to be nicer. I set up ANT build scripts in my projects to build the system into a 'build' folder (with Jar/War/Tar/etc targets). That means that on the test server we have a script that does SVN export and runs the ANT build script. None of this compile within Eclipse and copy to server mess.

      One thing about the Collections as well, not relevant for a person coming from another language, but for a first time programmer - implement your own library first, so you understand how they work.

      If you know the stuff on the list above, then you'll have scraped by a lot of the EE stuff as well, and you'll be capable of picking it up in any job.

  27. Consider not starting. by Vellmont · · Score: 1


    I don't know where else to go from there. There is so much!

    There's a lot because Java web technologies are large and can be complex. This can be a problem in itself. It's hard to really understand what you're asking without understanding what you're doing now. Do you have a job, or are you just interested in padding your resume with a broader base of skills?

    Here's what I'll tell you. It's useful to learn a broad range of skills, but at a certain point you're just spreading yourself thin. You're having trouble finding out where to start because the technology has grown leaps an bounds. You haven't even mentioned half of the methodologies and competing technologies that exist in the Java world. If you really want to be "good" at Java web stuff, it's going to take a dedicated effort. Sure, you could learn a bit and create something functional. But why? It sounds like you're already a competent programmer in a variety of other languages, so why pickup Java?

    Without knowing more about your background and goals, I'd hesitate to say you're just going to spread yourself thin. If you really want to learn something, learn some more general design patterns and techniques and apply them in a language you already know. That should be applicable to any language.

    --
    AccountKiller
  28. Just to add to the chorus by cyranoVR · · Score: 1

    You've already got experience in VB and ASP...ASP.NET is a logical career path. You can use that as a springboard to learn C# and if you really want to you can learn Java from there.

    Otherwise, the best way to get started in Java is to get a job where you can convince them you can learn it on the job.

  29. O'Reilly's Java in a Nutshell by bziman · · Score: 1

    I really like O'Reilly's Java in a Nutshell. Between that and Sun's online Java Tutorial and API Reference, you should be able to get a good start with the language itself.

    For more "advanced" topics, there are whole books on Swing, Spring, Servlets, JSPs, EJBs, etc... each with their own encyclopedia of information -- you should definitely learn the core language first, and then decide which of these frameworks interest you, and pick one at a time to learn. Most places will hire you if you have solid Java skills, and will expect you to be able to figure out the framework.

    There are many books on individual aspects of the Java language, such as Java Concurrency in Practice -- if you really want to be a Java expert. Most of those job listings you see don't require anywhere near that level of expertise, though.

  30. Dont do it. Go C# instead. by LibertineR · · Score: 1
    I dont want to start a flame war over Java vs. C#, my point is that you will likely find more work, and more interesting opportunities in the C# space than you will in Java, which is a pretty saturated market.

    By learning C#, you can do ASP.NET 3.0 (a world away from ASP), a huge market in need of coders, you can branch out into things like SharePoint, the current hottest product in the marketplace, and even do stuff like Silverlight, which proved effective during the Olympics (If you ran Windows or SOME Macs).

    The languages are almost identical, but you will find tons more FREE resources for developers. Microsoft has a development center at http://msdn.microsoft.com/en-us/beginner/default.aspx where you can download C# 2008 express for free, and there are lots of videos and tutorials there to get you started.

    Again, nothing against Java, but why start like a guppy in a huge pond of Java sharks?

    1. Re:Dont do it. Go C# instead. by Anonymous Coward · · Score: 0

      The reason C# does not have a lot of sharks is because not a lot of people use it. C# has been out almost 9 years but there are reasons people don't use it.

    2. Re:Dont do it. Go C# instead. by LibertineR · · Score: 1

      I don't know what planet you are on, but I can assure you, a lot of people ARE using C#. Even though you are wrong, I would be curious as to what you believe are 'reasons' that people would not use C#, were you actually right? (you are not)

    3. Re:Dont do it. Go C# instead. by k33fb · · Score: 2, Interesting

      Rather than conentrating on java, the most important things to look at are:

      1) Good OO-Design Programming (along with design patterns, the latest in thing , "Head First Design Patterns" is a good book). My workplace (a .net shop) employs Java developers over .NET candidates where they are strong in these.

      2) Expose yourself to different syntaxes & programming paradigms: Doing this will help you pick up any framework. For example functional programming is beoming increasingly important in the .net world for certain tasks.

      I'd personally go with .Net, it has made huge strides in the latest release (3.5, especially with sp1), even .net 2.0 was pretty good. It doesn't suffer from the lack of integration in the technology stack that Java has which I hear about when talking to my Java Colleagues, also productivty seems higher, though this might be aprocryphal.

      Take a look at http://weblogs.asp.net/scottgu/archive/2007/07/16/linq-to-sql-part-5-binding-ui-using-the-asp-linqdatasource-control.aspx for an example of a tiered application and the screen-cast at http://weblogs.asp.net/scottgu/archive/2007/12/14/new-asp-net-dynamic-data-support.aspx to see what has been acheieved in terms of productivity

    4. Re:Dont do it. Go C# instead. by Billly+Gates · · Score: 1

      Last time I checked (a year and a half ago) on www.dice.com I found that java programmer jobs outnumbered c# jobs by a 9 to 1 margin.

      I do wonder about job saturation as I wonder how many universities teach Java rather than C# but I am imagining that is changing with Microsoft's academic alliance program.

  31. One book: Effective Java by dolmen.fr · · Score: 3, Informative

    Once you get the basic Java syntax (which will not take long looking at the langages you already know), read this book: Effective Java , by Joshua Bloch.
    There is also a video on YouTube: Effective Java Programming with Joshua Bloch.
    And you can read it on Google Books.

    1. Re:One book: Effective Java by Anonymous Coward · · Score: 2, Informative

      Second that, those books by Joshua Bloch are excellent! What I would recommend also is:

      1. Get Java 1.6 JDK
      2. Get Eclipse and get used to it as your IDE
      3. Write some basic code that outputs text to your screen / console
      4. Follow the Hibernate tutorials; and then use it against a database which you are familiar with
      5. Buy Java Concurrency in Practice (http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601/ref=pd_bbs_sr_2?ie=UTF8&s=books&qid=1220285205&sr=8-2) and implement your own multithreaded web server
      6. Serve pages from your own web server, with values from your database (you will learn threading and client server programming in java which is fun)

      Then familiarize your self with Swing: I wouldn't spend to much time on it - you only need to know how things work. The Concurrency book has a nice chapter on threading in Swing, which is very important.

      This should take a week or two.. after that, you should be able to handle most java jobs :)

      Java setup hell sucks, stay away from enterprise things until you wanna try out specific features..

    2. Re:One book: Effective Java by I'll+Provide+The+War · · Score: 2, Informative

      That version on Google Books is the first edition, from 2001. It only covers feature from 1.3 and earlier.(Only a handful of 1.4 features were touched on).

      The second edition was released last month and now covers up through 1.6.

      http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683

    3. Re:One book: Effective Java by spamania · · Score: 1

      I saw this question and Effective Java was the first thing that sprang to mind.

      There are a lot of good books out there, and you should read as many of them as you can, but Effective Java will go a long way toward giving you an understanding of Java ways of thinking; useful, highly reusable Java idioms; and an appreciation for good design and coding in Java.

      Good luck!

      --
      My other .sig is a troll.
  32. Groovy by mgkimsal2 · · Score: 5, Interesting

    I'd suggest starting with Groovy (http://groovy.codehaus.org/) then perhaps move in to Grails (http://grails.org). Groovy is a dynamic language that runs *on* the JVM, and can co-exist with native Java code, but requires far less boilerplate code to get anything done. If you're coming from a dynamic language background, Groovy will be a bit easier to understand.

    This will allow you to get involved with Java technologies without as steep a learning curve as you'd require if you were doing it 'from scratch'. You can incorporate as much 'other' Java tech as you want as you go along, but you'll be up and running fast with Groovy.

    http://michaelkimsal.com/blog/grails-for-php-developers/grails-for-php-developers-part-1 is few part series on did on Groovy and Grails for people coming to it from non-Java backgrounds. Never quite finished the series, but it's someplace to look to see if it's something to investigate further.

    Good luck!

    1. Re:Groovy by CountBrass · · Score: 0, Flamebait

      Groovy is just a second-rate Ruby and Grails is poor Rails clone. Ruby's aim is to make programmers happy: Groovy's appears to be to make programmers happy but with just a smidgen of ground glass added to the diet.

      If you must run in a JVM then use JRuby (a Java implementation of Ruby).

      --
      Bad analogies are like waxing a monkey with a rainbow.
  33. It depends what you want to do! by Anonymous Coward · · Score: 0

    The problem that I found was that Java can be used in so many ways and in so many contexts you can spend a year just trying to figure out what the all the new terms mean.

    For a simple setup for serverside web development with Java server pages and servlets try: Eclipse and Tomcat and the Sysdeo plugin for Eclipse/tomcat development.

    Once you have figured out how to setup Tomcat with pooled connections for MySQL, Eclipse and produce some jsp's & servlets, learned the classes that java provides for web development you will have come a long way.

    There are then extensions (OK not necessarily extensions, but other things to look at) like struts which provide a framework for developing web applications and J2EE which are essentially classes that run on seperate servers.

    The list goes on and on, but once you've done some stuff with each of these you will have a pretty good idea of what is useful to you.

  34. Java? by Anonymous Coward · · Score: 0

    Err... Starbucks maybe? Or off the coast of India?

    1. Re:Java? by d_strand · · Score: 2, Insightful

      Yes you are wrong.

      When we talk about Java we mean JavaEE, not standard application programming. Sure Java is no better than most other languages when it comes to building small to medium desktop apps/clients. But once you go past a certain point in size/complexity Java is your friend. Perl and php are not. JavaEE is meant to be used for large (really large), complex, distributed, high-availability business systems. And it's damn good at it.

      There is a reason most systems of this type are built in either Java or .Net and nothing else, you know. It's not that it can't be done in e.g. Perl, but its so much *easier* in Java.

    2. Re:Java? by gzunk · · Score: 1

      Yes you're wrong. On the server you make the assumption that everything is going to be a web application. What about services that have nothing to do with web pages?

      For example, let's say you're using asynchronous messaging (i.e. MQ or equivalent). Your server is simply taking messages from the queue and processing them. That's where writing in Java is significantly superior than PHP or Perl, because of all the support that J2EE gives you.

  35. Re:Look at Open Source Java Projects by Anonymous Coward · · Score: 0

    Open Office is not Java based.

  36. UML? Swing by Anonymous Coward · · Score: 0

    Im afraid of your general request. Mostly because of the "What software do I require? UML? Swing?" part.

    How come somebody who knows... "So, VB, ASP, PHP, Coldfusion, Perl, even C and C++ I have in my belt."

    Even MySQL (seriulsy wtf?).... doesnt know that UML is not a software. and putting it on the same phrase as swing. id say you stick with php...

  37. Re:Look at Open Source Java Projects by RedK · · Score: 1

    OpenOffice is not Java based at all. The bulk of it is written in either C or C++. Sun doesn't just have Java based products, heck even the Java Desktop System is not made of Java at all, it's just a modified Gnome, written in C.

    --
    "Not to mention all the idiots who use words like boxen."
    Anonymous Coward on Monday August 04, @06:49PM
  38. Avoid persistence frameworks by Kupfernigk · · Score: 3, Insightful
    I'm going to risk being upsetting here and say that, if you have any real experience with SQL, avoid things like Hibernate. They try and force you to do things the way the Hibernate developers think, and this is not good because they just regard the database as a persistence layer, adding a lot of complexity for the sake of things you may never want to use. Leverage your existing skills by trying to do things "directly" in Java, talking to the APIs as simply as possible. Because then you will be able to do things that the grunts cannot do, since you will get the full benefit of both technologies.

    If you are a serious programmer and want to solve real business problems, concentrate on what Java does well - glue things together and use well thought out class structures to map onto the things you want to do.

    In my admittedly limited experience over only 25 years or so, if you leverage the strengths of Java you can do things you can do in other languages about as fast, with good reliability, good debugging, good code re-usage and rare platform incompatibilities.

    Oh, and get used to Derby (formerly Cloudscape), because you can then have your SQL database all bound up in your 100% Java application and still talk to spreadsheets etc. as easily as if you were using Access.

    --
    From scarped cliff or quarried stone she cries "A thousand types are gone, I care for nothing, no not one."
    1. Re:Avoid persistence frameworks by LizardKing · · Score: 1

      I strongly agree with your critique of Hibernate. It requires you to design your database with Hibernate in mind, rather than using the natural idioms of relational database design. It's also produced performance bottlenecks when I've used it, which require as much work to resolve as I would spend hand coding a data access layer. All you need is a decent abstraction for the JDBC API, such as the one bundled with the Spring framework, then writing your own data access layer is far less onerous.

    2. Re:Avoid persistence frameworks by MythMoth · · Score: 2, Insightful

      They try and force you to do things the way the Hibernate developers think

      This is somewhat true.

      and this is not good because they just regard the database as a persistence layer

      This not so much.

      I can't speak for other persistence layers, but Hibernate specifically is a good choice if you are designing a schema from scratch. It can be applied to pre-existing schemas (legacy stuff) but the less well designed that schema is, the more painful Hibernate will be to use.

      If you disagree, perhaps you could cite some specific things that you think are wrong with Hibernate's default approach, or where you believe it fails to support some legitimate structure in the database?

      --
      --- These are not words: wierd, genious, rediculous
    3. Re:Avoid persistence frameworks by glgraca · · Score: 1

      In my experience, the best option by far is to put your SQL in procedures. Besides being more efficient, it gives your dba a chance to check out your queries and alter them easily. This is very important when you have a large team with varying degrees of ability (and probably none of them knows as much about the database as the dba does).

    4. Re:Avoid persistence frameworks by dubl-u · · Score: 1

      I'm going to risk being upsetting here and say that, if you have any real experience with SQL, avoid things like Hibernate. They try and force you to do things the way the Hibernate developers think, and this is not good because they just regard the database as a persistence layer, adding a lot of complexity for the sake of things you may never want to use.

      The way that the Hibernate developers think is called "object oriented".

      I agree that not all problems are well matched to an OO approach in all business environments. But if this guy is going to learn to work in the world's most popular object-oriented language, he should learn how to design object-oriented programs.

      If he then ends up in a situation where he needs to use the database as a processing engine, he can always go back to the way it was done in ye olden dayes.

    5. Re:Avoid persistence frameworks by DiegoBravo · · Score: 2, Informative

      Yes and not. All the O/R mapping layers have known good things and drawbacks (The Vietnam of CS) but specifically Hibernate it is a very wide deployed technology and ergo, recommended to the OP. Sadly, their "official" documentation sucks (apparently most was written by the original head developer): in many instances the javadocs do not explain the exact or complete semantics (apparently they assume you will be checking their source code all time); the confusing issue of their "default and broken connection pool", etc. Anyway, despite parent comments, they let you run plain SQL querys if you want or need.

    6. Re:Avoid persistence frameworks by roman_mir · · Score: 1

      I agree with you for somewhat different reasons though.

      I stopped being interested in certain types of tech, like overly complex XML configurations that are more difficult to debug than necessary, like overly complex EJB specifications etc.

      Anything that can be done with an external XML configuration or with a 'remote object' that always ends up being executed locally only can be done simpler, faster, easier to debug with simpler java code that embeds SQL / IO / transaction handling directly.

      Think of debugging, think of maintenance, think simpler.

  39. Some Pointers (hehe) by ilovegeorgebush · · Score: 4, Insightful
    I've helped out with interviews where I work, and here's some of what we look for:
    • Experience - not just in Java, but also in the industry.
    • Core Java, Essential J2EE and Web Frameworks - understanding of core Java, its querks (reference checks: .equals() verses == for instance). J2EE is just a specification. Get used to that. Learn the basics of J2EE and how servlets, JSPs and the request/response process works (FTLOF, know the difference between GET and POST!). Struts experience is a good thing.

    It's a difficult industry to get into as you're probably aware. Recruiting for Java posts is a minefield - it's full of people who should be stacking shelves in a supermarket.

    I don't think you can go far wrong if you get as much experience in core Java as possible. The same goes for J2EE; if you understand what it is and know the trials and tribulations of building a web-app from scratch, you're on the right track. Then, and only then, should you move onto working with frameworks; so build applications both stand-alone and web, and do the boring stuff yourself (i.e., write your own web.xml.)

    Spring and Hibernate are funny ones. Spring's just an IoC framework. Until you're proficient in OO design, you probably shouldn't worry about it. Oh, and learn what IoC is first. Don't just think 'spring' and say you know it. Very few people know why they chose spring as a framework (there are plenty of IoC containers out there).

    Hibernate (an ORM solution) is a dark art. Get the basics done first. Write JDBC DAOs yourself and learn why you'd need ORM before you dive into it.

    Basically, learn the core concepts.

    1. Re:Some Pointers (hehe) by nullchar · · Score: 1

      What does FTLOF stand for?

    2. Re:Some Pointers (hehe) by Anonymous Coward · · Score: 0

      I see you are approaching it in the wrong way. If you look at the bigger picture Java, C and C++ are all just languages - the last step between the project idea and the computer. Think about what you want to do not from a programming language stand point but from a systems standpoint. Learn theory a little. Java became so huge (# of concepts) because the functionality needs of the current day systems has increased a lot. So think about eficiency, scalability, robustness, responsiveness. You don't get these by learning a language. You can write a server without even knowing what the TCP handshake is. That lets you check off the server implementation in your resume but effectively you know nothing.

      I see a lot of people complaining here that their jobs get outsourced to India. They will if all you do it write code. No one has to pay people in dollars if the same code can be written for far less. People all over the world can learn how to code. You don't need much talent to do that. In fact that is exactly what Java is designed to do make programming easy so that anyone can write. It has its disadvantages too in terms of outsourcing.

    3. Re:Some Pointers (hehe) by TeknoHog · · Score: 1

      I guess the original version is "for the love of god", with s/god/FSM/.

      Now if somebody is going to ask about FSM, please turn in your geek card.

      --
      Escher was the first MC and Giger invented the HR department.
    4. Re:Some Pointers (hehe) by Bloem · · Score: 1

      I've found this book that is really (i mean really) simple in describing J2EE. And while it is a bit optimistic, it does tell you why to bother with J2EE in the first place. http://www.amazon.com/J2EE-1-4-Picture-Solveig-Haugland/dp/0131480103

      --
      the use of knowledge is highly overrated
    5. Re:Some Pointers (hehe) by ozbird · · Score: 1

      Hibernate (an ORM solution) is a dark art. Get the basics done first. Write JDBC DAOs yourself and learn why you'd need ORM before you dive into it.

      I've inherited a misbehaving piece of Java/Hibernate code. I'm hoping the cloud has a silver lining, because otherwise it has the stench of Mordor on it...
      I don't know Java (two courses cancelled due to lack of numbers), but I still can't fathom why Hibernate was chosen over a few SQL statements - it's a simple database.

      Maybe that's why there are so many Java jobs going - evil, unmaintained/able apps. that the original author has fled?

    6. Re:Some Pointers (hehe) by slim · · Score: 2, Insightful

      If you look at the bigger picture Java, C and C++ are all just languages

      Except that Java is a couple of things other than being a language.

      • Language
      • A virtual machine technology
      • A "platform" of subsidiary technologies (J2SE, J2EE etc.)
      • A wider ecosystem of frameworks and environments (Spring and its ilk)

      Java means different things to different people. I think the original questioner would like to know what Java should mean to him.

    7. Re:Some Pointers (hehe) by julesh · · Score: 1

      Spring's just an IoC framework

      Not entirely sure I agree there. Spring's an IoC framework with a lot of bells & whistles. Some of its other features (e.g. automatic wrapping of objects with transaction controllers) are as generally useful as the IoC stuff.

      But, yes, agree with the rest of your point: you'll get more from it if you understand why you want IoC in the first place. I prefer the more "modern" name, dependency injection, as it makes the purpose somewhat clearer.

      Which means: first step, if it's not a skill you already have, is learning test automation. Test automation is the key reason you want dependency injection. So, in order:

      * core Java stuff
      * learn a little about J2EE
      * pick up JUnit and learn to write good tests with it
      * learn Spring

      Seems reasonable to me.

    8. Re:Some Pointers (hehe) by The_reformant · · Score: 1

      Coming from a C++ background you could have a look at JNI, which is how you run java from inside C++. Not many people understand it and the available doc is sparse at best so developing solid skills in this area will help differentiate you.

      --
      I have discovered a truly remarkable sig which this post is too small to contain.
    9. Re:Some Pointers (hehe) by ilovegeorgebush · · Score: 1

      I was referring to spring core. Technically just a IoC & aspect-j framework.

    10. Re:Some Pointers (hehe) by ilovegeorgebush · · Score: 1

      I've inherited a misbehaving piece of Java/Hibernate code. I'm hoping the cloud has a silver lining, because otherwise it has the stench of Mordor on it...

      Hibernate's notoriously difficult to debug and inspect when something's gone wrong.

      Personally, if you're only using a couple of database tables, you shouldn't need an ORM solution. Just read/write from the DB using stored procedures.

  40. Re:Look at Open Source Java Projects by Anonymous Coward · · Score: 2, Funny

    What?! Well, why is Open Office so slow then?

  41. Thick Books Unnecessary by epistemiclife · · Score: 1

    As others have no doubt mentioned, Java is a much simpler language than C++, and, if you know C++, learning the basics of Java will not take comparatively much work. I would recommend reading a lightweight book which concisely explains the basics, and then attempting to write some programs in the language. There is no need to get a book designed from programming novices. You might even look at the Java Tutorials online. http://java.sun.com/docs/books/tutorial/ Additionally, using Google to search for 'Java for C++ programmers yields some useful results, such as this one: http://www.javacommerce.com/displaypage.jsp?name=java_for_cplus.sql&id=18260

  42. Re:What a bad software engineer you are by Anonymous Coward · · Score: 0

    A vision of love, wearing boxing gloves and singing hearts and flowers.

  43. Get Bloch's Effective Java by Anonymous Coward · · Score: 0

    Get Joshua Bloch's "Effective Java: Programming Language Guide". It's utterly indispensable; those who follow the guidelines stand out to me as proper Java developers rather than self-taught cowboy hackers :)

  44. You mean he shouldn't use a language... by Anonymous Coward · · Score: 0

    You mean he shouldn't use a language that is popular

  45. You are Paula! by Bazman · · Score: 4, Funny
  46. All form and no content makes Jack a dull boy. by Anonymous Coward · · Score: 0

    I hate those 400-page stream-of-consciousness dumps, so I usually try to pick up language specs. There's Gosling, Joy, Steele, and Pracha, which you can get for $27 from Amazon. My respected colleague Jack Davidson has a book out, it's probably quite good. but it looks pretty expensive. Personally I'd avoid anything whose title contains the words "thinking", "patterns", or, God Forbid, "UML". Try to get a feeling for whether the book spends most of its time (1) defining the language and giving examples of good usage, (2) evangelizing the language, or (3) giving sort of politically-correct faddish advice about usage like "don't use singletons" or the Law of Demeter. Object Oriented style adds little value in any case, it's sort of like quibbling with Van Gogh about where the best place to hang his paintings would be, once he's painted them (let's put all the blue ones together!) All form and no content.

  47. Head First Java by WilliamBaughman · · Score: 5, Insightful

    O'Reillys "Head First Java" is IMHO the best technical resource / learning tool I've ever used; it's honestly fun to read. You can read it online for 30 days free using the Safari service.

    A favorite excerpt of mine (on how to remember the single-inheritance, multiple-interface concept):

    Roses are red,

    Violets are blue,

    Extend only one,

    But implement two!"

    1. Re:Head First Java by Z00L00K · · Score: 1

      That's true for Java, but that's also one of the things with Java that sometimes also causes the need for some extra tricks since you can't extend from two base classes.

      Of course - it is a lot more complicated to do extend from two base classes since you will get a lot of side-effects. But you can also get some advantages by doing it.

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    2. Re:Head First Java by SirLurksAlot · · Score: 1

      I like the "Head First" series overall, but honestly I can't stand them for actually learning new languages. Their style IS fun and works very well for abstract/complicated subjects (such as in their books on design patterns and servlets and JSP) because they break down the subject matter and present it in a way that is easy to consume. As far as learning languages go though I think they do entirely too much hand-holding and they gloss over a lot of important details.

      If you're learning Java for the first time I suggest Big Java. It presents the subject matter very well, and is comprehensive enough to be used as a desk reference later on, after you become familiar with the language and its tools.

      --
      God, schmod. I want my monkey man!
    3. Re:Head First Java by FilterMapReduce · · Score: 1

      I agree too. Its style is designed to make learning fast and permanent, but since it's intended for (at least somewhat) experienced programmers, it isn't excessively dumbed-down. Informal and didactic, perhaps, but not dumbed-down. To paraphrase that great Einstein quote, it makes the subject matter as easy as possible to learn, but no easier.

  48. Random suggestions by LongSpleen · · Score: 1
    • As part of your core library study be sure to get a solid grasp on the Collections framework. It makes dealing with common data structures much easier.
    • If you don't have a specific need for it I wouldn't put Swing very high on the list. If you do need it, be sure to include some related technologies that are making it easier to deal with. Probably the most frustrating part of Swing (at least with moderately complicated UIs) is dealing with the layout. MigLayout is a modern third-party layout manager that makes the process easier. The emerging JavaFX Script stuff takes a different approach by making all the UI code declarative.
    • JPA is really nice for setting up your data access layer. The latest versions of Hibernate allow you to use JPA annotations rather than xml config files.
    • Netbeans and Eclipse are both nice but Netbeans is easier to start with. Eclipse requires some extra steps that don't feel very intuitive at first.
    • Spring is very very cool.
    • JMS is very commonly used in projects where messaging is required so I'd probably include that.

    I haven't primarily been a JEE developer so others can give better advice on some of those technologies.

  49. A really good links by grodzix · · Score: 1

    http://java.sun.com/docs/books/tutorial/index.html This is official Java tutorial. http://java.sun.com/javase/6/docs/api/ This is official Java API. You can learn everything (or almost everything, but definitelly it will get you to know much more than you know now) about Java from this. That's the only online stuff I've seen (I mean about any language, not only Java) that's free and is as good as a very good book.

    --
    My Windows is NOT slow, it's special!
  50. My own recommendations by mccalli · · Score: 4, Informative
    Not recommending a book, just specifics of Java:
    • Threading
      Ensure your concurrency skills are up to snuff. Read about the newer (1.5+ so not that new admittedly) ways of handling concurrency in Java - a lot of older books will miss the java.util.concurrent frameworks.
    • JDBC
      Persistance frameworks are all well and good, but understand the fundamentals of how things work at the database level inside Java.
    • Spring
      Although this changed a little with the latest rev of EJB, many sites simply dumped it and went with Spring. Worth knowing.
    • Application servers
      Pick one and know one, use that to extrapolate to the rest. My own advice is to look at Tomcat, but just knowing the basic concepts behind them is a start.

    There's probably a lot I've missed, but right now I'd consider looking at those.

    Cheers,
    Ian

  51. Don't learn a language by RichMan · · Score: 1

    Learn to program. Then using languages to express the programming ideas is just a mapping process. Libraries, tool kits and development environments are additional tricks in the developers bag.

    Learn procedural programming.
    Learn object oriented programming.
    Learn declarative programming.
    Learn how programs use network and system resources.

    Get a task, look at the available tools, and hardware. Pick a tool set, this includes the language and complete the task.

    > Basically, learn the core concepts.

    You will be much more valuable and won't get left behind when the whole world taks a left turn in 6 months.

  52. Start with this... by Anonymous Coward · · Score: 0


    class myfirstjavaprog
    {
                    public static void main(String args[])
                    {
                          System.out.println("Hello World!");
                    }
    }
    ...then it's all downhill with your resume.

  53. Java Tutorials on Sun by DaSH+Alpha · · Score: 1

    http://java.sun.com/docs/books/tutorial/ You really only need the JDK. I'd get "JDK 6 Update 7 with Java EE" at http://java.sun.com/javase/downloads/index.jsp and also the javadoc distribution. Start with that and a good IDE like Netbeans or Eclipse. I'd actually recommend Netbeans although I use Eclipse myself; Netbeans should be easier to get started with and seems to be a little less quirky. Some of Sun's tutorials have code that are already Netbeans projects. Go through basics first like understanding the langauge (e.g. differences/similarities w/ languages you know) before worrying about stuff like Swing (UI), or anything J2EE-related- you'll get there eventually.

  54. JCP by benjfowler · · Score: 1

    Do a Sun Java Certified Programmer exam. As far as looking for jobs goes, it won't count for much on your CV, although it may help you get past a phone screen. It must be said though, that doing the study to pass the exam will give you a taste of the core language and give you some idea of what you want to learn next, which, by the way, isn't too difficult.

    You go to Sun's website, book an exam voucher, do the study, and then book and sit the test through your local Prometric test centre.

    As far as studying for it goes, there's a ton of material, including free exam test batteries on the Web.

  55. Books by afsina · · Score: 2, Informative

    Best core java books i have read:
    - Effective Java from Joshua Bloch (second edition is available)
    - Java concurrency in practice
    - Head first series.

    After that, you can chose books depending on what you want to do. And trust me you cannot find any platform/language having more resources and tools available than java.

  56. Frameworks Are Important by InvaderXimian · · Score: 2, Informative

    I know Java; I can use it for almost everything except web development. My small amount of experience with using it in web development is that you make an object and the get/set methods, and the frameworks handle the rest. Something like Hibernate which can create get/set methods and your POJOs based on your database schema is very useful to know. Spring, Stripes, and the rest are very good as well. Knowing Java itself is the easiest part. If you actually got a job as a Java web developer and didn't know any of the frameworks, you wont be able to do anything. For those who suggested a different language than Java seem a bit biased. There is good money for knowledgeable Java programmers.

  57. Excellent, free, java book by philj · · Score: 1

    Thinking In Java by Bruce Eckel is available for free from his website. I recommend it as a starting point.

  58. From a 6-year Java Developer by HeaththeGreat · · Score: 2, Informative

    Eclipse RCP is growing in popularity and is built on the OSGi service framework, which is also gaining popularity on the server side. I'd highly recommend looking into Eclipse RCP. It has a vibrant open-source community that is eager for new helpers.

  59. My research into Java books by sstair · · Score: 1

    I found that the best book for a C programmer wanting to learn Java is Java in a Nutshell. It won't be good for anyone that doesn't already know C, though.

  60. Not just a book by www.sorehands.com · · Score: 1

    The book is pretty good. I have a signed copy of the book. He also offers a course based on the book which is pretty good.

  61. Thinking in Java, Java Essentials, and ... by Anonymous Coward · · Score: 0

    Thinking in Java, Java Essentials, and a real project to get your hands dirty is all you'll need.

  62. managers just don't care about skill level by Anonymous Coward · · Score: 0

    In my experience, managers don't tend to care one whole hell of a lot about the skill level of local employees when a job goes offshore. You could be the worst or the best; at the end of the week, you are still laid off so that Anand & Prasun can have your job.

    1. Re:managers just don't care about skill level by thermian · · Score: 3, Interesting

      In my experience, managers don't tend to care one whole hell of a lot about the skill level of local employees when a job goes offshore. You could be the worst or the best; at the end of the week, you are still laid off so that Anand & Prasun can have your job.

      Then don't work for companies like that.

      Any heavily outsourced software house is screwed if its working against another which has skilled, highly motivated staff. Outsource workers have a task to do, they do it, and they cease to care. You don't get innovation that way, you just get lines of code.

      --
      A learning experience is one of those things that say, 'You know that thing you just did? Don't do that.' - D. Adams
    2. Re:managers just don't care about skill level by EpsCylonB · · Score: 2, Insightful

      There is a difference between computer science and writing business logic.

    3. Re:managers just don't care about skill level by jambox · · Score: 1

      Not really. Simple business logic writes itself, true, but as features get added and design scope starts to grow, it gets complicated. At that point you'd better hope you know some of the maths or doing anything will take forever.

      --
      You thought you could break the laws of physics without paying the PRICE?
  63. Books to get you started. by Anonymous Coward · · Score: 0

    Couple of great books:

    Effective Java Programming by Josh Bloch
    and
    Hardcore Java by Rober Simmons, Jr.

    Since you already know OO you basically just need a bit of help with syntax and practices. The Nutshell book will give you syntax and the above books will give you good practices.

    Also there are a lot of technologies out there for doing the same thing. Cayenne, JDO and Hibernate for object persistence in a DB, JaxB, xmlBeans, Castor for java to xml binding, etc. It can get really confusing.

    Good Luck!

  64. Start with a full-stack by Anonymous Coward · · Score: 0

    I prefer hands on learning to reading a book.
    So I would suggest starting to play with one of the full-stack frameworks and consult their documentation, drill down deeper into the components that make up the frameworks read that documentation and then get yourself some good reference books on those.

    Stacks to look at include
    jboss-seam http://seamframework.org/
    appfuse http://appfuse.org/display/APF/Home

    Each of these stacks should allow you to mix and match some view layer technologies with a couple persistence mechanisms while remaining within a consistent environment end-to-end.

    To test your understanding of the underlying components and frameworks go to
    http://www.javablackbelt.com/

    Cheers,
    Neil.

  65. Re:Good place to start... by Anonymous Coward · · Score: 0

    Is Visual Studio actually written in .NET? Eclipse is. Does MS eat their own dog food? Is IIS written in .NET? Tomcat is. Any Windows application? calc.exe or at least notepad?

  66. Java is a mess by speedtux · · Score: 4, Insightful

    Honestly, all of these acronyms you can list, and yet you don't have the initiative to learn another language without posting silly questions like this?

    It's not about "learning a new language". Learning Java is trivial. The problem is the hundreds of bloated, redundant, incompatible "frameworks" and "libraries" that exist for Java. Which one to learn is a valid question (albeit, it doesn't have a good answer).

    1. Re:Java is a mess by Arkham · · Score: 1

      Honestly, all of these acronyms you can list, and yet you don't have the initiative to learn another language without posting silly questions like this?

      It's not about "learning a new language". Learning Java is trivial. The problem is the hundreds of bloated, redundant, incompatible "frameworks" and "libraries" that exist for Java. Which one to learn is a valid question (albeit, it doesn't have a good answer).

      The thing about the frameworks though, is you learn the ones you need.

      First you learn Java.
      Then you pick an IDE and get proficient in it. Any of the major ones will work, though most people end up with NeatBeans or Eclipse.
      Then, you get a project you need to work on. If it's a web project, you learn jsp and servlets, then decide what else you need (J2EE, JPA, Hibernate, Spring, etc). You pick the ones that make sense for your project and learn them.

      I've been doing java for about 7 or 8 years. I'm still learning new bits all the time. We've recently started doing GWT for web UI, and we're adding JPA in for persistence to a new project. You don't need to know all the frameworks. You only need to thoroughly understand the language so you can pick up any frameworks that you need to do your work.

      --
      - Vincit qui patitur.
    2. Re:Java is a mess by Anonymous Coward · · Score: 0

      Exactly.

      And God help you if want to write a GUI app. There is no such thing a a nice, easy-to-use Java GUI toolkit.

      STAY AWAY from Hibernate or JPA. you will go mad trying to make relationships work, optimising fetch strategies and swearing at lazy-loading exceptions. The time you waste trying to get Hibernate to do what you want, you could have spent writing your own persistence layer which does exactly what you need. Hiberant/JPA are almost always the wrong answer.

      Spring. IOC. Aaargh. For the sake of *deity please can Sun just add an IOC to the standard libs and be done with it.

      And so it goes on for every other lib and framework out there. Too much choice is bad.

      Yours sincerely,

      Mr Angry

    3. Re:Java is a mess by Anonymous Coward · · Score: 0

      I feel your pain. There are definitely far too many frameworks and libraries for Java. Actually, I kind of take that back: there aren't too many, but nearly all of them are far, far, far too powerful. The learning curve on most of those frameworks is so ridiculously steep that it's actually easier to do it yourself most of the time.

      That said, the big three frameworks are Hibernate, Struts, and Spring. I recommend learning them in that order. Don't jump right in, though: do things the manual way first, then start learning the accompanying framework. For example, first learn JDBC. When you're pretty comfortable with it, move to Hibernate. Not only will your life be easier, the transition will answer questions like "Why would I want to use Hibernate in the first place?"

      Oh, and this is a bit of a gotcha. When learning Java, be sure to read a book that describes 1.5 (aka 5.0) or later. A few important language changes were made for that version, such as the addition of generics (aka templates) and annotations. This affects you primarily when it comes to collections (data structures: lists, sets, maps, and so on) and XML files (annotations sometimes eliminate them entirely). You want the habits you develop to use the new approaches where possible (@SuppressWarnings("unchecked"): learn to love it), not the deprecated ones. A lot of Google searches will turn up information applicable to 1.4 or earlier, though, so you just have to keep it in mind.

    4. Re:Java is a mess by ADRA · · Score: 1

      Wow, when did having options become a bad thing for a developer? Having several alternative and more or less equally worthy options for implementation means that nobody owns the platform you're developing for.

      If I don't want to use one expressive language, there are plenty of others to use. If I hate J2EE, or spring, or hibernate, or ibatis, or anything else, I can still write my own thing from scratch if I'm so eager enough. The tools and frameworks, etc.. in Java were built to make it easier to do your job, but there are very few Java technologies that are -mandatory- in the fact that forces it down your throat.

      --
      Bye!
    5. Re:Java is a mess by slim · · Score: 1

      This is all common sense, except that sometimes there's a high cost to finding out whether you want some framework.

      Spring is a perfect example. Even to understand what Spring is for, you're going to need a couple of days of fairly solid reading. "Inversion of Control", "Dependency Injection", "Aspect Oriented Programming" - these are all big new concepts to most people.

      Put yourself in the position of someone who doesn't know Spring. How much study are they going to need to do before deciding "yes, I can apply this stuff to my project"? Time that, if the answer turns out to be "Oh no, that framework's not for my kind of work", would be wasted.

      So, one needs guidance. If someone you trust were to say "Hey, that feature of Spring would really help you with that part of your project", that would be a great help.

      Not picking on Spring, by the way. The same applies to most useful frameworks. If they didn't involve big new concepts, they probably wouldn't be all that useful anywhere.

    6. Re:Java is a mess by firewrought · · Score: 1

      when did having options become a bad thing for a developer? Having several alternative and more or less equally worthy options for implementation means that nobody owns the platform you're developing for.

      Not to nitpick, but multiple options for the same need also dilutes developer expertise. It means having less google results for a particular technology when you run into a problem with it, as well as less support tools or API's that build on top of that technology. Horizontal diversification (multiple tools to address the same need) consumes resources that could be spent on vertical diversification (tools to address different needs that share the same underlying platform).

      --
      -1, Too Many Layers Of Abstraction
    7. Re:Java is a mess by speedtux · · Score: 1

      Having several alternative and more or less equally worthy options for implementation means that nobody owns the platform you're developing for.

      Actually, Sun still owns the entire platform.

      The tools and frameworks, etc.. in Java were built to make it easier to do your job,

      What planet are you from? Java is one of the most cumbersome platforms around.

      but there are very few Java technologies that are -mandatory- in the fact that forces it down your throat.

      They're mandatory if you are working on a big project.

    8. Re:Java is a mess by Anonymous Coward · · Score: 0

      Bull, it does: just learn Spring. Honestly, it's the only thing you'll ever need to know really well, everything else you can pick up as needed. It's not just the classes and the methods and what to call when, it's the design principles behind it, the consistent way in which they are applied throughout the entire framework (from data through business logic support and onto mvc), the fact that you can use as little or as much of it as you want (no monolitic all-or-nothing crap ala EJB, no duplicated solutions in a very similar but different enough language as in Hibernate -HQL vs. SQL anyone?-, just no-nonsense). Spring helps you with simple-but-verbose things such as locating a file (is it in the classpath? in the app directory? in the user home?) to remoting (RMI/Corba/Soap? With transparency? No problem!) Plus you can achieve 95% of what you would do with EJBs at a minimal fraction of the cost in complexity and boilerplate code. Use it with Eclipse, pick Tomcat for app serving, defer EJBs until you absolutely need them and avoid Hibernate and Struts as well (these two aren't terrible, but there are better alternatives now and I wouldn't be surprised if they are no longer hot items in a couple of years, hence why deferring might mean you get to skip them at all!).

    9. Re:Java is a mess by Anonymous Coward · · Score: 0

      it's the design principles behind it, the consistent way in which they are applied throughout the entire framework

      It's impossible to teach people principles well in Java because the Java language imposes so many restrictions that much of the code in those frameworks consists of workarounds for language limitations.

      If it's principles you want to learn, learn one of the frameworks in Ruby or Python: those actually teach you clean OOP and OOD. After you understand the principles, you can even apply them in crappy languages like Java.

  67. Fail by patio11 · · Score: 5, Informative

    You need to encapsulate that in a class. And your main method signature is wrong -- needs to take a String array as an argument, or else the program will say "No such method found (main)" and die.

    Honestly, its almost like no one on Slashdot programs in Java some days... ;)

    1. Re:Fail by Z00L00K · · Score: 1

      Hmmm... I did 250k lines Java from June 2007 to June 2008... System in production now!

      --
      If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
    2. Re:Fail by Anonymous Coward · · Score: 0

      I did 500k lines of Java yesterday to add together the numbers from 1 to 500k...

    3. Re:FAIL by Moochman · · Score: 1

      Yes.

      This is the one thing that really annoyed me when I started using Java. It doesn't bother/affect me anymore, but still:

      THE ONE FUNCTION THAT NEWBIES NEED TO USE MOST is completely wierd.

      System.out.println() could be a lot better too.

      Of course, for real programs you use just one main class and you use logging instead of console output.... But what about the newbies!?
      I got over it soon enough... But I still harbor a small grudge for the confusion caused me by my early days with Java... ;-)

    4. Re:Fail by dwalsh · · Score: 1

      Holy crap. Who brags about KLOCs (thousands of line of code) in 2008?

      Are you an 80's IBM programmer timewarped to today?

      I will take a guess that your 250 KLOCs would have been 50 KLOCs of more maintanable less redundant and probably more correct code from a better developer.

      --
      ${YEAR+1} is going to be the year of Linux on the desktop!
    5. Re:Fail by mwolfe38 · · Score: 0

      Too bad 240k of them were getter and setter methods

  68. Keep It Simple by smack.addict · · Score: 1

    Tomcat + JSP + JDBC to MySQL

    Everything else except desktop apps build on that foundation.

  69. I agree with parent. by BitterOldGUy · · Score: 1
    I was C++ programmer for years before I learned Java. I learned Java in less than a day. I the only "hard" part is getting to know all the libraries and your way around: and before you roll your own, double check the libraries, 99% of the time there's a library for what you want to do (internet programming is a no brainer in Java!). And you also really need to understand OOP. Java does things that I don't see very often in C++ OOP: interfaces. Which personally, I think interfaces are an unnecessary redundancy especially with F/OSS.

    If you got C++ down, Java is a piece of cake.

  70. Two words by pak9rabid · · Score: 2, Informative

    Richard Baldwin. He's fairly well-known online. He was a professor of mine that introduced me to Java. Check out his tutorials that he has posted online for free. These are what he pulls up in his class when he teaches. They're basically his lecture examples w/out the voice to go along with them. I went in with zero Java knowledge and came out a Java superstar (well, not quite, but I definitely came out with a very solid understanding of the language after the first semester). Check out his tutorials. He introduces Java concepts in a very easy to follow manner.

  71. Don't quit your day job yet... by pongo000 · · Score: 1

    ...as Java is an extremely rich and complex programming environment. The usual suspects (O'Reilly's "Java in a Nutshell," Eckel's "Thinking in Java") are good references (yes, I do recommend some trees in the bookshelf). Get familiar with the Java API documentation. You won't go far with more advanced J2EE constructs until you get the fundamentals down solid. Really, the best Java programmers are the ones with experience under their belt -- there's simply no substitute, as the complexity of the language simply removes any option of learning Java "from a book." As a long-time Java programmer (I didn't say I like it, but it does pay the bills), my suggestion is to simply jump in -- read the O'Reilly book, at least Part I, while sitting in front of a Java compiler and writing code! Along the way, find a Java open-source app that is (1) popular, (2) active, and (3) well-documented. Adopt it as your own...write some patches, create enhancements.

    You won't even be ready for an entry-level position without at least a year of Java experience, and in this market, you will probably need much more than that. Keep your day job, jump in on an open-source Java app, and build the experience up over time. Don't let anyone convince you that learning Java is simply about learning its syntax. There are so many traps and gotchas in Java. The ones who give you that advice are probably the ones who couldn't code their way out of a wet paper sack.

  72. forget it by speedtux · · Score: 1

    If you know C++, learning Java is trivial. But getting "Java" on your resume won't get you a job. With Java, it's all in the frameworks and toolkits.

    Learning those takes time: there are hundreds of them, they tend to be bloated and idiosyncratic. It's that kind of obscure knowledge that companies hire and pay for.

    Which one should you learn? Pick one that looks like it's up-and-coming but isn't enormously popular yet. That way, you'll have a head start. Don't expect it to be fun, though.

    1. Re:forget it by sergstesh · · Score: 1

      Furthermore, if you _really_ know Perl (its good part like anonymous references, closures, scoping, lexical variables, anonymous import, etc.) and if you know C++, you will be greatly disappointed by Java.

    2. Re:forget it by LizardKing · · Score: 1

      That's not really fair. At my current job I've seen former Perl programmers write Java code that's just as illegible, unpredictable and slow as anything they used to do in Perl. Classic "former Perl programmer traits" include:

      1. Using untyped Maps instead of "bean" classes to store data.
      2. Inappropriate use of reflection. Everywhere.
      3. Making everything public.
      4. Use of massive anonymous classes to simulate closures.
      5. No comments.
    3. Re:forget it by sergstesh · · Score: 1

      You have just admitted Java has no closures. Thank you.
      I do not do everything public; you might have noticed my mentioning of lexical variables.

      Furthermore, I would rather even write

      my $code_ref = sub{...};

      rather than

      sub code
        {
        ...
        }

      to avoid name contention. "$code_ref" above is  by no means public.

      Anonymous export is the best way to avoid name space pollution/contention.
      I haven't mentioned dynamic vs static typing at all.

      So, I guess, your comment is not quite unfair.

      Good readability is a myth when it comes to hierarchical data structures. C++ fails miserably as well.

      When you're in Perl, you can do practically everything in Perl, including user data input.
      When you are in Java, you'll typically use XML to do user data input.

      ...

      If you want to read on an elegant OO model, you might find the info here:

      http://search.cpan.org/~sartak/Moose-0.55/lib/Moose.pm
      .

      Oh, and about "Inappropriate" - remember, "there is more than one way to do it".

      Seriously, though, when one compares properly written Perl code with properly written Java code, the latter contains a lot of unnecessary things - to the extent I call it "imitation of boiling activity".

  73. From a J2EE experience by Anonymous Coward · · Score: 0

    Java - learn your objects and your inheritance ... when you do Interfaces when you use Generics. Like others have say, Thinking in Java was a great book to start (2000 for me). Don't miss the annotations (introduced in Java 5) since a lot of software today use them.

    I learned running programs from the command line and just used IDEs later. Learn about the command-line parameters, both the VM and the application ones. They don't go away with IDEs, they just handle them for you. Learn all you can about the classpath. It will come back to bite you, again and again.

    - JDBC : You'll likely be talking with DBs so this API is your first step. The tutorial in Sun's site should be a good starting point. Learn when, how and why you should close your connections, resultsets and statements.

    - Logging : Grab Apache's Log4J and learn how to use it. Play around with the configuration files.

    - JUnit : If you fancy unit testing this should be your first tool. It integrates nicely with Eclipse.

    - Ant : When you need to automate complex things you don't trust IDEs for or when you need to run them from the command line. Compiling, packaging, checking out from CVS, etc. Again, it integrates nicely with Eclipse.

    On the J2EE side:

    - Servlets and JSP : Install Apache's Tomcat and start playing around. Just plain old Servlets and JSP. Learn how to use objects in the various contexts: request, session, etc. Mess around with the HTTP headers in the response. Learn about Filters.

    - EJB : You can safely ignore this for small / medium applications.

    - ORM : Hibernate is an example. ORMs give you a software abstraction over a relational (and object-relational) DBMS.

    - JNDI : To do directories queries. Often used.

    You can then check out concepts like MVC and multi-tier : you don't need a specific framework for these. You can code by hand with simple Java classes and servlets (or JSPs) a primitive MVC framework. It might prove useful when using more sophisticated software like Spring and Hibernate.

    There are several approaches to web development that are not standardized and basically compete with each other: Struts, Spring Web, Java Server Faces (JSF), Tapestry, ... I personally like JSF and would suggest you to try ICEFaces or Apache Trinidad.

    Check out Spring, learn about "J2EE without EJBs". Try to integrate Spring and Hibernate.

    Finally, check out web services with Axis or even, JBoss.

    Note that JBoss will run your servlets/JSPs too (it runs tomcat); you'll only need it when using the more advanced features of J2EE, tough.

    Happy hacking.

  74. Basic Java by Anonymous Coward · · Score: 0

    The O'Reilly book "Java in a Nutshell" provides a nice intro aimed at C++ people and goes on from there. If you have seen that many languages, the whole thing will make sense with a few hours work. Learning specific frameworks are probably the next step, but that is a religious subject I won't delve into.

  75. C++ is the way to go baby.. by Anonymous Coward · · Score: 0

    If you don't agree read this:

    Bjarne Stroustrup, creator of the C++ programming language, claims that C++ is experiencing a revival and
    that there is a backlash against newer programming languages such as Java and C#. "C++ is bigger than ever.
    There are more than three million C++ programmers. Everywhere I look there has been an uprising
    - more and more projects are using C++. A lot of teaching was going to Java, but more are teaching C++ again.
    There has been a backlash.", said Stroustrup.

    He continues.. ..What would the world be like without Google?... Only C++ can allow you to create applications as powerful as MapReduce which allows them to create fast searches.

    I totally agree. If Java ( or Pyhton etc. for that matter ) were fast enough why did Google choose C++ to build their insanely fast search engine. MapReduce rocks.. No Java solution can even come close.
    I rest my case.

    1. Re:C++ is the way to go baby.. by fredrik70 · · Score: 1

      chill out dude, ever heard about using the right too for the job? pick the langage that helps you most in your problem domain.

      c++ might be faster at some things, however, with todays JIT compilers this is not automatically true in all cases, but that's not always of interest.

       

      --
      if (!signature) { throw std::runtime_error("No sig!"); }
  76. Eclipse is a good start by kdemetter · · Score: 1

    Well , i wouldn't jump into J2EE right away.

    Start with the basics of Java . I suggest using Eclipse as an IDE .

    Eclipse also works quite well for J2EE applications.
    Offcourse J2EE is very big . If you want to make web applications , than you should look at Servlet and JSP/JSF to start with , and Session Beans .

    If you want to start with simple web applications, Tomcat should be fine . If you want to create Business Applications , go with Jboss .

  77. FAIL by oreaq · · Score: 1

    public static void main () {

    use public static void main (String[] args) { if you wan't to get past the compiler

  78. Video lectures by WetFreud · · Score: 1

    Also, keep in mind that a growing number of universities are making video lectures of complete courses available on the internet. Stanford University, for example, has uploaded a number of courses to youtube [ http://www.youtube.com/profile_play_list?user=stanforduniversity ]. One of them is CS106A, their introductory programming course (taught in Java). Might be too basic for you, but I'm just saying, it's out there. Of course, in programming there is no substitute for practice, practice, and more while(1){ Practice();} ;-)

  79. get a CS degree by teyes · · Score: 1

    Go get a CS degree and study programming language theory. Then you'll be worth something in the marketplace, and you'll see that the idea that knowing a certain language is a marketable skill is ridiculous. Seriously, if you have a decent CS background, picking up a new language won't be a big deal, and any employer worth their salt will know that. They won't hire you based on knowing Java or not...

  80. Just two links by Anonymous Coward · · Score: 2, Informative
  81. You can try at... by Anonymous Coward · · Score: 0

    www.python.org

  82. Start with an early version of the JDK by DrEasy · · Score: 1

    Java has become more and more complex over the years. JDK 1.5 (or Java 5 or whatever they call it) and its introduction of generics and annotations was a major, and debatable, leap in complexity.

    If possible, I would recommend starting with pre-1.5 Java, to get the basics right, and only then to move to 1.5 or 1.6.

    --
    "In our tactical decisions, we are operating contrary to our strategic interest."
  83. Some suggestions for Java web developers. by originalBitmaster · · Score: 2, Insightful

    We do Enterprise web development for a major University and leverage Java as our core language. We use a combination of software including Java, Hibernate, and Stripes to manage student information for tens of thousands of students. We have found this to be an excellent combination.

    Recently, I have been experimenting with upgrading our platform by using Groovy for unit testing and batch jobs. Groovy is basically dynamic Java. It is 99% compatible with Java so essentially you can drop in you Java code and it will run except on a few edge cases. This is because Groovy compiles down to the same bytecode that a similar Java class does. You can't tell the difference except the smile on your face as your coding is reduces by approximately a 6:1 ratio.

    Groovy incorporates some of the cool features that other 'dynamic' languages such as Ruby and Python have been rubbing in us Java guys noses for quite awhile such as closures, operator overloading, and autoboxing. A good book on Groovy is by Scott Davis' called "Groovy Recipes" (ISBN 10 0-9787392-9-9). Groovy is the ticket to moving Java into the 21st century.

    If you are feeling adventurous and are starting a project from scratch, I suggest another web framework called Grails. This convention based framework and development environment uses the Groovy language and leverages popular and solid frameworks available such as Hibernate and Spring. A good book on Grails is "Beginning Groovy and Grails: From Novice to Professional" (ISBN: 978-1-4302-1045-0).

    Dynamic Java is here folks and it runs on the JVM which is where things seem to be heading (JRuby, Jython,..). Why use a language that must be transformed to use the JVM? Instead use a language that the JVM was designed for!

  84. Java, are you sure? by Redbaran · · Score: 1

    From the sound of your post, you've decided on learning Java, but I wanted to relate my previous experience and at least get you to question if Java is where you want to invest your time.

    I've spent most of my career (about 5 years) working in C++, but for various reasons a few months ago, I wanted to make a change. It came down to either Java or C#. I had done a little of each: C# in my spare time and Java in college. Due to my limited experience, I had no preference. Since I had no preference, I searched the job boards for Java and C# positions. If I recall, there were about 30 C# positions and about 35 Java positions, so that metric was a wash. The tipping point came when I compared salaries. C# positions, at least in my area, paid significantly more. My assumption is that colleges teaching Java allows employers a better selection and can therefore pay less. So, do some research into your local markets and see which language you should invest your time in.

    In case anyone is curious, the job market for C++ is small to non-existent in my area and that is the primary reason I decided to move away from C++.

  85. Suggested books and tools by LizardKing · · Score: 2, Informative

    BOOKS
    -----

    Learning Java (O'Reilly) - one of their better books in recent years, and actually kept up to date with new editions

    Effective Java (Addison Wesley) - preferably the second edition, which covers generics

    J2EE Design And Development (Wrox) - heavy going, but it's simply the best book on J2EE development

    ANT In Action (Manning) - describes the de-facto build tool in the Java world, which can also automate things like deployment

    TOOLS
    -----

    Checkstyle http://checkstyle.sf.net/ - a basic static analysis tool

    PMD pmd.sf.net - a more advanced static analysis tool

    THINGS TO AVOID
    ---------------

    EJB - it's gotten better in version 3.0, but a lightweight framework like Spring is still a better choice for almost every project

    Maven - it might be great for some Apache hosted projects, but it's caused more problems than it solves on every system I've worked on with it

    1. Re:Suggested books and tools by laejoh · · Score: 0

      We're talking java, you forgot...

      UNIVERSITY

      ----------

      Miskatonic University of course!

  86. SCJP by Anonymous Coward · · Score: 0

    Search google: SCJP, SCWCD. Become Sun Certified and you will be at a level.

  87. Re:Look at Open Source Java Projects by Wizard+Drongo · · Score: 1

    'Cause it's shit, basically.

    KOffice has come a loooong way, much like Konqueror (which is now WebCore really, an open source success story!) with a lot of code optimization, bug fixes, streamlining etc. and is becoming a pretty mature office set. It's also had a little visual polish applied to snazz its looks up a bit.

    OpenOffice hasn't.
    Don't use it.

    --
    The truth shall always be free: Boris Floricic is Tron.
  88. You totally missed the point by pjt33 · · Score: 5, Insightful

    Seriously, is there some shortage on Java dicumentation out there or something? Granted, I don't know the language as I never had a need for it, but I can't trip over without falling into a pile of Java tutorials.

    That is precisely the point of the question. You could quite easily spend 6 months solidly reading the stuff out there, so what OP is looking for is a recommendation or two to save him spending months finding the stuff that's worth reading in the piles of dross. I'm hoping there are some good answers, because I to would quite like to get a handle on the more enterprisey side of Java.

    1. Re:You totally missed the point by Hucko · · Score: 1

      6 Months? I've been doing it for 2 years and am proud to say I can say hello world in a swing dialog.

      --
      Semi-automatic amateur armchair Australian philosopher; conjecture ready at any moment...
    2. Re:You totally missed the point by IcyHando'Death · · Score: 2, Interesting

      If you have a little Java experience (1 month or more) but want to get into the much larger and rather daunting enterprise world, this course - http://www.javapassion.com/j2ee/ - is truely one of the great Java resources on the web.

      It is the equivalent of a university graduate course on enterprise Java and is offered for FREE by the instructor, Sang Shin, a Sun technology evangelist. It covers a wide range of topics, such as EJB, Struts, Hibernate, Java Server Faces and the Spring framework.

      The course is every bit as demanding of your time as a graduate course would be too, so don't undertake it lightly. It is taught over a 5 month period with weekly reading and assignments which are marked for you. There is a Yahoo! group for the course where you can get any questions answered that you may have.

      Unfortunately, the current session started on July 1 and will run until the end of November, so you probably won't get a chance to register until January -- assuming Sang is kind enough to offer the course yet again (he does this on his own time).

  89. Suggestion by Anonymous Coward · · Score: 0

    For starters, I've recommended the Head Start series to a number of folks. Once they get comfortable with the core language features, I usually sugest finding a manageable program that interests them and diving in. I help a little, they do most of it. Then pick another with a different skill set. Lather, rinse, repeat.

    On a more philosophical level, I'm a professional Java software engineer and when I'm looking for new team members, I'm looking largely for people that can figure things out on their own. I know that if a project comes down the pipeline that requires, say, building a PHP website (god forbid), that they can figure it out even without experience. Knowing how to learn is a primary skill for us.

  90. Why it was posted. by arthurpaliden · · Score: 1, Insightful

    It is only there to start the JAVA vs xxxx holy wars that bring in the advertizing revenue as everybody and their brother/sister chime in, again, and again, and again......

  91. NASA JPL Video by giminy · · Score: 1

    The canonical NASA JPL Video...

    I would say, "Learn enough Java to know what you're talking about," and then mention Java's limitations in your interview.

    --
    The Right Reverend K. Reid Wightman,
  92. Re:Look at Open Source Java Projects by symbolic · · Score: 1

    I currelty use OpenOffice, and I've used KOffice as well. I like them both. They are both viable efforts. I do agree that OpenOffice has some rough spots, but I don't think that they're serious enough to completely dismiss it as a workable alternative.

  93. Want to keep your Java Job by arthurpaliden · · Score: 1

    Study the design and implimentation of multi threaded client - server applications. Then study how to impliment them useing Java. Then go and get one of those jobs. These are very hard to outsource.

  94. Django by Keeper+Of+Keys · · Score: 1

    If you're a bright programmer wanting to go into web development, I'd say "don't learn Java, learn Django".

    1. Re:Django by alex4u2nv · · Score: 2, Funny

      Django looks great, however, this year I decided to learn two new languages as a developer: French and Italian.

      What does this do for marketability as opposed to learning another development language?

      Languages I know + another language = Language++;

      Languages I know + another written|vocal language = Languages I know * (written|vocal) languages

  95. Re:Don't Use IE by symbolic · · Score: 1

    Ditch Internet Explorer. Problem solved.

  96. A straight answer: servlets, then JSP by ewg · · Score: 2, Interesting

    A straight answer: leverage your knowledge of web development by starting with servlets, then move on to JSP.

    Regarding tools, I've had good results with NetBeans with both novice and veteran Java developers. The "Web & Java EE" bundle comes with both Apache Tomcat.

    --
    org.slashdot.post.SignatureNotFoundException: ewg
  97. Re:Good place to start... by Keeper+Of+Keys · · Score: 4, Funny

    Is Visual Studio actually written in .NET? Eclipse is... Is IIS written in .NET? Tomcat is.

    .NET must have lots going for it if even Sun are writing all their tools in it.

  98. Re:Good place to start... by dubl-u · · Score: 1

    Interesting! How does it compare with IntelliJ IDEA?

    I've been using IntelliJ for years, and love it. Every year or so somebody talks me into trying the latest build of whatever, swearing (without haveing tried IntelliJ) that it's just as good. I've ended up disappointed so many times that I've kinda given up trying new Java tools.

  99. ...Yoda? by phreakngeek · · Score: 1

    Did anyone else hear this story in Yoda's voice when you read it?

  100. Helpful Stuff from Java based CS degree by uberzip · · Score: 2, Interesting

    My CS degree from University of Washington was based on Java. These are all recommendations from working through that degree. To learn the basics of Java I highly recommend Sun's books online. They are as well written as most things out there and I never found a need to use much else. The class library for Java is also much more straight forward and enlightening that anything Microsoft makes. Before I got itno the online resoursces, I actually referenced a lot of C# primer plus as the two languages are so similar. For Servlets and JSP I really like Murach's Java Servlets and JSP. Its a good basic intro and it will have a lot that you already know. However, its one of the best written books I've read and gets right to the point rather than filling pages with bloat. I'm really a big fan of Murach's books... they come out at a slower pace but have a lot more quality control than other series. For development I highly recommend either starting with Dr. Java or getting Eclipse and downloading the Dr. Java plugin. TextPad is also a good backup compiler to use. On one hand, Dr. Java is very simple and easy to use but has some bugs, but Eclipse is a big IDE to get into at first and start loading plugins can be confusing if you're not use to it. However, either way Dr. Java is an incredible learning resource. It allows you to play with Java in real time, so if you make an object, you can go into the Dr. Java interactions window and make an instance of your object and call its methods to see how it works all without making a wrapper class to test it. You can also play with core Java code too. So you can go in and type something like: int x = 8*2; x; and it will print out the value of x for you. All done without compiling or even having a file open. Its really nice to use to get use to how arrays and various other data structures work in Java. I also like some of the Java Data Structures and Algorithm textbooks just because those are good ways to see how the basics of the language work. However, I have always found for things like Swing, JOGL (openGL in Java), multithreaded programing or multiprocessor programming, etc I just prefer to use the resources online on Sun's site or through a google search. So many universities use Java now that you will get lots of .edu sites with really good tutorials. I can't stress how good of a resource Dr. Java is though.

  101. You will like Java + Tomcat + JSP by TheDarkMaster · · Score: 1

    You will like to use Java for web-based applications using Tomcat as app server, JSP for "interface" with user and Java for control, data access and etc. You can keep simple (K.I.S.S.) and functional applications, and better if you are good enougth to emulate functions from frakeworks like hibernate (hibernate works, but is a elephant on your code) using more simple functions.

    --
    Religion: The greatest weapon of mass destruction of all time
  102. Java In A Nutshell by Anonymous Coward · · Score: 0

    If you've done from programming before in an OO language, or even C, the book Java in a Nutshell will offer you a great transition.

    The first half of the book explains syntax specifics for the language, while the second half goes through the Java APIs. The middle gives an in-depth teaching of new Java 1.5 features. It's also a great reference manual, and will give you plenty of "I totally didn't know I could do that in Java!" moments.

    If you haven't programmed before, or done OO programming before, this book probably isn't for you.

  103. a simple tool... or maybe something for the phone? by Anonymous Coward · · Score: 0

    I wrote a small database tool in java a few years ago, and learned a lot about basic java doing so. It was just a routine to fill in blank records in one of our database tables. I learned IO, loops, and database query handling. It was something I would have normally done in bash, but it let me learn a new language.

    I am writing a mobile application now, for cell phones. I am learning a lot. It seems that the gui code works well and is pretty intuitive. Networking and audio are quite difficult to work with. You should have an easier time with it, since you are already familiar with the Event Driven Programming model. In mobile java, your program isn't a program, it's a "midlet", so you have to work with the constraints of living in midlet land.

    Or of course, just design a new website and pick a Java framework to it with.

    If you want to help with my phone program, I'll shamelessly point you to http://talklock.sourceforge.net :)

  104. idiotic question and answers on slasdot! by Anonymous Coward · · Score: 0

    anybody who replies directly to the question is an idiotic ass hole.

  105. Seriously: don't. Stop right now. Walk away. by CountBrass · · Score: 1

    Java is only really used by corporate drones developing in-house crap-ware applications that you'll never be allowed to develop past the "it's good enough to fool the customer" stage. And in a year you'll be back to fix the bugs and crap design you didn't have the time to fix before. But only enough to make it good enough to fool the customer again. You'll never be allowed to "do the job properly".

    And I speak as one who has suffered through many such cycles in various companies. for the last 10+ years.

    If you want to learn a high level language to develop web apps choose Ruby on Rails instead. If you want to right low level code, learn C (personally I don't think you're a real programmer if you don't grok pointers and recursion).

    Then find a job working either for a software house developing a shrink-wrap product: because there it's in the company's interest to "get it right" or for a web boutique: because they'll be small, agile and do interesting stuff.

    And don't blame me if in 10 years time you find yourself giving the same advice to someone on /. asking if they should learn Java...

    --
    Bad analogies are like waxing a monkey with a rainbow.
    1. Re:Seriously: don't. Stop right now. Walk away. by kdemetter · · Score: 1

      Obviously you don't really know about J2EE . If used properly , it's a real blessing.

      But then again , we don't use it to 'fool customers' where i work , we use it internally , and build a ourselves which uses J2EE .

      So maybe you just had bad experience because your company didn't utilize well. Don't blame it on Java , then.

      Ruby on Rails look promising , but it's not yet ready for enterprise usage . In a few years , we will know.

    2. Re:Seriously: don't. Stop right now. Walk away. by CountBrass · · Score: 1

      And just to follow up my own post: if you want to keep your job, don't learn a skill that all the Indian outsource shops have (i.e. Java).

      And in any case, most employers of Java developers are big corporates and they DO NOT CARE about your programming skill. As far as they are concerned you are completely interchangable for an Indian they can pay 1/5 what they pay you. To give you an example: we have a 20 man team that maintains a core system of ours. Management are adamant the job will be outsourced to an indian team of 10. They don't care about skill, they don't even care about the knowledge of the system the current team has: all they see is Indian programmers cost less.

      --
      Bad analogies are like waxing a monkey with a rainbow.
    3. Re:Seriously: don't. Stop right now. Walk away. by CountBrass · · Score: 1

      Ah the old ad hominem gambit: if you can't attack the argument attack the person.

      --
      Bad analogies are like waxing a monkey with a rainbow.
    4. Re:Seriously: don't. Stop right now. Walk away. by CountBrass · · Score: 1

      Ah the old argumentum ad hominem gambit: if you can't attack the argument attack the person instead.

      --
      Bad analogies are like waxing a monkey with a rainbow.
  106. I can't agree strongly enough by CFD339 · · Score: 1

    Possibly the only programming language book I've ever read almost page by page from start to finish -- half of it in one sitting on a flight to London from Boston. I'd meant to just look at it a bit then settle in and watch dvd's. The pace was just right and it had places you could gloss through if you already know how to code in other languages.

    Best language book ever. Hands down.

    Also, Kathy Sierra is great, and anything that supports her can't be a bad thing.

    --
    The problem with quotes on the internet, is that nobody bothers to check their veracity. -- Abraham Lincoln
  107. Java is ... not that good coffee (for me) by Anonymous Coward · · Score: 0

    Hibernate is just a prebuild house for accessing DB, generate SQL more (or less) automatic. You can still do it the 'old' way.

    Swing is a whole set of GUI related objects. Just like you have in C-stuff GDI+, WINAPI, .NET-framework.

    XML you'll have it in almost any language...

    I started from C -> C++ -> C# ~> Java. A good book was also my problem. But once you know the C syntax, it's just a matter of learning what's different in Java (I almost did get an headache cause of the long syntax and abundance of the cryptic C syntax, but that is subjective ;-))

    You can learn it by the internet also. Or just buy a reference work which you can use to differ out the differences.

    Good luck!

  108. there! by ogrisel · · Score: 3, Funny
  109. Do it by euice · · Score: 1

    Just select a decent IDE (IntelliJ IDEA is the one for me), try to do a project with a few good frameworks and you're into it. Start learning maven and spring, they will completely change the way you develop code, and then try to learn hibernate, which will be the last time you think about databases.

    1. Re:Do it by MillionthMonkey · · Score: 2, Insightful

      try to learn hibernate, which will be the last time you think about databases.

      LOL there is no other API where you think more about databases than Hibernate. The simplicity is deceptive.

    2. Re:Do it by euice · · Score: 1

      Well. you're gonna think about hibernate, not about databases ;-)

  110. The point I miss is the "why?" by angel'o'sphere · · Score: 3, Informative

    So, while I get that the asker of the question is very serious, and some people answering him also, I don't get what the motivation about questions like this are. I mean: the guy tells us he basically knows everything (languages, tools, concepts) that is important about "programming".

    So I would ask the asker: why do you want to learn/use Java?

    So, the simple answer to his question is:
    just start coding. Besides an IDE you don't need anything for starting to work with Java (probably knowing how to browse Java Doc ;D and a very short introduction into the syntax of Java)

    The more complex answer:
    If you add Java to your language zoo ... you don't really specialize your skills and neither you really broaden your skills (Java, C# etc. don't really add anything you don't already know from C++). You only add some TLAs to your skill set and you fit "at a first glance" better to job descriptions.

    UML
    If you did not use UML so far, you don't need it for Java either. However: learning UML and something about Model Driven Software Development (MDSD ... not MDA, that is to complex) will broaden your spectrum. Hint: Eclipse + OAW might be interesting to you. OAW is a MDSD tool chain, based on Java (if you use that, you will program a little bit in Java). With OAW you basically write your own generators, to transform specifications from UML into your language of choice (via templates and "Scripting" in Java)

    Databases, Hibernate, MySQL
    If you want to work with DBs you need a very basic knowledge about JDBC (a standard Java API) because all DB Frameworks use JDBC under the hood somehow / somewhere and the configuration of your DB access (URLs, Users, Passwords, Connection Pooling) will be always very similar regardless what framework you use. Besides Hibernate I would suggest to look at iBATIS, also (you will need the iBATIS book). EJB 3.0 is overkill IMHO (yeah it is not only persistence but also services etc. ... but it goes to far to discuss this here) and also don't dig into JDO (Java Data Objects, a Java API) while the base idea is not to bad, most implementations just suck.

    Swing
    First, a lot of people out there find Swing over complex and prefer SWT. I strongly suggest that you stick to Swing for several reasons. The complexity of Swing might increase your learning curve a bit. However, sooner or later you will need the features Swing gives you. And when you are a bit experienced in Swing, you will be very fluent with it. Note: Swing will be greatly improved in Java 7, when the "Swing Application Framework" is integrated (beta of that is available for Java 6 right now).
    Similar to Swing and probably interesting for you is googles GWT (Google Web Toolkit). The programming model is very close to Swing. GWT is used to program (preferred in Eclipse, using the GWT Plugin) in Java, having Server side Code in Java, running on a Web Container (e.g. Tomcat) and having client side code programmed in Java, but cross compiled into Java Script running in a Web Browser (AJAX style).

    Beyond Java
    Just learn enough Java to be able to compile simple programs (well, 2 days or something ;D).
    Then learn Groovy. Groovy is a "dynamic" language, that compiles to Java Byte Code and integrates into the Java Platform. Groovy is mainly used for scripting, but it is a serious platform for development as well. Groovy is also used to develop Domain Specific Languages(DSLs), one thing that will become a future market.
    Dig into Ant, a "XML based scripting language", mainly used for build files. But don't be tempted to use it for to much. If you find Ant useful, and if you got a grip on Groovy, then use gant.
    Groovy uses a concept of builders which is used e.g. to program Swing UIs, to "build up" Ant-Scripts (gant), to "invent" DSLs (for configuration of your Java/Groovy programs) which can be adapte

    --
    Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    1. Re:The point I miss is the "why?" by julesh · · Score: 1

      Good summary. Not much I'd suggest doing differently, except that I'd recommend getting familiar with JUnit a little earlier than you suggest, and learning test-driven development whether or not you intend on doing XP -- of all the new ideas XP contains, TDD seems to be the most useful.

    2. Re:The point I miss is the "why?" by Anonymous Coward · · Score: 0

      This is a good reply to the questions, gets my vote

  111. Objects First by synthespian · · Score: 1

    Learn Java with the BlueJ book:

    http://www.bluej.org/

    Why?

    1- Objects First.

    2- An IDE that will tell you about what's going on with your objects.

    3- You will be working with code already existing. You will then be asked to modify the classes. This is much more realistic, because usually you don't write the whole software by yourself. An essential skill is understanding other people's code and being able to work with existing classes. Supposedly, this is the big thing about OOP.

    The IDE helps a lot. It kind of feels like Smalltalk - a Good Thing (TM), IMHO.

    At least, get an "objects first" book. So many books teach Java as it were C, objects and classes being squashed in the middle.

    Also, as a second book you will want a book on Data Structures. This being Java, you will want a book that teaches you how to use the existing stuff. "Objects, Abstraction, Data Structures and Design Using Java", by Koffman/Wolfgang is one I like.

    PS: The BlueJ book is better than Thinking Java, IMHO.

    --
    Main difference between the BSD license and the GPL license: one is from California and the other is from Massachusetts
  112. Re:Good place to start... by Spy+der+Mann · · Score: 5, Insightful

    I never really liked NetBeans, I tried it with ver 5 and decided to stick with IntelliJ and Eclipse.

    This is one of the examples that us Java foreigners want to learn. Here are some Java buzzwords that you see in jobs asking for devs:

    Netbeans
    J2EE
    Eclipse
    Jakarta
    Struts
    MVC (which isn't a java-only concept, but then again, newbies don't know)
    Websphere

    I really wish there would be an "intro to java technologies" book that explained newbies like me, with diagrams and colored figures what the heck is each buzzword and what it means, but I don't just mean a dictionary paragraph.

    See, anyone could spend a couple of days googling each buzzword, but then there's the problem that one could learn TOO MUCH and get TOO DEEP trying to undersand ONE OF MANY things in java. And then you can find out that what you learned won't get you anywhere because suddenly the technology you learned became obsolete.

    Around 8 years ago, I tried to learn java and JSP, and then found out that everyone switched to J2EE. Then I tried to learn J2EE and completely got lost. Then I tried to look at some J2EE courses sponsored by IBM but they costed at least $600. Then I said "fuck it, I'll stick to PHP. I can install an Apache webserver in one click on my Windows compy and I'll learn PHP on my own - for free". Try that with Java. See, the problem isn't the language itself, but the bunch of stuff built on Java, the frameworks built on java, AND the popular apps built upon some of the java frameworks, which is actually what the companies expect you to know.

    What we need is a broadth-first approach of learning, starting with the language (one chapter for the java basics and examples should be enough). I mean explaining only the basics of each, comparing different technologies, telling you where they fit in a web app, and which ones are recommended or not, and why.

  113. Suggestion by kenoti · · Score: 1

    If you wish to learn java would suggest starting at www.roseindia.net have some really nice java tutorials to start you off and off course deitel and deitel java books are always nice for starters.

  114. Suggest you get "Just Java" by pvdl · · Score: 1

    If you're an experienced programmer, you can't do better that "Just Java". http://www.amazon.com/Just-Java-6th-Microsystems-Press/dp/0131482114 I wrote it when I was working with Java at Sun Microsystems, and it is intended to help busy professionals pick up Java. It covers not just the language, but the whole ecosystem of tools, releases, certification, SDKs etc etc. Peter

  115. The Java Tutorials by blind+biker · · Score: 1

    The Java Tutorials

    IMHO, the best way to learn java. Comes from an authoritative source, too :o)

    --
    "The agriculture ministry is not in charge of Gundam" - Japanese ministry official.
  116. Ibatis... by cs02rm0 · · Score: 1

    ...offers a pretty good solution that allows you to use real SQL, kept separate from your Java code and cleanly returns objects for your Java code to deal with. Might be worth a consideration if you haven't looked at it yet.

  117. Javadocs is your friend by Billly+Gates · · Score: 1

    here

    Also you can download javadocs onto your hard drive to see the object oriented relationship and class structure of all the core Java api's. Whats great about javadocs is that its a tool that will automatically autodocument your whole program for you in the same tree structure. All you have to do is put a "///" instead of a "//" and your comments will be recorded in the html tree of your documentation as well. No other language comes close to this besides perldocs. Sandcastle is Microsoft's way of a javadoc knockoff for c# but its not finished yet.

    This of course assumes you know how object oriented programming works which you do according to your experience in C++. You can learn java quickly if your familiar with these concepts as even data types such as strings and integers are objects in Java.

    I used the sixth edition of this book when I took advanced java programming in college which is very detailed with over 10k lines of code. Its very academic oriented if you do not mind it but has directions on how to do almost anything. You can skip sections such as if/then structures and see how the memory reference object oriented model works and how its different from other languages.

    This newer edition even has tutorials on ajax. Damn I am tempted to get it.

    Keep in mind I have not written a line of code in over 2 years and am not a professional programmer so take what I say with a grain of salt.

    However I do agree with others here that unless you have real work experience with java that you will be turned down from any job requiring it regardless of your experience. HR wants the impossible and do not understand programmers. They think programmers who use different languages can't learn another and they also worry about retraining costs. If all they have is an entry level budget then they can hire an Indian to do the work for alot cheaper sigh.

      If i were you I would write small applications in java at work for small intranet sites so you could claim you have X amount of years of experience web programming and used java. This will satisfy the HR weenies so you can then interview and you can show your better for mission critical work than abunch of Indians. (Perhaps this is why I do not want to work in I.T. again)

    Do not mention you programmed in Java for X years. Just mention that you programmed for X years and used Java and this will get you past the filter. But try it at work with something small.

  118. batman strikes again by unityofsaints · · Score: 1

    So, VB, ASP, PHP, Coldfusion, Perl, even C and C++ I have in my belt.


    Jeez, I'd love to see the belt you're wearing, it obviously has pouches in it like batman's! ...or maybe you meant "under" instead of "in" your belt? ;)

  119. Struts by EgoWumpus · · Score: 4, Insightful

    As a Java developer for nigh on ten years now, and someone who painfully learned how to program database connections by hand, then use orms like Hibernate, I might caution against Struts (though the rest of your order-of-learning is excellent). Struts was definitely in my path of learning, but I am not sure what it offers these days that isn't done more comprehensively - and to my mind, more cleanly - with Spring.

    Of course, there are a lot of legacy systems these days built on Struts - for good reason. So if you're looking to work on older code, it's not a bad thing. But if you're planning a career with stuff that is from scratch, I think that Spring forces one to code in a better manner than nearly any other framework out there.

    It may be, of course, that I'm just in love with inversion of control - which I think is one of those things that, if you understand it, gives you a much better command of abstracted design.

    One other thing I think is pretty cool is JavaBLACKbelt, which has a pretty good, community developed set of quizzes that are useful for gauging your own command of the language.

    --

    [Ego]out

    1. Re:Struts by ardle · · Score: 1

      As a Java developer for nigh on ten years now ... I might caution against Struts

      And as a web developer of around 6 years, might I concur?

      There's plenty in Servlet programming (e.g. filters, wrappers, authentication) that is worthwhile and portable. There is no Web framework out there that I haven't found absurd at some point (usually that point lies on a JSP page). I'm not saying that JSPs aren't worthwhile (they're great) but it pays to program them from first principles (you can write a whole program in a JSP) so that you can figure out what all those tags are doing to them later.

    2. Re:Struts by Anonymous Coward · · Score: 0

      I agree. There are a lot of better framework. My favorite is Playa, although you may have never heard of it.

      A free open source alternative is Echo2. Try it. You will like it.

      There are open positions requiring Struts? Sure. There are even more requiring COBOL. For some reason some people can't imagine having a job 5 years from now.

      If you want to have a job 5 or even 15 years from now learn Haskell.

  120. How to get foot in door for Java job? by Anonymous Coward · · Score: 1, Interesting

    I am in a similar situation than OP. I have been falling into Microsoft's .NET trap and for the last 8 years rewriting the same apps in the next version of the framework (VP goes to M$ seminar, sees new cool stuff, buys latest Visual Studio for the whole team, half the old code wont compile so we have to rewrite).

    I got pretty tired of a framework where you expend half your development time working around its limitations and bugs instead of getting the job done so I quit that job and started looking for something else like Java. Now, it seems you need 5+ years experience in J2EE or some other crap to get the foot in the door.

    Is there anybody out there willing to hire programmers with solid OO experience but little Java?

    Should I just study Java for like a month and then change my resume claiming 5+ years experience?

  121. Head First Java by EgoWumpus · · Score: 1

    Also, I have to plug the Head First series, which does a better job of explaining Java (and attendant CS theory) to visual learners than anything else I've run into, period.

    --

    [Ego]out

  122. A few suggestions by shmert · · Score: 1

    Read Josh Bloch's book "Effective Java", some parts of it deal specifically with how to switch from C++ to Java. http://java.sun.com/docs/books/effective/

    Get the source code for the JDK and look through it. The collections classes are well-documented (again, by Mr. Bloch) and interesting to read through. A few other projects seem well-written, like the google collections and jgoodies bindings. Reading through the source code can be fun and informative.

    Get a good IDE like IntelliJ, and pay attention to the little warnings it displays about your code. I've learned a few things just from the refactoring suggestions it pops up. Plus, Java (being typed) is really ideally suited for a powerful IDE, not like scripting languages.

    Have fun!

    --
    You drank my drink, you drunk!
  123. Java? by Corson · · Score: 1

    2: I can only see one reason why programmers may want to learn Java -- they are weary of C and so are their employers are. On the desktop, Java is still slower than native code; in a client-server configuration, you still need a Java client. Server side, I see no reason to favor Java over PHP or Perl, both of which can be easily converted to byte code, like Java is, and are simpler and more intuitive than Java. It's true that one can write Java code once and than easily adapt it for multiple platforms. Speaking of which, Java has limitations on MS Windows imposed by MS. So if your are a Java programmer you are probably developping small to medium size applications for the enterprise, most of which would be probably easier to create in Perl. Am I wrong?

  124. You only need three books to start off by thetoadwarrior · · Score: 1

    Core Java vol. 1
    Core Java vol. 2
    Core Java Server Faces

    Those will get you off to a good start for desktop & web development.

    Plain old java is easy, imo. My skills are lacking on the web development at the moment because, to be honest, a lot more goes wrong for seemingly no reason compared to other languages but I shall persist as there are more jobs for that side of java and I can leave the desktop app side as a hobby or for making little tools at work.

  125. Generic Non-Crap List by tjuricek · · Score: 5, Insightful

    Considering that Java has been (probably) the most used language for a while, you get a lot of crap. So, here's my "crap filter" list of what you should learn to really hop into the JVM ecosystem.

    Books:

      1. Effective Java, 2nd edition, by Josh Bloch

    This covers most of the twists and turns of the basics that an experienced programmer would need. I wouldn't worry about getting a simpler book.

      2. Java Concurrency in Practice

    Understanding the JVM model of concurrency is important, and this is the only guide that had a pretty in-depth look into the subject. The Sun documentation absolutely sucks at covering concurrency.

    APIs

      1. Guice http://code.google.com/p/google-guice/

    Dependency injection is the most recent thing that makes Java a very powerful language for building large appications. And Guice is by far the best implementation of DI. (Yeah, you could learn Spring, but I just don't care for it.)

      2. Hibernate http://hibernate.org/

    I hate Hibernate. But it basically set the standard for EJB3. If you know Hibernate, it's not a very hard road to learn all the other "enterprise" crap.

    On the other hand, any substantial server-based solution probably uses a ORM solution like Hibernate.

      3. Apache's Commons http://commons.apache.org/ and Jakarta http://jakarta.apache.org/

    There is a ton of projects under the Jakarta umbrella these days. The first one to try out is the commons-lang libraries, which provide very easy to use toString. equals, and hashCode implementations that are 'good enough' 99% of the time. Why do you need those? Read Effective Java. :)

    Interesting stuff:

      1. Hadoop http://hadoop.apache.org/

    Hadoop is an open-source implementation of Google's MapReduce idea.

      2. Scala http://scala-lang.org/

    Scala is my favorite "non-Java" JVM language by far. For me, the scala interpreter is how I learn APIs. In fact, most of my new code is in Scala, not Java.

      3. Groovy, JRuby

    Just some more used non-Java JVM languages. I've used JRuby a bit, but have moved on to Scala. It's still a significant project, however.

      4. Web application frameworks: Wicket http://wicket.apache.org/ + Databinder http://databinder.net/

    Wicket is the simplest page-based Web framework I've ever used. I just find it easier to navigate than Rails. If you really want an ORM-based solution, go for the Databinder extensions. Databinder will get you coding in a couple of minutes.

      5. Restlet http://restlet.org/

    We have several different clusters, and a bunch of machines that need to transfer data around. I learned how to set up a restlet server that was integrated with Guice in a couple of hours, and now, have a very easy means to script together many different servers.

  126. No... by Jane+Q.+Public · · Score: 1

    Ruby, Python, etc. have been growing a lot faster than Microsoft development.

    C# has a lot of market share, but others have been catching up.

    Ruby has been going crazy. Jobs programming in Ruby and Rails are in demand and pay well.

  127. You don't learn libraries by Jimmy_B · · Score: 1

    All these buzzwords you're so afraid of are just libraries. You're asking how to learn them, but the answer is: you don't. For each library that you have seen mentioned, look it up and find out what it does. For each library that you consider important, download it, do a "hello world" project with it, and skim (don't read) its manual. Then, when you actually have a project for which you need it, lean on the reference material you keep handy. Memorizing APIs is a waste of your time, because there will be always better-but-different ones tomorrow.

  128. Re:Good place to start... by kannibal_klown · · Score: 1

    Interesting! How does it compare with IntelliJ IDEA?

    I'm currently stuck on IntelliJ ver 5.1, though I used IntelliJ ver 6 for a while. Sadly I don't recall much about the IntelliJ 7 demo I tried].

    I'd say NetBeans 6 is better than IntelliJ 5, and probably around as good as IntelliJ 6. Plus it's free, which is also good. I'm no NetBeans zealot as I'm still getting familiar with it, but I'm liking what I see (save that slowdown issue I mentioned).

    The only thing I don't fancy about NetBeans 6 is the way they handle the User Libraries (or perhaps I haven't figured them out yet). While other IDEs let you setup your Global Libraries in a similar way (where you make your own segmented list of Libraries you see yourself using) it appears NetBeans 6.1 allows you to add to an existing list. So instead of a lean Library list that has only what you use you get some other stuff.

    I'm still pretty early into NetBeans but so far it's looking pretty good. Assuming I don't find a bunch of things I don't like I might start using it at work.

    As I mention, it does start slowing down at work when I start modifying code while in run/debug mode (for a long/large process) so that is annoying, then again I probably shouldn't be doing that anyway. Also so far I've only noticed that problem at work, which has a slower Intel CPU (SingleCore). At home I have a fast rig with dual cores.

  129. My advice by strawberryutopia · · Score: 1

    Well I'm off to uni in about a month, and I need to know Java for that.

    I've been using Netbeans IDE, and I've been reading Java How to Program by Deitel.
    ISBN: 978-0132222204

    It's an expensive book, but if you can get one second hand it's not too bad. If you don't know any Java at all, then you don't necessarily need the latest Edition. I'm using the 6th Edition.

    I only have VB and basic PHP knowledge, so I'm probably not the best person to give advice. But that's the book that uni recommended for people who have a good programming experience.

    --
    I'm a leaf on the wind, watch how I soar...
    -Lucy-
  130. Real world project by Anonymous Coward · · Score: 0

    After learning the language basics I'd jump into web programming.

    The web programming part is hard though because of so many choices.

    We decided to go with:

    Spring + Hibernate + GWT (and some JSP) for front end work

    I'd suggest going the Spring/Hibernate path for starters because its pretty simple.

    The UI part is the weirdest. The frameworks I like today are GWT and Wicket. But Wicket doesn't seem to be used by so many people just yet. GWT is very nice.. but it has a single page paradigm and is all client based which can sometimes be a problem (we got around it by using it w/JSP). JSF and Tapestry are horrendously complex (especially compared to ASP.Net which is nice!).

    JSP (2.0) is a good fallback if in doubt.. you can build components with it and all servers support it. But there isn't a good component market place for UI stuff.

    Aparently lots of people still use Struts.. very old school in my opinion.

  131. learning java very fast by Anonymous Coward · · Score: 0

    back in '00 i needed a crash course in java, none of the books i read offered a decent understanding of the way things 'really' work. eventually i came upon a site offering a pdf named 'learn java by association to visual basic' or something like that - for around $10. from there i was able to rewrite a product that was left a mess after several developers had their way with it. the new version worked, it was clean, it had no bugs, but it was very slow. after several months of tinkering i came across a powerful java debugger that helped me learn about java 'plumbing' and how variable declarations and subroutine calls eat up cpu and memory. i'd recommend going that route, using either notepad, jbuilder or netbeans (or all three). with that knowledge you can then choose the add-ins to experiment with, you'll surely have a good understanding of what's going on under the hood by then.

  132. Re:Good place to start... by xelah · · Score: 2, Insightful

    Try Wikipedia, it has articles on each of the things you list and lots more. Unlike projects' individual sites, it tends to start by telling you what each actually does. Most of them are hardly earth-shattering, it's just that Java developers seem to like assigning a silly acronym or coffee related name to every equivalent to a CPAN module.

  133. Re:If you know C++ ... by cuby · · Score: 1

    Did you ever developed anything in j2EE?

    --
    Math is beautiful... e^(pi*i)+1=0
  134. Start Here by peterofoz · · Score: 2, Interesting
    I also looked into this. The hard part about Java isn't the language. If you have a solid background in C/C++, then Java should be very familiar.

    The tough part is in navigating the huge frameworks. Be it STRUTS or another MVC, then there's all sorts of add-on stuff to learn. Then there's the whole WebSphere or Weblogic administration, tuning thing. In short, you can't learn it all in a timely fashion.

    A agree with another poster that a superficial skim of a library or framework is probably sufficient so you have a basic understanding. In the end, you won't know which one to study until you have a project.

    If you are on-shore USA, then you'll probably not want to be a Java developer, but a project lead, analyst, or integrator. Those are customer or business facing jobs at the interface that are difficult to outsource but require people skills and in-depth knowledge on troubleshooting and delivery.

    As for me, I'm going back to coding in Prolog. It rules.

  135. books to learn Java by Anonymous Coward · · Score: 0

    Personnally, I find these two books very well done, even if they are very different:
    - Java Head First, O'Reilly: full of diagrams, ultra clear explanations; for the very beginner;

    - Introduction to Java Programming, 6th edition, 2006, Daniel Liang, Pearson-Prentice Hall:
    you can be mislead by the title as it is less introductive than the Java Head First. Covers everything from Hello World to multithreading, JDBC, applets, servlets.

    Good luck.

    Orfeo

  136. JSF by d_strand · · Score: 1

    First: (as several have said) Ignore the people saying "don't". They have no idea what they are talking about, most are trying to sound cool and probably have no experience from the world of large business systems. A good programmer chooses language based on the problem at hand, not based on what is cool.

    There is a reason most large enterprises only deploy in either Java or .Net, because both platforms are proven, reliable and *scalable*. Few serious programmers would think of building a large critical 24/7 system in Python or C or whatever. Sure it's possible but you're in for a world of pain when you try to scale/maintain past a certain size and complexity.

    that said, many are recomending books on the java language, but you asked for what to do after the language. My advice would be serlvets-jsp-jsf-ejb3, in that order. With servlets you understand the core of all java frameworks, and jsp pretty much the same. After that, you have JSF, which *will* replace struts/etc eventually. JSF borrows heavily from struts but improves on it and is an official standard.

    There are several frameworks that build on and extend JSF, like JBoss Seam and the like, and you probably cant learn them all. Stick to basic JSF until you get the hang of it, and then you can try out some of the stuff based on it.

    Last is ejb3 which is needed for really large apps when scalability and redundancy is critical, but seldom used otherwise.

  137. Captan Obvious to the rescue by Qbertino · · Score: 1

    Since you're, like, familiar with 10 bazillion technologies, I'll just save you an afternoon of reading on Java. The other stuff should be blatantly obvious to someone like you:

    1) Don't waste your time with lightweight web stuff in Java. There's a reason PHP has eaten up that market and taken it away from Java. No Java Webframeworks.

    2) Don't attempt any intense multimedia stuff in Java, unless you want to learn the plafform independant specifics of Java in that area. C++ still rules that game.

    3) Go to Netbeans.org, download Netbeans, turn on all the code hinting and start coding away. And just so you know: I use Eclipse for most of my non-Java work, but I still find Netbeans the supperior IDE for doing Java stuff. And Swing has greatly improved in the last 2-3 years.

    --
    We suffer more in our imagination than in reality. - Seneca
  138. Re:Good place to start... by thetoadwarrior · · Score: 1

    I think Netbeans is the clear leader now. Eclipse won't go away but I find Netbeans to be much better now.

    I just hope they don't bloat the hell out of it while adding in Ruby, PHP, Python related stuff into the mix.

  139. Read "Faster, Better, Lighter Java" by B. Tate by echtertyp · · Score: 1

    Tate is now a RoR fan, but his take on good Java coding is a nice read. The book itself won't tell you how to code Java syntax, but it really underscored a lot of things I'd learned myself. In brief, whatever you do with Java or other languages, listen to your instincts when vendors and "architects" start pushing high falutin', sea-going, top heavy "solutions" on you. Yes, IBM, I'm talking to YOU. In fairness some architects are OK guys. But watch out for the ones that make simple problems complicated. Complexity should come from the business problem you are solving, not from wrestling with a framework to retrieve a string from a database ;P

  140. pick a problem, solve it by Anonymous Coward · · Score: 0

    pick a small (but non-trivial) problem. solve it. now make the problem a bit bigger. solve it. repeat until you're either sick of the problem (in which case you need a new problem), the problem is too big, or you've run out of problem.

    i really like little toy artificial neural networks as a starting point for learning a language: i've got a really great understanding of the algorithms involved, the data structures tend to be fairly simple but not trivial, and the algorithms exercise a lot of the various control structures. once the core is done, it's time to look at improvements: refactor hand-written linear algebra to use standard packages, maybe add a nice gui on top to display statistics from the k-fold cross-validation and give some visual clue about what went right/wrong, etc.

  141. A Straight Answer by RexSilex · · Score: 1
    Unlike so many of these comments that skirt the question, I'm going to at least give you something to work with. J2EE being the key here, as JAVA in itself is not much for a resume. JAVA makes it easy to release a project that is completely cross-platform and will run on any machine with a JVM running. J2EE programming gives you tools to make large projects scalable. The key being, that most J2EE jobs will involve large projects. If your products aren't large then theres no reason to use J2EE, and if you're not worried about cross-platform then JAVA itself isn't particularly important to choose. Occam's razor right? So your goal in learning JAVA and J2EE is to start to think about threading, scalability, and agile development. In actuality, an employer will hire you because then need something from you that you can do already. However, they will expect you to be able to learn to solve other problems when that project is complete. This is the key in computer science fields. Learn that the language is just a tool, and each one is suited for different solutions and any solution can be done many ways. Never expect to learn the language and be done--instead focus on becoming better at learning the new parts fast. Heres a good roadmap:
    • Learn JAVA through any book or website by making some simple applications.
    • Start to LOVE Java API pages
    • Then move to making something large AND scalable. (Look into Enterprise Java Beans)
    • Use your existing knowledge about databases and learn about JDBC. (Check out EntityManager)
    • Start to learn annotations (Affect deployment descriptors but aren't run by JVM but appear directly in code)
    • Learn about debugging and more importantly about testing (testing is about producing errors, not successes)
    • Whats hot in the market is definitely web services. (Check out SOAP)
    • Build a Web Service
    • Try using PHP to access the web service. (You'll wanna know about wsdl2php to get that working)
    • Using NetBeans accessing the web service will be easy with jsp pages (drag and drop easy)
    • You'll have to learn at least two application servers: Glassfish, JBoss, WebSphere, Tomcat. Learning 2 is the only way you can see how they can be different and write projects that will work with them all. (Say hello to makefiles)

    I hope this helps. Those are all skills that will be valuable in todays programming workplace.

  142. learning java by chrisboredwithlogins · · Score: 1, Insightful
    I really got to grips writing plugins for a PIC simulator I used to use...

    Basically assuming the environment (ie plugin host) is nicely written the all the boring nut and bolt stuff should be taken care of, if you can find a well supported java application that uses plugins go for it!

    That means you can have "fun" while you learn which is the quickest and best way to learn

    I'd highly recommend the java "trail" tutorials, and once you get you're head round the API the api docs are extensive, more than learning a language (which is just really a C type sub set) you are learning the JVM's environment.

    Use a text editor for writing code and dont rely on multiple guess itelli"sense" type IDE's

    Enjoy!

    --
    there are thousands of windows applications that don't work on Linux - thankfully
  143. Re:If you know C++ ... by d_strand · · Score: 2, Insightful

    jeez... Who modded you insightful? The Java platform today is an enormous pile of layers, frameworks, and standards. It's not just Java/EJB. Learning the entire JavaEE ecosystem is more than most people are capable of. And yes, I have worked with both C++ and the JavaEE stack.

  144. Eclipse Plug-In Development by Anonymous Coward · · Score: 0

    Write some cool Eclipse plug ins! While the learning curve might seem steep at first sight, it's cool, good practice and might just be a nice competitive skill. Everybody "knows" Tomcat etc. This might be a good opportunity for differentiation (not too exotic, though, either).

  145. IBM Robocode by Anonymous Coward · · Score: 0

    When I first started learning Java, I dabbled with the Robocode project, developed by IBM. It taught me how to review APIs, use libraries, got me familiar with using an IDE, and also familiarized me with several of the basic programming methods and constructs within Java. And in the end it was kinda fun because I had a Java "Robo Tank" that could hunt down and kill all of IBM's tanks. Good times.

  146. Which UI system by Anonymous Coward · · Score: 0

    I've a game dev who hasn't touched Java in a decade.

    Looking at Java it seems there are three ways to write the UI for an application:
    -AWT, the original cross platform wrapper to native look and feel. Obsolete? No new applications should use AWT?

    -Swing, AWT replacement that draws stuff on its own instead of using the built in widgets. Completely portable, but will have subtle differences with a native app.

    -SWT, the even newer toolkit from Eclipse that uses built in widgets. Not quite as portable as Swing, but can be made indistinguishable from a native application on a supported platform?

    Is that a reasonable summary of things today? So if I wanted to write some applications, mostly for the sake of learning, and only cared about Windows, OSX, and GNU/Linux I should use SWT, right?

  147. Change the order by Kupfernigk · · Score: 1
    • Collections
    • JDBC
    • I/O

    That way, you get to JDBC just after you have learnt the object structures that enable you to do the necessary level of ORM to build efficient applications with storage. Now with I/O, you can build simple but real applications.

    --
    From scarped cliff or quarried stone she cries "A thousand types are gone, I care for nothing, no not one."
  148. What does Java lack now? by SuperKendall · · Score: 2, Insightful

    Compared to some other languages, Java is pretty limited in what abstractions can be practically implemented,

    Like what? Name anything and Java probably already has a library for it. Java is just as flexible as anything these days, and wether your thing in running Ruby on Rails on top of the VM with some Java through in the backend or some functional Groovy work Java has options.

    That's a big advantage it has going for it, so many people have used it now there are a lot of resources and options for wherever you might want to go with it. Even if you decide to use other languages learning Java just to understand how to use it as a base is really worthwhile, and because of the platform neutral architecture and excellent community standards body (JCP) as a platform it will continue to thrive.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
    1. Re:What does Java lack now? by Phleg · · Score: 1

      Look. You've practically admitted (both explicitly, and implicitly by your clear naivete when it comes to this topic) that you've been exposed to hammers as your only problem-solving tool. Just acknowledge that you can't conceive of how your hammer isn't the best tool for solving screw-shaped problems and expand your damned horizons already.

      --
      No comment.
    2. Re:What does Java lack now? by arevos · · Score: 2, Interesting

      Like what? Name anything and Java probably already has a library for it. Java is just as flexible as anything these days, and wether your thing in running Ruby on Rails on top of the VM with some Java through in the backend or some functional Groovy work Java has options.

      I think you misunderstand me. I'm not criticizing Java's libraries or the JVM. I'm criticizing the Java language.

      As for how its limited, just consider the tools used in other languages. Lisp programmers often use macros in their code, because manipulating Lisp code is extremely easy. Java programmers have libraries for generating bytecode on the fly, but they have nowhere near the ease at which S-expressions can be thrown around. As such, libraries or frameworks written in Java that use bytecode generation are relatively rare. In the Lisp world, you'd be hard pressed to find a library that doesn't use macros somewhere.

      Similarly, Ruby makes a big deal out of blocks. Java can do similar things with anonymous objects, but again, they're very unwieldy and are not used with the same ubiquity as Ruby uses blocks. Ruby can also add methods to classes on the fly; Java can do this too, via bytecode manipulation, but it's horribly complex compared to Ruby, and thus hardly use.

      Another example of a abstraction you don't find in Java is the monad. Used all the time in Haskell, I've never seen a Java implementation. Again, this is because it's so difficult to implement anything that resembles a monad in Java that it's usually not worth the bother.

      Note that I'm not complaining about the JVM here. Scala has monads, Groovy has blocks, and Clojure has macros. It's perfectly possible to use these abstractions in the JVM, but usually completely impractical to try using them with the Java language. My criticism, therefore, lies with more with programmers who don't look beyond the language of Java, rather than the VM or standard library that share the same name.

    3. Re:What does Java lack now? by telbij · · Score: 1

      Name anything and Java probably already has a library for it.

      Probably the GP should have said architectures rather than abstractions. Sure Java probably has more libraries than anything else, and as a result you can get a lot done quickly. But the core language itself is limiting in how you design your solutions. That's not necessarily a bad thing, but it does atrophy your mind if you never do anything else. If the only alternatives out there were PHP and C++ that might not be such a loss. But the fact is that in many cases languages like Lisp, Smalltalk, Haskell, OCaml, or Python allow for much more elegant solutions. If your only goal is to produce value for a large corporation somewhere then the benefits of Java probably far outweigh the negatives (today). However if you are interested in the craft of software engineering, and want to be a part of the evolution of the field of computation, then expertise in these other languages will give you a much higher level view of the state of the art.

    4. Re:What does Java lack now? by SuperKendall · · Score: 1

      Look. You've practically admitted (both explicitly, and implicitly by your clear naivete when it comes to this topic) that you've been exposed to hammers as your only problem-solving tool.

      Wrong, I have a ton in experience in lots of other languages. In fact my favorite is still Lisp. But I've used PHP and Ruby and C and Assembly Scheme and so on and so forth.

      I asked a simple question, but I guess *you* lack the experience to answer it, hoist by your own petard.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    5. Re:What does Java lack now? by SuperKendall · · Score: 3, Interesting

      Java programmers have libraries for generating bytecode on the fly, but they have nowhere near the ease at which S-expressions can be thrown around.

      Java is soon adding closures though. Honestly I used to do a lot of Lisp and Scheme and I always though I could represent pretty well want I wanted to do in Java, coming from those as a base - there are just different mechanics to achieve a similar design.

      You have me on monads, though even there there are possibilities, and they are not that difficult (and in fact I have made heavy use in some code of exactly the technique mentioned for one project).

      My criticism, therefore, lies with more with programmers who don't look beyond the language of Java,

      While I agree with that at some level, I would say there are too many people that have not explored the full range of what Java itself can do and how techniques learned in different languages can be applied using a combination of Java and various libraries.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    6. Re:What does Java lack now? by SuperKendall · · Score: 1

      But the core language itself is limiting in how you design your solutions. That's not necessarily a bad thing, but it does atrophy your mind if you never do anything else. If the only alternatives out there were PHP and C++ that might not be such a loss. But the fact is that in many cases languages like Lisp, Smalltalk, Haskell, OCaml, or Python allow for much more elegant solutions.

      I have used all of those (though frankly Python only briefly, it and Fortran are the only languages I have ever used that I actively disliked writing code in because of formatting requirements). Java can achieve just as elegant results as any of those, and use many of the same techniques, if you understand Java fully enough. That is my basic complaint, Java as a language is much deeper now than most people seem to realize and there are lots of techniques you can carry in to Java that make for great code on that platform.

      That is why I ask "What is Java missing", to get people to realize how much more is there than they think.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    7. Re:What does Java lack now? by arevos · · Score: 1

      While I agree with that at some level, I would say there are too many people that have not explored the full range of what Java itself can do and how techniques learned in different languages can be applied using a combination of Java and various libraries.

      Some time ago, I had the problem of exporting a tree of database tables into an XML output file. My solution using C# 1.0 was rather unsatisfactory, and in my spare time I attempted to rewrite the core logic in Haskell. Part of this solution was the two-line function below, which transforms a generic grid of data (with each column representing a successive layer of branches) into a list of trees.

      listToForest :: Eq a => [[a]] -> Forest a
      listToForest = map toBranch . groupBy ((==) `on` head) . filter (/= [])
                    where toBranch = Node . (head . head) <*> (listToForest . map tail)

      I was unable to come up with anything as neat as this in C#, and I can think of no particular feature of Java that would make it any easier in that language. I'd be interested in any solutions in Java that come close to the conciseness of the Haskell code.

  149. Java road map by pdjohe · · Score: 1
    Here are the steps I recommend:

    Setup
    1. Install Java JDK 1.6
    2. Install Eclipse and hook it up the the JDK (not JSE) - All java documentation (JavaDoc) and library source code will be visible to Eclipse. This speeds up learning Java incredibly, as you can also see how a lot of Java's base is written.

    Java basics

    1. Stick to primatives and static methods and learn some basic syntax.
    2. Learn the basic Objects (String, Integer, etc.) and arrays.
    3. Learn what the following descriptors mean: public, private, protected, final, static (hold off on 'transient' until later)
    4. Learn object inheritance
    5. Understand interfaces
    6. Learn 'abstract' descriptor
    7. Learn about enums
    8. Learn about the difference between String and StringBuffer (immutable vs. mutable)
    9. Learn about packages and begin using them right away
    10. Learn Exception/Throwable class. Learn 'try', 'catch', 'finally', and 'throws'. Learn the difference between checked exceptions (exceptions that extend Exception) and unchecked exception (exceptions that extend RuntimeException).
    11. Learn the basic organization of a class according to some java coding standard (I like inner classes first, then static fields, static methods, then instance fields, instance methods. Order fields and methods by public, protected, default, private.) Additionally, learn how to write JavaDoc comments right away.

    At this point, most of the foundation in Java's structure should be clear. Now to pick up some of the fundamental classes available:

    1. I feel the most important library (besides the basic objects mentioned above) is the Collections (java.util.Collection and subinterfaces and implementing classes), especially List<E>/ArrayList and Map<K,V>/HashMap. Become very familiar with these. The collections will help you learn to program to an interface instead of an implementation and learn how generics work. Observe the source code to some of these classes to learn how to program generics.
    2. Learn how Iterators work, varargs, and the foreach loop
    3. Learn Comparable/Comparator, Calendar/Date, Formatter

    Then depending on your needs, start looking into the following stuff:

    • File, InputStream/OutputStream and super classes
    • BigDecimal (high precision math)
    • Thread, Runnable, the descriptor 'synchronized' together with Object.notify() and Object.wait()
    • java.sql.* basics: Connection, Statement/PreparedStatement, ResultSet
    • Pattern and Matcher if you like regular expressions

    Now that you have most of the Java core under your belt, you can proceed to other frameworks. Each framework will probably take considerable time to learn. For example:

    • Creating jars: I would recommend 'Apache Ant' if you are used to 'make' for other languages. The other popular packager is called Maven.
    • Logging: log4j is a nice library
    • Apache commons libraries have a lot to offer
    • Database persistence: Learn JPA annotations, don't think 'Hibernate' or 'Toplink' or whatever. If you stick to the JPA standard as much as possible, it's really simple to change back and forth between implementations. Toplink has far fewer dependencies and is therefore easier to get running.
    • Webpages: look at JSP and Java Faces
    • Webservices: Axis/Axis2 is rather popular
    • XML parsing: Jaxb, XPath

    Advanced java core stuff (not really necessary until you need it):

    • Seriablizable (here is the transient descriptor) and RMI (remote method innvocation)
    • The Reflection API - for accessing methods and fields dynamically
    • Swing: A model/view/controller pattern for standalone applications

    Yeah. I would say that is a fair road map.

  150. How to get started with Java EE? by jopet · · Score: 1

    I have a related question: how to get started and learn about Java EE? I found it incredibly difficul to find my way through all the technologies and acronyms. And more importantly: i found it extremely hard to figure out what to use why when.
    There are many versions and many kinds of frameworks, often doing similar things and it is very hard to decide which ones to give a closer look.

    This is especially relevant when one tries to figure out why to use which of the many frameworks to quickly get a web application running.

    Are there any good online tutorials and online introductory articles that are up to date? (many articles by Sun and other sources seem to be too dated to really be a good basis for what to look into now).

  151. Java, Where To Start..... by IHC+Navistar · · Score: 2

    1) Slect you favorite type of beans.
    2) Grind beans to the desired coarseness.
    3) For a common electric coffee maker, wash coffee pot thoroughly, insert clean filter into brewing area, and replace pot under the drip.
    4) Add the desired quantity of ground beans to filter.
    5) Add water to reservoir.
    6) Turn coffe maker to "ON".

    --
    Knowing Google's lust for data collection, the Soviet Union is still alive and well inside the psyche of Sergey Brin....
  152. Stick with server side Java by twbecker · · Score: 1

    You're right that "Java" covers an enormous range of technologies nowadays. If I were you, I'd start with where Java has taken hold the most - the server. Learn straight Servlets and JSP using something like Tomcat. Then start to branch out into popular frameworks like Struts2/Spring. At that point you'll understand what these frameworks are actually buying you; something a lot of folks today don't get. After you're comfortable in the webapp world, you can start looking into ORM stuff like Hibernate, and if you're interested, full on J2^HEE using say JBoss. But be advised that the general trend with Java seems to be away from things like EJB on the big app servers, so make sure you're investing your time learning the right things.

    --
    "The problem with internet quotations is that many are not genuine" -Abraham Lincoln
  153. Stick to J2SE and J2EE for starters by owlstead · · Score: 1

    You could just stick to Java 2 Standard Edition (the base language and API) and Java 2 Enterprise Edition (the API's for database and web development basically).

    For J2SE the choice is easy: just use the latest you can download from java.sun.com. You normally only use other implementations if the have specific benefits for an optimized implementation.

    There are many other frameworks from web based designs, but the latest editions of J2EE have heavily borrowed from the most successfull ones. And Sun is, in my opinion, generally pretty good in making understandable, easy to use API's. GlashFish is the reference implementation, just use that for starters. If you are, as you say, a jack of all trades, you will learn other frameworks as needed.

    You can use Netbeans (available together with the J2SE distro) or my favorite environment Eclipse for development. You could start with the command line tools with J2SE for discovering the compiler and JVM, but after that you will want to use a good IDE. Java's syntax was specifically created to make good IDE's, you will be largely missing the point if you go without refactoring support, searching for Java elements though projects etc.

    Other important things you will want to know about:
    - JUnit testing framework
    - Ant building framework (cross platform XML makefiles)
    - The JavaDoc and JAR tools
    - Static code checking (e.g. checkstyle)

    The most interesting thing to begin to understand when you start is how the classpath and classloaders works, so read into that. Another good hint is to understand how you can code in a secure fashion (use "effective java" for that).

    Have fun!

  154. Here's one starting point... by CFBMoo1 · · Score: 1

    I used their book back in the day in my CS courses. Good reading for a starter book.

    http://www.deitel.com/Books/Java/JavaHowtoProgram7e/tabid/1191/Default.aspx

    --
    ~~ Behold the flying cow with a rail gun! ~~
  155. Re:Good place to start... by Spikeles · · Score: 1

    I really really tried to like Netbeans, but had to change back to Eclipse since, when we imported our application, Netbeans would not only crash(while attempting to parse the source), but give false compiler error messages when encountering some of the more advanced usages of generics.

    --
    I don't need to test my programs.. I have an error correcting modem.
  156. Horses for courses.... by Hairy1 · · Score: 1

    For web development I would recommend the following course of action:

    a) Download Tomcat and start with writing some servlets. Nobody uses raw servlets these days, but the at at the foundation of Java web technology. Understanding at a primitive level of servlets lets you understand what has been built on top.

    b) Not sure of the order here, so I would look at Struts and Hibernate and Velocity about the same time. These technologies deal with totally different problems. You might also want to look at EJB and JSP, but personally I prefer Hibernate and Velocity.

    c) Most software shops will also make use of infrastructure projects such as Ant for building, JUnit for automated testing, and perhaps Cruise Control for continuous integration. Oh, and obviously you should be familiar with SVN and CVS, two popular version control systems.

    d) Finally take a look at Spring, which is becoming increasingly popular.

    Finally some advice; at the end of the day the value to the client is the most important thing. Many of the above projects have resulted directly from problems Java developers were facing. With that in mind make sure that you don't just use all these technologies because they are flavour of the month. Each has its place, and sometimes the overhead in using them isn't worth the effort.

    It is a good idea to at least study what is available, but don't try to learn everything. Target a specific stack and perfect your skills with it.

  157. Bad Advice Alert by dwalsh · · Score: 1

    So ignore this guy.

    C++ programmers diving straight in like that make shitty Java programmers. Make at least a reasonable effort to learn Java and it's idioms - has a very different culture around it from C++. Java is (shrewdly) designed to look a little like C++ but that is superficial. C++ -> Java is more like Perl -> Python.

    --
    ${YEAR+1} is going to be the year of Linux on the desktop!
  158. Fail! by Bazman · · Score: 1

    No doc comments!

  159. javapassion by jorgechavez77 · · Score: 1

    You can use this link: http://www.javapassion.com/ it's very useful, just follow the steps.

  160. Sun's own Tutorials are a good reference by Mutatis+Mutandis · · Score: 1

    For the "why and how" of using the Java libraries, I think Sun's own tutorials are a good starting point. They don't cover all technologies, but they provide pretty good coverage of the core set of libraries, complete with sample code. And they are regularly updated, easily accessible and free, which is more than can be said for the typical Java introductory book, which doesn't contain that much additional information.

    You are right that the API docs don't provide this, but they are not intended to. In places they do link to the tutorials, although it could be more frequent. Actually I think good documentation is one of Java's strength; immeasurably better than MSDN and quite good compared to, for example, the Python documentation. They lack the elegance of Kernigan & Ritchie, but then Java is a more complicated environment.

    But I admit that there are gaps. For example, I don't think Sun's tutorials describe how to define a custom event, although these quickly become useful if you do more than very basic GUI programming. Of course you can always Google for these.

    As for topics to start with, it's been a while since I started to learn Java from a C++ background. I agree that the step is not that big, but it's worth devoting some time to the mechanisms of event handling, multi-threading, and the Collections framework. These are too important to skip, and may hold a few surprises.

  161. Learn Java by leshawk · · Score: 1

    I suggest you look up Java with passion - great free courses on basic java and more advanced issues.

  162. learn standards not Java by heroine · · Score: 1

    Java credentials are mainly about the standards. Become an expert in the J2EE standard, the OCAP standard, the J2ME standard, or whatever the latest big Java servelet standard is. Java was originally pushed as platform independance, but now is being pushed for its standards base.

  163. Head First Java is an excellent place to start by m26k9 · · Score: 0

    O'Reily Head First Java is an excellent book if you want to start Java from scratch.
    I agree that Head First books looks immature and funny, but the Java version is really good.
    I read the Head First Java book 'after' passing SCJP certification and I was surprised to realize how many core concepts I didn't know and how easily I understood some of the concepts which I was struggling with before.
    The 'Java Tutorial' from the Sun is also good. You can read it online too.

  164. Advice from a newbie... by Anonymous Coward · · Score: 0

    As a first year university student, whose never done programming, I can highly recommend "Java Foundations" ( http://www.amazon.com/Java-Foundations-Introduction-Program-Structures/dp/0321429729/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1220308826&sr=8-1 ) as a reference point.
    It explains everything very clearly, and is well laid out.

  165. where to start? by Anonymous Coward · · Score: 0

    read "Structure and Interpretation of Computer Programs" by Abelson/Sussman. then read "Common LISP, the Language" by Steele. if you are really shure you need Java after that, it's maybe your own fault.

  166. Here's How I Started... by largesnike · · Score: 1

    I came from a very similar background to you. Also I had not done Computer Science, so when I had to learn, I was very much at the mercy of whatever was out there.

    (1) I used Sun's own course material (I didn't go on the courses, just went through the CDs
    (2) Downloaded the J2SE and the J2EE (includes JDBC and the Servlet API), and MySQL
    (3) With the help of some O'reilly books, began developing my own servlets.

    This path got me started in the basic language, as well as the basics of some important APIs.

    Once you've reach some confidence with the above, get fancy and download Spring, Hibernate etc.

    Eclipse is what I use as an IDE and Maven 2 for project management, but y'know, hoses for courses.

    --
    "Laugh while you can a-monkey boy!" - Dr Emilio Lizardo
  167. Java, Where To Start? by alxkit · · Score: 0

    starbucks, naturally

  168. No sweat by yaphadam097 · · Score: 1

    With your C++ background you should find java syntax intuitive. Your biggest challenge will be learning the standard library (Java SE SDK or simply JDK in Java parlance.) It is big, considerably bigger than the C++ STL, but it is also fairly powerful.

    My advice, as someone who has walked a similar path (I have been programming professionally for about ten years, and using java for the last six):

    1) Download Eclipse. It is the most popular IDE, and it is free. If you are going to look for a job you are going to want to know how to work with it.

    2) Go on Amazon or Safari and look for a good core java book. You need to find one that suits your style of learning. I don't know what that is so I am not going to recommend a specific one.

    3) Focus on core java. Don't worry about Java EE yet. You want a good foundation in the core language and common APIs. Don't spend a lot of time on IO or Swing for the same reason.

    4) Read the job boards. When you find a position that looks interesting lookup the specific buzzwords they mention. Look at documentation, sample code, and API docs.

  169. Re:Good place to start... by Anonymous Coward · · Score: 0

    i want the exact same thing for Flash and related technologies.

  170. Why bother? by gatkinso · · Score: 1

    Not all, but for the most part Java developers are light weights.

    Mention a register and they turn into fluff - like a dandelion that a 5 year old blew on.

    But then again, why not?

    --
    I am very small, utmostly microscopic.
  171. Experience by darrensiegel · · Score: 1

    "I mean, what is the curriculum required for someone to say they are a solid Java developer?" Unfortunately, the credentials that you need to say that you are a solid Java developer do not come from having read a set of books. Experience, in my opinion, is the only thing that really counts. If you're looking to gain some experience (and something to put on a resume) perhaps learn the core language, then learn an open source project. Learn it enough that you can contribute to it. Maybe write some documentation, make some bug fixes, add features. It will take time, but eventually you'll gain the experience and credentials that I think you seek.

  172. IOC by tepples · · Score: 1

    Oh, and learn what IoC is first.

    Isn't IOC the governing body of a sport competition that happens every four years and just happened in Beijing not too long ago?

  173. Finally a question on Slashdot I can answer!!! by Anonymous Coward · · Score: 0

    Start with

    This book...
    http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=pd_bbs_sr_2?ie=UTF8&s=books&qid=1220317912&sr=8-2

    Learn these libraries...Apache Commons:
    http://commons.apache.org/

    Learn Spring http://www.springframework.org/
    Forget Hibernate, learn Ibatis http://ibatis.apache.org/

    Learn Ibatis (forget hibernate)
    http://ibatis.apache.org/

    Learn Liferay
    http://www.liferay.com

    Learn ICEFaces
    http://www.icefaces.org

    Enjoy life! thank Jesus! Vote for McCain!

  174. Steps by N8F8 · · Score: 1

    1) Download and Install JDeveloper

    http://www.oracle.com/technology/software/products/jdev/index.html

    2) Think of a project to code. For instance, write a program to snag web pages and store them in a database.

    3)Code

    4) Read "Thinking in Java"

    --
    "God fights on the side with the best artillery." - Napoleon, Marshal of France - speaking truth to power
  175. Java is worth learning by uuklanger · · Score: 1

    Considering the list of languages you already know, picking up Java should not be a big deal. Two books I suggest (either not both) Head First Java, 2nd Edition by Kathy Sierra and Bert Bates Learning Java by Pat Niemeyer and Jonathan Knudsen As far as an IDE, I prefer Netbeans. Version 6.5 is coming out soon and will support many of the languages you have listed (C/C++, Java, PHP, Ruby,...) As for other things to learn? Both books above cover enough got get you going. I would suggest Swing (which is easy in Netbeans using Matisse), JSP, Hibernate, Maven (which is supported in Netbeans), and Webstart (which is supported in Netbeans). Eclipse is also very good but I do Swing development so I tend to favor Netbeans. There is a huge community out there that can help you learn. java.sun.com has many tutorials per topic and netbeans.org has many text and video tutorials on how to use the IDE. Not to bad. Start simple. Read through the books and learn the general structure. The rest is just learning frameworks.

  176. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  177. webobjects by tomtermite · · Score: 1

    Starting fresh? Consider the grandaddy of 3-tier, a set of frameworks, app layer, etc. that powers iTunes and lots more...

    http://www.apple.com/webobjects

    It works for me!

    --
    - Ubique, Tom Termini www.bluedog.net - WebObjects / J2EE SOA / iPhone solutions for knowledge workers
  178. Java, The Complete Reference by freedom_india · · Score: 1

    When i started up on Java in 1997, i used the first edition of Java, The Complete Reference by Herbert Schild and Patrick Naughton.
    Nowadays the Naughton name does not come up as he was indicted on child porn.
    But his book remains the gold standard.
    Try that.
    Apart from that, study the specifications well.
    Java is all about specifications. Learn the limitations and you will go a long way.

    --
    "Doing what i can, with what i have." ~ Burt Gummer
  179. Sun Java Tutorial by syousef · · Score: 2, Informative

    Wow, what a load of advice to launch into frameworks, buy books, get certification etc.

    Start with what's authoritative, basic, and free. That's the Sun Java Standard Edition tutorials

    http://java.sun.com/docs/books/tutorial/

    Or download from:

    https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=tutorial-2008_03_14-oth-JPR@CDS-CDS_Developer

    The web and persistence frameworks are important. They're over-engineered and I hate them but if you don't know them you won't get work. (Without them it'd be very much like trying to become a game developer knowing only ANSI standard C and no frameworks). They're what you need to learn second. Possibly on a smaller project where you're not the lead. However learn to crawl before walking or flying.

    --
    These posts express my own personal views, not those of my employer
  180. try: java.sun.com by HJED · · Score: 1

    try java.sun.com and click on the learning link.
    also use netbean for codding it realy helps
    PS. Why dose slashdot require www. at the start of urls thats realy stufed up

    --
    null
  181. It's not just Java, it's a deep subject by MojoSF · · Score: 1

    I worked in Java for a year while only skimming the surface. It wasn't until I started interviewing for Java jobs that I realized how little I knew about Java.

    Most recently I transitioned to working in Ruby on Rails. After seven months, I really feel that I'm only 60% into Rails.

    It's not just Java. Having a reasonably complete knowledge of architecture and technologies related to multi-tier web applications takes time. There are complexities that are in common with all of them.

    For me the biggest benefit came from signing up for extension courses at the local college. It let me get some depth and formality, and bypass the "old" Java tech that's not really relevant to modern Java. (Can you say "EJBs?")

  182. Re:Good place to start... by Anonymous Coward · · Score: 0

    Everyone who doesn't get java (like myself at first) thinks java is too much to learn, j2ee is a burden and all. Even when I've been programming for 15 years.

    After having to "deal", for 3 years, with a legacy j2ee system, all I've done is basic stuff.
    I've learnt to: setup/migrate tomcat, deploy shit, what are war/ear packages, "optimize" pure-jdbc queries by changing shitloads of Statements to PreparedStatements, optimize CallableStatements and such.. Then got bored, picked up hibernate in a month and saw the light with spring.

    It's a bunch of xml files you have to deal with. It's more like an architect job sometimes.. and it's all too easy.

    My advice? Know Design Patterns backwards. Know your systems. Design stuff and re-implement them each time you "feel it's dirty". That worked for me. :-)

    After you've seen a lot, the "best programmers" aren't all that good of a programmer, but they know how to elegantly put stuff together. The _very best_ programmers I've seen could only write one-liners or optimize to oblivion with their shitty-ass-spaghetti-code menace.

  183. my buzzwords to start with by Anonymous Coward · · Score: 0

    ant or maven2
    servlets
    hibernate or ibatis
    springmvc or struts
    jakarta commons logging
    junit
    tomcat
    svn or cvs
    eclipse or jbuilder

    ____________

    nothing else is required to make the generic boilerplate application. key things to ignore if anybody tells you otherwise:

    - you don't need an application server, you need a servlet container. application servers exist to make companies money - they do nothing for the client.

    - avoid portlets. they exist to make companies money and provide nothing for the client.

    - avoid anything with phrase service oriented architecture in it. it exists to make consultants money and provides nothing for the client.

    - avoid anything oracle, and to a much lesser degree ibm related, unless it's a database. and even in the case of databases - you're better off with free alternatives 99% of the time.

    - if something has the phrase "business" in it - it means it doesn't really work. a classic example is "business intelligence" and be wary of acronym's with a "b" in them - like bpm. "business" gets put in terms to sell things to point haired bosses who mistakenly have been given access to money.

    on an unrelated note, if anybody wants to purchase my new brand of toilet paper, business toilet paper, send me an email. it's 10 dollars a roll and soft enough to service a bull.

  184. Start with Head First Java by xCaptainMorganx · · Score: 1

    Then go on to specialization areas after you feel comfortable with the overall language... like thread with Goetz's book, or maybe generics... if you need more help with Java and are comfortable after Head First, then try Effective Java, an excellent read. Good luck!

  185. Re:Good place to start... by Anonymous Coward · · Score: 0

    Spoken like someone who has never tried Eclipse (free), much less IDEA (commercial). Basing your opinion of Java on your experience with NetBeans is like editing C# with Word. And yes, I use the free Visual Studio to write C++ apps for XP 64 bits, not a bad product at all ... still, no Eclipse! In customization, code generation, incremental compilation, compile error fixing, formatting, debugging, you name it, Eclipse is leaps and bounds ahead.

  186. Read the tutorials of course by Anonymous Coward · · Score: 0

    The Java Tutorials are practical guides for programmers who want to use the Java programming language to create applications. They include hundreds of complete, working examples, and dozens of lessons. Groups of related lessons are organized into "trails".

    http://java.sun.com/docs/books/tutorial/

    Good luck.

    dial@no-log.org

  187. Strict OO programming - separate all your layers by posinabox · · Score: 1

    Here's to separating all your layers (Persistence, UI, Controller, Service, etc).

    I'd choose Wicket for web-dev since it follows a Swing Type model and closely resembles it.

    Wicket, which you could learn concurrently with Swing.

    Hibernate - handling your persistence (or any other OR mapping tool) - since you say you are clued up with OO-thinking. I'd recommend ActiveMQ if you are doing messaging-related stuff.

    Spring would also be brilliant IMHO to piece all your stuff together (Service, Persistence, Business Logic, etc).

  188. start here by karantan · · Score: 1

    hmm why dont you start here: http://docs.python.org/dev/tutorial/index.html

  189. Do a course... by akayani · · Score: 1

    RMIT offer a several subject on Java through Open Uni (Australia) www.open.edu.au that can be accessed anywhere in the world. The units are about $700 and the first is based around Savitch - Absolute Java. The advanced unit uses one of the Liang books... http://www.prenhall.com/liang/ Java is a great teaching language. It's the warm up to other things. Despite learning it I'd really prefer never to use it. Here is hoping Jaxer takes off! Yani

  190. Libraries by DaVince21 · · Score: 1

    Swing is important for graphical user interfaces - for both applets and standalone applications. Tomcat and Java Server is useful for creating dynamic web pages (JSP and Servlets).

    I don't like using either of them, really, but they're pretty much the more important and useful things you can learn in Java. There are also plenty of other useful libraries out there (learning to use JDBC, and Hibernate, is good for databases).

    --
    I am not devoid of humor.
  191. Java Basic Foundation by Anonymous Coward · · Score: 0

    The best way to start to know Java is:
    http://java.sun.com/docs/books/tutorial/

    I would suggest starting to learn about Java with normal text editor and command line with the examples.

    Once you understand how things works, then learn how to use the IDE.

    I have seen so many people start with IDE and then get themselves confused.

    Second thing to learn is to learn how to read API:
    http://java.sun.com/j2se/1.5.0/docs/api/

    With this 2 basic foundations, learning the various J would be easy.

  192. Re:Good place to start... by cheesybagel · · Score: 1

    You can learn Java for free as well. You will want JBoss (J2EE container) bundled with Tomcat (JSP/Servlet container) plus Eclipse (IDE) and the J2EE SDK (from Sun). It is all free. Sun has packages with all components integrated, but you will get Glassfish (which almost noone uses) instead of JBoss, and Netbeans instead of Eclipse.

  193. Same old... by Anonymous Coward · · Score: 0

    If you understand OOP then the specific language you choose is just wallpaper. All you need do is build your familiarity with that language. It's just different ways and words to do the same things. Once you get a grip on the libraries then, if you're any kind of decent programmer, you shouldn't have any trouble.

  194. My recommendations by maraist · · Score: 1

    www.springframework.org is a must - there is over a year's worth of learning in this suite of libraries. This, more than any library affects good coding practices. It's an outright replacement for EJB. It successfully implements AOP but few of the negatives. You just get more work done while simultaneously future-proofing your code.

    jakarta.apache.org - there's a year's worth of learning in these libraries. commons-logging, commons-beanutils, commons-digester, commons-codec, commons-dbcp are just a few of the invaluable libraries.

    hibernate.org - This will take a long time to MASTER. There are tons of bugs and use-cases that it just handles poorly. But this plus a mix of either raw JDBC (which I don't recommend) or spring's JdbcTemplate provide for a very elegent combination of DB accessibility. The biggest advantage of hibernate, in my opinion is that you can break the problem down into a series of layers, and work on each layer independently. Caching, delete-cascades, object-oriented design, filtering, event-processing, message-pasing, static-queries and OOP-queries.

    http://www.opensymphony.com/quartz/ - I'm not crazy about quartz - it doesn't do things the way I'd like. But it's one of the better scheduling systems for Java enterprise.

    tomcat and or jboss and or glassfish are a must. You're not very useful without a FULL understanding of how to setup (and this means clustering, fail-over, session-replication, session-server-pinning, apache-front-ending (to support server-pinning and static-file off-loading)). Learning mod_jk (which I hate in many-to-many server-to-application configurations) AND Apache 2.2's mod_proxy_http (which I love). Learn everything there is to know about deployment. How files get stale.. Where different log files end up. How to configure logging on the fly.

    Learn Java's JMX, to better understand how to work with long-running java processes. Jboss makes it easy, and tomcat makes it available.

    Learn Eclipse or other major editors (can't vouch for netbeans but I hear a lot of good things). IntelliJ's IDEA is a great (but expensive) commercial editor. This is what really differentiates Java from other languages. There is almost nothing in the language that can't be analyzed by the editor. Since Java is strict (except for reflection), it is very safe to do multi-thousand-file variable/method/class renames, safe-deletes, etc. With annotations, most of the meta-programming has started going away - meaning some things we use to treat reflectively directly in code are now handled by 3'rd party tool-kits which have you place annotations in your code to mean special code-flows. The advantage is that if your editor is aware of those 3'rd party tool-kits, then it too can analyze your code for those annotations.. Hibernate 3.3 is a great example. My editor checks DB column names, types, constraints in real-time based on the annotations. It can investigate the HQL (Hibernate Query Language) and spell-check column names - purely based on these higher-level annotations. All you need is an active community to keep such 'magic coding syle's well understood by the popular editors.

    Definitely learn DB transactions inside and out.. Learn how to avoid race-conditions. How to avoid dead-locks. How to perform optimistic locking, how and why that's different from pessimistic locking (this isn't a java thing, it's an enterprise DB thing). This does require postgres or INNODB in mysql instead of MyISAM, however. Learn how to write code which has as few inter-dependencies as possible, to support high volume concurrent programming.

    Learn to program with as little static (global) variables as possible. Learn how mentally identify regular non-static fields as globals. Namely if two threads can see the same field, it's a global - plain and simple. Learn how to code to MINIMIZE synchronization constructions - this minimizes dead-locks, and speeds up code. Note a dead-lock is a bug in you're code; just

    --
    -Michael
  195. stay the hell away from java by Anonymous Coward · · Score: 0

    The only reason someone would recommend java is due to either incompetence or corruption. Java was popular about 5 years ago, mostly because university 101 courses taught hello world in java.

    in the real world, university grads push for java because they want to re-use the code from their senior year project. PHBs used to like it because it was a checklist item.

    PHP programmers can code apps that are fast, secure, and easy to maintain in a fraction of the time required by java. They also don't create the legacy of needing a cluster of 4 servers to run a simple app.

    Fortunately the PHBs are now into PHP, so Java will soon die (except for the old machine I have over in the corner running Azureus BitTyrant)

  196. Just start playing by Anonymous Coward · · Score: 0

    A good place to start is to just do some hands-on experimentation with NetBeans IDE. Go through the tutorials and you'll be creating java projects in no time. Then you can figure out how you like it and what else you'd like to do...

  197. Don't get confused by the "Pass by reference" lie. by Anonymous Coward · · Score: 0

    Nothing is passed by reference. Everything they call reference is a pointer passed by value. Any object you declare is a pointer (just without the "*"). Coming from a C++ background, as long as you treat everything as a pointer in java (except the few native types that are not inherit from Object), than it will start to make sense for you.

  198. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  199. Why Bother? by Anonymous Coward · · Score: 0

    Why learn another dead (or what should be dead) language?

    Dispite recent improvements, Java is still slow. Now because of all the offshoots, it is not very portable either.

    It's not worth the support you need to keep it all running either. You have to fix it every time a new version of Java comes out.

    Don't even get me started about the Java-fanboys. They are more rabid than the Mac ones. They have so much invested in working with Java they can't see the writing on the wall. Just try to sit down and have a rational, point by point discussion with them. There isn't a one of them that won't get frustrated and start ranting.

    Java will always be with us - just like Cobol. We are stuck with it. But it doesn't mean we can't have to continue to use it for new projects.

  200. If all what was needed was a book.... by jotaeleemeese · · Score: 1

    ... my dog would program in java (honestly, it is that clever).

    Somebody talking about something he does not know only manifests his ignorance (but no worries, the Internet is anonymous: nobody will find out).

    Jeez ....

    --
    IANAL but write like a drunk one.
  201. What do you talk about something you don't know? by jotaeleemeese · · Score: 1

    Learning Java is nothing.

    Learning all the skills around Java technology to build a career path (which is what the poster is actually asking) is a completely different kettle of fish.

    No wonder chaps in India (hello guys! Regards to Mumbai and Chennai) are eating your lunch.

    --
    IANAL but write like a drunk one.
  202. me by Anonymous Coward · · Score: 0

    go to http://oreillyschool.com they have a new course on Java using Eclipse that should help.

  203. Lexographically precise or lame (exclusive or?) by Anonymous Coward · · Score: 0

    You'd think a programmer would be able to express themselves precisely and with concern for how their statements are grouped. Let me ask - do you often have transitive logic bugs? Is if a || b && c fantastic?

  204. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  205. What an anonymonymomous coward would do. by Anonymous Coward · · Score: 0

    This is what i would do, and it isn't all encompassing or all-wise by any means.

    I'm not sure exactly how much you know about the underlying layers of how a web application works, and it sounds like you would do mostly web development.

    I would start with a cheap book(6.95 used) off of Amazon called Java Server Programing(Red book). Only read the information chapters that discuss design and structure to get a good feel for how Java Servlets, Java Server Faces, Java Beans, etc.. work. This all depends on what you'll be doing exactly. Java has it's hands in EVERYTHING WEB, so knowing what you want to do is key. I assume you're not doing any xml server parsing(who would want to :) ). Get both Java Core books from Sun. Go through as much as you can stand. Build some very simple servlets and then look at Tapestry. The reason I say Tapestry is because it's so awesome different than anything else.
    Learn ANT and Maven(Related). Learn JDBC then go to Hibernate.
    The real skills only come from experience so build as much as possible.
    Books to see in order:
    Core Java from SUN
    Java Server Programming(design stuff)
    XML
    AJAX
    Ant
    Maven
    Tapestry(POJOs)
    Javascript
    Hibernate
    Spring

    2 cents
    The more you learn about design and Core Java(Objects, Inheritance, Data structures, JDBC, security, etc...) the more robust and scalable your web apps will be.

  206. Marty Hall is the man by Anonymous Coward · · Score: 0

    Go to http://www.coreservlets.com, or http://www.moreservlets.com, and read up on Marty Hall - he wrote the book on this stuff! He's an amazing educator, and you can really pick up his books and learn a lot from them.

    If you (or your office) can, hire him - because he is all that much better in person. I am a former student of his in JHU, and he was great. Really turned me on to Java and web development as a whole...

  207. learning Java recommendations by BusyByte · · Score: 1

    Almost everything has tutorials online these days. I find the theserverside.com and ibm's developer network have some good tutorials. I learned more from the Hibernate reference manual and tutorials than I did by a formal class that my work payed for. I'm always out on Spring's website browsing the reference manual. I don't recommend a book unless there is a good one that someone has recommended so it won't become a home for dust bunnies. If have a lot of cash to blow go for the books. Sun has a basic tutorial on Java. Sun also has a tutorial on J2EE/JEE. UML is design by modelling and is an instance I'd recommend a good book. You can do Java development with notepad and the command line if you want. However if you want syntax checking, automatic, javadoc information, and easy classpath management you're going to want to use an IDE. Eclipse and Netbeans seem to be the common free ones most people use (I'm pretty hard against Commercial Products/Vender Lock In's when there's a Free Open Source alternative). Eclipse has some nice features that can help you when it comes to tooling related to JEE. It's plugin (plug: OSGi) architecture allows tooling to be added for Spring, Hibernate, JavaServer Faces, Database, J2EE/EE Servers etc... There's a lot to be said to be able to debug and step through code in your IDE (Although some argue if you have proper unit testing and logging that you shouldn't need to). IDE also provide templates and formatting which helps easy development and maintainability. I find that I learn a language as I move in the industry and that they are all pretty common. I wouldn't bother to learn a language just to learn it and an employer will not value this kind of knowledge as much as on the job training anyway (although they do like people who are open to learning new things). If you know the basics to Algorithms, Object Oriented Design, Data Structures, Design Patterns, and UML then you can really apply this to any object oriented language (These are the books that get used). A nice thing about Java is the open source community and availability of free packages. In two words Apache and Sourceforge although there are others that are important too. I find that regardless of the language (or any task really) that the DRY (Don't repeat yourself) and KISS (keep it simple stupid) are good things to learn.

  208. Decide, download, read, cobble, tinker by JohnnySoftware · · Score: 1

    First off, make sure you really want to be a programmer.

    If you absolutely hate reading - forget it. Some people try to "fake" being a programmer by just taking bits of something a programmer wrote, modifying it, and passing it off as a solution. As often as not - what they have created is a problem.

    If you like to read, enjoy dealing with details, solving problems, seeing both the forest and the trees at the same time, are good at memorizing things that are written down, and are good with logic - you could make a really good programmer.

    If it sounds like programming is something you want to try for yourself, you are in luck. These days, the tools, the tutorials, tons of sample programs, and lots of encouragement are abundant and free.

    1. http://java.sun.com/ - download Java - specifically, J6SE (JDK 1.6) for your computer, unless you have a Mac in which case you already have J5SE or J6SE. Install it, and the accompanying documentation according to the directions on the download page. Then reboot.

    2. http://www.eclipse.org/ - download Eclipse Ganymede bundle (Eclipse 3.4 with good selection of optional plugins preinstalled). Installation generally boils down to unzipping it and dragging the folder that produces to C:\ - or, if you are on Unix/Linux/MacOSX then to your home directory. Grab a local friend who knows Java to show you how to write a really short program that prints out "hello, world" in Java using Eclipse.

    3. http://java.sun.com/tutorial - download the Java tutorial and start reading it. It is written in an informal, helpful style. If you have a friend at your side, they can explain things and answer questions as you read through it. That will help you a lot. You will be trying to form a picture of what goes on in programs, what Java is all about, why Java does certain things, etc. Your friend will help a lot. Guesses and searching all over the web for more clues will just slow you down. Read enough to get started. Mastery can come later.

    4. Write some astonishingly simple and useless programs. Do not kill your aspirations off by trying to kill two birds with one stone. This is not the time to write a spreadsheet, a chess game, an accounting program, or a web browser. Just write simple little things with no GUI at first. Stuff like this:

    a.) Print all integers from 1 to 10. This teaches you to write loops. You will have easiest time if you use a for-loop.

    b.) Print list of all Fahrenheit degrees from 0 to 212 and next to each of those, print the equivalent temperature in Celsius. This teaches you to write simple mathematical expressions, and gives you practice writing another for-loop.

    c.) Read some text from the keyboard or from the command line, and then print it out backwards; e.g. "Ten becomes one" is output as "eno semoceb neT". This gets you started at manipulating Strings.

    d.) Write a program that defines a group of classes. Make sure you use some inheritance ("extends") and some polymorphism. The latter simply means that you define a method in a subclass that has same declaration as a method in its super class(es) but giving it a different implementation. These two things are key to writing powerful object oriented programs - which is one huge reason for Java's success.

    e.) Read up on encapsulation. It enforces a little discipline on how classes can get at each other's data. Such rigor becomes very important in read software projects that involve large programs or more than one programmer.

    f.) Now you have completed the basics. You have written some simple programs, so you know which way is up and the basic steps in writing any program. You have an integrated development environment (IDE) set up that makes it easy to enter, edit, debug, and run programs. So, now dream up some more short, easy programs to do. Try to choose a program you will have learn just one or two things in order to write it. Better to write 10 simple-as-heck short programs than one huge complicated one that you never fini

    --
    Let the PC get its zen on, for chrissake!