Please create an account to participate in the Slashdot moderation system

 



Forgot your password?
typodupeerror
×
Java Programming

Java, Where To Start? 558

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?
This discussion has been archived. No new comments can be posted.

Java, Where to Start?

Comments Filter:
  • Don't (Score:1, Insightful)

    by johnjaydk ( 584895 ) on Monday September 01, 2008 @11:27AM (#24830943)
    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.

  • Java makes me sad (Score:0, Insightful)

    by Anonymous Coward on Monday September 01, 2008 @11:28AM (#24830949)

    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.

  • Just a thought.... (Score:4, Insightful)

    by jtcedinburgh ( 626412 ) on Monday September 01, 2008 @11:30AM (#24830971)

    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.

  • by cpu_fusion ( 705735 ) on Monday September 01, 2008 @11:34AM (#24831035)

    ... 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.)

  • Job or knowledge? (Score:2, Insightful)

    by Anonymous Coward on Monday September 01, 2008 @11:42AM (#24831129)

    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.

  • I beg to disagree (Score:5, Insightful)

    by thermian ( 1267986 ) on Monday September 01, 2008 @11:45AM (#24831155)

    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.

  • Start simple. (Score:5, Insightful)

    by Anonymous Coward on Monday September 01, 2008 @11:45AM (#24831161)

    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.

  • by petes_PoV ( 912422 ) on Monday September 01, 2008 @11:46AM (#24831169)
    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.

  • by MythMoth ( 73648 ) on Monday September 01, 2008 @11:46AM (#24831173) Homepage

    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 [sun.com] 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.

  • Re:Don't (Score:5, Insightful)

    by O('_')O_Bush ( 1162487 ) on Monday September 01, 2008 @11:48AM (#24831197)
    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.
  • Re:Don't (Score:2, Insightful)

    by Anonymous Coward on Monday September 01, 2008 @11:55AM (#24831279)
    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.
  • by Kupfernigk ( 1190345 ) on Monday September 01, 2008 @11:56AM (#24831301)
    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.

  • by ilovegeorgebush ( 923173 ) * on Monday September 01, 2008 @11:56AM (#24831311) Homepage
    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.

  • Head First Java (Score:5, Insightful)

    by WilliamBaughman ( 1312511 ) on Monday September 01, 2008 @12:00PM (#24831361)

    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!"

  • by cronot ( 530669 ) on Monday September 01, 2008 @12:01PM (#24831369)

    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.

  • by Anonymous Coward on Monday September 01, 2008 @12:03PM (#24831395)

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

  • by morgan_greywolf ( 835522 ) on Monday September 01, 2008 @12:05PM (#24831441) Homepage Journal

    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 [google.com].

  • by prenk20 ( 1028148 ) * <prenk10@yahoo.co.uk> on Monday September 01, 2008 @12:08PM (#24831475) Homepage
    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.
  • Java is a mess (Score:5, Insightful)

    by speedtux ( 1307149 ) on Monday September 01, 2008 @12:11PM (#24831499)

    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).

  • by Mr2cents ( 323101 ) on Monday September 01, 2008 @12:28PM (#24831727)

    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.

  • by originalBitmaster ( 1116151 ) on Monday September 01, 2008 @12:36PM (#24831831)
    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!
  • by ScuttleMonkey ( 55 ) * Works for Slashdot <scuttlemonkey&slashdot,org> on Monday September 01, 2008 @12:41PM (#24831887) Homepage
    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).
  • by phidipides ( 59938 ) on Monday September 01, 2008 @12:41PM (#24831889) Homepage

    "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.

  • by pjt33 ( 739471 ) on Monday September 01, 2008 @12:45PM (#24831947)

    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.

  • Why it was posted. (Score:1, Insightful)

    by arthurpaliden ( 939626 ) on Monday September 01, 2008 @12:47PM (#24831979)
    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......
  • by mpcooke3 ( 306161 ) on Monday September 01, 2008 @12:47PM (#24831987) Homepage

    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.

  • Re:Don't (Score:3, Insightful)

    by darkpixel2k ( 623900 ) on Monday September 01, 2008 @12:54PM (#24832101)

    Did you just call Java fast and clean?

    Really?

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

  • by MythMoth ( 73648 ) on Monday September 01, 2008 @12:55PM (#24832115) Homepage

    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?

  • by dubl-u ( 51156 ) * <2523987012@pota . t o> on Monday September 01, 2008 @12:55PM (#24832119)

    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.

  • by arevos ( 659374 ) on Monday September 01, 2008 @01:03PM (#24832207) Homepage

    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.

  • by Spy der Mann ( 805235 ) <`moc.liamg' `ta' `todhsals.nnamredyps'> on Monday September 01, 2008 @01:14PM (#24832291) Homepage Journal

    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?

  • by ccguy ( 1116865 ) * on Monday September 01, 2008 @01:37PM (#24832633) Homepage

    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.

  • 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.

  • Re:Do it (Score:3, Insightful)

    by MillionthMonkey ( 240664 ) on Monday September 01, 2008 @01:57PM (#24832891)

    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.

  • Struts (Score:5, Insightful)

    by EgoWumpus ( 638704 ) on Monday September 01, 2008 @02:11PM (#24833065)

    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 [javablackbelt.com], which has a pretty good, community developed set of quizzes that are useful for gauging your own command of the language.

  • Re:Don't (Score:3, Insightful)

    by Dan667 ( 564390 ) on Monday September 01, 2008 @02:21PM (#24833171)
    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)
  • by Anonymous Coward on Monday September 01, 2008 @02:25PM (#24833201)

    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.

  • by tjuricek ( 514513 ) <tristan.juricek@ ... u ['d.e' in gap]> on Monday September 01, 2008 @02:28PM (#24833225) Homepage

    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/ [google.com]

    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/ [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/ [apache.org] and Jakarta http://jakarta.apache.org/ [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/ [apache.org]

    Hadoop is an open-source implementation of Google's MapReduce idea.

      2. Scala http://scala-lang.org/ [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/ [apache.org] + Databinder http://databinder.net/ [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/ [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.

  • Re:Wrox Press (Score:3, Insightful)

    by nwf ( 25607 ) on Monday September 01, 2008 @02:36PM (#24833281)

    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.

  • by vux984 ( 928602 ) on Monday September 01, 2008 @02:38PM (#24833293)

    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.

  • by xelah ( 176252 ) on Monday September 01, 2008 @03:00PM (#24833517)

    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.

  • by EpsCylonB ( 307640 ) <eps&epscylonb,com> on Monday September 01, 2008 @03:08PM (#24833589) Homepage

    There is a difference between computer science and writing business logic.

  • Re:Don't (Score:1, Insightful)

    by Anonymous Coward on Monday September 01, 2008 @03:19PM (#24833705)

    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.

  • Re:Java? (Score:3, Insightful)

    by d_strand ( 674412 ) on Monday September 01, 2008 @03:26PM (#24833767)
    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.
  • learning java (Score:1, Insightful)

    by chrisboredwithlogins ( 1324041 ) on Monday September 01, 2008 @03:39PM (#24833897) Homepage
    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!

  • by d_strand ( 674412 ) on Monday September 01, 2008 @03:39PM (#24833899)
    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.
  • by SuperKendall ( 25149 ) on Monday September 01, 2008 @04:13PM (#24834217)

    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.

  • Re:Don't (Score:2, Insightful)

    by chris_mahan ( 256577 ) <chris.mahan@gmail.com> on Monday September 01, 2008 @04:34PM (#24834423) Homepage

    > 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.

  • by slim ( 1652 ) <john@hartnupBLUE.net minus berry> on Monday September 01, 2008 @04:39PM (#24834471) Homepage

    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.

  • Re:Wrox Press (Score:4, Insightful)

    by Timothy Brownawell ( 627747 ) <tbrownaw@prjek.net> on Monday September 01, 2008 @04:47PM (#24834537) Homepage Journal
    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.
  • by mcvos ( 645701 ) on Monday September 01, 2008 @06:17PM (#24835379)

    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.

  • by mollymoo ( 202721 ) on Monday September 01, 2008 @06:40PM (#24835621) Journal
    Learning the syntax of a new language is the easy part.

He has not acquired a fortune; the fortune has acquired him. -- Bion

Working...