views:

415

answers:

7

I used to be a developer in Java, PHP, perl and C/C++ (the C++ bit badly - the others not too badly, I hope). This was back in the Java 1.3/1.4 days. We used raw JDBC, swing, servlets, JSP and ant (sometimes even make). Eclipse was new.

Then I joined a deployment team and became a deployment engineer and then after the deployment engineer work became a full time sys admin.You get the idea - my experience is a generation or two old in programming terms - maybe older.

I'm interested in getting back into Java and perhaps Ruby development, but feel I will be waaaaay behind the technological 8 ball.

Can you folks suggest some books (or sites) that would be worth reading to catch up with the last 5-10 years of the development world.

I.e. what should I read to try and catch up with where development is now? I see lots of stuff on the web, but what are people in the fabled "real world" using? (are lots of people being SOA based apps? Are they using XP methodology)

The sorts of things I'm interested in finding out about/catching up on are:

  • Methodologies
  • Design patterns
  • APIs/Frameworks/Technologies
  • Other stuff you deem current/interesting/relevant.

So if you have any thoughts or can recommend any books (especially new classics - you know the 's equivalent to K&R C or "The mythical man month").

Thanks for any thoughts you might share.

+3  A: 

If you are interested in learning RoR (Ruby on Rails) this is the place to start http://rubyonrails.org/

Shaji
+3  A: 

Java development has branched in so many directions that maybe it'd be useful to give some specifics about the kind of apps you'll develop for a more complete answer. I have no experience in Ruby, though. But I can recommend some must-know Java books that are not specific to one area of application:

Java Generics and Collections

Java Concurrency in Practice

Core Java

About methodologies & etc, I highly recommend the "Beautiful" series, especially Beautiful Code and Beautiful Architecture. They are collections of essays for many languages, but a handful of them are for Java.

Fabio Ceconello
+1 for Java Generics and Collections and Java Concurrency in Practice - absolutely essential for JSE 5+ development.
justkt
+4  A: 

Since you know Perl, I would suggest (Ruby has a lot of Perl like syntax).

The Ruby Programming Language , it's consider the best Ruby book available. If you want more, the Ruby Cookbook is a good complement.

grokus
+24  A: 

Some topics from the last 5-10 years, specially in Java/web development, you might want to be aware of. All debatable.

  • IOC/DI pattern - Spring (or Guice, or new CDI/Weld/JSR-299) - See the books from Rod Johnson

  • EJBs seemed to be totally "in" 10 years ago, totally "out" 5 years ago - now it struggles and have some relevance (more respected and used than before). Spring and EJB3 have converged in many respects.

  • The web frameworks (in Java land) panorama is not joyful. No winner here. "Official" JSF continues to struggle to seduce web developers. Struts is like Cobol now (much used but despised), Struts2 was really a merge with Webworks (and didn't get much tracking), Spring MVC mantains low profile, Tapestry is decaying; new players (Stripes, Wicket) have good reviews but little penetration. Goggle's GWT seems to be maturing well but also seems too unorthodox... Pure servlet-JSP is practically dead, of course.

  • In the MS ASP.Net front, the shiny Web Forms seemed to be the holy grail of web development. Well, it was not, and now the old MVC pattern (ASP.NET MVC) is getting more popular (used here in SO, BTW).

  • The trend was once to put "configuration" (in a very broad sense) in XML, that led to a XML-hell, we are trying to get out with this with the next cool thing: Java annotations (perhaps another hell in the horizon?). You know, for each cool thing that ends proving itself not-so cool in three years, another next cooler thing -sometimes more- appears afterwards as replacement.

  • Unit testing is one of the cool things than came to stay, it seems. For better.

  • SOA, and the whole Web Services stack, is one of those cool things ... not so cool as 4 years ago, but still rather cool. Cooler with REST. I'm not very familiar with that world, actually.

  • Applets continued its trend towards extintion. JavaFX tried to catch up with Flash/Silverlight; seems a complete failure - though it's early still. Flex seemed the new holy grail for Java developers, now it seems it was not.

  • Java JVM gets better and better in terms of speed.

  • Java language has not much news: generics, autoboxing (both half baked). Java 7 does not provoke much excitement.

  • Java as web platform continues strong in the server-enterpise side. Very little penetration in the shared-hosting world, or in the Desktop/Client side. Swing performance has gotten better, though.

  • The IDE panorama has not changed much: Eclipse seems fairly popular and alive (not only for Java), but has strong competitors. Eclipse, BTH, if one of the most succesfull pieces of desktop software built on Java (but SWT, not Swing).

  • Version control: Subversion seemed the next CVS; many migrated. But now the fashion points to distributed versioning (Mercurial and GIT)

  • In the browser side: CSS and DHTML (DOM manipulation through Javascript) are inescapable. AJAX is (was?) considered cool. Javascript is as popular as hated as misunderstood. Among many frameworks used to hide its intrincancies, jQuery is very popular and mostly loved.

  • On the persistence side: for ORM, Hibernate ruled (almost nobody remembers EJB entity beans!) and rules still. Now JPA is the standard, with Hibernate as implementation (among others). iBatis (a more lightwight-low level approach, DataMapper rather than ORM) is also popular. Both have ports for .Net, also- but there the cool thing is LINQ - not my field.

  • For simple web applications, in shared hosting scenarios: Plain ugly PHP (+ Mysql) still dominates. There are some frameworks (CakePHP, Kohana, CodeIgniter, Simfony) that try to make PHP a decent web-application enviroment for developers - I dont know if they succeed. Perl has little presence in web applications (modperl was always a pain...)

  • Ruby (RoR) and Python were very cool some years ago, they are still cool but perhaps not so. They seem to be about to rule the world... always next year (as "Linux in the desktop"... well, actually no one believe this one now). Other cool things ar Scala and Groovy.

Update: Two other things most Java developers should know in 2010: Maven and Unicode

leonbloy
agree and disagree strongly on many points. but +1 for all the typing :)
Mihir Mathuria
Well, tomorrow I'll reread this and I surely will disagree with many points myself! :-) Feel anybody free to add missing topics and points of disagreement.
leonbloy
hahaha "Flex seemed the new holy grail for Java developers, now it seems it was not." So sad, so true.
Yar
configuration in XML has been replaced by configuration in code (a la Ruby on Rails). Check out the ConfigSlurper in Groovy. This is clearly a step backwards, but we'll pretend not to notice.
Yar
yar: Could you explain why it's "clearly a step backwards"? I've not used Groovy, but with other programs I've only ever seen it be a huge win.
Ken
+4  A: 

I think one of the general trends we're seeing over the past 5 years -- and this is hinted at in leonbloy's answer -- is the increasing popularity of dynamic languages and test-driven development. At the same time, when you dropped off the map on Java, we were all very excited about automatic refactoring and having the IDE write massive amounts of code for you. Now there is another camp -- I would say best represented by Python and Ruby, and in Java by Groovy and Ruby (and Scala, I think) -- that is into concise, dynamic code (where you trade static typing and strong IDEs for dynamic typing and having to type less with your actual fingers). The most important thing to understand is that the Unit Test thing has really gotten to a feverish pitch by 2010. In 2005 Jeff Atwood wrote a blog post saying that they just used formal Unit Testing for the first time on a project, and... man is it a lot of extra code to maintain (or something like that, I'm paraphrasing badly). But nowadays, no one would admit to not using Unit Tests in their code, nor to preferring Java over Groovy (except for performance considerations, which are real). And maintaining test code is considered a necessity, and not a chore (though it is a lot of work).

That was a lot of text. My point: dynamic languages are hipper now than ever, and so is Unit Testing.

Oh, and I forgot to mention, frameworks -- my favorite, Rails -- are also great ways to avoid reinventing the wheel. Spring and persistence layer frameworks, and all kinds of other stuff. Basically, hundreds or thousands of projects have thousands of developers behind them. The dev world is huge. I've even heard that there are people who actually like PHP, but I've never met any :)

Yar
+2  A: 

As about languages:

  • OO languages with dynamic typing and closures support are very strong nowadays. This has boosted some interest in functional programming e.g. Ruby, Python, Groovy
  • Due to the widespread use of multi-processors, languages with built-in support for concurrency are becoming interesting and being used when there is the need to scale (e.g. Scala, Clojure, Erlang, Go). The mechanisms used range from immutability-by-default, to software-transational-memory or message-passing-style method-ivocations.
  • Still due to the same reason, there is some academic interest on purely functional languages. The absense of side-effects makes it very easy to write concurrent code and paves the road to implicit parallelism. (e.g. Haskell, Miranda)
  • IMHO, Java is becoming a kind of C/COLBOL of the XXI century. C, because of the portability, the JVM and huge availability of good-quality libraries; and COLBOL, because the big customers are reluctant in using anything else.

Regarding design patterns, I do not know how is that in the Java world, though, I know that Ruby and similar languages are flexible enough to make many of the Go4 design patterns uninteresting and pointless. Closures rule!

As for methodologies, SCRUM and Agile are the most used nowadays.

Pedro Morte Rolo
A: 

I have been a longterm C++ programmer, and a few years I saw everyone around moving to different platforms, except me. Then suddenly, my job was ended, and i was stuck with knowledge hardly anybody wanted.

At that time i saw a few routes:

  • java: obviously, but i found it very hard to get into, with all the different frameworks. The language is easy enough, but i found J2EE and the entire wood of development frameworks (spring, swt, jsf, ...) totally overwhelming and honestly didn't know where to start

  • C# and .NET: the language is almost the same, the architect is the guy who invented Delphi; a smaller and compact environment. Interesting. But, Microsoft. Depends on your lookout on this. For me it gave me a smooth transition when a job offered itself which mixed C++ and C#.

  • Ruby and Rails: a very compelling language, concise, compact, powerful, feels natural. I found it extremely beautiful from the first time i saw it. The community is smaller, the basic ideas are DRY, opiniated and altogether i found it more approachable.

So that is the route i took: Ruby. I will recommend you a few books, bearing that in mind.

  • Code Complete 2: a generic book about programming in general. Very good read. Recently Clean Code was published, but I believe you'd better read Code Complete 2.
  • The Well-grounded Rubyist: a very good introduction to Ruby
  • Design Patterns in Ruby: a translation of the very well-known Gamma et al book to Ruby. If you have the original, no need, although it does help to see how easy those patterns are translated to ruby, and what ruby can add to that.
  • Agile Webdevelopment with Rails: the standard book about Rails, a very good introduction to all aspects of Rails
  • The RSpec Book: Behaviour Driven Development with RSpec, Cucumber, and Friends : a very good introduction to BDD using the extremely awesome tools in the Ruby community
  • jQuery in Action: because, when doing web development, you will need to use javascript and jQuery is simply the best way to do it

Hope it helps.

Let me end with a quote i read somewhere. Java, Ruby, .NET are all moving targets. So it is very hard to get started in any field. Things you will be learning might seem out-dated even before you master them, and that may be very demotivating at times. To an outsider the changes travel at the speed of an airplane, you can't run to catch up; but once you are on the plane, moves forward are just walking. The first hurdle: get on the plane! Read the books, blogs, try stuff out for yourself, etc (of the platform of your liking). And then you will be able to follow the moving target that any technology is :)

Good luck!

nathanvda