What next?
So .. I feel pretty confident with most basic Java tools (as in single process single thread programs that run as a self-contained application .. not contacting any outside resources other than it's own). I think file I/O I still need to visit, but beyond that I was wondering if anyone out there had suggestions for what topics I should look at next? If there was a good order to it. For instance, should I look at sockets before threads, etc etc?
What would you consider to be the next step in learning Java?
[524 byte] By [
JJCoolBa] at [2007-11-27 8:56:58]

look at the questions on this and other forums. What areas do you feel most deficient after reviewing the questions and answers? That's what I'd hit next.
Eh, here's what worked for me:Come up with a project to work on and just learn whatever comes up as you're working on it. Maybe find a book as a nice guide, or browse the API specs.
Hmmm.. Ok then. Thanks you two.
How much experience have you had with the collection framework? I can't think of a project I've worked on that didn't use it: http://java.sun.com/docs/books/tutorial/collections/index.html
Here's some books I'll recommend if you'll be developing web sites rather than just applications in java.
"Thinking In Java" - Bruce Eckel
HTML & XHTML: The Definitive Guide
JavaServer Pages - Hans Bergsten
Programming Jakarta Struts
JavaScript: The Definitive Guide
SAMs Teach Yourself SQL
JDBC and Java
Some book on XML.
Also, visit the Web Tools Platform (WTP) Project (www.eclipse.org/webtools) . Its a free Eclipse Java development tool that has the bulk of the java development IDE market (above even JBuilder). You also might want to install some type of database (Oracle Lite, MySql, etc) on your computer so you have a database to play with (you'll need a computer with at least 2Gbytes of memory).
What BigDaddyLoveHandles said.
Collections are an integral part of programming in Java.
You may also want to investigate database connections.
Most importantly, make sure you're completely comfortable with basic OO principles.
I recall somewhere in my reading, something like - "Objects come together in secret, mate, and then go their separate ways."
This may not be immediately apparent in smaller programs.
But, in larger applications, if you can't see that in your code, you're not exploiting the Java language properly.
Good luck.
Oh yeah, don't under estimate the importance of interfaces.
Message was edited by:
LazarusLong
Laz,What about "A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet..."?
I see the operative words as - "should be".
you'll need a computer
> with at least 2Gbytes of memory).
No. I have Oracle XE on my PC, I also have Derby. I have Netbeans open as well as Eclipse, hMailServer, JAMES mail server and Tomcat running, not always together but sometimes I have a lot of things running and I have no problems. I have a pretty average chip, a single core AMD Athlon 3700 and 1GB of budget RAM and I get by just fine. I don't host my own site or use these for any other reason then learning/testing my applications but this is all you are recommending a DB for this guy. The minimum requirements for some of these maybe on paper look like it is pushing it a little but I have no problems at all.
Don't get me wrong, with a lot going on you will get an improvement with 2GB but you can comfortably manage with half.
> How much experience have you had with the collection
> framework? I can't think of a project I've worked on
> that didn't use it:
>
> http://java.sun.com/docs/books/tutorial/collections/in
> dex.html
I have to say that this is actually the first time I've heard of it, so I think I'll look at that next. My biggest project to date has been a GUI-driven 2-player chess game that involved 37 classes (some being interfaces, exceptions, enums, and events) - but like I said above, it's a self-contained single process single thread application/applet (I programed it to work as both). The book I have been using to help myself learn Java is Core Java 2, Volume 1 Fundamentals (I don't have Volume 2 yet). I like it a lot, though.
Thanks for the input, everyone. I will eventually need to interact with databases, so I'll keep that information in mind also. Right now I have a lot to learn, but I'd like to eventually change profession to this field.
Oh yea - and I'm a big fan of MVC design. ;)
> Eh, here's what worked for me:
>
> Come up with a project to work on and just learn
> whatever comes up as you're working on it
+1
Nothing gets you learning faster than putting things into practice. Little noddy demo projects might well get you up to speed on syntax and basic API usage, but they teach you absolutely zilch about actually designing and writing software. Don't choose anything too ambitious, like an IDE or a compiler (both real noob project attempts) because you'll fail, and possibly lose interest, but make sure it does something useful, and of interest to you
And learn about test-driven development
I'm surprised that first you haven't heard of collections yet and second that you
were able to write the program with using them :-)
Here is the beginning of a list of tools/frameworks/concepts you really need to know. Beginning because I'm sure it will be added upon:
1. As mentioned, test-driven development. The JUnit testing framework:
http://www.junit.org/index.htm
2. Logging. Either log4j or java.util.logging
http://logging.apache.org/log4j/docs/index.html
3. XML
http://java.sun.com/xml/index.jsp
4. building tools: Ant and Maven
http://ant.apache.org/
http://maven.apache.org/
> How much experience have you had with the collection
> framework? I can't think of a project I've worked on
> that didn't use it:
>
> http://java.sun.com/docs/books/tutorial/collections/in
> dex.html
Collections are very important. I use them on a daily basis. Be familiar with Lists, Sets, Maps and so on.
Manuel Leiria
> I'm surprised that first you haven't heard of
> collections yet and second that you
> were able to write the program with using them :-)
There's actually a lot of conceptual stuff that I know - just not necessarily the wording that goes with it for Java. I have a bachelors in Computer Science - but at the time I was pretty uninterested in coding as a profession. (Ahh, young kids dreams - I wanted to design games .. not write games. Didn't understand that CS wasn't really the field for design - that's more liberal artsy) As a result, my education in terms of programming suffered because I didn't do it as a hobby. But I still did learn a lot of stuff along the way. *shrug*
As for George's comment - that's actually what my chess program was. I coded it to see if I could do it properly under MVC design .. and then I recoded it to enhance it .. and then I recoded it *again* to enhance it further. At this third version, I think I have it OO-designed well enough that I could alter/enhance it greatly without recoding again. (A lot of you are probably saying "Refactor it!" - but I'm not quite that far in my Java edu-ma-cation yet .. understand the concept, but not the proper way of going about doing it.)
> Here is the beginning of a list of
> tools/frameworks/concepts you really need to know.
> Beginning because I'm sure it will be added upon:
> 1. As mentioned, test-driven development. The JUnit
> testing framework:
> http://www.junit.org/index.htm
I assume test-driven development means providing a section of code with dummy data/input to verify that it works properly?
> 2. Logging. Either log4j or java.util.logging
> http://logging.apache.org/log4j/docs/index.html
> 3. XML
> http://java.sun.com/xml/index.jsp
> 4. building tools: Ant and Maven
> http://ant.apache.org/
> http://maven.apache.org/
I see Ant in eclipse, but I have no clue what it's for yet. XD
I'm going to have to bookmark all of this stuff. heh.
Thanks.
> I assume test-driven development means providing a section of code with
> dummy data/input to verify that it works properly?
Here's a good link:
http://www.agiledata.org/essays/tdd.html
<quote>
TDD completely turns traditional development around. Instead of writing functional code first and then your testing code as an afterthought, if you write it at all, you instead write your test code before your functional code. Furthermore, you do so in very small steps one test and a small bit of corresponding functional code at a time. A programmer taking a TDD approach refuses to write a new function until there is first a test that fails because that function isnt present. In fact, they refuse to add even a single line of code until a test exists for it.
</quote>
> > I assume test-driven development means providing a
> section of code with
> > dummy data/input to verify that it works properly?
>
> Here's a good link:
>
> http://www.agiledata.org/essays/tdd.html
>
> <quote>
> TDD completely turns traditional development around.
> Instead of writing functional code first and then
> your testing code as an afterthought, if you write
> it at all, you instead write your test code before
> your functional code. Furthermore, you do so in
> very small steps one test and a small bit of
> corresponding functional code at a time. A
> programmer taking a TDD approach refuses to write a
> new function until there is first a test that fails
> because that function isnt present. In fact, they
> refuse to add even a single line of code until a
> test exists for it.
> /quote>
But don't mistake test-driven development for a testing process, it is most definately a development process. A by-product of writing unit tests is, your code becomes cleaner and more modular. Done properly, writing tests doesn't feel like testing in any way shape or form
