views:

150

answers:

7

I started working in my company 5 or 6 years ago as a junior Java developer, and I got to do some J2EE programming using Servlets and Jsp. I didn't spend much time in that position and I went to work with databases, so I distanced myself from the software development world. Now I've had to go back to Java programming, and I was given a Web application to develop and maintain.

When I opened up the project, I understood absolutely nothing. The application was built using many high level frameworks like Spring, Hibernate, Wicket, Axis for Web services and Maven for building the project. The people that worked in the application are superb programmers, so I am certain that they have applied the patterns and concepts properly, but right now it's just too many things that I've never seen before.

What can I do in order to get up to date with current frameworks and technologies effectively? I know Java 1.4 fundamentals fairly well and I have a good understanding of design patterns and object oriented design, but I know nothing about those frameworks I mentioned before. I'd really appreciate some suggestions from people that have a better understanding instead of blindly reading the first book I find about these different subjects.

Many thanks in advance for your help.

+5  A: 

The only ( or should I say the best way ) would be: have that project running in your local environment and from there start touching the code until you understand it.

For instance, start with the login page:

  • Where is it?
  • What triggers what?
  • Where is the component?
  • What's the code underneath.
  • What happens if you change this line of code or that other.

    Eventually you'll be able to say "Ok this is an Action of such framework" or "This is configured through that config page"

Don't be afraid to break something, when that happens, restore your environment and start again.

I find extremely faster and effective to learn new technologies this way than going from theoretical to practical.

From time to time read something about the specific framework being used to increase your vocabulary and have a big picture of the whole thing. Then go back and digg in the code again.

OscarRyz
+1  A: 

I am currently a student studying computer science and coding for businesses. I found that the simplest approach to this is to read the documentation.

Spring Documentation

Hibernate tutorials

Apache Wicket

Axis for Web Services

Maven

Once you have an understanding of how the different frameworks work, the next thing to do is look at the code. Is there documentation, are there comments in the code, find out what they are saying and try and follow the parts of the code that you understand. It's better to approach a huge site one page at a time and find out what each portion does before looking at all the pages at once.

once you have a feel for the site, begin by changing simple things in the code, even if it's printing out "hello world" here and there, it will give you an idea of how the code affects the site onscreen.

But the most important part is to not panic, remain calm. If it begins to overwhelm you it's better to return to the beginning then to try and push through.

If I have any other advice I will add an edit.

Good Luck to you.

** EDIT

If you are having trouble figuring out how all these things work together you could always inquire if they have the documentation for the system. If they have flow charts, what design approache they took, waterfall, etc. Find user made methods, classes, functions. normally they should be well documented and explained by the programmers who are coding them. also the logical and physical design of the site. The theory phase of a site is just as important to understading it as the site itself.

Hope this helps.

Justin Gregoire
+1  A: 

I was in a similar position at one point, and I felt pretty overwhelmed.

One of the things I found most helpful was to start learning Spring. Pick up a book (I liked Spring Recipes, but a lot of people recommend Spring In Action), or take a training class (the one offered through Spring's website is very good). By learning Spring, I learned how to integrate with other frameworks such as Hibernate and other Web Service frameworks, and in the process I learned the basics of those frameworks and of JavaEE concepts in general.

There are some fundamental differences between Java 1.4 and 1.5, so you may find a good Java book helpful as well if you find yourself having trouble.

But honestly as @Oscar Reyes said, even though it will seem overwhelming at first, the best thing you can do is just dive in. Start playing around in the local or dev environment. Making a simple hello world app will give you a mountain of understanding.

Good luck!

Alex Beardsley
+2  A: 

For me the biggest hurdle with most of these web frameworks is the plumbing - "this xml parameter maps to that one, which that class is looking for" - Reading a spring book, all the config information blurs together into a big mass of sorta-configurable-that-xml-points-to-that-xml-to-wha??-huh?? things. The best way I've found for understanding frameworks is to build toy projects. All of the books and documentation in the world can't substitute for getting your hands dirty.

So, what I did is build a small spring project. e.g 2 classes, 1 jsp maybe, getting clear on which pieces of the configuration do what in a simplified environment. The next step would be to add a piece in - add a simple hibernate-accessed class, configured through spring. Proceeding in a step-by-step process that way you start to get a sense of how all the pieces fit, and what pieces you're looking for when you're trying to understand a piece of app functionality. There are a lot of configurable parts, and I've had to do this more than once.

Steve B.
i agree, for most people practice (toy projects) is the only way to truly understand something. you can read tons of documentation but it will never make sense until you actually tried it. try some easy stuff, then read the main documentation (not too much details, just too see if there's something you can do with it that's worth trying for example), do some more stuff. each problem you solve while toying will help to understand the framework/toolkit.
Stefan De Boey
A: 

My advice is to start by finding the "hello world" tutorial for each of the frameworks and actually follow along by actually writing the code in your environment. I've found that I learn much faster if I actually write the code rather than just reading examples.

Once you've done that, think something you think would be useful or cool to use for yourself and start building it using one framework at a time. Write a simple note taking app that stores notes in txt files, for example, and use spring to manage class dependencies. Then use maven to build and execute the jar. Then add hibernate to store to a db instead of txt files. Then use wicket to make it into a web app, etc...

Then go on amazon and buy and read a book on each framework.

Also, for me, if a framework doesn't interest me much, I'll try to convince myself that just understanding the high level concepts is enough. But that always comes back to bite me. I always end up having to circle back, bite the bullet, and really learn the stuff. So I would say to try to avoid that head game if you can.

Great question, btw, I think this is situation that developers often find themselves in!

Dave Paroulek
+3  A: 

I am assuming that the "superb programmers" are still around, so your best bet is to use them. While not every developer is great at explaining things, they should be able to give you an overview of the application so that you can understand what each framework provides and how they work together.

The first thing to accomplish is WHAT, not HOW. Get guidance and hopefully design documentation that will allow you to understand what each piece of the puzzle provides to the solution as a whole.

Once you have an understanding of what each piece/framework/tool contributes, then it will become much easier to start understanding how they do it. Again, one on one with the developers to get you started will help a lot. Over time, as you become more familiar with the code, you will start understanding how these frameworks work, and what they are capable of.

Courses and documentation will of course help, but nothing replaces a warm body (a competent one) to help you understand something, even more so if they created that something.

Once you understand the usage of these frameworks in your own applications, you will find it much easier to start picking up other features that you may be able to utilize in the future.

NOTE: Also, with courses, you may want to check to make sure that they address the specifics of the framework that you are using. Spring is quite extensive, and learning Spring MVC may be of little use to you (in your current position) if your company exclusively uses other frameworks for web development, while Spring DI (the core) and data access may be what you actually need.

Robin
+1 Ask them. Probably you don't need to know every technology used to work on that project.
volothamp
+1  A: 

Don't do this by yourself...Leverage these "superb programmers"...hopefully they are still working with you on this project. Pair Programming is a great way to expand your knowledge the fastest. You can read all of the books in the world, but nothing beats good old hands-on experience. Heck, if you are in a support rotation, take the phone for a few weeks...those irate customers on the end of the phone are a sure-fire motivator. :)

I was a technical lead on a project where only two of us had any experience with Hibernate & Spring (and ironically JUnit). The two of us frequently paired with these "junior" developers to the point where they simply began to demonstrate that they "got it". It didn't happen overnight, but between pairing and writing good tests, we now have a team of 5 experienced developers.

Good Luck!

T Reddy