Hacker News new | ask | show | jobs
Java Developers: Need to know vs Nice to know?
14 points by JQuinn 4822 days ago
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.

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?

10 comments

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...), 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.

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.
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.
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.
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.

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.
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.

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.
I'd add Ant to this list. Maven is new and in some respects better, but Ant was first and still used widely.

JDBC is good to know too.

And I'd stress JSP which is widely used too. And learn basic Servlet use.

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.

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.

I think knowing JSF 1.1 and 2.0 and what is different between them is very important too.
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)

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.

Lot's of Java dev greatly misunderstand ORMs and the underlying SQL stuff. You can differentiate on that.
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.

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.
Hey! You can use the GitHub "explore" feature. Here is the link specifically for Java

https://github.com/languages/Java

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
Thank you for the book suggestion. I will be purchasing it when I get the chance.
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)...

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.
Dude, you are gonna scare away the rookies . We need fresh blood !
> [...] 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

I'm not sure Scala qualifies as a "nice to know" when OP had specifically asked of Java developers and ecosystem.
Agree. More like “mandatory”.