

Ask HN: How do you get started in enterpirse Java development? - vital101

I've been around this community long enough to know that "Java" is almost a bad word, but hear me out.  In my area (Western Michigan), there is an abundance of jobs that require experience doing enterprise Java development.  I'm currently a web developer(PHP), and would like to branch out a bit in to Java programming as a profession.<p>The thing is, even entry level Java jobs are looking for at least 1 year of experience.  I used Java during my academic career extensively, and consider myself proficient with it.  However, since I don't have any "real" experience, nobody is willing to look my way.<p>So, my question is: How do you get started in enterprise Java development?  What is the best way to gain experience without giving up on the current day job that pays the bills?
======
hapless
Job postings are built something like children's wish lists for Santa. Your
kid doesn't actually expect a pony AND a nintendo AND a dog AND a trip to
disneyland. Entry-level job postings don't actually expect 3-5 years of
experience.

It's normal to be ignored over and over and over when you submit resumes. It's
the hardest road to employment. Because 99% of applicants are crap, no one
applicant gets a lot of attention. Tweak your resume, make more phone calls,
keep trying.

~~~
rubinelli
Pore over your contact list and find friends that went to Java shops, or old
clients that want to Javafy their back ends. Joining your local Java User
Group's mailing list and participating in events once in a while will help you
network.

------
patio11
Learn a model/view/controller framework like CakePHP or Rails. It will make
enterprise Java development much easier, since you'll know the core concepts
in a language that you don't have to fight every step of the way to do things
in. (I say that as a former Big Freaking Enterprise Java developer.)

Learn core Java, paying particular attention to how to use CS101/201 stuff
like loops and collections. Know how to work with HashMaps. Creating hash
maps, passing them around, iterating over their keys, etc, is going to be a
huge portion of your life.

Then start learning Spring, Hibernate, and the rest of the J2EE alphabet soup.
You don't have to know everything on day one: if your job needs a lot of SOAP,
read up on SOAP, if they need web services implemented in a reasonable amount
of time, read up on RestEasy, etc etc.

You'll also want to pick up the usual web dev breadbasket if you don't already
have it: HTML, CSS, Javascript, SQL, basic Linux system administration, basic
system architecture, etc etc.

Also: Java code monkeys are cheap, domain experts who can code are expensive,
optimize accordingly.

------
bad_user
> _How do you get started in enterprise Java development? What is the best way
> to gain experience without giving up on the current day job that pays the
> bills?_

Those jobs postings are usually written by HR people that have no idea what
they are talking about.

My advice ... apply for that job anyway, even if you don't meet the
requirements.

But you should be careful ... don't lie about your expertise. In good
companies your interview will be done with other developers. If you are indeed
capable, but you get rejected because you don't meet that checklist, you
should be grateful for that.

------
plinkplonk
"How do you get started in enterprise Java development? What is the best way
to gain experience without giving up on the current day job that pays the
bills?"

Find a small business that needs a web app and build it for them using your
favorite technology stack. That's how I started. Show your interviewers the
code - shuts off a lot of stupid gotcha/trivia questions.

(due disclosure: Though I worked on enterprise dev for 10 years I haven't done
it in the last 8 years or so. I got completely bored and the projects all
started to blur into each other and so I shifted to algorithm intensive
AI/machine learning sw. But it was kinda fun for a while and I worked with
some great people and companies. I recently talked to some of my ex colleagues
and nothing much has changed in enterprise dev.)

~~~
gcheong
How did you make the shift from doing enterprise dev to AI?

~~~
plinkplonk
I got good at mathematics. IMHO, This is the key step in making the shift from
enterprise dev to ML. This is also where I've seen many people making the
attempt give up.

I also worked through some AI/Machine Learning books. I started with Norvig
and Russell's AIMA and open sourced resulting Java code (yes it is a
beginner's book and not tough at all, but it is _very_ well written and a
great starting point).

Then I worked through more narrowly focuses books (and there are _plenty_ of
nice books see lists below). I got involved in the local ML community (mostly
defence labs - Bangalore doesn't have many cutting edge startups/ sw companies
yet).

The _combination_ of deep math and good programming opens many doors (as
Bradford Cross and others point out elsewhere - see Brad's post at
[http://measuringmeasures.blogspot.com/2010/01/learning-
about...](http://measuringmeasures.blogspot.com/2010/01/learning-about-
statistical-learning.html) for a list of resources . I wrote a supplementary
blog post on the books I found useful (I have a somewhat different focus from
Bradford and so ended up working through a different set of books) at
[http://pindancing.blogspot.com/2010/01/learning-about-
machin...](http://pindancing.blogspot.com/2010/01/learning-about-machine-
learniing.html)).

It helped that I didn't know I was not supposed to do such "crazy" things in
my old age and (perhaps rather naively in retrospect) didn't doubt for a
second I could teach myself anything I wanted to. I have zero academic
background comp sci/math/ML etc.

My proudest moment was when a senior researcher I respect highly at first
refused to believe I had no formal education in ML and, when I maintained my
position, said " Well if you don't have a PhD you should think about getting
one. I never met anyone who levelled up as fast as you. If you ever need a
reccomendation for a PhD I'll be glad to give you one".

And this was someone with a few dozen credentialed junior scientists in his
team (some of whom were majorly pissed off that someone with no academic
credentials was in a position to tell them what they were doing wrong and what
to do next but that is another story for another day).

Well enough reminiscing for today. Back to work. My current project involves
Computer Vision and Robotics. Quite a change from the Leasing System From Hell
(Old time ThoughtWorkers will get the joke! ). But I am tackling tough
problems, learning new things every day and often "going where no one has gone
before" programmatically. Life is good.

------
zackola
Build something slightly enterprisey but really simple. Make sure it uses lots
of enterprise buzzwords like XML, LDAP, SOAP, and UML. You could make
something pretty simple that an enterprise client might find useful, like some
sort of process management tool, otherwise known as flowcharts. Generally the
only difference between enterprise software and not is the price tag. Surely
there are exceptions to this.

I'd also suggest that before you dedicate a significant part of your life to
learning something because there is currently a high demand for it in your
geographic area, you may want to consider reading the excellent:

[http://www.pragprog.com/titles/cfcar2/the-passionate-
program...](http://www.pragprog.com/titles/cfcar2/the-passionate-programmer)

Check out the reviews on amazon - might also be helpful to look at reviews for
the out of print My Job Went to India. The passionate programmer is the 2nd
edition of this book I gather.

------
jbooth
Read Effective Java by Josh Bloch -- take those lessons to heart and prepare
to be dismayed at how poorly designed 7 figure "entreprise" software really
is. Then struggle against it for a few years until you say "screw it, my next
job will only involve the Collections API, util.concurrent and nio libraries".

------
umjames
Here's what I did back in 2001. I already knew my way around the Unix command
line, so if you don't, that's obviously a first step. I learned the following
technologies in order:

1\. HTML (basics, you won't need to know every tag) 2\. CSS (basics again, you
can fill in the holes as you come across them on projects) 3\. JavaScript
(bare bones, no frameworks, you'll learn them later for actual projects) 4\.
Servlets (you'll need to also learn a servlet container at the same time, I
recommend Tomcat. You can use JBoss when you understand the basics of Java web
app deployment and configuration.) 5\. JSPs (since they are shorthand servlets
at runtime) 6\. Basic database administration and SQL (I chose MySQL here) 7\.
JDBC (the core of all database access in Java)

At this point, I started to branch out. There's an endless number of web
frameworks out there, I don't know which is the most popular now for Java, but
pick something you like. You'll also want to learn an ORM like Hiberenate.

You will need to know some supporting technologies and some alternatives. For
example, you'll need to know Ant as most Java projects are built using it.
Velocity is a popular alternative to JSPs. Just make sure you don't ever stop
learning new things.

One last bit of warning: If you ever find yourself bored or frustrated with
enterprise Java development (especially if you end up on an enterprise portal
project), don't think you have to stick with it. Always invest some time in
something outside of the technologies you use everyday. That way you'll always
have options.

------
raju
I work using the Enterprise Java stack. This may be obvious, but let me start
here - Java Enterprise involves understanding the spec (essentially the API)
and then understanding how a vendor implements the same (e.g. JAX-RS vs.
RestEasy).

Furthermore - the Java ecosystem is huge. There are multiple vendors for each
API, and trying to find a starting point can prove to be overwhelming.

My advice - start with something small and move from there. The Spring
Framework (which at it's core is merely a Dependency Injection framework and
does not implement a J2EE API) is something a lot of Java shops use to wire
their applications together, and can be used even on a stand-alone Java/Swing
application. The Spring documentation is pretty comprehensive.

After that - try to implement persistence - This will introduce you to JPA
(Java Persistence API and potentially EJB) and a persistence provider (like
Hibernate). Again, go lightweight using a in-memory DB like HSQLDB or H2 so
you don't spend time tweaking a DB).

Then you are ready to take on something a little bit more complex like a web-
app. Look into the Servlet API (this forms the basis of a lot of front-end
technologies in Java like JSPs).

This should be a good starting point. If you need something more, drop me an
email (in my profile) and hopefully I can help.

Good luck.

