views:

392

answers:

13

I recently graduated in Computer Engineering. I don't have a permanent job yet. The recession is making a good difference in my aim and reality. I don't want to just sit down. I want to sharpen my capabilities. I want to learn and practice in a professional work environment.

Now my question is: What are the tools and practices followed in a professional working environment? I mean IDEs, team working tools,debugging tools, unit testing tools etc?

What are the frameworks in Java EE which are must-know, or which will bring me advantages in my job interviews?

Thanks in advance.

+3  A: 

Some initial suggestions:

Read "Code Complete", then sleep with it under your pillow. Maybe keep a copy in your bathroom as well.

Alan
You MUST MUST MUST add Maven to this list. Dependency management in Java was a nightmare before Maven.
Jherico
Maven is by no means a standard in the enterprise Java space. Ant is far more common and would be better to learn first.
cliff.meyers
I find it a lot harder to find an open source Java project without a POM file than with one these days.
Jherico
Maven is a horrible, horrible tool, which just happens to strike gold regarding dependency management.
Thorbjørn Ravn Andersen
I don't follow. Dependency management is its primary function. Sure, it also acts as a build system, but you could always define the dependencies in your POM and then do everything else in Ant with the maven ant tasks
Jherico
A: 

My Java colleagues use this for most things.

  • Eclipse
  • Oracle or MySQL
  • Struts
  • Subversion
  • Bugzilla
  • JUnit

They also use Sun's Java Composite Application Platform Suite (JCAPS) for some things.

S.Lott
+3  A: 

IntelliJ is by far the best Java IDE, but it is commercial. Between Eclipse and NetBeans I would recommend NetBeans, it is closer to what an IDE should look and/or do(nothing against Eclipse, but I couldn't get used with it...maybe is just something wrong with me :) ).

adrian.tarau
++ for IntelliJ, but it depends on it's use. Maybe Eclipse is better for Axis webservices etc.
Martin K.
Most of the time you could say "it depends" :).A tool that does everything doesn't exists , but overall IntelliJ is better in almost every aspect. I agree, there are some plugins under Eclipse which provide better support for a certain functionality but ... nothing compares with IntelliJ, everything is so integrated and reachable, intuitive, etc...of course this is a subjective opinion because after awhile you get used with everything and it looks like a great tool even if it is not so great :)
adrian.tarau
+1  A: 

I think you need to take a close look at the companies you are applying to. The amount of "toolage" in the java world is way too much for you to become familiar with on your own in order to become attractive to any random employer.

I personally vote that the majority of it is overcomplicated crap, despite all the marketing hype that it gets. Find a company that looks like it works with stuff that you're interested in, find out what sort of stuff they use and then familiarize yourself with that. You probably won't be able to demonstrate job-level experience, but you will show yourself to be enthusiastic.

Jeremy Huiskamp
A: 

I'm going to go the route of suggesting what I feel are the most popular choices out there, which hopefully will give you more exposure to land that first job. Once you get your feet wet, I would recommend investing some of your free time to evaluate the other options out there. There is so much in the Java ecosystem to explore.

  • IDE: From people that I talk to, Eclipse seems to be the most popular. Netbeans is solid too but its future is in doubt since Oracle is working on acquiring Sun. A lot of folks swear by IntelliJ but I think it's much smaller community (and costs money).
  • SCM: Subversion and CVS are probably the most popular and Eclipse has built-in support for both.
  • Unit Testing: JUnit, it's the de-facto standard.
  • Builds: Ant, again the de-facto standard for build automation.
  • Frameworks: I would recommend either (1) Spring and Hibernate, the wildly-popular open source stack or (2) EJB and JPA, the Java standards. My personal preference is towards #1. As far as UI goes, there are a lot of options available, so it's harder to recommend. Struts and Spring MVC are more "old school" classic MVC frameworks whereas GWT and JSF are more "component-oriented" frameworks. You also have less popular ones like Wicket and Tapestry.
cliff.meyers
+1  A: 

You might find this poll (long but) interesting... http://www.java-forums.org/new-java/7315-what-you-using-write-your-code.html

We've been running a co-op (i.e. cadette) program for the last five (or so) years. Here's a list of stuff (in no particular order) that co-ops are clueless about that we really really wish they knew "the basics of" when they arrived:

  • Testing - Everyone tests, but (IMHO) few do so really effectively. Myself included.
  • Team development - How to work together on a codebase which is bigger than anyone.
  • Understanding legacy systems - Hey, this code is twice is my age? WTF?
  • Project management - That dark arts of delivering quality on time and on budget.
  • Business analysis - BA's are full of it! You at-least need to know enough to smell the effluent.
  • Known when to say NO - Practice saying this in front of a mirror: "No sir, I'm sorry, you really can't have this Ferrarri for the price of a second-hand mini."

The technology really is the easy bit. Having said that, your first position is likely to be as a code-monkey... so the more tecken ze spreken, the more likely you are to get a foot in the door.

So I suggest

  1. Tackle the J2EE 1.4 Tutorial ... also look at a web-app MVC framework like Struts 1 or (better) JSF; and ... also look at Hibernate - the psuedo standard persistence layer. ... also look at "early" DHTML - manipulating a html-DOM with javascript. ... also look at Swing, Applets, but try not to drown in it.

  2. then (and only then) tackle the J2EE 1.5 Tutorial (EJB3). I'm still in the process myself. I've been at it for two months. Anymore than two hours at-a-time makes my brain hurt, a lot... you can teach an old dog new tricks, you just have to do it slowly.

Like already stated: Every position will have it's own technology set... two people sitting next to each other may use vastly different product groups. What I advise you to learn instead of "all the techs" is the process of learning technologies, and the considerations in selecting appropriate technologies to suit a particular problem, and organisation.

The best thing you can do to improve your chances of actually getting that job is to join a "Young IT Professionals" group (like this one in Australia)... they'll probably do a "mock interview" day... constructive criticism (as apposed to spoonfeeding) will improve your job applications, your CV, and your interviewability. Hanging-out with a bunch of people who shre your interests is informative, and fun. You'll miss that "brain stimulation" in the break between uni and IT work.

On the recession thing... I graduated B.Bus(Computing) a month after the dot-com bubble burst. I worked in a supermarket, drove a cab, delivered pizza, did some builders labouring, flogged PC's, vended bad financial advise to people who can't add-up for ${nameless_charlitans}, flogged anti-virus software, tutored at the local TAFE college, got a few short-term contracts writing software for a big accounting firm... then I started voluntarily fixing up the PC's at my local employment exchange (I was there waiting for appointments for hours-on-end anyway, and it was better than doing nothing)... The IT-dude there got me an interview with "a mate" (i.e. my job was never advertised), and the rest is history. Funny how stuff works out. I feel for ya', just please don't take the knock-backs personally... you're likely to get a lot of them... it's just how the game is played.

Cheers. Keith.

corlettk
A: 

Weblogic,Jetty,JBoss or Tomcat with

  • -Maven build tool (indirectly background Ant and library versioning) -Prettify ("readify") -Minify (spaceless) -Refactoring (batch rename units) -XML -Stress test tool

Old tools e.g. rsync, emacs, awk, xargs, dd handle the largest files. less is good for streaming files (shift+F)

Larsson
A: 

This really depends on the jobs in your area. I suggest you take an analytical approach.

Use a job search engine for you area and do keyword searches. This will give you hard numbers of job skills people are looking for in your area.

You may also find these pages useful 10 Hot Skills for 2009 The 2009 IT Salary Guide

Peter Lawrey
+1  A: 

For the long term, work on an open source project. You'll learn a lot, and probably more quickly than you'd learn from a job.

Curt Sampson
Thanks for your suggestion. Can you advise some jave projects which maintain standard java practices?
fireball003
Getting your foot in an open source project is harder than it looks. Basically you need to prove your worth, which is hard. Look for something which interests you AND you would actually use later, then look for what they need people to do. This will most likely allow you to hone your documentation skills by writing documentation while learning the code base...
Thorbjørn Ravn Andersen
A: 

Write an own homepage! It shows that you have fun when you write software (so you do it in your free time).

Martin K.
Thanks. I will definitely do this :)
fireball003
A: 

Assuming you can get your CV/resume read by someone and get an interview:

Get a copy of Effective Java by Josh Bloch, read it, memorize it and understand it. A lot of interviewers (and I have done more than my fair share) use it as a good source of techniques that people should know and understand.

In terms of tools - you can't go wrong if you know:

  • Eclipse
  • Spring
  • Hibernate
  • Ant/Maven/Hudson
  • JUnit
  • Log4J

These are all Open Source (and hence will fit anyones budget). Most Java shops will use at least one of these!

Fortyrunner
A: 

Build something you're interested in building and choose technologies that seem correct to do the job. At the same time, take the extra time -- as you should when working as well -- to use tools that might be a hassle but you think will bring you an advantage. Knowing frameworks like Spring or Maven or whatever may or may not be relevant. A good employer doesn't care what you know, but how you know what you know. Can you learn?

Use some note repository (like Evernote or my own, TheKbase :) and start making notes about your world. Whatever knowledge you have digested should be instantly retrievable and not based on your limited memory.

I was always interested in Swing and teaching, and strangely I got a job teaching Swing (which I knew a bit), but also teaching all kinds of stuff that I didn't know like Struts and XML security (you read the books and put in the time). Plus I taught IDEs, which I always liked even, though everyone thought I was an immature programmer because I wanted autocomplete :) Again, following preferences...

My point is that unless something about learning a framework or tool particularly appeals to you, don't bother learning it. On the other hand, if frameworks are particularly annoying for you (for me they have been), take the most annoying and daunting and build something with it. It's a rite of passage that most people do because an employer asks for it, which is too late, IMO.

Yar
A: 

You already have a good list of tools from the answers above. Here are a few things you could do to get more attractive to potential employers.

  • Participate in an Open-Source Project
  • To become a better programmer, learn a language completely different from Java. A good starting point could be other languages on the JVM - Clojure / Scala.
  • Gain expertise in specific areas in J2EE that will make you stand out - security, performance analysis, etc.
  • Create your own website using the tools and the frameworks you have learnt
Anirudh