views:

289

answers:

9

I'm going to be graduating shortly, and I was wondering if there were any Java technologies that I should take the time and learn before I enter the job market. I have no real java enterprise experience (all my internships involved C development on Linux) however, I have worked extensively with it in a large number of my classes.

So is it worth it taking the time to mess with technologies like hibernate, spring, EJBs, etc? If so, what is going to be the best value for time spent?

+1  A: 

Well in order to answer that I think you should specify what your interests are. I'm sure the answer varies based on whether you want to make applets, web applictions, mobile applications and/or desktop applications.

Spencer Ruport
I agree with this sentiment. You will be better off if you figure out what it is that you want to do, then use the relevant technologies in a personal project. Hands on learning, plus you get to see if it's really what you want to do. "Best value" is figuring out what will make you happy, not money.
Brandon DuRette
+1  A: 

Above any technology, you need to focus on good design practices. Investigate domain-driven design and design patterns. I think the right design philosophy will pay off more than the latest technology would.

moffdub
+4  A: 

I would recommend:

  1. JSPs using JSTL, no scriptlets.
  2. JDBC, SQL, relational database design, and at least one RDBMS (e.g., MySQL, PostgreSQL)
  3. Servlets and HTTP.
  4. A meaningful Java EE app server - Tomcat or Jetty; WebLogic or JBOSS or Glassfish.

You can do a tremendous amount of useful stuff just knowing those. They presume more than a passing knowledge of core Java and object-oriented design.

If you had a good handle on those, I would strongly recommend Spring, if for no other reason than the quality of the framework and the influence it'll have on your design thinking.

If you must try EJBs, don't use anything other than version 3.x. Don't waste your time with the earlier versions. But EJBs are not necessary for Java EE work.

duffymo
Couldn't agree more about the EJBs
Allain Lalonde
+2  A: 

In my experience, you won't learn much about these technologies unless you are using them hands on for one of your projects. This is why, internships are quite useful as you get exposed to so many different technologies and people that you woudn't usually have access to. From job perspective, since you are a fresh grad, you won't be expected to know the details of technologies like Spring, Hibernate, Velocity or Struts. It's good if you have a 10,000 ft view understanding of these. But, I would suggest you to focus and improve your understanding of basic concepts like Threads and concurrency, Java IO, Collections classes, Reflection, Distributed programming technologies like RMI and web services, Event handler mechanism and JSP/Servlets.

These are all what you need to know as a fresher. It's even better if you have been able to use these in your curriculum projects and gain a better understanding.

Edit: I forgot to mention that some understanding of basic design patterns (especially in context of Java language itself) would be pretty handy.

Epitaph
A: 

That's a good question. Before I get to Java, let me say this:

In most cases, your best bet would actually be to study .NET and become at least minimally versed in it. At least in the US, the jobs in certain geographical regions tend to be very .NET oriented due to the nature of the large employers in those businesses. Being able to pass a C# interview is useful, and having studied Java (assuming your development skills are on par), the transition shouldn't be difficult.

If you are a US citizen, especially if you live in the east coast, find out if you are eligible for security clearance and try to obtain it. A lot of jobs in VA,MD,DC, and NJ require it, and these regions are also heavy with immigrants who can't get those jobs, so you'd have a competitive advantage.

As for Java, make sure you are really good at Java before you head out to learning APIs. Then figure out if you want to specialize in core Java, UI Java, or web-based Java. Most chances are that you would care about the latter. Learn SQL, then do SQL via Java, then learn Hibernate. Make sure you understand the concepts behind the spring framework since it comes together. I would then approach J2EE technologies individually. I personally think things like JMS and JSP are an important foundation before EJBs.

In the end, any developer can learn an API, but you have to be a good core developer to make the most out of it.

Uri
Even though you're getting lots of down votes I appreciate the feedback. The question of C# vs. Java is one I struggled with answering and I'm not really sure if I made the right decision. All my development thus far as been linux , so I'd like to stick with something more suited to an open platform
Michael
Thanks Michael. I've been working primarily with Java myself, and only had very sporadic contact with .NET (it wasn't really impressive 6 years ago but it's actually better than Java now). The open platform was mostly an issue for me in not using .NET.
Uri
A lot of college graduates today don't work with "low" level languages like C or C++,so you have an advantage since you know pointers. Why are you only looking for JAva jobs?
Uri
+1 since I think you're getting hit by Java zealots.
Spencer Ruport
Don't get me wrong, I love Java and do my research on building tool for Java developers. But I do read the job boards... :(
Uri
A: 

wI would imagine that most Java jobs these days are building some sort of website using JEE. I know that when I graduated college I knew the Java language pretty well, and knew how HTTP worked, but had no concept of anything like Servlets or web frameworks.

I would say learn the basics of JEE (Servlets, JSPs), and in the process of doing that you'll probably learn why you want to use a web framework instead such as Spring MVC or Wicket.

bpapa
A: 

If most of your classes were in Java, you might want to consider taking on another language. It would give you some perspective, teach you some design patterns and techniques that may not be common in Java, and show potential employers you can pick up new languages and have an interest in programming that goes beyond what you learned in school.

Marc Charbonneau
Thanks for the feedback, but I already mentioned all my internships were in C. I also wrote a lot of perl in those positions. Additionally, I've dabbled in Python, PHP and a bit of scheme :)
Michael
A: 

Understand what the java VM is doing for each operation.

Examples:

  • Pretend you are writing a new JVM what is the data structure that should be used to enforce the synchronized keyword.
  • How does string concatenation work?

Read the java puzzlers books

Read the puzzler books to really understand exactly why things are the way they are.

Learn multiple languages

This gives you perspective on java.

Learn databases

Everything eventually ends up in a database. If you can punch your way out of the SQL paper bag then you are in a world of hurt.

Know the entire stack of protocols involved in a web transaction

This way you understand how the web request is getting processed before it gets (or doesn't get to your code)

Know your debugging tools

Quite simply if you are trying to use println() to debug you are in trouble.

Test: do you know how to set a breakpoint on an exception in eclipse? [Hint: look for the [J!] button ]

But also learn the tools that let you monitor a web transaction.

Learn Firebug.

Threading

If you can't write thread-safe code, you are in trouble. The producer-consumer question seems to be standard now a days.

Pat
A: 

I suggest you use search engine for jobs in your area.

Find some jobs you think would interest you.

Look at the technologies/skills they are looking for.

Spend time on those technologies or working on those skills.

Peter Lawrey