what should i learn next?

D

don

hello,

i'm a self-taught java programmer and have completed a few significant
projects. i'm well(-ish) versed in jdbc, jni, swing, java printing
api, concurrent programming (threads), and rmi.

i'm a recent subscriber to java pro and am somewhat boggled by some
of it. i know nothing about jsp, xml, application servers, ide's
(always just use vi), bean containers (and little about EJB for that
matter), java web start, the use of ant, (etc?).

i've read books about best practices (the gang-of-four "design patterns",
"J2EE design patterns", some of the extreme programming books, and others).

my question is, "what next"? what should a decent java programmer (or
software engineer for that matter) be expected to know? how should one
go about learning said topic(s)? being completely self-taught, where
might i expect to be lacking in terms of best practices? i'm sure that
my list of "i know nothing about..." is missing a great deal...what else
should i include? etc...

comments/answers/sources greatly appreciated.

-don.
 
A

Aidan

don said:
my question is, "what next"? what should a decent java programmer (or
software engineer for that matter) be expected to know? how should one
go about learning said topic(s)? being completely self-taught, where
might i expect to be lacking in terms of best practices? i'm sure that
my list of "i know nothing about..." is missing a great deal...what else
should i include? etc...

Hi Don,

The first thing I would do would be to get familiar with Ant. This is
especially useful if you are not an IDE person. Get hold of Hatcher &
Laughran's Java Development with Ant. It's a great book and actually fun to
read and try out the scripts. It will give you some quick exposure to XML
and acquaint you with a lot of interesting technology coming out the Apache
projects too.

Another key tool to get familiar with is CVS. Not Java specific and
definitely not the last word on version control but it is the VC tool that
everyone uses. A solid CLI level understanding of CVS is must for any
programmer.

Consider getting Sun Certified too. Perpairing for the exam really
solidifies you knowledge of how Java really works.

Get hold of the Eclipse IDE and see if it works for you. I'm not much of an
IDE fan myself but like many others I've been converted by Eclipse. If it
doesn't work for you then don't feel inhibited by being a CLI developer.
The combination of ant and vi can still do things that the best IDE's
can't.

Next I would pull down a copy of Apache Tomcat and start developing some
servlet/jsp projects. The O'Reilly books can help here. I also like the
SCWCD book from Manning. Try creating a simple blog tool for example, or
make someone a web site.

If you are inhibited about being self taught round out your knowledge of
programming with Sedgewick's Algorithms in Java 1-5. Essential reference
material for a decent hacker. Know 10% of the material in those books by
heart and you will have more solid CS education the the majority of
graduates I have encountered.

Consider joining an open source project that interests you. One of the key
skills a programmer has to learn is how to deal with the personalities and
project politics that surround software development. OSS projects are very
good at illustrating this. Watch how the communication channels function.
Watch how people gain influence by working hard, reflecting on what they
are doing and building status with good communication. Watch too how the
hot heads usually bring the whole project down around their ears.

Software Design Patterns are not "recipes" and, I would say, are of limited
use to the novice. Really you need to have encountered the problems and
tried to solve them yourself before you begin to develop an instinct for
good design and can appreciate the GoF. I don't know how much experience
you have so I leave it to your judgment how applicable they are to you. The
GoF book is indeed a classic but for the Java programmer beginning to
absorb their insight, I would recommend a Java translation book or a
commentary like Steven Metsker's DP Java Workbook.

Above all, take you time. I think there is a good 2 years material in the
above suggestions. Actually including the Sedgewick books, there is
probably 10 years material in the above.

Good luck.

Aidan
 
T

TechBookReport

my question is, "what next"? what should a decent java programmer (or
software engineer for that matter) be expected to know? how should one
go about learning said topic(s)? being completely self-taught, where
might i expect to be lacking in terms of best practices? i'm sure that
my list of "i know nothing about..." is missing a great deal...what else
should i include? etc...

The list of technologies sounds fine, maybe what you need next is more
experience? Have you considered joining any of the open source Java
projects?

Pan
===================================
TechBookReport: http://www.techbookreport.com
 
J

JavaWebExam

If you do any sort of Java project, I would advise learning Ant next.
It will save you a lot of time in compiling projects, generating jars,
creating JavaDoc, etc. Its free and the documentation is pretty good.
You should see the benefit pretty quickly.
I would also look into JUnit. Its fairly easy to learn, and you can
create unit tests for your existing code to test that it does what it
should. You can then plug this into Ant, so as the tests are run every
time you recompile (making sure everything is in top condition).
Learning the above should set you on your way to becoming a half
decent Java programmer before looking into other areas.
After all this, other items to look up could be..
JSP/Serlvets
Log4J (for logging)
Tomcat (for getting to work with web/jsp/servlet stuff)
JBoss (for J2EE development)

You may also want to think about getting certified as a Java
programmer, etc from Sun. I have started to create a web site on the
Java web exam, but it has links/books to the standard Java Programmers
exam for certification .. you can check it out at
http://www.javawebexam.com

Regards,
Simon
 
?

=?ISO-8859-1?Q?Thomas_Gagn=E9?=

Aidan has some terrific advice, but having played with both Eclipse and
Borland's JBuilder, I think JBuilder is an easier-to-learn-and-use IDE.
You can download a personal edition (may have limits--I dunno) from
Borland's website.
 
?

=?ISO-8859-1?Q?Thomas_Gagn=E9?=

Actually, we're all assuming you asking "What should I learn /about
Java/ next?" If you're not restricting yourself to Java but still want
to stick with object oriented programming, that would be a different list.
 
T

Tim Ward

Thomas Gagné said:
Actually, we're all assuming you asking "What should I learn /about
Java/ next?" If you're not restricting yourself to Java but still want
to stick with object oriented programming, that would be a different list.

Also he doesn't say *why*, so really there's no sensible answer that can be
given.

If it's because he wants to earn a living writing Java code the main thing
he'll need is a couple of years' commercial experience. That really is
pretty essential to have on your CV before you start looking for a job.
 
V

VisionSet

Tim Ward said:
If it's because he wants to earn a living writing Java code the main thing
he'll need is a couple of years' commercial experience. That really is
pretty essential to have on your CV before you start looking for a job.

What counts as commercial experience that isn't a 'job'?
 
C

Chris Smith

don said:
i'm a self-taught java programmer and have completed a few significant
projects. i'm well(-ish) versed in jdbc, jni, swing, java printing
api, concurrent programming (threads), and rmi.

i'm a recent subscriber to java pro and am somewhat boggled by some
of it. i know nothing about jsp, xml, application servers, ide's
(always just use vi), bean containers (and little about EJB for that
matter), java web start, the use of ant, (etc?).

i've read books about best practices (the gang-of-four "design patterns",
"J2EE design patterns", some of the extreme programming books, and others).

my question is, "what next"?

Don,

There are two directions you should start looking in order to become
very effective in the Java language. The first is in improving your
understanding and use of the process of programming itself; the second
is in learning specific technologies that will be useful.

As far as the first goes, some good technologies to learn would be Ant
and JUnit, and possible some more automated testing tools such as
Cactus. It will also be helpful to have studied anything that gives you
a better understanding of how to best use the language (even if it's not
a specific technology or product). Definitely learning about Design
Patterns is good, with the caveat that you should be careful about
looking for a design pattern to solve every problem you have; trusting
your own understanding of using general OO principles to solve a problem
is more important. Learning at least one OOAD methodology would be a
good idea. Reading about refactoring, and especially reading Martin
Fowler's book by that name is good. Reading general books about
programming, such as Josh Bloch's Effective Java, is good.

As far as the second, the most important skill you're missing is the
servlet API. So much Java development these days depends on the servlet
API that you're missing a lot of opportunities without knowing how to
use it. Furthermore, it's so dang simple that it's certainly worth the
week or so that it will take to study it in detail. EJBs is another
skill set that's popular that you haven't claimed familiarity with;
unfortunately, unlike the servlet API, it's insanely complex and
intricate, and may not be worth your time. Other places to look are
JSPs and the Struts framework. You're unlikely to get as much job-
search mileage out of client-side frameworks, though the jobs do exist.

--
www.designacourse.com
The Easiest Way to Train Anyone... Anywhere.

Chris Smith - Lead Software Developer/Technical Trainer
MindIQ Corporation
 
V

VisionSet

Reading general books about
programming, such as Josh Bloch's Effective Java, is good.

I would second that!

I picked it up in the book shop, brilliantly concise.
Undoubtably worth the money, though a fine contender for the best digest in
the shop title there is! Slim & pricey!
Every tip you read, your brain goes 'bing! I thought that, so glad to have
it confirmed', gives your coding a much needed confidence boost.
 
T

Tim Ward

VisionSet said:
What counts as commercial experience that isn't a 'job'?

You can't get a job unless you can show that you've already done such a job
for two years. It's a chicken and egg situation. It's been like this for
decades, apart from brief periods when there's a desperate labour shortage
and anyone who can almost spell the word "computer" gets hired as a
programmer.
 
S

Svetozar Radojcin

Hi,
for example, you can download & study (line by line ) PetStore Demo, from Sun
web site...
 
D

don

Tim Ward said:
Also he doesn't say *why*, so really there's no sensible answer that can be
given.

If it's because he wants to earn a living writing Java code the main thing
he'll need is a couple of years' commercial experience. That really is
pretty essential to have on your CV before you start looking for a job.

Thanks to all for the large and fast input. i don't believe i've
ever posted anything that received so much quick attention.

in answer to the above questions (and others), my background includes
a significant amount of programming, double undergrad degrees in EE and
CS and a masters in EE (which essentially was math and programming).
i've been "earning a living writing Java code" for the last couple of
years as an independant contractor for a single client and that's where
most of my Java experience has come from -- self taught and on the fly.

regrettably though, the client in question has no development background
or team so it's hard to get direct feedback on the code and methodologies
used. my motivation for my original question is just to continue
to improve my skills and to pick the technologies which others in the
community feel are important. since i've been working alone, i don't
get the natural input one might get at a software development company or
through a more current CS degree.

knowing that amount of stuff i don't know far outweighs the amount that
i do, i thought i'd get advice on creating and prioritizing the list.

thanx again,

-don.
 
H

Harald Hein

don said:
my question is, "what next"?

You list alot of good things to learn. But what about the following
aspect: Become a domain expert in the fields you are working in. It is
one thing to know all these programming technologies, but it doesn't
help if you have little or no insight into the problems you are
supposed to fix.

All the good system architects that I met were first of all domain
experts. They all had mastered programming, but only as a tool, not as
a means to itself. I have never witnessed that domain expert jobs were
as vulnerable to the economy as programmer jobs. The domain experts
were usually the last ones who got fired.
 
?

=?ISO-8859-1?Q?Thomas_Gagn=E9?=

Mr. Hein has some good advice about become a domain expert. Depending
on where you want to go you may also consider becoming better at OO
analysis and design. Doing so can help your programming regardless
which language you use (voluntarily or not).

Every language can be dove into deeper and deeper. Design and analysis
applies to all of them.
 
T

Tim Ward

Tim Ward said:
in answer to the above questions (and others), my background includes
a significant amount of programming, double undergrad degrees in EE and
CS and a masters in EE (which essentially was math and programming).
i've been "earning a living writing Java code" for the last couple of
years as an independant contractor for a single client and that's where
most of my Java experience has come from -- self taught and on the fly.

regrettably though, the client in question has no development background
or team so it's hard to get direct feedback on the code and methodologies
used. my motivation for my original question is just to continue
to improve my skills and to pick the technologies which others in the
community feel are important. since i've been working alone, i don't
get the natural input one might get at a software development company or
through a more current CS degree.

knowing that amount of stuff i don't know far outweighs the amount that
i do, i thought i'd get advice on creating and prioritizing the list.

Hmm. Well, there's still plenty of scope for guessing wrong without a longer
conversation, but it sounds like what you want and/or need next might be
experience of teamwork, software engineering discipline, etc, ie the
practical engineering and people skills, not theoretical techie skills.
Whilst reading books in these areas is helpful it's no substitute for real
life I'm afraid.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,774
Messages
2,569,596
Members
45,143
Latest member
SterlingLa
Top