Welcome to the Slashdot Beta site -- learn more here. Use the link in the footer or click here to return to the Classic version of Slashdot.

Thank you!

Before you choose to head back to the Classic look of the site, we'd appreciate it if you share your thoughts on the Beta; your feedback is what drives our ongoing development.

Beta is different and we value you taking the time to try it out. Please take a look at the changes we've made in Beta and  learn more about it. Thanks for reading, and for making the site better!

After Learning Java Syntax, What Next?

timothy posted more than 4 years ago | from the nice-hot-bath dept.

Java 293

Niris writes "I'm currently taking a course called Advanced Java Programming, which is using the text book Absolute Java, 4th edition, by Walter Savitch. As I work at night as a security guard in the middle of nowhere, I've had enough time to read through the entire course part of the book, finish all eleven chapter quizzes, and do all of the assignments within a month, so all that's left is a group assignment that won't be ready until late April. I'm trying to figure out what else to read that's Java related aside from the usual 'This is how to create a tree. This is recursion. This is how to implement an interface and make an anonymous object,' and wanted to see what Slashdotters have to suggest. So far I'm looking at reading Beginning Algorithms, by Simon Harris and James Ross."

Sorry! There are no comments related to the filter you selected.

How about the obvious... (5, Insightful)

SerpentMage (13390) | more than 4 years ago | (#31217942)

How about writing code????

Learning the theory is good, but writing code is very important..

Re:How about the obvious... (5, Funny)

weicco (645927) | more than 4 years ago | (#31217978)

Learning the theory is good, but writing code is very important

That or you could become a project manager.

Re:How about the obvious... (3, Funny)

GPSguy (62002) | more than 4 years ago | (#31218124)

FInd something that needs writing. Write it. Debug it. Test it and debug it again.

Disclaimer: I am now a project manager. You can slow down the disease but you can't stop it.

Re:How about the obvious... (1)

SnuffySmith (780790) | more than 4 years ago | (#31218040)

Smartass answer: typing, lots and lots of typing (it's funny because Java is so verbose. It ain't XSL, but dang.)

Non smartass answer: typing, lots and lots of typing. The thing that I had to do with Java was do projects that forced me to learn Java libraries and idioms. If you build a web app that uses a database, and does some disk IO, you'll learn a lot about how Java is used.

Also, I recommend Eclipse if you're looking for an IDE. And get familiar with the Java libraries available from Apache.

Do we really want him writing code? (-1)

Anonymous Coward | more than 4 years ago | (#31218102)

I'm not trying to be mean or disrespectful to the submitter, but there are a lot of people who are writing code today who shouldn't be.

Now, maybe he's just learning Java as a hobby, and that's fine. Maybe he doesn't plan on working on any significant software systems. If his code will never see the light of day, then he should of course be writing some.

I just don't want him to get the idea that because he took a college course and read a couple books that he's a Java programmer ready for the Big Leagues. These are the kind of people who make it hell for those of us who bothered to get a proper Computer Science background, and then spent many additional years learning our craft. Just because somebody can use a saw it doesn't make them a carpenter, and just because somebody can plunge a toilet it doesn't make them a plumber.

I've spent more time fixing shitty code written by people with a knowledge and experience base like his that I have spent writing actual, productive code.

Re:Do we really want him writing code? (5, Insightful)

ammorais (1585589) | more than 4 years ago | (#31218364)

I agree with you about the shitty code out there. I simply can't agree with anything else you've wrote.
Why do you assume that only people with Computer Science background should be writing code? Your post also just assume that because he is a security guard, that he just should write code that would never see the light of the day. That's plain stupid you know.
The submitter already told me two thing with his article. First is that he truly loves programming, and second is that he is able to self study any language without the need of a course where he could ask many questions about issues he didn't understood.
That's more than I find in many people with a computer related education. Your computer science background can teatch you important concepts, and the right way to do things. It can be a valuable and important background. It can't teach you how to be creative with your algorithms, and how to be smart enough to write complex programs.

Re:Do we really want him writing code? (1)

timeOday (582209) | more than 4 years ago | (#31218594)

The other thing an education in C.S. does not give you is the social aspect of code development, i.e. working in a team. In practice, a lot of coding is having you advocate and defend your design, and/or conform to others' designs when it doesn't go your way, and working with large pre-existing code bases.

Schools are aware of this and they do try, but IMHO it just can't be done for real in that setting.

Getting involved in an open source project over a significant period of time is a better way.

Re:Do we really want him writing code? (2, Insightful)

DavidR1991 (1047748) | more than 4 years ago | (#31218390)

Although I get what you're saying, I think it's a bit harsh too. Everyone starts somewhere. Everyone writes crap code when they start. The key thing is, the more you do it, the more you learn, the better you get.

I don't know whether there are any other self-taught coders such as myself who can back this up, but personally I've found that half my learning was done before I even reached university - learning that code isn't about cool routines. It's an operation of keeping things simple, making it so you need to think the smallest amount to understand what's happening. That design is paramount. CS has so far been (a still enlightening) mathematical cherry - but on a cake of practical experience I had prior to university.

So I suppose what I'm saying is that, given enough time and experience I would not say CS is strictly necessary. And at the same time, in some cases, CS as a course actually does a whole lot less than what people think it does. You need to expand beyond the academic experience to be useful, even if you do have CS

Re:Do we really want him writing code? (1)

ammorais (1585589) | more than 4 years ago | (#31218522)

I don't know whether there are any other self-taught coders such as myself who can back this up

Yes there are plenty around to back you up. And I'm one of them. And I do a Pepsi-challenge with my code, with many out there with computer science degrees.

Re:Do we really want him writing code? (5, Insightful)

daveime (1253762) | more than 4 years ago | (#31218498)

What a load of tosh. So you need a CompSci degree to be a professional coder ?

I've just finished a 9 year employment with a company that was based not on degrees, CVs or other paperworks, but on the basis of a successful 6 week freelance project back in 2000. I should point out I'm completely self taught, no formal training whatsoever.

Coding has nothing to do with language or syntax, but upon having an analytical mind. Breaking down a problem into it's bare elements, and knowing how to make those elements work together is everything. There's plenty of CompSci grads who can parrot off the functions and procedures available in NET or JAVA, but haven't got the first clue how to apply those to the problem at hand.

Re:Do we really want him writing code? (2, Interesting)

Greyfox (87712) | more than 4 years ago | (#31218598)

Right! Just because you have a degree doesn't mean you magically crap daisies and good code. I've met plenty of programmers with advanced degrees in Computer Science who couldn't tell me how to implement a linked list, or when one would be an appropriate choice over a hash table. I'd take someone with a high school diploma who enthusiastically engages me in the interview and actually thinks about my questions over some guy with a master's in CS who treats the interview like an odious chore he has to perform with me as an obstacle between him and a fat paycheck. Too many colleges have given complete jackasses a piece of paper for that paper to hold much value in my eyes.

So yeah, go forth and write code wherever you think it will be cool. Work on an open source project or two that you can point me at, or find a company with an entry level programming position -- there are plenty of them around! Do it because you like it and you'll do all right.

Re:Do we really want him writing code? (1)

CockMonster (886033) | more than 4 years ago | (#31218658)

Being able to parrot off a language's APIs doesn't make you a Computer Scientist. Being able to write those APIs makes you a Computer Scientist.

Re:Do we really want him writing code? (2, Insightful)

AlecC (512609) | more than 4 years ago | (#31218570)

I would say that he is dong his best to rectify exactly the problem you raise. He seems to be well aware that simple knowledge of the language syntax is not enough to qualify to use the language, and is asking how he can rectify his lack of experience. I give kudos to him for being as aware of the problem as this, and more kudos for seeking out a place like /. to learn and to ask the question he has done.

I would say that I am more self taught than academically taught - nearly forty years ago. And I have shipped a lot of systems used by a lot of users by choice, so my code cannot be that shitty.

Re:How about the obvious... (0)

Anonymous Coward | more than 4 years ago | (#31218116)

fuck off, we don't need no academic sit around the board room and masturbate over specification programmers thanks!

Re:How about the obvious... (0)

Anonymous Coward | more than 4 years ago | (#31218148)

Writing code is boring, go for syntax, how about lisp syntax!

Re:How about the obvious... (2, Insightful)

twistedsymphony (956982) | more than 4 years ago | (#31218196)

How about writing code???? Learning the theory is good, but writing code is very important..

I agree with this... pick a project, dream up some application and build it. If you have something in mind that's great but if not just do something simple like maybe building a tick-tack-toe or checkers game, or building a database application for your DVD collection or something along those lines. It doesn't have to be an app that you'll use but getting your feet wet with a real project is invaluable to the learning experience.

Re:How about the obvious... (4, Informative)

SnapShot (171582) | more than 4 years ago | (#31218584)

If you can't decide on a project, yet. I'd recommend two books: Java After Hours (perfect for a security guard) and Wicked Cool Java. They're both the same basic format, each chapter exposes you to a new library. Wicked Cool Java covers more ground, Java After Hours is a little more detailed for each project.

Re:How about the obvious... (0)

Anonymous Coward | more than 4 years ago | (#31218224)

Sun Certification? SCJP, SCWCD.
Spring MVC cerificifactions.
Maybe architect.

More then enough to do.

Re:How about the obvious... (0, Offtopic)

MacroSlopp (1662147) | more than 4 years ago | (#31218484)

Practical applications are the best way to learn. I'd suggest automating your job. A webcam and a computer controlled Taser would be a great platform for making your life easier.

Think about what you want to do (2, Interesting)

evilklown (1008863) | more than 4 years ago | (#31218526)

It may be too early in your education to know what you want to do in your career, but I would start looking in to areas where you can specialize. Client/server architecture will always be a skill that looks good. If you want to go this route, look into learning Java Enterprise Edition. UI design is good to know, but with abundance of WYSIWYG editors that are available now, writing UIs is becoming less of a skill. UI design theory is still pertinent even if the coding skills are going the way of the dodo. Some other skills that will come in handy are writing web services, database interaction (with JDBC and JPA, both good to know), and multi-threading. I would also recommend the book Head First Design Patterns [] to get started on learning how to design software (as opposed to just writing software).

I would agree with what a lot of people have been saying, though. The best thing that you can do is put what you know in to practice. Start out writing a small application for yourself. Write unit tests.Do some code coverage analysis on the code and make sure you are completely covered. You can start with Cobertura [] . Get to know what APIs are available in JSE. I'm assuming that in an academic environment you are using the latest JSE (6), so I would also look into familiarizing yourself with JSE 1.4. There are some major differences between 1.4 and 5 (and not a whole lot of major differences between 5 and 6), and if you are working on legacy code in the future, it helps to know what differences there are. Write an app in whatever you are used to using, write it again with JSE 1.4. Check out an open source project and debug it. Get code coverage on the project and write tests to cover more lines of code. Most OSS projects would be happy to integrate tests that increase their code coverage. Look through the bugs that have been logged against the project. Pick something small, fix the bug, and submit patches. Get familiar with build systems like Maven 2 [] or ANT [] . That should keep you busy until next semester.

What's next? (5, Insightful)

GrahamCox (741991) | more than 4 years ago | (#31217944)

Program something for real. Be goal-oriented. No amount of working through exercises teaches you programming for real.

Re:What's next? (0)

Anonymous Coward | more than 4 years ago | (#31218620)

Program something for real. Be goal-oriented. No amount of working through exercises teaches you programming for real.

E.g., some open-source project. This way, where you're being interviewed about your code, you can point to actual commit messages where your programming was accepted.

How about gaining experience? (1)

ILoveCrack83 (1244964) | more than 4 years ago | (#31217948)

Re:How about gaining experience? (2, Interesting)

Nerdfest (867930) | more than 4 years ago | (#31218514)

After that, find an open source project that interests you and try to participate. The comments and help you get from more experienced members of the team (code reviews, really) will greatly improve the quality of your code. It's one thing to write code that works, and another thing altogether to write code that is maintainable and efficient. I'm making an assumption here that you can find a project willing to take the time to help you as you help them.

If you have a lot of time on your hands (0, Redundant)

Rik Sweeney (471717) | more than 4 years ago | (#31217950)

unlearn it and learn it again!

Ugh (0)

Anonymous Coward | more than 4 years ago | (#31217954)

Now it's time to take the training wheels off and learn a real language.

Give Scala or Clojure a shot (1)

Megaweapon (25185) | more than 4 years ago | (#31217958)

Or, you know, write some code.

Implement some of the exact same things in C (5, Interesting)

antifoidulus (807088) | more than 4 years ago | (#31217960)

While I do regularly program in languages like Java that have automatic garbage collection, but in my experience you need to actually do some time in a language(C being the most common) that does not do this for you. While this is anecdotal, I've found that people who have never actually programmed in a low level language tend to regard object allocation and deallocation as "magic" and thus write poorly performing code.

By implementing a lot of the same things in C you can get a much better feel for what is actually happening underneath the covers.

Re:Implement some of the exact same things in C (4, Insightful)

chthonicdaemon (670385) | more than 4 years ago | (#31218242)

Another layer of abstraction is easy to dismiss as encouraging sloppy thinking and "magic", but C encourages this in the same way with anything allocated on the stack. Dynamically typed languages get some heat for not forcing users to decide on the type of their variables. By writing the same program in many different languages, you get a much better feel for what is part of the problem itself and what is part of the stuff you need to do for the computer. From hand-crafted machine binaries (preferably avoiding any operating system "magic") to a quick shell script, it's all a question of where your problem space is. I'm all for learning multiple languages, but abstraction is really a good thing, so I would add "implement the exact same thing in Python/Ruby/Lisp" to that as well.

Re:Implement some of the exact same things in C (0)

Anonymous Coward | more than 4 years ago | (#31218666)

Another layer of abstraction is easy to dismiss as encouraging sloppy thinking and "magic", but C encourages this in the same way with anything allocated on the stack. [...] From hand-crafted machine binaries (preferably avoiding any operating system "magic") to a quick shell script, it's all a question of where your problem space is. I'm all for learning multiple languages, but abstraction is really a good thing, so I would add "implement the exact same thing in Python/Ruby/Lisp" to that as well.

A good programmer will understand how things work. Doing a small-ish project with assembler and (say) a PIC will help you get to know how CPUs actually work. Next, C helps you with with things like pointers (memory allocation) and other fairly low-level OS features that are brushed under the rug by more recent languages.

Now, if the OP is just starting out, this may be a bit too much at once. He (?) should focus on getting familiar with Java, and presumably getting a good job where he can use it. But long-term, if he wants to improve his "marketability" for future jobs, and perhaps to learn more about the craft of coding for its own sake, it'd be best to explore other languages.

Obviously... (5, Funny)

FShort (91112) | more than 4 years ago | (#31217962)

being a night security guard, you should start looking around for all those anonymous objects skulking around the building.

Re:Obviously... (1)

Opportunist (166417) | more than 4 years ago | (#31218182)

How does that improve your coding skills?

Priorities, man!

Re:Obviously... (3, Funny)

TheSpoom (715771) | more than 4 years ago | (#31218298)

the wind through the trees
like a quiet jet engine
it says to you: whoosh

Re:Obviously... (1)

Deltaspectre (796409) | more than 4 years ago | (#31218640)

Burma Shave

Re:Obviously... (1)

deniable (76198) | more than 4 years ago | (#31218470)

Be especially careful of the polymorphic ones. You don't know what they'll encapsulate. If the last guy wasn't on the ball you could inherit some real problems.

Best way to learn: (4, Insightful)

DavidR1991 (1047748) | more than 4 years ago | (#31217964)

Pick something simple to build (i.e an application) and build it. You'll learn huge amounts just from filling the gaps in your knowledge in order to achieve what you want.

Re:Best way to learn: (1, Insightful)

Anonymous Coward | more than 4 years ago | (#31218198)

One thing that us programmers often fail to suggest to newbies is...

Learn project management skills!!!

You may be able to write some of the most elegant, stable, and fast running code on the planet... But if you have a problem doing the following

- Making a schedule
- Estimating time to do tasks

Your personal programming projects will rot it "never-gonna-finish" hell. Take it from first hand experience. Oh yeah, while you're working on your project management skills, now would be a good time to solidify your code commenting skills. You (and everyone around you) will love you for it.

learn something about embedded! (1, Interesting)

slashbart (316113) | more than 4 years ago | (#31217970)

Buy an Arduino or something similar (msp-430) and see how much work it is to actually toggle a LED at a certain frequency, or drive an LCD connected via I2c or something. It's a whole new world. You'll have to learn C (probably) and maybe a bit of assembly language.
Linux journal had a nice introduction article [] on embedded programming.
I've been doing embedded development work for the last 20 years, and am still enjoying it. It pays pretty good, and you'll be far less interchangeable with someone else than your typical Java programmer.

Find an itch and scratch it (2, Interesting)

ytm (892332) | more than 4 years ago | (#31217976)

Write a program that tries to help to solve one of your everyday problems. It mustn't be the best in general, but it should be as good and as well suited for your own needs as possible. It could be something for you personal finance tracking, something for entertainment, a better interface for data that you can download from the web (dictionary? thesaurus?). The most important thing is that the problem must be interesting enough for you to finish the task so you should be able to at least get the software to a certain level of usability. Then write documentation for it.

Projects (1)

CSHARP123 (904951) | more than 4 years ago | (#31217984)

Just reading books on language to learn, only takes you so far. Work on some projects. This helps you to gain understand the intricacies of the language. It helps you understand where you can use certain features of the language efficiently too. Writing code is the best way to learn the language imo.

Effective Java (5, Informative)

sproketboy (608031) | more than 4 years ago | (#31217990)

Effective Java [] by Joshua Bloch. Will give you some deep insights into the workings of the language.

Re:Effective Java (2, Insightful)

pkuyken (801014) | more than 4 years ago | (#31218392)

I'd second this. (And would have modded it up had I had some mod points.) Even a beginning developer can draw some very useful information from Bloch's Effective Java. While you probably won't understand a large part of the details, reading through it will help give an idea of things to avoid and things to use. By going through the book, even if you don't remember all the details, hopefully enough will stick so that you can reference back to the section if you ever have questions regarding a particular detail.

Program something of substance! (1)

fredrickleo (711335) | more than 4 years ago | (#31218004)

I'll echo some of the other sentiment here, program something!

Most of the popular languages these days can all do pretty much the same things as each other, the real challenge is being able to pull it all together and make an application that does something useful.

I would suggest putting together a game. It's a good challenge in your language of choice (in this case java) and a finished game is a good example of your ability as a coder to show to others and proof of your ability to yourself (in case you were doubting yourself).

Explore, experience and expand (1)

Hulker69 (1750562) | more than 4 years ago | (#31218006)

Pick a small project and produce some code for this. Then pick some of the Java technologies (eg. Swing, JEE), learn these and code a project using these. Algorithms are good to understand as are development process techniques (eg. test driven development, UML modelling etc). Oh, and if you find yourself with a few spare moments, multi-threading and concurrency is pretty much required. Then learn another language (.Net, C/C++, functional etc)

He seems to want reading options (5, Interesting)

PCM2 (4486) | more than 4 years ago | (#31218018)

I see a lot of posts suggesting that he start writing real programs. That's good advice, but it might not answer the question. The submitter says he works as a security guard. As such, sitting focused at a laptop writing code might not be an option. He seems to just want suggestions for books to read. As such, I reckon a book on algorithms wouldn't be a bad direction to head (provided he's got enough math to follow along).

The only problem I see is that if he's taking these classes for college credit or working toward completing a certificate, he's going to be really bored with the later classes when he actually has to take them if he reads all the books beforehand. Either that, or he'll know enough to be dangerous and he won't pay sufficient attention to the guidance from his instructor.

Re:He seems to want reading options (1)

cptdondo (59460) | more than 4 years ago | (#31218284)

Talk to the instructor. If the OP is that far ahead, and the instructor is worth a shit, then s/he will work with the OP to do independent study and more credit.

Read more, code more (4, Interesting)

Dun Kick The Noob (904001) | more than 4 years ago | (#31218024)

Read more if you want, MIT's open courseware is great, donate if you can, i do. they are good refreshers.
There are pretty standard student projects, (like game of life, notepad, msg servers,)
You might want to move into more advanced topics, like javax or concurrent stuff like RMI

Algorithms are great to learn but sadly Ive had little chance to use em in real work, would'nt put too much stock in them for returns.
In any case, any algos you need most likely you will learn on the job, if something slows too much.
They are however fundamental if you want to be a proper engineer.(In my opinion anyway)

If you want real world experience, go look at the freelance websites and just copy down the specs and attempt yourself.
Dont need to bid, but these provide a snapshot of EASY projects in real jobs.
I also have some 100% real world work projects assigned to me if you want to do for free........ just kidding

Sandeep (1)

sandy8925 (1681974) | more than 4 years ago | (#31218030)

Get some practice ! Write real code. Look up some opensource Java programs and study the source code. Try to make your own program or modify an existing one. If you're interested in programming for cellphones you can try J2ME.

You've got one third of it (5, Informative)

AdmiralXyz (1378985) | more than 4 years ago | (#31218032)

In my experience, there are three things you have to do when learning a new language, after you get the syntax:
  • Learn some common algorithms, and how to implement them in that language. Sounds like you've got yourself an algorithms textbook, which is great. Just make sure you're understanding why they work, not just going through the motions.
  • Learn the standard library of the language. Obviously Java's is enormous, and there's no way a human being could possibly keep it all in their head, but you should check out the Java API [] and get a sense of, "what things are available to me in case I need them?" Java in particular makes it very likely that something you're trying to write already exists in some form, and there are a lot of programmers who waste valuable time reinventing the wheel every day because they don't know enough about the standard library (the flipside though, is that, just like algorithms, you need to make sure you know what you're using. Way too many programmers throw in a java.util.LinkedList without knowing what the hell it is)
  • Experience! Write real code! This is the most important thing of all. The best experience comes from working in a group on a larger project, although of course that's not always possible. Try writing some larger programs on your own, making sure you keep your good design principles (use interfaces, abstraction, modularization, etc.) from start to finish. When you feel you're ready, there are plenty of open-source projects on Google Code in Java: download one and tinker with the source until you understand it. Hell, join the project if you're ready.

Good luck, and godspeed.

Re:You've got one third of it (2, Interesting)

WankersRevenge (452399) | more than 4 years ago | (#31218448)

The algorithm textbook that he is using is a great read provided he does the exercises at the end of each chapter. The great thing about the exercises is that they challenge the reader to tackle the algorithm from a different perspective. So, if an algorithm is demonstrated using a recursive method, the book asks the reader to rewrite it using an iterative method which is an excellent way to learn.

I actually read halfway though the book skipping the exorcises, figuring they were too easy and I was wasting my time. When I started doing them, I realized how much I didn't know so I started back at the beginning and filled in all the gaps which really expanded my knowledge on the subject.

Write programs... (1)

bradley13 (1118935) | more than 4 years ago | (#31218036)

As an instructor, I always tell my students: the only way to become a good programmer is to write programs, more programs, and even more programs.

Make up ideas: write a program to keep track of your music, write a game program, write a program to track recipes. It almost doesn't matter. The important thing is to make the programs a bit challenging. Want to track your music? Store the objects in a file using Java Serialization - a great reason to learn about serialization. If you already know about that, then store the books in a flat-file using Random-I/O. Writing a game? Learn how to use sockets by making it a network game.

Find problems that are fun, and use them to discover and learn about more and more aspects of programming.

Re:Write programs... (0)

Anonymous Coward | more than 4 years ago | (#31218106)

And when you need to learn new API, you first read related tutorial at or other java sites, if one exists. It makes the whole thing a lot easier.

What he said. (1)

Tibia1 (1615959) | more than 4 years ago | (#31218046)

I don't know a whole lot about programming, but I've already got some game ideas on the horizon, and maybe I'll contribute to some open source projects along the way. Just find something that interests you and you'll be coding in no time.

Take the Sun Certified Java Programmer Test (1)

cyranoVR (518628) | more than 4 years ago | (#31218054)

If anything, it will prove that you truly know Java syntax. A score of 100% can't hurt.

Re:Take the Sun Certified Java Programmer Test (1)

(H)elix1 (231155) | more than 4 years ago | (#31218402)

The Sun (now Oracle?) Java developer's certificate does show a fair bit of proficiency with the language. You really do need to have more than just a passing familiarity to get it. For me, one of the most challenging parts was things that were technically legal (and would work), but were very far from anything I would call best practice. The second bit was the breadth of the API it covers. I've been doing server side Java since servlets were born, with a heavy concentration the application server/EE side of the fence. Once I experimented with a client side application, so had to spend some time brushing up on little used (in my dev work) libs like Swing, AWT, etc.

Anyhow... this cert was real work. Short of many years under your belt, this really will make a difference at interview time - be it already knowing the same sort of snarky Java questions, or just getting a pass on the language.

some suggestions (0)

Anonymous Coward | more than 4 years ago | (#31218078)

collections - write code around those and learn what each of them stand for and understand them -- HashMap / TreeMap / LinkedList/ArrayList and the newer ones (will help you think in terms of these data structures)
Concurrent programming - pick up the java concurrent programming book - look around the wait / notify / notify all and then move on to Executor Service / Future tasks etc in java.util.concurrent
NIO - selectors / channels (again simple concepts need to write code)
Read Java Performance programming related books / material

Any retard can write code in java. Writing high performance clean bug-free code is much more difficult (specially in java since the entry barrier is so low).

Time to get out. (0)

Anonymous Coward | more than 4 years ago | (#31218090)

When the shoeshine boys talk about the stock market - it's time to get out.

When the security guards start learning programming - it's time to get out.

Time to get into real estate.

Next steps (1)

thatjavaguy (306073) | more than 4 years ago | (#31218096)

If step 1 is Learn the language then step 2 is Learn the idioms.
Get a copy of Effective Java, read it, understand it and you will be half way there.

In my java class, we do... (0)

Anonymous Coward | more than 4 years ago | (#31218122)

I am java teacher (since 10 years now).

My students often give me the feeling to be in the situation you describe. They understand so well the theory, but it looks like they don t see the point.
So the best I can do after teaching them the OO stuff (inhreitance, intercace, polymorphism.....) is to build a real application.

Ask yourself a real problem. For instance we are actually doing a space invader game in 2 home works, the first one is for data structure and game rules, the second will be about user interface.

Enjoy java, it s a wonderful language, solve problems.
(I am actually learning C++ too and coding a jpeg algorithm.. just to see)


You know the syntax... (1)

Eskarel (565631) | more than 4 years ago | (#31218126)

now learn what to do with it.

Learn JEE. Learn some hibernate, learn struts, learn about containers, and servlets, and beans. Learn about JDBC and relational databases. Learn JPA and see how great it is and how crap it is. Then actually do something with it.

Another Language, Design Patterns, Java EE (1)

ChaseTec (447725) | more than 4 years ago | (#31218138)

Is this your first language? I'm a Java developer but I believe all Java developers can benefit from knowing another language. Personally I wish everyone knew a little assembly. I've met Java developers that couldn't keep kilobytes, megabytes, and gigabytes straight because they never learned about the hardware their applications ran on.

Syntax is one thing, designing code is another. There are several design pattern books you might want to look at. There is the Head First Design Patterns book and the traditional Gang of Four Patterns book. Code Complete, The Mythical Man Month, and Patterns of Enterprise Application Architecture are some other books you might want to look into.

Don't forget about Java EE and the other frameworks. You've got dynamic websites (Servlets and JSPs), database applications (JPA and Hibernate), EJB 3, CDI (WebBeans), etc. You might want to start with the "Java EE Tutorial" that is on the Sun/Oracle website. Start with either Java EE 5 or 6. You'll need an application server; for EE 6 this will be GlassFish, for EE 5 you could use GlassFish or JBoss AS. There are frameworks that are outside the official standards like Spring and Struts.

You also might want to look for a local Java Users Group (JUG) as they present topics that you might find interesting.

My top 4 (5, Informative)

Ianopolous (1080059) | more than 4 years ago | (#31218154)

There are several very important books: 1. Effective Java - Joshua Bloch. This is by far the most important one. 2. Java, Concurrency in practice - Goetz 3. The art of multiprocessor programming - Herlihy and Shavit. This is much more theory oriented, but essential to become an excellent multithreaded programmer. 4. Java Puzzlers - Joshua Bloch and Neal Gafter. This is quite a fun book - lots of Java Conundrums Enjoy!

Start writing software (1)

crt (44106) | more than 4 years ago | (#31218172)

The only real way to learn a programming language is to use it in a real project. Come up with something you've always wanted but can't find and make it happen. That's the great thing about programming. You'll learn more doing that than you ever will from a book.

Other Things... (5, Insightful)

Mongoose Disciple (722373) | more than 4 years ago | (#31218178)

My assumption is that at some point you'd like to try to make a living as a Java developer. If that's not the case, please disregard this post.

How much do you know about databases? If the answer is nothing, you'll want to get up to speed on at least basic SQL. Pretty much every Java project you ever work on in the business world will make use of a database. 80-90% of the syntax is pretty standard from database to database, although nearly every professional Java project I've worked on used Oracle.

While not every Java project is a web project, it wouldn't hurt to have a basic understanding of HTML, CSS, and at least one web server commonly used to host JSP such as Tomcat or WebSphere. Even if these pieces don't end up being your job, the basics are helpful.

There are all kinds of popular Java frameworks meant to solve different problems. Try to get a basic sense of what's out there and what each of the leading options is good for, e.g. that something like Hibernate is used for data persistence and something like Java Server Faces is more of a presentation technology. (Or whatever's popular now; I haven't worked a Java project in a few years and I'm starting to get out of date.)

Probably you also should start to learn one or more of the common Java IDEs. Eclipse is near ubiquitous, but you may prefer one of the other options.

Good luck!

Earn some money? (1)

jchawk (127686) | more than 4 years ago | (#31218186)

Why not look to a site like and try to pickup a small project? You can do it to make money or you can simply do it to gain experience writing software for other people. This could be a great way to start building your programming resume if you decide to become a full time java developer after completing school. If you were able to successfully complete a few projects before graduation they'll certainly become interesting talking points on your resume and help to set you a part from the other recent graduates. In a tough job market anything you can do helps plus you'll get a chance to see if you really want to work as a programmer without having to commit to a full time job. It will probably be one of the few times in your programming career where you get to pick and choose the projects you work on.

anti-patterns (2, Insightful)

Nightshade (37114) | more than 4 years ago | (#31218212)

The best stuff to read after you think you've got the basics are anti-patterns which show you what not to do. A lot of that stuff can be quite eye opening to read. One of the best books on that topic is Effective Java by Joshua Bloch. Also, search the web for sites like this one: []

Also, not a book per se, but if you do write some code it's possible to learn more by analyzing the code with tools like findbugs [] which will show you a list of things wrong with your code. Even professional programmers can learn something from these kinds of tools.

Go make something (1)

Big_Mamma (663104) | more than 4 years ago | (#31218218)

Now you understand the basics, it's time to put them to a test. Reading books will only get you this far, the rest is experience, experience and more experience.

The more you apply what you've learned, the more you'll discover. If you wanted to create a book indexing application, you'll discover that you'll need to master either Swing or SWT, that you need some kind of storage and learn how to use an flat files for storage or use ORM like Hibernate or write your own SQL queries in JDBC and how to setup a database like PostgreSQL. If you go for an web interface - learn about JSP & containers like Tomcat. Want to do stuff in 3D? Learn how to use OpenGL and the JOGL bindings and read up on basic linear algebra.

Or you could jump from Java to another language. Don't get me wrong - in my opinion, Java is still one of the best designed language, and a huge plus is that you can step through everything to see how it works, right down into the C++ code powering java.nio, but it's a lot of work to get some results on the screen, if you don't count System.out.println(). ActionScript is quite a bit easier to apply, you can get going and write a small game in no time. Python + Django is the perfect web framework for starters, it's almost as powerful but much much easier to learn than JSP+Taglib with their arcane .xml configuration files or plain Servlets.

Once you have seen a few languages and discover their strengths and weaknesses, you'll be able to apply your skills even better. In a digital world, everything is possible. Go create your own future.

Teach someone else (1)

cephus440 (828210) | more than 4 years ago | (#31218220)

The best way to "know" petty much anything is to teach it to someone else. I never knew Calculus III (even thought I had an A in the class) until I taught it to someone else. Similarly working with my co-workers and explaining something that I think is cool, makes me "know it". So go teach Java to your younger brother, your mailman, or Schrodinger's cat.

There is hope (0)

Anonymous Coward | more than 4 years ago | (#31218238)

You've already seen the lowest depths that man can plunge.

I'd suggest rehab or possibly Python.

Effective Java, Clean Code, then Design Patterns (0)

Anonymous Coward | more than 4 years ago | (#31218246)

Read Effective Java by Josh Bloch. After that, read Clean Code by Robert C. Martin. Finally read Head First Design Patterns.

You don't have to read from cover to cover. Start out by reading chapters that interest you. While it is good to code away for practice, it is good to have this type of information on best practices stored away in the memory banks for later use.

One language down. (1)

Millennium (2451) | more than 4 years ago | (#31218288)

Find some small projects, and write them in Java. Then do this process again in a few other languages: I suggest JavaScript (bonus points if you do the OO stuff in JavaScript without using classes, and don't worry so much about browser-compatibility), Haskell, and either Lisp or Scheme.

The point here isn't so much to learn these languages for their own sake, though that's a nice bonus. These languages will force you to think about programming in very different ways than Java tends to teach people. This is not to say that the Java way is bad -there are certainly times when it's the most appropriate way to go- but it's only one way to attack a problem, when usually there are many. Being able to figure out how to do these same things in such different languages will make you a stronger programmer in all of them.

Time to get into 'software engineering'... (1)

Assmasher (456699) | more than 4 years ago | (#31218300) that you have one of the tools for your toolbox.

As you appear to be realizing, learning a programming language is like having a particular type of hammer. Each computer language you learn is another type of hammer. You don't have to have more than one hammer, but since some hammers are better some types of construction than others - the more hammers you have (within reason) the more flexibility you have in building things.

Congratulations on absorbing some of the aspects of Java, keep shining that hammer and get ready to learn how to build a doghouse. How ambitious you are should determine what type of doghouse you're going to build first (I recommend knocking out a few doghouses before moving on to small sheds.)

A good doghouse to start with would be (with a Java hammmer) a calculator (try an applet.) You have a UI, you have a simple to understand feature set, you don't have to think to much about the spec (this time), and you can leave persistence to your next doghouse.

Doghouse number 2 could be something like a very crude text editor with (if you feel adventurous) a pluggable UI (through the classloader) and one that not only loads/saves edited files, but has undo/redo capabilities, and most importantly saves it settings in an options file of some sort (yes, there are other ways to do this but it is good practice for learning persistence, dirty flagging, the impact of your choices when creating your own little file format, et cetera.)

Doghouse number 3 should be your first foray into network related code. Write a simple GUI FTP client. If you're feeling adventurous, not only make the UI plug-in capable (again through dynamic classloading or through another method if you wish), but make sure that the user can stretch/shrink the UI. Make sure the user has persisted settings/options. When writing your UI code, try to make it possible for the user to switch UI languages on the fly. This means create your own format for loading/saving this language data.

Now, there are shortcuts to pretty much all of the aspects of these little mini-applications, but implement these things yourself. You're not doing these things for the purpose of learning how you should implement a particular feature for a particular future professional application, you're doing these things so that you gain experience in realizing how different aspects of applications meet and interact (especially using a pluggable GUI, this will really force you to separate your codebase better.)

Once you've written a workable little ftp client, you're ready to take those basic construction techniques are start building sheds. What those sheds are are pretty much up to you, but pick something that interests you.

Once you can handle a shed or two, you can tackle a house, analogy beaten into ground, et cetera, ad nauseum.

Like some of the earlier posters said, it's just like becoming a writer. You can have a great typewriter, know all the rules of grammar, have tons of vocabulary at your fingertips, but you MUST WRITE to become a good writer. You do software engineering to become a good software engineer. It's that simple. Stuff will go wrong, you'll f*** things up, you'll paint yourself into corners. You'll make stuff you think is crap, but every single time you do it you make sure that you're learning something about why things ended up the way they did (good or bad.)

Good luck!

Java Puzzlers (5, Interesting)

IamTheRealMike (537420) | more than 4 years ago | (#31218306)

This might be a bit heavy for somebody as new to programming as you, but Java Puzzlers [] is a great book for Java devs of all skill levels to read. It's a series of small programs that screw up in ways you wouldn't expect, often related to bizarre gotchas in the design of Java itself. Newbies might not understand every puzzle, but generally it'll give you an appreciation for the fact that no tool is perfect, and insight into what sort of bugs you might find yourself writing in the real world.

How about this: (0)

Anonymous Coward | more than 4 years ago | (#31218316)

There are several curricula of university CS courses online. Look what they have to offer. Basics, algorithms, sure. Binary logic, discrete math, matrix algebra are all good to know. Plenty more topics where that came from. Pick and choose, lather, rinse, repeat. Read more books.

Oh, and practice, practice, practice. It takes about ten thousand hours or about ten years to get good at what you do. Programming is like pouring your thoughts in a mold, making them do stuff. You'll make mistakes. Learn to debug. Read others' code, most of which will be so-so to very bad. Learn from others' mistakes as well as their successes. If you plan to earn a living writing java, learn to laugh at TDWTF, you'll need it.

Here's one (1)

bytesex (112972) | more than 4 years ago | (#31218334)

Build a JVM [] in it.

Learn more than the syntax - Think in Java (1)

SuperKendall (25149) | more than 4 years ago | (#31218352)

Design books are good, but I think you may have trouble getting much from them until you go through a few real programs and see what problems can occur that design patterns can address.

One great book if you really want to understand Java at a much deeper level, is Thinking in Java [] by Bruce Eckel. It's really a great place to start, to understand how to use the language the way it was meant to be used - and that in turn will make your life easier, sort of like not putting your shoes on the wrong feet even though you can technically make it work.

lol ex-trucker (0)

Anonymous Coward | more than 4 years ago | (#31218384)

haha, i've said it many times: java is the language for ex-truckers and drug addicts who want a job in the IT :D

srsly, kill yourself. you're worthless!

Some stuff to learn (1)

devent (1627873) | more than 4 years ago | (#31218400)

From the obviosly start a project or code there are a lot of things to learn from books that aren't java related but are more general for software development.

*learn Patterns, like composite, singleton, factory and so on. *learn the tools available, like maven and ant, eclipse, netbeans *learn project management and UML *learn SCM tools, like git

READ Code (1)

david.emery (127135) | more than 4 years ago | (#31218406)

Grab a piece of open source code that interests you and walk through it. In fact, in contradiction to what some others have posted here, it's better to read other people's code -first- before starting to write it yourself. You'll end up with a much better appreciation for the language and the structure of a program.

You want to look for both 'patterns' in the small ("What does this little chunk of code do?") and structure in the large, e.g. class layout, etc.

Too many people out there produce 'write-only code', just check out []

Check out the job boards (1)

Like2Byte (542992) | more than 4 years ago | (#31218418)

Seriously, check out the job boards. During your investigation you will see what real skills employers are looking for in a JAVA developer. You'll find all kinds of interesting terms to decipher and while you are decoding those you will be introduced to other supporting technologies that support a JAVA development environment that employers are also interested in. Then you can also learn about those.

You are obviously going to find a lot of great info here in this /. article and you should pay attention to most of those. However, by viewing the job boards you will notice how certain technologies will be assembled to blend with one another.

If you don't plan on moving after your education, look only for companies developing with JAVA in your area and learn about the supporting systems they use so you'll have a leg up on them when the time comes that you are able to make the leap from student to developer.

The bottom line is that by seeing what your potential future employers are interested in will allow you to tailor your education appropriately.

Effective Java (1)

AdamInParadise (257888) | more than 4 years ago | (#31218426)

Effective Java, Second Edition, by Bloch. This book is quite unique and can save you a lot of journey time as you travel the path from "beginner" to "expert". I wish it had been available when I started. Caution: it can make you grow a beard and mumble about the advantages of respecting the .equals() contract.

Re:Effective Java (1)

rsk (119464) | more than 4 years ago | (#31218610)

+1 to what Adam said, posted it again below without seeing his reply first. Gave a few other reasons of my own, but *basics* like understanding object equality and hashCode calculation that Adam points out are *excellent* points for this as your "next book" alone, even if those are the only two things you get out of it, that information will serve you again and again and again in Java.

Debug (0)

Anonymous Coward | more than 4 years ago | (#31218436)

Like many others have mentioned writing code is extremely valuable. The reason I think it would be more valuable than simply reading another book is due to the practical debugging experience you will most definitely gain. Learning to debug your code, as well as other individuals, is extremely valuable and will make your development experiences as a whole much more enjoyable.

Good Luck (0)

Anonymous Coward | more than 4 years ago | (#31218438)

I say good luck in two ways: (1) I think it is awesome that you are this motivated to improve your skill set and earning potential, go for it; (2) on the down side, it can be very difficult to break into this market. There are lots of ppl with java skills, data base skills, web skills, xml skills, "other platform" skills (such as IBM iSeries and mainframe) where they do cross platform work or java on mainframe work or conversion work. My work buddy (one of the most skilled I've ever worked with) lost his job when a company had to downsize (thanks Obomer)... and it took him 8 months to find work. He has all of the skills I listed above.

So I say good luck. Learn, Write, Network. Maybe do some small charity computer projects to get "real world" work on your resume.

What do you really want? (1)

vitruvian (1735742) | more than 4 years ago | (#31218458)

timothy, you are a little bit ambiguous about your high level goals. If your goal is to pass a course which is part of a degree plan of some sort then maybe you can focus on other classes. If you just love java and want to know everything about it, then continue on learning from books, java ranch and slash dotters. If your goal is to get a job writing java sooner rather than later, then start in on prep work to become an SCJP. Many employers and recruiters that can barely spell Java will give you more serious consideration if you are certified.

My suggestions.... (1) (760528) | more than 4 years ago | (#31218486)

Im going to assume a java course actually includes coding java... but if its a focussed-on-java type course your probably missing a few very important facets.. So what I would do, in this order is (while trying to avoid system coding as such):

- google java app engine (this is a good one cause it requires almost zero computing resources you own to actually host an application, its good for learning some servlet stuff and has the advantage of not having to learn how to deploy apps into things like tomcat). Its basically just a good place to start for java web stuff but keep in mind, its in the google way.
- Web Apps, i.e. j2ee, java servlets, etc (look at a job ad site and tell me how many ad's you see looking for these - j2ee is no small fish by the way and there are as many ways to utilise it as there are people who code java)
- Now learn some of the common frameworks used with java (struts, etc)
- take a little tour of database and sql, this is pretty critical to alot of java work (mysql is a good, free place to start).

All that will lead you down a path of learning some html, etc, which is a good thing... then:

- Learn some stuff about soap and the various other server-to-server rpc type stuff (quite handy to know)
- Learn some android coding (again from google and ya never know, you might come up with an app everyone wants and never have to find a job cause your rich!)

Next, take a tour of some other languages.... from java you could easily stroll into something like C#, but there are tonnes of languages out there that would give you experience worth having. Ultimately though, with java alot of the time you'll be heading towards web coding. There is some call for gui's and the like but its far less common (though android is making that less true).

Learn higher-level concepts (0)

Anonymous Coward | more than 4 years ago | (#31218508)

Assuming you don't have coding experience in any other languages (you didn't really specify in your post) I have the following suggestions:

* Find a good book on Differential Equations. Although this sounds like boring "math", it really is where binary logic meets traditional math. Of all the courses I took in getting my CS degree, this is the one that I most appreciated as it gave me a solid understanding of logic along with some tools to be more certain that the code I write is actually correct.
* Read and follow along with Eclipse RCP ( This will not only introduce you to the Eclipse IDE and programming platform, but also guide you through creating a fairly interesting application without getting bogged down in lots of gorpy details (that the Eclipse platform handles for you).
* After you get some coding experience, read the Design Patterns book ( This book is widely regarded as the Holy Bible of object oriented programming. It is language-agnostic, and will give you some powerful, higher-level tools to solve common coding problems. Going back to my college experience, this was a textbook we used for the OOP class, which I mistakenly took right after my intro to C++ classes. At that point in my education, I didn't have enough experience confronting and solving real programming problems, and so did not appreciate the concepts it contained. Get it, but wait until you have some coding experience before digging in.

Next step! (0)

Anonymous Coward | more than 4 years ago | (#31218518)

Move on to C++ or C#.

SQL (1)

codepunk (167897) | more than 4 years ago | (#31218524)

A programmer without sql knowledge is like a fish out of water and not very likely employable. SQL knowledge
and working with databases is a must.

Another book recommendation (0)

Anonymous Coward | more than 4 years ago | (#31218560)

i recommend "Refactoring to Patterns" [] It's really down to earth and shows how to apply design patterns on existing code in java.

Solve A Problem (1)

curmudgeon99 (1040054) | more than 4 years ago | (#31218568)

Writing software is about solving problems. If I were you, I would try to come up with some project that you can build. Coming up with an idea, refining it, and then going through the actual process of working out the inevitable kinks in any technology stack--that's the best thing you can do. Build something big, something where every component forces you to learn some new sub technology. You are now in the Java business. Java is your hammer. Find some problem to solve.

Try earning some belts. (1)

crowne (1375197) | more than 4 years ago | (#31218592)

Have a look at the tests on BlackBeltFactory [] These tests cover some of the most commonly used frameworks and tools within the wider java environment. Also learning design patterns is going to be indispensable and SQL is a must.

Effective Java by Joshua Bloch (1)

rsk (119464) | more than 4 years ago | (#31218600)

Good question. Since you are relatively new to Java and seem to pick things up quick, I'd highly recommend picking up Effective Java (2nd Edition) by Joshua Bloch ($43 on Amazon) -- it's not that you have to become a high-performance fanatic, but there is a lot of magic in Java and a lot of abstractions that if you don't understand them correctly can be abused and result in poor performance.

Again, I don't care so much about pushing you towards optimized development, but what the book *will* do, is pull back the covers on the abstraction and "magic" in Java and show you the nuts and bolts all over the place so you understand everything from the high-level concepts (data structures, syntax, etc.) down to the low-level stuff (object creation, garbage collection, interned Strings, etc.) -- this will give you all that "depth" and detail to the learning of Java that will spring-board you forward with learning all the other things in Java.

As you pickup other APIs that might have otherwised seemed totally magical to you (Hibernate/JPA, proxied objects, etc.) you can just refer to the nuts and bolts you learned in Effective Java and go "Oh I see how that works" or "Yea I guess I get how that's functioning" so less of it is mystical hand-waving that just serves to confuse you when you are really down in the guts of some application.

Beyond that book, then you can start to specialize -- meaning you can learn specific APIs and frameworks based on your needs. Like Swing/SWT for Client GUI dev, or JSF/JSP/Struts/Wicket/SpringMVC/whatever-the-hell for web development and so on.

But the book you are reading now and Effective Java will give you that solid foundation to branch out to other areas.


Effective Java (1)

greg_barton (5551) | more than 4 years ago | (#31218604)

Buy "Effective Java" by Joshua Bloch. Even if you're not quite ready for it yet, read it and make it's rules your own.

Further your knowledge by learning Java EE (0)

Anonymous Coward | more than 4 years ago | (#31218608)

Java is very popular in online business application development. Once you have understood Java you can focus on other Java technologies like JSPs / Servlets and EJBs. These are grouped under Java EE. You may also want to focus on under database development to a certain extent like Oracle SQL or MySQL databases and also understand how to store and get data from these data bases using JDBC [ Java database connectivity ]

BlackHat (0)

Anonymous Coward | more than 4 years ago | (#31218626)

I would expand my knowledge base to something other than Java to understand computer languages on a lower level.

Frameworks (1)

pak9rabid (1011935) | more than 4 years ago | (#31218648)

Java is a simple language, composed of many, many frameworks. Now that you have the syntax down, it's time to start learning some of the frameworks you'll undoubtedly be exposed to when working on projects. Some good ones to familiarize yourself with are:

Being well-versed in these will up your Java street cred by quite a bit.

Help/teach some newbies (1) (1281738) | more than 4 years ago | (#31218652)

My suggestion would be to sign up on the Sun Java Forums [] (now confusingly branded as the 'Oracle' forums in some places; and looking rather ugly) and try and answer questions that newbies post. Sure, some will be really dumb and some will be of the help-me-get-my-assignment-done kind, but you'll also see questions that make you wonder 'yeah, why *does* it work that way?'. I found that explaining what I already knew helped make the concepts concrete for me, and looking at the explanations that others gave helped me learn new things and new ways of doing things.

Of course, the suggestions that were already given - picking a project and working on and visiting sites like or and working on problems posted there - are much better; the forums will mostly help you improve your Java skills and occasionally give you some general insights into programming and problem-solving.

Pragmatic Programmer (0)

Anonymous Coward | more than 4 years ago | (#31218654)

Not Java-specific but The Pragmatic Programmer by Hunt and Thomas (I think) is an excellent read.

Learn the fundamentals. (1)

Binder (2829) | more than 4 years ago | (#31218664)

Go get Algorithms in Java and implement the algorithms. Not only will you learn about algorithms but simple tasks like this teach you a lot about coding that you can't learn from a book. That would be things like testing, and debugging.

Next implement something!
Good beginner projects are conway's game of life.
Tetris or breakout.

You can also go to one of the programming challenge websites and start working through their problems.

Then you really need to find a project that you want to implement. If not that at least an open source project that you can contribute to.

Load More Comments
Slashdot Login

Need an Account?

Forgot your password?