

Java Developers: Need to know vs Nice to know? - JQuinn

I am a college student working as a "Junior Computer Programmer" for a contractor. I have been actively looking for other opportunities as a Java Software Developer. However, I am continuously seeing different requirements that vary as much as the companies that are hiring.<p>So I was wondering if an individual has:
  a solid understanding of the OOP Paradigm,
  the capability to read, understand, and debug
    someone else's code,
  can logically think through algorithms to
    determine flaws and outcomes,
  has been working with terminal and Swing based
    applications in Java for many years
what libraries would be best for that developer to focus on to become desired in today's workforce and which would be the libraries that would be nice to know to separate them from the competition?
======
fecak
I've been running a Java Users Group for 13 years and recruiting engineers for
15 years, so my perspective may be unique. Depending on what types of jobs you
want, the answers may be different.

As some others have mentioned, learning some frameworks and tool combinations
are quite helpful. The Spring and Hibernate combo is probably the most
prevalent that you'll see out there.

Swing is a pretty rare skill these days, as it's not used by that many. I saw
a mention of JSF in the comments, and that hasn't caught on much either. If
you are looking for the best way to get employed in Java, Spring and Hibernate
and the overall CS background is helpful (the books mentioned in this thread
are all recommended to most Java pros). JavaScript should be helpful.

As others here recommended, learning another language is also recommended. I
wrote this article recommending to Java pros that they learn a new lang
([http://jobtipsforgeeks.com/2012/07/11/advice-from-a-jug-
lead...](http://jobtipsforgeeks.com/2012/07/11/advice-from-a-jug-leader-learn-
a-different-language/)), and I'd still recommend it. Fewer young engineers
seem to be gravitating to Java.

Checking out Python, Scala, Ruby and Clojure would always be helpful, and in
many environments these days you will be exposed to more than one language
anyway.

You've got lots of choices at this point. Keep control of your career
prospects by not limiting your technical diet to what your fed at work.

~~~
JQuinn
Thank you so much for your advice. I have been looking into other languages,
primarily Python and Ruby. I have seen Spring and Hibernate many times and
thought it a good combination but, having not looked to in depth into them, I
don't fully understand their capabilities. Thank you again for your very
useful insight into this.

------
jburwell
For junior programmers, the frameworks and tools are little less import as
most organizations assume that you can be mentored on them by more senior
staff. They want a solid foundation on which to build that knowledge. To that
I end, read and internalize _Effective Java_ by Joshua Bloch. I also highly
recommend _Java Concurrency in Practice_ by Brian Goetz and _Clean Code_ by
Robert Martin. In parallel, let how to write robust, complete unit tests.

~~~
JQuinn
Thank you for the book suggestions. I have indeed read Brian Goetz's book
though it would be useful to review again as I don't believe I was as focused
and knowledgeable then as I am now. Thank you for your suggestions in moving
forward.

------
manishsharan
I am going to attempt answering your question from the Job perspective.

If you are going to be working in Financial Industry in Capital markets -- pay
close attention to Java concurrency.

If you looking to work in large companies with Enterprise applications, pay
attention to ESB technolgies usch as Mule or Camel ( you need to be very adept
all java based XML technologies e.g JAXB, XSLT, XPath etc.) TIBCO would be
super helpful in getting those jobs.

The of course there is JSF. This POS has been sold to all enterprises as the
frickin' holy grail of web application development by likes of IBM, Oracle.
Knowing JSF would increase your likelihood of full time permanent employment.
The downside is the PHB that will come with this job. On a related note, you
can go ahead and forget swing -- very companies use it nowadays.

And at every Java interview , every techie will ask you about a. Singletons,
b. JDBC Transactions c. Spring d. Hiberbnate.

Hope this helps.

~~~
JQuinn
Thank you so much. Yes this does help significantly. I am hoping to go into
the Enterprise Applications (though of course I am not going to limit myself)
so I thank you for pointing those out to me. I'm not sure I know what JSF is
but I will definitely look into it. Thank you for being able to separate the
technologies into Jobs. This will help significantly. And the pointers for the
Java interviews is immensely helpful. Thank you.

------
gohwell
Most of my frustrations in Java development come from building and running the
applications.

\- Eclipse/Intellij - Both good IDEs. It's crucial to know how to navigate,
debug and build your applications using either of these IDEs. I spend a lot of
time cursing at Eclipse.

\- Spring is a must know. It's a XML-based framework that ties java objects
(beans) together. It enables dependency injection and by default creates one
instance of each bean. Most java projects I've worked with are implemented
with Spring.

\- Maven is a package manager. With the help of a POM.xml file it to keeps
track of libraries and project dependencies. It also describes how to build
the application. It can be tied in with eclipse or run from command line.

\- Tomcat - It's a virtual machine that enables your application to dish out
java servlets (JSP).

\- Message Queues/JMS - Powerful service for publishing and subscribing to
messages. Used for communication between servers/applications.

~~~
JQuinn
Thank you. These technologies will all be looked at. As far as the two
suggested IDE's, I have used both (I use Eclipse for recreational coding and
Intellij at work). I will have to look further into the other suggested
technologies you listed.

------
stuff4ben
Take a look at some frameworks. Spring, Guice, Play, Grails all come to mind.
Some open source technologies like JAXB (XML object binding), POI (Excel
transformations), and Maven (build framework) are good to know. It'll take
quite some time to get through all of those, but as an aspiring enterprise
back-end Java developer, that's a good start.

If you want to separate yourself from the competition, learn a new language.
Scala and Groovy are Java-like. Python, Clojure, Ruby are also good
contenders. Learn you some Javascript too.

If you want to focus on some front-end tech, jQuery and it's ilk are good
choices.

~~~
JQuinn
Thank you for the suggestions on frameworks. I will definitely start learning
the ones you suggested. As far as the open-source technologies go, should I
look into learning them as an enterprise developer or are there commercial
technologies I should focus on? Or are those also frameworks that would
supplement your original suggestions.

I have begun learning a new language (Python, Ruby, and Javascript have been
my main focuses, as well as dabbing in PHP in case I needed to know it for web
development)

Again, thank you for your suggestions. This list of technologies has given me
a great point at which to begin.

------
traxtech
Need: Spring, EJB, JPA (so Hibernate), JSP

Nice: SQL mastering, good ORM trade-offs and inner-working understanding, good
general database understanding and usage (let PostgreSQL be your friend)

But you'd also better master few pieces of software like Hadoop, Solr, Talend,
Cassandra... to differentiate/specialize (try and pick what you love doing,
contribute to open-source with these technologies)

~~~
JQuinn
Thank you for separating the technologies. I had a feeling Spring and
Hibernate would be important to learn but I also wanted to make sure I didn't
mess up by learning useless technologies.

The fact that you pointed out SQL was interesting to me as it seems you were
one of the only ones that did so. I firmly believe that my work, both in
school and at my internship, allowed me to excel in SQL. So, personally, I
believe I do have that and the database understanding under control. But I do
thank you for pointing those out. I was worried I wouldn't be using those
skills again.

~~~
traxtech
Lot's of Java dev greatly misunderstand ORMs and the underlying SQL stuff. You
can differentiate on that.

------
rodrigoavie
You should learn to use Maven. Also, try to follow great Java projects on
GitHub and learn with their maintainers how to write great Java code.

Also, as the JVM has been flourishing for the past 5 years, I'd also recommend
you to learn some of the more popular JVM-based languages. That'd be Scala and
Clojure.

~~~
JQuinn
I haven't heard of Maven. I will have to look into it. Thanks. As for
following "great Java projects on GitHub" How would you suggest I go about
finding the projects. What I find great could be considered mediocre at best,
especially since I only really have my own code to base it off of. I would
like to start following projects on GitHub but I don't want to be influenced
by the wrong projects. So if you have any suggestions on finding good
projects, that would be great. Thank you very much for your help.

~~~
rodrigoavie
Hey! You can use the GitHub "explore" feature. Here is the link specifically
for Java

<https://github.com/languages/Java>

------
gohwell
Get the "Gang of Four" book on design patterns. I wish they had told me about
this book back in school. <http://en.wikipedia.org/wiki/Design_Patterns>

~~~
JQuinn
Thank you for the book suggestion. I will be purchasing it when I get the
chance.

------
keefe
discriminating libraries like that is one of those skills, imho...

I think having a deep understanding of the most useful libraries is powerful :
maven, OSGi, Jetty, ActiveMQ, HttpClient, Hadoop, Velocity, other popular
projects on apache, GSON, JUNG, JUnit (in depth)...

~~~
JQuinn
Thank you for these suggestions. The only one that even looks remotely similar
(yes I am still a novice when it comes to other libraries) is GSON, due to my
work with JSON at work.

------
happy_dino
> [...] which would be the libraries that would be nice to know to separate
> them from the competition?

scala-library.jar, scala-reflect.jar, scala-compiler.jar

~~~
localfugue
I'm not sure Scala qualifies as a "nice to know" when OP had specifically
asked of Java developers and ecosystem.

~~~
happy_dino
Agree. More like “mandatory”.

