Java Developers: Need to know vs Nice to know?
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?
(
26 comments
| 14 points
| on HN
)
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.
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.
- 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.
JDBC is good to know too.
And I'd stress JSP which is widely used too. And learn basic Servlet use.
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.
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.
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)
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.
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.
https://github.com/languages/Java
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)...
scala-library.jar, scala-reflect.jar, scala-compiler.jar