After Learning Java Syntax, What Next? 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."
How about the obvious... (Score:5, Insightful)
How about writing code????
Learning the theory is good, but writing code is very important..
What's next? (Score:5, Insightful)
Best way to learn: (Score:5, Insightful)
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.
Other Things... (Score:5, Insightful)
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!
Re:How about the obvious... (Score:3, Insightful)
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:Best way to learn: (Score:1, Insightful)
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.
anti-patterns (Score:2, Insightful)
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: http://www.odi.ch/prog/design/newbies.php [www.odi.ch]
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 [sourceforge.net] which will show you a list of things wrong with your code. Even professional programmers can learn something from these kinds of tools.
Re:Implement some of the exact same things in C (Score:5, Insightful)
Re:Do we really want him writing code? (Score:5, Insightful)
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? (Score:3, Insightful)
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:Effective Java (Score:2, Insightful)
Re:Do we really want him writing code? (Score:5, Insightful)
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? (Score:2, Insightful)
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:Do we really want him writing code? (Score:3, Insightful)
I'm not trying to be mean or disrespectful to AC, but there a re a lot of pompous assholes which, when asked 'I've learned such-and-such, what next', ramble on about how how totally useless you still are, which is both uninteresting, mean, unhelpful, stupid, and not the question.
I've spent more times listening to castrative bullshit spewed out by people with an ego and idiocy like his than I have having constructive, interesting conversations.
Sure we do (Score:3, Insightful)
Job security my man. Job security.
Have some shop hire in a newb that can't write because they're cheap. Six months later they'll need me. And I'll be able to bill whatever I want.
And on the other side of the coin - maybe he's an ace, a diamond in the rough. A colleague just waiting to be discovered. Not everyone I know who writes great code has a degree. I can think of three people that absolutely blow me out of the water - none with formal degrees.
Re:How about the obvious... (Score:2, Insightful)
Re:He seems to want reading options (Score:2, Insightful)
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.
Are you kidding me? It is possible to write programs without a laptop or any computer at all. I used to do it when I was bored in Middle School which was 98% of the time. All you need is your brain, some notebooks, and a bunch of pencils.
First, think about the overall design of the program. Sketch out the general structure using pictures, flowcharts, pseudocode, English, whatever. Figure out the data structures and algorithms needed. "Code" from the top down. When you get to interesting or challenging methods write them out in detail. For the others you can write the signature and a description of what they do, just like Javadoc.
When you're "done" analyze the design as a whole. Think about what you could do better. Maybe redesign it a different way.
A few hundred hours of this will make you a far better designer than if you had jumped right in writing code on a computer.
Re:How about the obvious... (Score:5, Insightful)
That or you could become a project manager.
The best thing he could do right now is to put Java on hold and learn to solve the same problems in a different language. Something with sufficient study material yet with a very different history than Java would be best, like Lisp or Perl.
I don't think there is such a thing as a good monolingual programmer. The ability to compare different approaches is just too valuable, and the best time to pick up that skill is before you start seeing every problem as a nail. If the OP would rather go into project management, becoming multilingual would be less critical, but still valuable.