Slashdot Mirror


After Learning Java Syntax, What Next?

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."

293 comments

  1. How about the obvious... by SerpentMage · · Score: 5, Insightful

    How about writing code????

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

    --

    "You can't make a race horse of a pig"
    "No," said Samuel, "but you can make very fast pig"
    1. Re:How about the obvious... by weicco · · Score: 5, Funny

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

      That or you could become a project manager.

      --
      You don't know what you don't know.
    2. Re:How about the obvious... by SnuffySmith · · Score: 1
      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.

    3. Re:How about the obvious... by Anonymous Coward · · Score: 0

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

    4. Re:How about the obvious... by GPSguy · · Score: 3, Funny

      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.

      --
      Never ascribe to malice that which can adequately be explained by tenure.
    5. Re:How about the obvious... by Anonymous Coward · · Score: 0

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

    6. Re:How about the obvious... by twistedsymphony · · Score: 2, Insightful

      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.

    7. Re:How about the obvious... by Anonymous Coward · · Score: 0

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

      More then enough to do.

    8. Re:How about the obvious... by MacroSlopp · · Score: 0, Offtopic

      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.

    9. Re:How about the obvious... by SnapShot · · Score: 4, Informative

      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.

      --
      Waltz, nymph, for quick jigs vex Bud.
    10. Re:How about the obvious... by Anonymous Coward · · Score: 0

      I agree with certifications. If you don't have a computer science degree, they will help you get a job.

    11. Re:How about the obvious... by Anonymous Coward · · Score: 0

      Why do you recommend Eclipse? Do you find it a better IDE than IntelliJ IDEA? Or just cheaper?

    12. Re:How about the obvious... by sorton9999 · · Score: 2, Insightful

      I agree with writing actual applications to hone your new knowledge. My first real applications in java were a calculator and a CD collection application. I wrote these without an WYSIWYG IDE. It helps to really see how things work if you don't use a GUI "builder". If you want to get ideas for good projects you can read "Java Cookbook" published by O'Reilly. It provides some programming example projects that can be expanded upon. Finally, read a good algorithms book (can't think of any examples, sorry). Java is great for supplying many objects that hide the implementation, but it's still helpful to know the theory behind these implementations.

    13. Re:How about the obvious... by Zontar+The+Mindless · · Score: 1

      That sounds like a fantastic idea.

      Dunno why you got modded off-topic for it.

      --
      Il n'y a pas de Planet B.
    14. Re:How about the obvious... by paeanblack · · 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.

    15. Re:How about the obvious... by fatbuttlarry · · Score: 1

      Don't be discouraged by the people that learn by example. They just have a different way learning. Its no better or worse.

      I think the OP is coding. The quizzes and assignments he speaks of include coding. Some of it more difficult than what a career programmer does on a daily basis.

      There's two paths... 1. Learn more, or 2. Apply what you've learned.

      If you decide to learn more (we're alway learning, right?), Servlets, Applets, MIDP are great paths to follow. They'll challenge you even more, and make you more hire-able than the millions of students out there that know classes, interfaces, data types and gui libraries.

      Learning anything Thread related is great too. The concurrency packages introduced in more recent versions (Since 5.0 I believe) are great for writing server applications. Research Openfire as an excellent server project example that will win resume points.

      To apply what you've learned (if you have the time, and it sounds you do), start a small project that solves a particular technology issue and make the world just a little bit better. It will all mesh together for your career.

      -Tres

    16. Re:How about the obvious... by Brian+Gordon · · Score: 1

      The best thing he could do is stop studying Java for awhile and actually study algorithms or AI or graphics or whatever he's interested in. Picking up the syntax of a new language in a month is trivial, but unless you know how to do something with it you're doomed to write "Cat" and "Horse" and "Animal" classes forever.

    17. Re:How about the obvious... by Anonymous Coward · · Score: 0

      Community edition of IntelliJ IDEA is better than Eclipse and is also free.

    18. Re:How about the obvious... by smalleyster · · Score: 1

      Lost In Stupid Parentheses! I can't say I really miss it all that much. BTW Kudos to the OP for asking. And hilarity at the CS fool who thinks his degree means anything more than memorizing and re-gurgitating what the profesor is enamored with.

    19. Re:How about the obvious... by Anonymous Coward · · Score: 0

      I've found that converting/translating libraries from other languages very helpful in learning the language. Then refactoring what you wrote, trying to gain more insight on the target language. Even though with Java you may find that something is already in the Java class libraries, it is helpful. Early on learning C#, I found a lot of people were handicapped with the use of the Microsoft.VisualBasic namespace to do things that were already in the language natively. IE: getting substrings, or converting a character to it's numeric value etc. After you've read up on the base language, it's easier to catch what others do, by translating things, and seeing other people's translations in the the target language.

      Participating in FOSS helps a lot as well, since you can get a grasp of what works, or is working and what isn't. For that matter, take existing code, that isn't well commented, and add comments and documentation comments. Documenting code in open-source is so under-served, but welcome just the same (at least in most projects).

    20. Re:How about the obvious... by Pharmboy · · Score: 1

      Seems to me that the best thing he could do is apply what he knows while learning some new syntax. Volunteer some time to help with a project if you can't use it at your job, but he needs to get working on applying what he has already learned if he wants to retain it. Not by forcing himself 12 hours a day, but by doing a little every day toward some end goal, and learning the new stuff, too.

      --
      Tequila: It's not just for breakfast anymore!
    21. Re:How about the obvious... by gnapster · · Score: 1

      Exactly. That sounds like a great thing to put on a resume: "Designed and implemented system to replace myself."

      If I were hiring, I'd jump at such a person. I would only have to employ them for a few months.

    22. Re:How about the obvious... by xiong.chiamiov · · Score: 1

      Finally, read a good algorithms book (can't think of any examples, sorry).

      Introduction to Algorithms by Cormen et al. I have the 2nd edition, but the 3rd seems to have come down in price a bit now.

    23. Re:How about the obvious... by akayani · · Score: 1

      "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."

      Yep I'd agree with that.

      If you want to stick with Java then Introduction to Java Programming (Y. Daniel Liang) is a good 1,200 page follow up. Having a play with AS3 in Flash is within the same stream.

      You did well to get through Absolute Java in a month. That's worth a HD+

    24. Re:How about the obvious... by weicco · · Score: 1

      Okey, I'll try to be serious for a while :)

      I don't think the next step would be to learn new languages. You can learn them anytime. Next I would learn like what object-oriented paradigm means. If you don't know how to use classes you end up with weird looking objects and poorly maintainable code. When I moved from C to C++ it was major jump to me to learn not to write static methods all over the place. Luckily Niris has started with OO language so maybe it's easier for him.

      So I would probably start from here. I would pick up some small projects for myself, not too big so I wouldn't lose interest in the middle of it, where I would try different approaches to solve problems. This way I could learn which approach and technique is (probably) the best. It's that that you can do X in n+1 ways but which one is the most efficient, productive, maintainable, etc. - that's the question.

      And in fact, after 10 years of professional career behind me, this is what I am still doing. Great way to learn new stuff!

      Then you could go and learn different languages. Maybe Perl or Lisp. Maybe C and C++. Maybe even C#. Ruby or Python would be nice. Last language I learned was Haskell. That is a weird, weird language but really funny too!

      But let's not forget databases. Every programmer has to deal with databases once or twice in his career. At least one should learn simple SQL syntax and maybe even little more complex stuff like views, indexes, procedures and functions.

      Okay. I can't be serious anymore so I'll think I'll stop here :)

      --
      You don't know what you don't know.
    25. Re:How about the obvious... by riT-k0MA · · Score: 1

      You need some sample code to give to prospective employers so that they can see that you know what you're doing.

      Create some sort of GUI- and OO-based app that loads entries from a database (across many tables).
      Make sure you can add, delete and update records.
      Make sure you can write selected records to a textfile at a location the user chooses.
      Make sure you can draw reports from it and save it to textfile or CSV.
      Oh, and to make sure they know you've got 1337 skillz, add a hidden game of pong. (java 2D graphics)

      Luckily you have a few months to write and perfect your code before you have to submit it to a prospective employer.

      I'd recommend am embedded database, such as H2, so your sample code doesn't require the viewer to install anything.

      Remember:
      1) If in doubt, you can still ask your lecturer||[insert objTeacher here]. Use them while you can.
      2) Google is your best friend

    26. Re:How about the obvious... by ResidentSourcerer · · Score: 1

      I echo and amplify the parent.

      You can read calculus books, but you don't get good at calculus until you solve a LOT of problems.

      You can read about writing, but you only learn to write by writing. (Unless you have a career in Literary Criticism)

      You can read about physics, but you only really understand physics by doing problems.

      Take the parents advice.

      Take a laptop with you. Code when you can. Think about your last set of error messages when you can't. Code in your head until you can write it down.

      Read other people's code. Programming is a field where felines have multiple epidermis removal techniques. One of the problems of working alone is a reduced library of techniques.

      Rewrite other people's code. Re-implement the hundred most common functions without using the equivalent of stdlib.

      One guy learned new languages by building a database OF that language IN that language.

      In his database he had every function, grammar rule, and reserved word defined, with several examples of use, and the database environment would compile/interpret the examples and show them running under a debugger so you could step through it.

      I wouldn't want to try this in APL

      --
      Third Career: Tree Farmer Second Career: Computer Geek First Career: Teacher, Outdoor Instructor, Photographer.
  2. What's next? by GrahamCox · · Score: 5, Insightful

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

    1. Re:What's next? by Anonymous Coward · · Score: 0

      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.

    2. Re:What's next? by cerberusss · · Score: 1

      Program something for real. Be goal-oriented.

      Not everybody works well with goals. In fact, only about 30% of people find motivation by setting goals. The rest need to find a specific problem that they can fix. They're problem solvers. Then there is the remainder who cannot find motivation in that, either. They need to set up the situation for success.

      As an example of this, you could as a night guard, make yourself walk 2 km through the snow just to check that door. Alternatively, you could put a piece of hardware there, code up a piece of software to read out the remote sensor and save yourself the walk through the snow.

      --
      8 of 13 people found this answer helpful. Did you?
    3. Re:What's next? by GrahamCox · · Score: 1

      The rest need to find a specific problem that they can fix

      That's a goal, in my book.

    4. Re:What's next? by cerberusss · · Score: 1

      Reading back, my post had a high yes-but value. Anyway, it might work well to set a goal. It might also work well to just fix an existing problem. You could say that your goal is to fix problems, but that's not what I meant.

      For the distinction to be clear, let me give an example. Programmer A is best when he sets a lofty goal to implement a framework. Programmer B might work better fixing bugs. Then there is the remainder of programmers who will not code anything unless it saves them real, concrete effort in one way or another.

      --
      8 of 13 people found this answer helpful. Did you?
  3. How about gaining experience? by ILoveCrack83 · · Score: 1
    1. Re:How about gaining experience? by Nerdfest · · Score: 2, Interesting

      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.

    2. Re:How about gaining experience? by Media+Tracker · · Score: 1

      Interesting links, thanks!

  4. If you have a lot of time on your hands by Rik+Sweeney · · Score: 0, Redundant

    unlearn it and learn it again!

    1. Re:If you have a lot of time on your hands by cerberusss · · Score: 1

      unlearn it and learn it again!

      Through copious amounts of glue!

      --
      8 of 13 people found this answer helpful. Did you?
  5. Ugh by Anonymous Coward · · Score: 0

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

  6. Give Scala or Clojure a shot by Megaweapon · · Score: 1

    Or, you know, write some code.

    --
    I'm sure "SlashdotMedia" will improve on all the wonders that Dice Holdings blessed us all with
    1. Re:Give Scala or Clojure a shot by certron · · Score: 1

      Definitely write some code. When you are done with that, though, give a look at Common Lisp: http://www.cs.cmu.edu/~dst/LispBook/ Common Lisp: A Gentle Introduction to Symbolic Computation by David S. Touretzky, or http://www.gigamonkeys.com/book/ Practical Common Lisp by Peter Seibel. Then, learn to use Clojure to tie the two (functional programming and JVM bytecode + platform) together.

      --

      fair.org counterpunch.com truthout.com indymedia.org salon.com
      eff.org guerrilla.net debian.org gentoo.org
  7. Implement some of the exact same things in C by antifoidulus · · Score: 5, Interesting

    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.

    1. Re:Implement some of the exact same things in C by chthonicdaemon · · Score: 4, Insightful

      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.

      --
      Languages aren't inherently fast -- implementations are efficient
    2. Re:Implement some of the exact same things in C by Anonymous Coward · · Score: 0

      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.

    3. Re:Implement some of the exact same things in C by sqldr · · Score: 1

      Then tie your brain up in knots trying to do it in OcaML :-)

      --
      I wrote my first program at the age of six, and I still can't work out how this website works.
    4. Re:Implement some of the exact same things in C by kaffiene · · Score: 1

      Yeah, I'd agree with that. I'm a big fan of Java, but knowing C is very useful. The more different styles of coding you know, the better. I think Java, C, LISP would be my quick list of languages one should learn if you're wanting to get a quick but broad overview of the different kind of approaches that are out their for solving problems in code. Of course, you can quibble about the details in a list like this, but as long as you experience different kinds of languages, you usually get a healthy set of ideas to use... and, as you say, an appreciation for what's going on under the hood.

    5. Re:Implement some of the exact same things in C by Anonymous Coward · · Score: 0

      Really? C encourages that, huh? Show me the word 'stack' in the C Language Standard. A "stack" is an implementation choice. The language doesn't define one (and has been implemented without one).

  8. Obviously... by FShort · · Score: 5, Funny

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

    1. Re:Obviously... by Opportunist · · Score: 1

      How does that improve your coding skills?

      Priorities, man!

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    2. Re:Obviously... by TheSpoom · · Score: 3, Funny

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

      --
      It's better to vote for what you want and not get it than to vote for what you don't want and get it.
      - E. Debs
    3. Re:Obviously... by deniable · · Score: 1

      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.

    4. Re:Obviously... by Deltaspectre · · Score: 1

      Burma Shave

      --
      My UID is prime... is yours?
    5. Re:Obviously... by fwr · · Score: 1

      The parent is marked 5: Funny, but honestly this is the first thing I thought of. If he is a night-guard, he should be doing his job and paying attention to whatever he is supposed to be guarding. It may be a plain looking warehouse door, and nothing exciting. They are not paying him for exciting work, nor are they paying him to read books and do other work while on the job. They are paying him to pay attention to what he is supposed to be guarding, and to be ready if he must take action. Personally, it kind of ticks me off that people with a "boring" job like that are getting paid, however small the pay is, while not doing their job. If I had his fingerprints I'd report him and have them dock his pay.

    6. Re:Obviously... by FShort · · Score: 2

      Lighten up Francis

    7. Re:Obviously... by FreakyGreenLeaky · · Score: 1

      The man is improving himself and should be commended.

      You're aware that in addition to a guard, buildings usually also have alarms, videos, etc, right? ie, he'll be alerted when someone comes a'knocking.

      The next time you visit slashdot, sex.com, facebook.com, www.teenboythumbs.com or youtube.com, while at work, remember your snide little comment here.

      I'm thinking you're a pimpled little pink dweeb who's never had the experience of seeing the light of day beyond your mommy's basement.

      So, come on, as FShort said, lighten up.

    8. Re:Obviously... by thePowerOfGrayskull · · Score: 1

      How does that improve your coding skills?

      Priorities, man!

      You get to learn how garbage collection works?

  9. Best way to learn: by DavidR1991 · · Score: 4, 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.

    1. Re:Best way to learn: by Anonymous Coward · · 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.

    2. Re:Best way to learn: by counterplex · · Score: 0

      And by code commenting skills AC doesn't mean add a comment for each line of code. In my experience good commenting would be to add a brief comment for each block of code. If you've written a particularly obscure one-liner or something that might also deserve a quote and perhaps a reference of where you picked it up but that should be rare: I hope you're writing functional and legible code before you start optimizing it.

      --
      $x = ($x * 10) % 10 >= 5 ? 1 + int $x : int $x
    3. Re:Best way to learn: by gladish · · Score: 1

      I would also suggest applying your specific knowledge you may have gained in your experience working as a night guard. How many people writing code can say they know first-hand what it's like to work that job? Try building something like a time tracking tool for nigh watchman or some other app that may be useful for your job. Try applying basic object oriented design to to the project too. It may prove entertaining to you to model, in software, the things you are familiar with in real life. E.g. you can have a class called "Nightguard" and an instance for all the people you work with, and then finalize() the ones you don't like.

  10. learn something about embedded! by slashbart · · Score: 1, Interesting

    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.

  11. Find an itch and scratch it by ytm · · Score: 2, Interesting

    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.

  12. Projects by CSHARP123 · · Score: 1

    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.

  13. Effective Java by sproketboy · · Score: 5, Informative

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

    1. Re:Effective Java by pkuyken · · Score: 2, Insightful

      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.

    2. Re:Effective Java by rsk · · Score: 1

      +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.

    3. Re:Effective Java by Anonymous Coward · · Score: 0

      Second that. Reading it will get you into better java habits early on.

    4. Re:Effective Java by Anonymous Coward · · Score: 0

      Yes, this is a very good read and covers many holes and pitfalls in Java, and also introduces advanced concepts.

    5. Re:Effective Java by SilvergunSuperman · · Score: 1

      I am reading this right now, and have found it very helpful in building good Java programming habits.

    6. Re:Effective Java by ubersoldat2k7 · · Score: 1

      Yes, please do. Every professional Java programmer must read this book. Really, it's not an option. After doing your first "Hello World" you must read this. I wish every language (specially Python) had such a great book like this one.

    7. Re:Effective Java by Anonymous Coward · · Score: 0

      I agree as well. I go back to it every couple months to refresh my mind that I should be doing something better/different.

      But also, just write something. Then improve it. Then add something new to it.

    8. Re:Effective Java by Anonymous Coward · · Score: 0

      I also second this and would mod it up if I had points. This is definitely the next book you should read after you understand the syntax.

    9. Re:Effective Java by Anonymous Coward · · Score: 0

      I third this!

      This is an excellent book on how to properly code in Java and sometimes details the inner workings. I can't say enough positive things about this book.

      The only drawback, the book might be a little advanced for someone new to programming (the OP sounds like a beginning programmer albeit a quick learner).

    10. Re:Effective Java by Anonymous Coward · · Score: 0

      Thirded. Excellent book. Every Java programmer should read it. Sadly, judging by much of the code I get to see, many people have never read it...

    11. Re:Effective Java by tedgyz · · Score: 1

      I was going to say the same thing.

      You will read it now and probably not grasp it all. Read it again a year later after you have written a lot of code.

      You can also try "Applied Java Patterns", which casts the classic "Design Patterns" (Gamma et al) into the Java mold.

      --
      "No matter where you go, there you are." -- Buckaroo Banzai
  14. Program something of substance! by fredrickleo · · Score: 1

    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).

    --
    Yay me! ^^
  15. Explore, experience and expand by Hulker69 · · Score: 1

    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)

  16. He seems to want reading options by PCM2 · · Score: 5, Interesting

    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.

    --
    Breakfast served all day!
    1. Re:He seems to want reading options by cptdondo · · Score: 1

      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.

    2. Re:He seems to want reading options by dkf · · Score: 1

      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).

      I can recommend the O'Reilly Java Examples nutshell book (especially if you try to understand why the examples work) and Mark Grand's books on Software Patterns in Java.

      After that, well, you're at about the point where your best approach involves getting practice trying to do real things (or at least solving problems somewhere like RosettaCode, where many of the problems don't yet have Java solutions). I don't know how well that sort/depth of study mixes with a job as a security guard.

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
    3. Re:He seems to want reading options by fishexe · · Score: 1

      The submitter says he works as a security guard. As such, sitting focused at a laptop writing code might not be an option.

      I recommend writing programs on a legal pad or in a notebook. That's what I did for several years when I didn't have a laptop.

      --
      "I don't care about the Constitution!" --Bill O'Reilly, November 17, 2009
    4. Re:He seems to want reading options by Anonymous Coward · · Score: 0

      Posting anon b/c I've modded itt.

      Assuming he can't use a laptop (idk, the security guards in my building watch youtube videos all day and then watch movies when their boss isn't around) you can go old fashioned [insert oblig XKCD] and do pencil and paper. Write out an application, type it up at home. Sure you'll make some syntax and API mistakes, but for the most part just try to write out an application.

      Some stuff I've done in my classes - slot machines (with varying point return for scores), aquarium (use polymorphism), and the the game of life. We've also coded up a random dungeon game with randomly generated levels and monsters. Pick up all of the items in the level to pass. Of course being randomly generated sometimes you get impossible levels unless you code in some kind of checks. Make sure your player can move around (kb listener) and the monsters move automatically (timers)

      Make sure you try to use what would be considered "good coding practices." It varies a bit in each language but just try to make some basic abstractions where possible, don't cram everything into one method, don't make everything global and static, and don't use variable names like sexual positions (I've seen this!!). You're writing code, not madlibs.

    5. Re:He seems to want reading options by TheTyrannyOfForcedRe · · 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.

      --
      "Liechtenstein is the world's largest producer of sausage casings, potassium storage units, and false teeth."
    6. Re:He seems to want reading options by Anonymous Coward · · Score: 0

      Alorithms are in most likelihood the next best stop when you already know the syntax of a programming language.

      http://www.indiangeek.net/programmer-competency-matrix/

    7. Re:He seems to want reading options by Smoke2Joints · · Score: 1

      Youre missing the point.. Being a security guard isnt like the movies that youve watched, they do actually have to watch their security monitors, and actively do their job. Sitting down and writing code might be easy for you, but not for someone who is learning, and trying to do their job at the same time.

    8. Re:He seems to want reading options by blackraven14250 · · Score: 1

      They only need to watch for the 99% of the time that everything's going as normal. Then, they can turn away.

  17. Read more, code more by Dun+Kick+The+Noob · · Score: 4, Interesting

    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

    1. Re:Read more, code more by Anonymous Coward · · Score: 0

      Good call. I hadn't heard anything about MIT's OpenCourseware... that's a heck of a find! :) Thanks buddy!

    2. Re:Read more, code more by andr386 · · Score: 1

      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.

      Simple things like looping trough regular files, fusion files, sorting items, tree manipulations ... are algorithms one couldn't do without ! How do you get from a real life situations to Classes, objects and a database schema is also worthy of interest. Also nowadays, you're going nowhere in Java if you don't, at least, understand design patterns ! And those to me are also kinds of algorithms.

    3. Re:Read more, code more by Matheus · · Score: 1

      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)

      The key I learned in my algo classes was not the specifics of how to do something (aka those things you don't use in real work) BUT how to evaluate how something new is going to run or why it may be running badly.

      That is the kind of knowledge that you use everyday while not even explicitly thinking about it most of the time. Big-O.. not just an idea but a may of life :)

    4. Re:Read more, code more by y4ku · · Score: 0

      I'm glad you mentioned the MIT open courses. They are also not the only ones that do it! I started my way through their beginning courses in CS but I found it rather dry. After looking around a bit I found courses at Stanford as well: http://see.stanford.edu/ Found the lectureres more interesting and they have some sweet semester long courses on AI (from language processing to robotics). If you have the time check em' out. The resources available nowadays are amazing..

  18. Sandeep by sandy8925 · · Score: 1

    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.

  19. You've got one third of it by AdmiralXyz · · Score: 5, Informative
    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.

    --
    Dislike the Electoral College? Lobby your state to join the National Popular Vote Interstate Compact.
    1. Re:You've got one third of it by WankersRevenge · · Score: 2, Interesting

      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.

    2. Re:You've got one third of it by Hairy1 · · Score: 1

      Order is wrong. Believe it or not most people would rather eat their own hand than learn algorithms or the standard API by heart. But I do suggest writing real code.... that is not just an exercise, but actually find yourself something someone needs solved and solve it. This way you will quickly pick up what is needed to accomplish the task, which will involve algorithms and API.

      I would suggest a more complete treatment of algorithms later in your development when you can begin to appreciate where they fit. I would suggest never learning a API by heart. Life is only so long :)

  20. Write programs... by bradley13 · · Score: 1

    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.

    --
    Enjoy life! This is not a dress rehearsal.
    1. Re:Write programs... by Anonymous Coward · · Score: 0

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

  21. What he said. by Tibia1 · · Score: 1

    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.

  22. Take the Sun Certified Java Programmer Test by cyranoVR · · Score: 1

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

    1. Re:Take the Sun Certified Java Programmer Test by (H)elix1 · · Score: 1

      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.

    2. Re:Take the Sun Certified Java Programmer Test by lennier1 · · Score: 1

      The certificates are actually fun since they force you to read up on details which will come in handy during complex projects and it never hurts to have some in your pocket to prove that you're genuinely interested in improving your knowledge.

  23. some suggestions by Anonymous Coward · · Score: 0

    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).

  24. Time to get out. by Anonymous Coward · · Score: 0

    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.

    1. Re:Time to get out. by RabidBob · · Score: 1

      Oh noes! Someone wants to improve themselves, quick change professions!

  25. Next steps by thatjavaguy · · Score: 1

    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.

  26. In my java class, we do... by Anonymous Coward · · Score: 0

    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)

    Stéphane

  27. You know the syntax... by Eskarel · · Score: 1
    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.

    1. Re:You know the syntax... by lennier1 · · Score: 1

      If you're a lazy bastard like me a good motivation is usually to develop little applications to make your life easier and then to continually improve those.

      In my case I once wrote a podcatcher for my cell phone because I was pissed at how the existing ones handled the task.

      Later I extended that one to connect to a simple Java EE application on one of my home servers to store which podcasts have been subscribed to, at which time codes I've stopped listening to which files and which files I have deleted again and which ones are still meant to be kept.
      Makes it extremely easy to switch from one device to another and have it sync to a common state again.

      By now the whole thing has grown GKT-based clients for my Nokia N900 and my Linux PCs which all use the Java EE application to stay current.
      Who needs iTunes anyway?

  28. Another Language, Design Patterns, Java EE by ChaseTec · · Score: 1

    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 Hello World is 512 bytes. But it's also a valid Fat12 boot sector, Fat12 file reader, and Pmode routine.
    1. Re:Another Language, Design Patterns, Java EE by Anonymous Coward · · Score: 0

      I'd suggest that the OP learn an additional language - probably Hindi or Chinese. He's going to need it, as that's where nearly all of the low-skilled Java jobs have gone.

    2. Re:Another Language, Design Patterns, Java EE by Mr+Z · · Score: 1

      I'll throw my hat in the ring for both Head First Design Patterns and the GoF Design Patterns book. Read Head First first, though, since the GoF book is a bit dry by comparison.

  29. My top 4 by Ianopolous · · Score: 5, Informative

    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!

    1. Re:My top 4 by thetoadwarrior · · Score: 1

      I have 1, 2 and 4 and would definitely agree they're excellent books worth having.

  30. Start writing software by crt · · Score: 1

    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.

  31. Other Things... by Mongoose+Disciple · · 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!

    1. Re:Other Things... by Rockoon · · Score: 1

      100% agree. If your goal is to get HIRED as a programmer, then its databases databases databases.

      Nearly every programming job out there required database programming. Sure, a lucky few get to bang out libraries, or write games.. but for every one of them there are HUNDREDS of programmers working for private firms writing custom programs which manipulate in-house databases.

      --
      "His name was James Damore."
    2. Re:Other Things... by M.+Baranczak · · Score: 1

      Those are all good points. I'd add:

      - Learn to use a version-control system (I'd start with Subversion). This is something you'll need for every project with more than one developer (and it's also handy for solo projects).

      - Learn to use Ant. When you're done, learn to use Maven.

    3. Re:Other Things... by Mongoose+Disciple · · Score: 1

      Really good additions -- I knew I was forgetting something important. I'd put basic version control ahead of everything on my list but SQL.

    4. Re:Other Things... by anomalous+cohort · · Score: 1

      Database, web, frameworks, IDE are all important if you want to get into J2EE. I recently gave a presentation at the local JUG about GWT which is Google's toolkit for writing RIA in J2EE. About half of the talk was an introduction to GWT and the other half covered GWT specific issues with regards to Eclipse, Maven, Spring, JDO, Hibernate, GAE, EC2, Acegi, Lucene, FreeMarker, etc. The point is that there are a lot of OSS Java libraries out there that rapidly accelerate your productivity in Java development and it is important to learn how to consume some of these APIs if you want to be competitive.

  32. Earn some money? by jchawk · · Score: 1

    Why not look to a site like rentacoder.com 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.

  33. anti-patterns by Nightshade · · 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

    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.

    1. Re:anti-patterns by Grundlefleck · · Score: 1

      Mod parent up.

      Effective Java and Findbugs were the two things I was going to recommend. Findbugs, since it's an industry strength static analysis tool, often has its value for learning understated or overlooked.

      --
      I accept I know nothing. Insulting my ignorance is wasted on me.
  34. Go make something by Big_Mamma · · Score: 1

    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.

  35. Teach someone else by cephus440 · · Score: 1

    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.

  36. There is hope by Anonymous Coward · · Score: 0

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

    I'd suggest rehab or possibly Python.

  37. Effective Java, Clean Code, then Design Patterns by Anonymous Coward · · Score: 0

    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.

  38. One language down. by Millennium · · Score: 1

    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.

  39. Time to get into 'software engineering'... by Assmasher · · Score: 1

    ...now 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!

    --
    Loading...
    1. Re:Time to get into 'software engineering'... by gringer · · Score: 1

      When all you have is a hammer, everything starts to look like a nail.

      I suggest that you consider other languages as well. There are applications for which Java is a poor fit -- something that comes quickly to my mind is matrix manipulation. An understanding of what programming languages are appropriate for particular applications can be quite useful.

      --
      Ask me about repetitive DNA
  40. Java Puzzlers by IamTheRealMike · · Score: 5, Interesting

    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.

    1. Re:Java Puzzlers by moo-shim · · Score: 1

      Why oh why should I read a book about what I do at work :)? Oh, and I did read this and it is very good. The real world conundrums are much more splayed out in the morass of code, but this gives one a good feel.

  41. How about this: by Anonymous Coward · · Score: 0

    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.

  42. Here's one by bytesex · · Score: 1

    Build a JVM in it.

    --
    Religion is what happens when nature strikes and groupthink goes wrong.
  43. Learn more than the syntax - Think in Java by SuperKendall · · Score: 1

    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.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
    1. Re:Learn more than the syntax - Think in Java by bill_mcgonigle · · Score: 1

      Strongly seconded. This book taught me to not write c with java syntax.

      --
      My God, it's Full of Source!
      OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
  44. Re:Do we really want him writing code? by ammorais · · 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.

  45. lol ex-trucker by Anonymous Coward · · Score: 0

    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!

  46. Re:Do we really want him writing code? by DavidR1991 · · Score: 2, 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

  47. Some stuff to learn by devent · · Score: 1

    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

    --
    http://www.mueller-public.de - My site http://www.anr-institute.com/ - Advanced Natural Research Institute
  48. READ Code by david.emery · · Score: 1

    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 http://thedailywtf.com/

  49. Check out the job boards by Like2Byte · · Score: 1

    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.

  50. Effective Java by AdamInParadise · · Score: 1

    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.

    --
    Nobox: Only simple products.
  51. Debug by Anonymous Coward · · Score: 0

    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.

  52. Good Luck by Anonymous Coward · · Score: 0

    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.

  53. What do you really want? by vitruvian · · Score: 1

    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.

  54. My suggestions.... by pjr.cc · · Score: 1

    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).

  55. Re:Do we really want him writing code? by daveime · · 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.

  56. Learn higher-level concepts by Anonymous Coward · · Score: 0

    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 (http://eclipsercp.org/book/inside_the_book.php). 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 (http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612). 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.

  57. Next step! by Anonymous Coward · · Score: 0

    Move on to C++ or C#.

  58. Re:Do we really want him writing code? by ammorais · · Score: 1

    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.

  59. SQL by codepunk · · Score: 1

    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.

    --


    Got Code?
    1. Re:SQL by jjohnson · · Score: 1

      This. As a practical matter, knowing SQL and database design is about the strongest additional skill you can add.

      --
      Anyone who loves or hates any language, platform, or manufacturer, doesn't know what they're talking about.
    2. Re:SQL by lennier1 · · Score: 1

      "Additional"? More like essential basic knowledge along with collections and multithreading.

      Especially when to use SQL instead of HQL can pay off big time when you're working on complex J2EE projects.

    3. Re:SQL by Anonymous Coward · · Score: 0

      Well I do signal processing code in JAVA*1, and I do not need SQL however I do agree that the ability to at least read SQL is a must.

      *1 You must think that this is crazy but if I benchmark my code after method calls 10000 runs the JAVA version become faster than the C one, and since it is an embedded appliance that continuously run waiting 10000 method calls for optimal performance is not bad at all. It takes 3 times the memory but in this specific instance memory is cheaper than slowness.

    4. Re:SQL by Anonymous Coward · · Score: 0

      While databases have their uses in enterprise computing, many developers instinctively apply databases to every problem they see. I work in telecom (> 20 years) and while I know the basics of SQL, setting up MySQL and even some advanced theory on RDBMSs, I have yet to encounter good use of databases in my field.

  60. Think about what you want to do by evilklown · · Score: 2, Interesting

    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.

  61. Another book recommendation by Anonymous Coward · · Score: 0

    i recommend "Refactoring to Patterns" http://www.amazon.com/Refactoring-Patterns-Joshua-Kerievsky/dp/0321213351 It's really down to earth and shows how to apply design patterns on existing code in java.

  62. Solve A Problem by curmudgeon99 · · Score: 1

    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.

  63. Re:Do we really want him writing code? by AlecC · · 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.

    --
    Consciousness is an illusion caused by an excess of self consciousness.
  64. Try earning some belts. by crowne · · Score: 1

    Have a look at the tests on BlackBeltFactory http://www.blackbeltfactory.com/Home.wwa 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.

    --
    RTFM is not a radio station.
  65. Re:Do we really want him writing code? by timeOday · · Score: 1
    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.

  66. Re:Do we really want him writing code? by Greyfox · · Score: 2, Interesting
    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.

    --

    I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

  67. Effective Java by Joshua Bloch by rsk · · Score: 1

    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.

    Best,
    Riyad

  68. Effective Java by greg_barton · · Score: 1

    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.

  69. Further your knowledge by learning Java EE by Anonymous Coward · · Score: 0

    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 ]

  70. BlackHat by Anonymous Coward · · Score: 0

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

  71. Frameworks by pak9rabid · · Score: 1
    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.

  72. Help/teach some newbies by no.good.at.coding · · Score: 1

    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 projecteuler.net or topcoder.com 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.

  73. Pragmatic Programmer by Anonymous Coward · · Score: 0

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

  74. Re:Do we really want him writing code? by CockMonster · · Score: 1

    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.

  75. Learn the fundamentals. by Binder · · Score: 1

    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.

  76. Algorithms, Patterns, Refactoring by TwinkieStix · · Score: 2, Informative

    If you want to work in the real world, writing software, you're going to have to speak to other engineers about what you are doing at a level of abstraction higher than "for loop" or "switch statement". You'll want to talk about algorithms and even more commonly, patterns. You may already be familiar with "tree" and "linked list" so you're off to a good start. But, in the future, you'll find yourself saying: "This is a visitor", "this is a controller", "this is a command pattern", etc. The current "bible" of these patterns is known as the Gang of Four book:
    http://www.amazon.com/Design-Patterns/dp/0201633612

    That one is a hard read. I understand that a more digestible book is this one:
    http://www.amazon.com/Holub/dp/159059388X/

    Two other routes you will want to go down is that of algorithms, like you already mentioned, and refactoring. Algorithms are the most common next step in College, so it might be wise to do that before patterns and refactoring, but I don't think either is a prerequisite for the other. But, knowing what "Big O notation" is, and understanding why a divide and conquer sort is so fast is helpful in your career.

    Finally, refactoring seems to be the hidden art of writing good code. So few programmers really understand how to refactor bad into good. This advanced topic will be what sets you apart from the other engineers you compete with for a job. This one is a good "bible"
    http://www.amazon.com/refactoring/dp/0201485672

  77. Server Side Java, That's Where The Jobs Are by heffel · · Score: 1

    The vast majority of Java jobs out there are for J2EE/Java EE, which is server side Java.

    There are a gazillion Java web frameworks out there. Two of the most popular are JavaServer Faces (JSF) and Struts 1.

    Struts is old, it has been around for about 10 years or so. It is not glamorous anymore, but there is so much code written in it that you pretty much cannot avoid working with it.

    JSF is Sun's (Oracle's?) attempt to have a standard framework. You may read a lot of hateful posts about JSF, but personally I think it is pretty good. JSF 2.0 is awesome, but it is also very new and most companies have not adopted it yet.

    Learn Enterprise Java Beans (EJB's) EJB 2.x and before was a nightmare to work on, but 3.0 and 3.1 is actually very nice.

    Learn an Object Relational Mapping framework. These days Hibernate has the most mindshare. The Java Persistence API is Java EE 5/6 standard ORM tool. Newer versions of Hibernate are JPA implementations, adding their own "enhancements" that are not portable to other JPA implementations.

    As a development environment, I would recommend the NetBeans/GlassFish combo for a beginner. This combination will let you focus on developing/deploying code without having to worry about application server configuration and what not.

  78. Get experience with data structures and algorithms by cruff · · Score: 1

    Because good data structures and their associated algorithms are important, your next step could be to pick up a decent book on them such as Algorithms in Java by Robert Sedgewick. He also has the equivallent books for C and C++.

  79. Start diving down into Java's source by hrvatska · · Score: 1

    Java has been open sourced, so you can learn from the people who wrote it. I've found this to be a worthwhile use of time. Knowing what's under the covers, and seeing how professional Java developers implement things can be a valuable learning experience.

  80. Real-world programming by DrYak · · Score: 1

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

    Seconded.

    Once one get all the basic and theoretic concepts (tree, lists, classes, whatever), the bast is to start tackling some real-world problems.

    Book-wise:
    - One might be interested in books which show how some practical problem and real-cases got solved in Java code (Can't point to a good example being not a Java programmer my self, but probably O'Reilly has some interesting books).
    - Info about useful classes and libraries might be useful too (because once you start coding your self, you'll eventually need to interface with some programs or access some data).

    Experience-wise: (if the night watch jobs allows it) get a laptop with enough power to run a java development environment, and think of a few problems you have that would be easily fixed with some program.
    Start with small problems (need some app to store your groceries list ? some app to prepare a series of invitation to your birthday party, using a list of guests as input ?) as long it's a small thing you're fed up doing by hand, it'll be a nice task to tackle with code. Just something where you need to apply the concepts you know to solve real-world problems. (Instead of the "design a doubly-linked list" kind of things you find in assignments)
    Then grow bigger.
    In the end, once you get some experience, you might want to code a simple game or something similar.

    Don't be afraid to go to coders' places such as stack overflow to ask for tips.

    --
    "Sufficiently advanced satire is indistinguishable from reality." - [Tips: 1DrYakQDKCQ6y52z6QbnkxHXAocMZJE61o ]
  81. Factoring, refactoring, patterns. by Anonymous Coward · · Score: 0

    The first time you write something your mental model of what's going on is usually wrong.
    Once you start to run, test, and extend it you realize that you've divided things up wrong.
    Java has enough structure to let you refactor with some confidence (IDEs give you more),
    and you usually refactor into one of the common 'design patterns' people talk about.
    You know you're on the right track when you add a feature and the code gets smaller.
    Anyhow, write stuff. Complicated stuff.

    Also with Java study apache commons.

  82. Now learn Java's cousin, C#. by Anonymous Coward · · Score: 0

    Learn Java's cousin C#.
    Most of what you know about Java applies to C#. C# will introduce you to some interesting language features, such as Lambdas, Closures, Automatic Properties, Extension Methods and Language-embedded queries (LINQ). And it opens up additional job opportunities.

    http://www.microsoft.com/express/Downloads/#2010-Visual-CS

  83. Re:Do we really want him writing code? by counterplex · · Score: 0

    So when *would* a linked list be more appropriate than a hash table?

    --
    $x = ($x * 10) % 10 >= 5 ? 1 + int $x : int $x
  84. Build & Test Tools by Anonymous Coward · · Score: 0

    Familiarise yourself with real work place tools like IDE's (Eclipse) Build Tools (Ant/Maven), testing frameworks (JUNIT) and logging frameworks (LOG4J), these are all essential in the software development process and particularly for Java. Most Java software will interact with a database at some stage so maybe have a look into ORM frameworks like Hibernate/iBatis etc... Loads for you to read up on!

  85. C#, Mono requirement by Grimace1975 · · Score: 1

    I understand that you are being taught java, and I am sure there are a lot of java developer job opening. But I have to tell you, as a software development company owner we stay as far away from java as possible and prefer to code everything in C#. Since we along with a majority of corporate business prefer and operate with the Microsoft platform (flame bate?). And even if we are required to write in a Ninux platform we would be using Mono (pretty much C# on Unix).

    Other than that I also would agree with a below poster that learning SQL, even if rudimentary, would be of great importance.

    All is not lost, java is an decent introduction into C#, and IMHO and easier language too.

  86. get laid by Anonymous Coward · · Score: 0

    get laid! life is more about computers.

  87. Solve a problem that is interesting to you... by javabandit · · Score: 1

    Niris,
    I have helped teach several people how to program. What you really need to next is apply what you have learned and solve a problem. Ideally, solve a problem that you know something about. Or solve a problem where you have some subject-matter expertise.

    I'm not sure if you actually like being a security guard or not. Maybe you do. Maybe you don't. But you are probably familiar with the subject matter. Write a program that will solve a problem related to the subject matter. Using problems that are in operations research are really good ones. For example, a problem I might give you:

    Security Scheduling Program for a Business

    Purpose
    The program should create the optimum shift schedule for a week -- guarding a business 24 hours a day.

    Requirements
    1) The program must allow for the user to input the number of available security guards.
    2) The program must print out the shifts for each security guard.
    3) No shift schedule can be over 8 hours long.
    4) No security guard can work more than four days in a row.
    5) All guards must be used in the schedule.
    6) Each guard must have a 30 minute lunch and two 15 minute breaks each day.
    7) During a break or lunch period, another guard must cover the watch.
    8) If any of the constraints cannot be met -- given the number of guards available -- then the program should indicate that more guards are needed.

    This problem is just an example of an operations research problem -- finding optimality. If you don't like this problem, you can make up another one. Or do a search on the internet. The idea is that you find a problem to solve that you: 1) know something about and/or 2) have some interest in.

    When first learning to program, the key isn't the language you learn. The key is proving that you can solve a real world problem using programming. Good luck to you.

  88. SICP by Lore17 · · Score: 1

    Try reading Structure and Interpretation of Computer Programs. After reading it you will understand everything more fully than before, while being exposed to a new and elegant syntax.

  89. Design Patterns by slim · · Score: 1

    I think that in order to make the leap into writing real programs, you need to be able to apply OO to a bunch of common situations, and that's what design patterns are all about.

    You can either leap in at the deep end with the Gang of Four's book, 'Design Patterns' or try something a bit more accessible, like Larman's 'Applying UML and Patterns'.

    The latter book is what helped me jump out of a severe procedural rut, and finally grasp OO.

  90. Try other languages by zedeler · · Score: 1

    Java is fairly common and you should spend some time writing programs in it, but the next step is to learn another programming language. Since Java is object oriented from birth, uses strong typing and is a compiled language (somewhat), try the opposite: a language that does not assume that everything is an object, doesn't impose strong typing and is a script language. Like perl, lua or python.

  91. If you're looking for strictly reading by AntiRush · · Score: 1

    Try Code Complete. It's still just reading (as opposed to implementing, which is invaluable), but I get the impression reading is possible during your shift but probably not actual coding. Code Complete will improve your skills as a developer immensely.

  92. Data Structures, Algorithms, and Design Patterns by kalidasa · · Score: 1

    Savitch's book is superb as a textbook. You won't find many other books that are that good. The two things I'd suggest learning about are data structures/algorithms and design patterns. For the former, there are a lot of text books, but the good ones are advanced and expensive (for instance, Cormen, Leiserson & Rivest, *Introduction to Algorithms*), and the inexpensive ones are poorly written. You might try the O'Reilly book "Algorithms in a Nutshell*. For the latter, there are a number of books - a good intro book is *Head First Design Patterns*; the book of books is the so-called Gang of Four book that introduced the idea, *Design Patterns* by Gamma, Helm, Johnson, and Vlissides.

  93. Java Certifications by Anonymous Coward · · Score: 0

    If you are thinking of a career change, getting Java certified should be on your list. Start with the basic Java cert and then follow with Web services. Good luck.

  94. Render a Mandelbrot Set by Anonymous Coward · · Score: 0

    ... as a fun introduction to graphics and GUI. My favorite part of java is that is comes standard with a well documented GUI and graphics library ( sadly not fully hardware accelerated ).

  95. Re:Do we really want him writing code? by iamgnat · · Score: 1

    I can back it up by being a high school drop out that busted his ass for the last 16 years to build the experience and reputation that now has managers and companies fighting over him. I have yet to meet anyone with a CS degree outside of scientific positions where that degree was worth more than if they just spent that amount of time teaching themselves how to do it and getting the entry level jobs. And contrary to the seemingly popular belief among fresh CS graduates, an entry level job is still all they are qualified for.

    As to the submitter's question, my honest answer is to forget the syntax. What you really need to understand is the underlying logic of how and why to do things. Once you have a strong basis in logic, languages just become syntax and you can pick that up in a matter of days when the need arises. It also allows you to better recognize when a given language isn't the right tool for the job.

    My suggestion would be to join up with a local programming group or two. Find yourself an experienced mentor that can give you some tasks and help you work through them. As a new programmer judging who might be a good mentor will be difficult, but I would say first and foremost to trust your gut. A good programmer will also be one that makes their code look clean and simple even in complex situations and has logical and rational explanations for why they did something one way rather than another.

  96. I'd... by Anonymous Coward · · Score: 0

    ...take up some personal project or existing open source project that utilize Java and work on those, or IF you really want to get ahead try to guess what the "group" project will be and get started on that. IME group projects usually end up not being much of "group" "effort" where one or two people complete the bulk of the work. Alternatively you could talk to the professor and see about getting "finished" up early or something or maybe they can have you do something sort of undertable applying to another course that you'll eventually have to take.

    Although my guess would be that you likely need to work on your Java "skillz" more than what you got from reading the text, as in actual practice, so I'd just coast through the rest of the course while working on something in Java that you REALLY want to do as most of the course projects are generally utter crap, i.e. they might get the job done sometimes but they're generally pointlessly tedious rather than practical in a useful way -- they tend to get the "handson" in while the project itself is generally useless, of course some useless things can be fun(and eventually useful) but most course projects aren't or are so in such a tedious fashion that all the students are interested in is getting something churned out and done.

  97. Design patterns by Anonymous Coward · · Score: 0

    How about design patterns?

  98. Maybe... by andrea.sartori · · Score: 1

    ...if you do want to _read_ something, and to go beyond your knowledge of Java as a language, try Grady Booch's "Object-oriented analysis and design". Not very new, but very useful, and language-independent, too. (Did somebody else mention it? Too lazy to go through all comments...) http://www.librarything.com/work/174920/details

    --
    Mostly harmless.
  99. Re:Do we really want him writing code? by obarthelemy · · Score: 2, 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.

    --
    The Cloud - because you don't care if your apps and data are up in the air.
  100. Design Patterns by lemmis_86 · · Score: 1

    I can recommend the book "Head first design patterns". It teaches you to design object oriented software, and all examples in the book are written in Java! I also recommend you to read about software engineering in general and relationships between objects etc.., then of course, be creative and start coding something. I would recommend you to start building something in a nice framework for implementing GUI apps.

  101. Find a good IDE by Anonymous Coward · · Score: 0

    When I first learned Java, I read similar advice here on /. I did take the time to read K&R's bible on C. While it was interesting, it was also a pretty big waste of my time. Object allocation is not something I've ever had to think about in Java to avoid producing "poorly performing" code.

    Learn C if you need to write code in C.

  102. Re:Do we really want him writing code? by fishexe · · Score: 1

    Coding has nothing to do with language or syntax, but upon having an analytical mind.

    Apparently, English is the same way.

    --
    "I don't care about the Constitution!" --Bill O'Reilly, November 17, 2009
  103. Find a good IDE first by MacDork · · Score: 1

    For a beginner in Java, I would suggest learning how to use a nice free IDE like Eclipse before attempting to write too much code. Knowing how to step through code with a debugger instead of dropping in System.out.println() everywhere, open call hierarchies and declarations, getting inline javadocs by hovering over classes and methods, content assist to give you a list of all available methods... knowing stuff like that will allow you to learn faster and make writing your first apps immensely easier.

    1. Re:Find a good IDE first by Jearil · · Score: 1

      I'm going to say the exact opposite.

      Start out working with just a regular programmer's text editor. Vim, EMACS, textedit... something that gives you some syntax highlighting and some basic features but not a full blown IDE.

      If you start relying on an IDE from the start, you won't really understand your own code. If you use a wizard to generate code that you work with without knowing what that code does, that's not overly helpful. Also, jumping straight into a debugger as soon as you have a problem is a horrible practice to get into. What if something goes wrong on a production box that you can't easily replicate on your local machine? You can't hook a production machine into a debugger, you have to learn to read the code and trace it yourself. And if you practice Test Driven Development, your unit tests will show you were your bugs are rather than something like System.out.println() everywhere (of which, use a logger).

      IDEs are really great, don't get me wrong. I personally use IDEA and coding is much faster than in a plain editor. But be careful of giving yourself some really bad habits by relying on the IDE rather than your own noggin. It should act as a helper, not a substitute for the programmer.

  104. RUN! by hemna · · Score: 0

    After Learning the Syntax, the VERY next thing to do is run far far away from Java. It's a disaster of a platform. RUN!!! Save yourself.
    If you really enjoy pain, then use Java. If you like making the simple problems very complex, use Java. If you like waiting for app servers to restart a lot...use Java. If you like lots of
    complicated and noisy xml files just to do simple things, use Java. If you like using lots of resources to serve up simple pages, use Java. Other than that...Java is great!

  105. Next Book you should read. by Funks · · Score: 1

    Next Book = Effective Java 2nd Edition by Joshua Bloch

  106. Data Structures by Luthair · · Score: 1

    A quick look through the posts shows a number of people mentioning algorithms which is important, but before you get started you may need a better understanding of the different types of data structures and their efficiencies.

  107. After syntax .. semantics! by Anonymous Coward · · Score: 0

    If you want to learn "Java" the other things to understand are the standard library and if you are really keen, the language specification.

    If you want to learn to write something useful I'd agree with many comments here. Try writing something that someone might use. A little game or a little utility maybe. After that maybe get involved with a small open source project and learn to work with other people and other people's code.

    The other really important area to cover is the more abstract and fundamental theory. Algorithms, data structures, engineering methods. Learning other languages other than Java that do things fundamentally differently.

  108. Read the JVM specification and understand it by wangmaster · · Score: 1

    All too often, Java programmers have no idea what it means to be running within the JVM. They don't understand how the garbage collector works (just that it does, but it doesn't always does it?). They don't understand the differences between the different gc models. There's very little understanding of what the difference is between the various generations in the generational garbage collector, or what the difference is between native heap and vm heap.

    Also, understanding how the JIT compiler works, how the Java threading model works, and how to write thread safe code. Also, just because code looks thread-safe doesn't mean it is without appropriate uses of volatile keyword. Learn why the doublecheck idiom isn't safe until Java 5 and higher.

    There are alot of people out there who can write Java code. By understanding the VM, you can hope to write better Java code.

  109. Re:Do we really want him writing code? by Anonymous Coward · · Score: 0

    Frankly, I think you're an asshole. I've seen just as much "shitty code" from guys who have CS degrees as I have from guys who are self-taught. You sound more like one of those managers who thinks JavaScript and Java are the same thing than a real programmer. In fact, at my company we don't let the fresh-out-of-college programmers near the production code for quite a few months because all they really know how to do is re-factor. Nothing, nothing, NOTHING is more important to programming than experience. It's kinda like that douchebag from the other day's "self-taught programmer knowledge gap" thread who espoused the absolute need for understanding Fourier Transformations. You think way too much of yourself because of your degree. You're a turd.

  110. Re:Do we really want him writing code? by sublimemm · · Score: 1

    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.

    Having an analytical mind is only half the battle. I know lots of programmers whom started with COBOL and now work in a J2EE environment. They can break a problem down to it's bare elements and know how they work together, etc. What they can't do is basic best practices. They don't know how a hash map works, they don't understand exception handling, they don't understand encapsulation or really anything OOP. While having an analytical mind is important, I think it's silly to say that having a knowledge of the language itself "has nothing to do with" it.

  111. Code practice site by icknay · · Score: 1

    As I a little project I've built out the site http://javabat.com/ ... it's about having lots of little online problems for code practice. arc Big architectural ideas are important, but javabat just helps you build the basic but critical loop/logic/array/string skills. There's also a big section on recursion.

    1. Re:Code practice site by Cheesy+Fool · · Score: 1

      Excellent site. Thanks.

      --

      Hail to the king, baby!
  112. Great you have learned how to script... by FlyingGuy · · Score: 1

    First of all, congratulations on taking charge of your life and deciding to learn a new and potentially valuable skill!

    Java is a decent place to start, but Java is quite a lot like scripting. You never get down to the hardware, almost everything is done for you. By know you should understand the basics of looping and branching so do yourself a favor and see just how deep the rabbit hole goes.

    Now here is what I suggest. Go find an OLD computer someplace, perhaps a 386 or something like that and get a copy of DOS of some flavor. Pick up a book on C ( I recommend K&R ) and a book on assembler ( beginners level. Lean some low level coding. You might also pick up a used copy of "Data Structures, Algorithms, and program style using C" by Korsh and Garret

    I recommend this so you can have a decent understanding of how the machine works. Hi level coding in Java has many many degree's of separation from the actual hardware and IMHO a lot of "programmers" never learn this stuff and in doing so never really understand whats going on and so are lost when things don't really act like they expect.

    Understanding how the machine works will serve you well as you progress.

    --
    Hey KID! Yeah you, get the fuck off my lawn!
  113. Re:Do we really want him writing code? by Apathist · · Score: 2, Informative

    When the number of items is small; when insertions and deletions are common and/or time-critical; when ordering is important...

    Any of the above could alone be good enough reasons to use a linked list vs. a hash table, and obviously more than one criterion would make a stronger argument. But this is a very one dimensional discussion; in any of those cases, perhaps an array or an ordered tree would prove more appropriate... each case must be matched to a particular data structure on its own merits.

  114. Re:Do we really want him writing code? by Anonymous Coward · · Score: 0

    and there are plenty of non-compsci folks who write crap. Yes, there are benefits that come from studies, but it is not an exclusive club and it is definitely possible to "make it" without it. Coming from a compsci background (uwaterloo), I would still encourage formal studies to folks who want a good depth/breathe of experience and skills.

  115. A real language. by junglebeast · · Score: 0, Troll

    In answer to your question, that's 'nuff said...

  116. IDE mastery by Anonymous Coward · · Score: 0

    Spend some time getting really familiar with eclipse, netbeans, or whatever you're using. Start with the debugger. You may not have needed it yet, but when you're working on a group project and you're trying to figure out just exactly what the hell someone else's code is doing, your life will be easier if you're already comfortable with the debugger.

  117. Kernighan and Ritchie next by Antique+Geekmeister · · Score: 1

    To understand how much of Java _actually_ works, you have to understand the software it's written. Start with "The C Programming Language" by Kernighan and Ritchie.

    When you feel more secure about both languages, and have increased your employability by a factor of 3, I suggest you learn how _not_ to do several of the extremely bad practices common to Java programmers, such as redefining functions of the same name locally, and making the same function name do different things with different capitalization.

  118. Did you check their degrees? by SanityInAnarchy · · Score: 1

    I've met plenty of programmers with advanced degrees in Computer Science who couldn't tell me how to implement a linked list,

    That's covered in a freshman Data Structures course these days. Where did they get their degree from?

    --
    Don't thank God, thank a doctor!
    1. Re:Did you check their degrees? by thetoadwarrior · · Score: 1

      I took two years of Spanish and was decent at the time but I'm absolutely crap at it now. Like anything it requires that you keep it up. The guy he mentioned may not actually write enough code to actually be that good. He may have worked his way out doing programming and forgot a lot or just doesn't care and did just enough to get a degree and to do his job.

      I think that's why a degree doesn't really mean anything unless they have something else to prove they actually enjoy what they're doing and have done at least some coding outside of uni and work.

    2. Re:Did you check their degrees? by SanityInAnarchy · · Score: 1

      I took two years of Spanish and was decent at the time but I'm absolutely crap at it now. Like anything it requires that you keep it up.

      Really? Am I some sort of freak genius or something? I mean, I read about linked lists maybe once in a book sometime in high school. We've mentioned them in passing, and I'm sure they'll be covered later in this course, but I could write one, easily, right now.

      This isn't a complex concept. Even binary trees are more difficult to wrap your head around. A linked list -- I mean, even the name pretty much spells out what it's asking for.

      --
      Don't thank God, thank a doctor!
    3. Re:Did you check their degrees? by thetoadwarrior · · Score: 1

      Something like Linked Lists I'd remember. I was talking more in general and that people do get rusty (and languages move on) if they avoid programming...more so imo if they're relatively new to it.

    4. Re:Did you check their degrees? by SanityInAnarchy · · Score: 1

      Linked Lists is kind of the point, though. I get rusty, languages move on, and I forget what I know about a given language. I don't forget what I know about how to program.

      --
      Don't thank God, thank a doctor!
  119. Next up is design by beef3k · · Score: 1
    I could probably come up with 50 book recommendations for you, but to keep things simple:
    • Get a better feeling for OO design. I'd suggest "Head First Design Patterns"
    • As many others have suggested, grab a copy of "Effective Java, 2nd ed". Read a few items now and then, it'll improve your understanding of the language tremendously.

    As you read these books, come up with a hobby project where you actually implement something.

  120. Tip by Anonymous Coward · · Score: 0

    As someone who hires folks, here's a tip. Prove to me that you can cut it. Don't just tell me your skills, show me your initiative and experience by your projects and how you applied it. I look at personal and open source experience (I created some myself). Even if you are employed at a coding shop, continue to extend yourself. So, my recommendation is to look for an interesting project or challenge to solve.

    Hey, I'm a dev manager and I'm learning python at home by writing a generic command-line music tagging tool. It's pretty cool, it copies all tags and album art between any 2 formats; at least, I've tested aac/mp4, mp3, flac/vorbis, wma (ie. "tagger --copy file1.flac file2.m4a). Mainly did it to auto-sync my huge flac collection to aac/iTunes. Couldn't find any decent command-line tools for linux, so I started by mashing mutagen, quodlibet, and picard together as they all had parts of the problem solved. Works well.

  121. Code Code Code try Code Katas by Anonymous Coward · · Score: 0

    A lot of people mentioned coding I agree with that sentiment. The best way to learn how to code is to do it. But coding on a big project can be daunting for a beginner. I would recommend trying to program some Code Katas. They are short little applications should take 1/2 - 2 hours. I think it's a fun way to get some code written in a new language.

    http://codekata.pragprog.com/codekata/
    http://katas.softwarecraftsmanship.org/

  122. Basic Algorithms, C and SQL/App Development. by elnyka · · Score: 1

    After Learning Java Syntax, What Next?

    Hmmm, depends on what your goals are as you pursue your studies. The best thing (usually) is to write code that is sufficiently large and complex. However, that usually only happens at work or when taking classes beyond the 3000-level (assuming a good school and instructors.)

    For n your case (studying part-time while working on a non-programming job), there are a few things I would recommend you to pursue (which I would recommend to any full-time or part-time student.). These I recommend based on my Java experience (10 years out of 15 in development/IT.)

    Learn C

    It is very hard to be an efficient Java developer without having a good understanding of explicit resource allocation management, and concepts such as passing by value and passing by reference.

    In Java the garbage collector does memory allocation for you, but without a good understanding of it and an object's lifecycle (.ie. when its finalizer get called) and pointers, you can still leak resources. This is perhaps the #1 thing f* things up on many poorly-written JEE applications. Having do to do all that crap by hand, specially in C, that will open your eyes on how much elbow grease the JVM does for you. It will help you learn to spot poorly written Java code.

    Also (and this is based on observation), it is hard to truly understand Object-Oriented Programming without understanding the fundamentals of Structured Programming and how to write good Procedural code. This will teach you how to spot bad OO code (code that is still procedural or code that tries excessively to model everything as objects.)

    Learn Basic Algorithms and Data Structures

    I think you are in the right track with this. It would be good if you can learn these in a procedural programming, be it C or Pascal. This is extremely important because a lot of mediocre Java/.NET programmers cannot differentiate between algorithms and ADTs from classes and objects. Algorithms and their associated data structures exist independently of object-oriented constructs.

    Learn SQL and Relational Database Theory.

    Except for few specialized applications, most Java applications exist to manipulate data on a relational database. There are OR mappers nowadays that do the work for you to map from Java to SQL, but one needs to understand SQL and Relational Database Theory to really know how to get the best of OR mappers.

    My 2c.

  123. Sure we do by Weaselmancer · · Score: 2, 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.

    --
    Weaselmancer
    rediculous.
  124. You have learned Java by ObsessiveMathsFreak · · Score: 1

    Now you must unlearn it.

    Specifically, you're going to need to learn how to use verbs again.

    Try php. It's got a great function library and you can build webpages quickly and easily.

    --
    May the Maths Be with you!
  125. Re:Do we really want him writing code? by thetoadwarrior · · Score: 1

    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.

    Hopefully he won't have to work with a jack ass like you. I know people with a "proper computer science background" that cause grief for people without a proper Cs background and even those with a proper CS background. It doesn't matter how you learn if you don't take it seriously. People who think you're automatically good because you have a degree are one of the biggest problems.

    A degree is very much a good way for most people to learn because they're given structure and can be forced into doing things right but in the end it doesn't mean shit. You still have to see what the individual can do

    I would suggest the guy get the Algorithms book (have it myself it is decent) and as well books on design patterns and UML. But most importantly he just needs to start bashing out lots of code and once he's comfortable working with himself he needs to get into a team, whether by starting his own for a project or joining an open source project so he can get experience working with others which a lot of self learners can struggle with because it can be quite different.

    But he's definitely got to start writing lots of code. This is what a lot of people miss out on. Especially those who think "Ok, I've got a degree now, give me $100,000". Everyone needs to get their hands dirty and all sorts of mistakes to learn from. Degrees and books can't cover everything and those alone won't make you an top notch programmer.

    I am aware you mentioned spending years afterwards learning the craft but face it, everyone needs to start off somewhere and yes inexperienced people can make more mistakes but again those mistakes are what will help them improve. I would hope you're giving people some insight to how their mistakes can be avoided rather than just fixing them and saying nothing because you're not helping them or yourself.

  126. Re:Do we really want him writing code? by Anonymous Coward · · Score: 0

    don't be a dick

    Don't be an apologist for poor knowledge and sloppy thinking.

  127. Re:Do we really want him writing code? by webishop · · Score: 1

    As a counter-example, I one worked on a program written by someone with a Ph.D. in Computer Science. The code was supposed to control a very precise machine operation quickly, and in real time. The program could be used as a perfect teaching exemplar in how to write top-down code. The main control loop, the very deep subroutine nests were beautifully crafted. The program could also as easily be used as a perfect teaching exemplar in how NOT to write machine control software. The mechanical design was borked from the beginning: a desktop computer was controlling an in-machine plc, the two splitting up key functions in a truly schizoid manner. The OS was Windows 95. WRONG. The language was Visual Basic. WRONG. From start to finish, the project was total crap. The man responsible for it theoretically knew comp sci. He just didn't understand how it worked.

  128. After Learning Java Syntax, What Next? by Rufty · · Score: 0, Troll

    Therapy.

    --
    Red to red, black to black. Switch it on, but stand well back.
  129. Design Patterns by Anonymous Coward · · Score: 0

    If you are interested in Object Oriented Programming...

    "Design Patterns: Elements of reusable Object-Oriented Software"
    ISBN-13: 978-0-201-63361-0
    ISBN-10: 0-201-63361-2

  130. Get that guy a chair... by greymeister · · Score: 1

    I think we're missing the big picture. Where are you a security guard? I think we'd all like to know what gets guarded at night by people reading Java books :)

    1. Re:Get that guy a chair... by mindstrm · · Score: 1

      I've seen cab drivers, security guards, valets, waiters, line cooks, and just about any other type of lower-paying job I can think of with people studying some type of computer technology on the side with ambitions to get out... or just for fun.

      This is probably way more common than you think.

  131. Open Source by msm8bball · · Score: 1

    You can start working on some open source software. Spring RTS is a great way to get started. Or make your own text editor.

  132. Re:Do we really want him writing code? by Anonymous Coward · · Score: 0

    I've seen the opposite also. People who think because they are "self-taught" and have a few years of experience, they are amazing coders.

    A professional degree gives you the structure and the foundation. I've seen "self-taught" coders reinvent the wheel numerous times because they didn't know what data structures were.

  133. Android by BoBaLuEy · · Score: 1

    I made a couple of apps for the G1 and I found it very educational. I agree with most of the replies in that I took a bunch of CS classes a few years back, but nothing compares to writing code yourself. The cool thing about making an Android app is it's almost completely the same syntax as Java and you can make money from it. Android is getting really big now and it definitely wouldn't hurt for you to get well versed in it anyway and it will help you better understand Java as well. One very important thing with Android is it's little more of an issue with make sure your apps run on multiple devices whereas with Java on PCs, you might take that for granted. At least I know I did. Also, you have multiple inputs for each phone and it is very easy to get started and there are a ton of examples and forums for help with your code.

  134. Re:Do we really want him writing code? by DudeTheMath · · Score: 1

    I can 100% back you up. I've been coding for over thirty years, in everything from Z80 machine code to C#, written compilers, you name it, and somewhere in those thirty years I took a required semester of Pascal.

    Write code. Read other code. Decide if it's good or bad. Take the good, excise the bad, write code and read code. Someone up the chain said, "typing, lots and lots of typing."

    Learn algorithms and data structures (I'm a mathematician, I have to say that). Sure, there's libraries to do the scutwork, but you have to decide which structure is going to work for your problem.

    --
    You save only 59 seconds over 8 miles by going 75 instead of 65. Do you really have to pass that guy? Do the Math!
  135. Introduction to Algorithms by pz · · Score: 1

    You sound like a quick study. Go buy a copy of "Introduction to Algorithms" by Cormen, Leicerson, and Rivest (yes, *that* Rivest). It's a very, very good book. But, make no mistake, any book on algorithms that is easy is a bad one, and this one, while clear, is difficult because there are some algorithms, some very important ones, that are hard to understand. Pick up a used copy from Amazon.

    --

    Put my fist through my alarm clock with its ding-dong death inside my ear. - The Blackjacks.
  136. Ideas by m6ack · · Score: 1

    Go to http://freshmeat.net/ search for "Java", find a java project that interests you, download the source -- see if you can understand it & get it to run, contact the author to see if there is anything you can work on or tweak.

    Port Nethack (http://nethack.alt.org) from ANSI C to Java?

    Build an Android application?

    IOW -- find a way to apply your knowledge. Program a little every day -- just for the fun of it.

  137. Re:SQL - Oh, Bull***! by taoboy · · Score: 1

    The most complex piece of Java (or any other language for that matter) I've ever worked with didn't have a single line of JDBC, SQL-whatever. There are a butt-load of scientific and real-time applications out there that don't have a DBMS anywhere in the code tree. And, if I'm on the hiring committee, not one of my big concerns for the things my company does (defense-related).

    That said, DBMS-oriented programming is useful, but the world doesn't revolve around it. And yes, I have at one time taught it and programmed it (DBMSs, that is), so I'm not a "diametric myopic" here...

  138. Re:Do we really want him writing code? by fluffy99 · · Score: 1

    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 .

    I feel the same way when I'm hiring guys with Microsoft or other certifications. If they can't answer basic questions, I don't hire them. I had one guy claim he knew Server 2000 really well even though he had an MCSE and less than 1 year of experience. I called his bluff by pointing him to a computer that was blue screening on boot and asking him to fix it. This MCSE twit didn't know how to boot in safe mode. For what I needed, I'd much rather have the guy with lots of experience.

  139. Ant by devman · · Score: 2, Interesting

    Learn to use Apache Ant. When I was in school they didn't cover Ant at all, it wasn't until I got in to the "real world" that I encountered Ant.

  140. Learn ruby & guice by kikito · · Score: 1

    If you learn ruby (& probably rails), when you go back to Java, you will write better code.

    And you will miss ruby :)

    In other order of things, guice might be a nice addemtum for you.

  141. Excellent advice: I can only offer 1 more thing... by Anonymous Coward · · Score: 0

    "Program something for real. Be goal-oriented. No amount of working through exercises teaches you programming for real." - by GrahamCox (741991) on Sunday February 21, @08:36AM (#31217944) Homepage

    Per my subject-line above, which was in regards to that which I quoted from you? Excellent advice on YOUR part, GrahamCox...

    HOWEVER - I can only suggest 1 more "small thing" to 'top-it-off':

    Program something YOU have always wanted to create yourself, as it helps keep you focused & interested... i.e.-> So what you build is more-or-less, a "labor of love" & you feel "passionate" about it, & inject your best "craftsmenship" into its construction!

    (NOW, considering this is JAVA we're talking about, I think it has a 'wide open future' on CELL PHONES more than anything else (because plenty of them, like the SONY line, have emulators for that type of thing so you can do it right on your PC to start!)).

    The coursework he's involved in sounds an AWFUL LOT like a course I took called "Datastructures" to be blunt about it.

    (Of all the courses I had taken "in major" for a comp. sci. degree, I consider it one of the MOST valuable, & worth taking in fact (teaches you ALL KINDS OF TRICKS that can save you years of frustration & mistakes, plus, how to eke the very best performance out of an app (b-trees, sort variations & when/which make the most sense + with what dataset sizes, etc. PLUS things like recursion & to know what the 'pitfalls' of it are (memory consumption & cpu usage mostly imo here on this note), & FAR MORE))).

    Still - I personally feel @ least that a PERSONAL INTEREST on the part of a programmer, especially in what you're building, matters most though, imo... so, hence why I suggested that which I did to "supplement" what you wrote, GrahamCox... good post & point on your end by all means imo!

    APK

    P.S.=> "Onwards & Upwards!", & for those of you with "mod points" (I don't have them, I post intentionally as "A/C" here)?

    Mod GrahamCox up... apk

  142. Two essential books by Raul+Acevedo · · Score: 1

    Effective Java and Java Concurrency in Practice. These are a must have for any serious Java programmer.

    --
    In a real emergency, we would have all fled in terror, and you would not have been notified.
  143. My boss gave me this... by A.+Bosch · · Score: 1

    201 principles of software development http://portal.acm.org/citation.cfm?id=203406 I found this useful. Cheers, and good luck!

    --
    Where there is the necessary technical skill to move mountains, there is no need for the faith that moves mountains.
  144. Geez...my apologies by Anonymous Coward · · Score: 0

    I'm not a coder but after scrolling down the thread some... Lot of fail in the replies. All these mastermind coders didn't read what you wrote, they seem to have hallucinated what they wanted to read instead.

    Maybe this is why there is so much bad code out there, they get shown an outline of what needs to be done by the people cutting the check, then half understand it at best, and go off on a tangent and do something else, then blame that eventual failure on their bosses or customers.

    If I knew what would be good reading material to advance your Java understanding for you I'd forward it, but I don't. I apologize for the guys here who probably know but are too caught up on bragging about how good a coder they are and how you don't need a degree, etc.

    I found this with a google search, some amazon java book list, a lot of cheap used ones there, fit your megare pay budget probably. Good luck.

    http://www.amazon.com/Good-Java-Books/lm/1OO093FMQ6VE

    Oh, my non smart but feature phone appreciates lightweight quality java apps. TIA to you or whoever writes them. Not all of us can afford 500 dollar smartphones and thousand to two thousand dollar yearly "plans", but we'd still like some apps that work well on cheap phones.

  145. Learn the underlying mechanisms by srealm · · Score: 1

    Try learning more about what goes on behind the scenes. The syntax is one thing, making useful code is another. Making EFFICIENT useful code is yet another.

    I've never been a huge fan of Java because it does so much for you, and you never really understand what's going on behind the curtain. Worse, unless forced to, you never have to deal with or think about resource allocation/deallocation, I/O access & caching, and the other things the JVM is doing for you or hiding the real details of.

    The amount of time I've seen Java coders, who never coded in anything but java, spend DAYS trying to figure out why their program keeps having 'spikey' peroformance only to eventually realize it's the garbage collector, and then spending weeks more trying to figure out how to minimize the 'damage' without having their application's resource usage go through the roof by either disabling it or reducing it's frequency to unacceptably long times.

    Of course, if you don't care about efficient coding, then none of this matters as much, but the point is - if you understand what is going on behind the scenes, you can either avoid or mitigate these problems ahead of time rather than spending weeks trying to figure them out, then weeks more trying to figure out how to minimize them without having to re-write large portions of your code.

  146. if you want to USE Java in an actual job... by Tumbleweed · · Score: 1

    If you want to USE Java in an actual job, you might look at the industry you're wanting to be in. By far the most interesting use of Java (to me) is in Android app development. And, like everyone else said, start writing actual code. There is no substitute for that.

  147. Re:Do we really want him writing code? by Anonymous Coward · · Score: 0

    Oh, I think I've worked with your code before.

    You're the one who repeatedly uses O(n^2) algorithms, when there are numerous obvious O(n) or better algorithms available. Why? Because your "Teach Yourself VB.NET in 24 Hours" book didn't mention anything about algorithmic complexity. Then when your code runs awfully slow, you blame it on your compiler, and then tell management or your customer that they need to buy better hardware.

    You're the one who, when programming in Java, uses only arrays. You don't know what collections are, let alone generic collections, because your "Java 1.1 for Dummies" book didn't mention them, given that it's from 1997 and from before those classes were developed.

    You're the one who insists on building SQL queries via string concatenation, including unescaped user input, because that's how your shitty PHP tutorial you found online did it.

    Sure, anyone can be a "professional coder" without any sort of formal education. But such people are usually the worst of the worst, and are so clueless that they aren't remotely aware of when they're making major fuck-ups that'll threaten the quality and security of the systems they're developing.

  148. Data Structures? by JimXugle · · Score: 1

    I'm taking Java this semester and we're moving on to Data Structures.

    This is the book my class is using. It's written by my professor and it seems pretty good.

    --
    -jX

    Don't you just love politics? It's like a comedy of errors.
  149. Programming on Purpose by bugi · · Score: 1

    Read Plauger's Programming on Purpose series.

    Then pick up another language. If you want to stay within the jvm universe, try jython or scala.

  150. Mod Parent Up by im_dan · · Score: 1

    Great book, It is exactly what the poster is looking for. Its all about taking the things you learnt as a beginner and improving on them

    --
    Look over their, it's a grammar nazi
  151. Do something practical by nsayer · · Score: 1

    The first two things I wrote in java were the quintessential '15 sliding tiles' puzzle game and an Othello game. I wrote them in swing. I wrote them not because the world needed yet another implementation, but because it was a fun challenge, and I got some practical experience in writing not only Java, but UI code (in this case, Swing, but the concepts had far wider applicability).

    They're still on the net, for what it's worth. Don't expect a lot.

    The third thing I wrote was MacXM, though that was in Java/Cocoa. Its follow-up was JXM.

    I mention all of this because my advice is that once you've gotten all of that theoretical stuff in your head, the next thing you should do is write something. Even if it's just something for you, it's still something.

  152. Re:Do we really want him writing code? by exomondo · · Score: 1

    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.

    That's a broad statement, it all depends on where you studied. If your course includes a lot of group work you are going to get a better feel for the social aspects. Then there are those that include industry projects, and even further to that are those that include industry placement experiences. Not all CS degrees are the same.

  153. Design Patterns by TheCount22 · · Score: 1

    Learn design patterns and data structures. Good programmers can't live without them.

  154. Re:Do we really want him writing code? by exomondo · · Score: 1

    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.

    I agree with most of what you are saying, a degree doesn't guarantee a good coder just as being self-taught doesn't. The core of what i look for is experience, real success in the real world!

    How do you get this at the outset though? Of course a CS grad with no experience will be preferable to a self-taught with no experience, even though it doesn't necessarily mean they will be better, so the way to enter the industry is to work on OSS projects, its a great way for someone to get that real-world experience needed to be considered for a professional role. The more real experience you get the less your education matters.

  155. Re:Do we really want him writing code? by timeOday · · Score: 1

    That's a broad statement, it all depends on where you studied. If your course includes a lot of group work you are going to get a better feel for the social aspects.

    Come to think of it, what was really lacking in all the group projects I ever did in school was that none was large enough it wasn't easier to just do myself, whereas real-world projects you simply can't. That changes everything.

    Then there are those that include industry projects

    A fair point. The mechanical engineering school where I did my bachelor's degree had a "capstone project" that was larger scale than any of my class projects in CS.

    All that said, I don't think it's bad to learn theory in school, and pick up experience later, at work. Most school time should be spent learning things you won't just "pick up" later. And if you really want work experience during school, get a job.

  156. After Learning Java Syntax, What Next? by Anonymous Coward · · Score: 0

    sendmail.cf

  157. Learn how to use the external tools by asaz989 · · Score: 1

    Algorithms/data structures are solid grounding for whatever you want to do; from that point, it pretty much depends what kind of programming you want to do. If you're planning on doing graphical applications, try to learn about GUI programming (if you're definitely sticking with Java, learn its swing/awt graphics API). If you want to make a web-based Java applet, learn the workings of HTTP and setting up Java to interact with a browser. Basically, from this point (after the algorithms and stuff) learn project-specific concepts, and perhaps a broader range of languages (once you know one, it's a lot easier to learn others - the concepts are pretty much the same).

  158. Re:Do we really want him writing code? by Niris · · Score: 1

    Actually I didn't put it in the article, but I am a computer science major, and have already taken the two courses on syntax and whatnot for C and C++ that are offered at my school before I transfer to get into the major courses. Only the C++ course was required, but I took the others for fun. Have also taken circuit boards, web development, javascript and up through differential equations for fun.

  159. Depends.. by mindstrm · · Score: 1

    What's your end goal?

    Algorithms are good - learn that stuff, at least the basics.. then implement them in java. Then go and learn how to implement them in a few other languages, so you get a feel for what's common, and what's just unique to java.

    you could hit up some of those automated online programming contests that are always running - they run hundreds and hundreds of problem sets and let you solve and submit code, of all kinds of difficulty levels - challenge yourself to solve those in various ways and you'll learn a lot along the way.

  160. Re:Do we really want him writing code? by exomondo · · Score: 1

    Come to think of it, what was really lacking in all the group projects I ever did in school was that none was large enough it wasn't easier to just do myself, whereas real-world projects you simply can't. That changes everything.

    I certainly can't disagree with that.

  161. Re:Do we really want him writing code? by jo42 · · Score: 1

    Around here we call those folks "highly educated idiots".

  162. Anonymous Coward by Anonymous Coward · · Score: 0

    Learn J2EE. I thought I knew java until I started working with it in the real world and realized I needed to learn J2EE. Download tomcat or better yet JBOSS and see if you can get s project up and running. The head first servlet book is a good learning tool.

  163. Re:Do we really want him writing code? by ShakaUVM · · Score: 1

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

    Sort of. The process itself of having someone look over your code and beat you over the head when you do Common Mistake Number 12 is very valuable.

    In a particular bit of irony, Walter Savitch (author of TFA's textbook) was my professor for intro to computer science, and we beta tested his C++ textbook (the one before his java one). We got (nearly) free books, and I got a job working as a professional coder after just two quarters in his class. I'd been programming all my life, but having experienced TAs look over my code was very very helpful.

  164. Seeing the big picture is hard. by MikeFM · · Score: 1

    Good books on how to actually program are few and far between. You get syntax, libraries, design patterns, and project management but how to sit down and really write this kind of program or that kind of program is rare. It's a lot more complicated to write a fully functional game or enterprise management system than anything you learn in school and often learning takes place as trial and error and by looking at other programmers trial and error code. Learning the right overall structure is very domain dependent and can be tricky. Writing code is a good start but it's a slow way to learn.

    --
    At what price learning? At what cost wisdom? The price is a man's peace of mind, and the cost is his life.
  165. Re:Do we really want him writing code? by MikeFM · · Score: 1

    A lot of the bad code I've seen was from CS majors. They take a lot of classes but don't spend enough time writing code. They don't learn their history and keep recreating the same thing. Overall I'd rate CS majors as about the same as anyone with an equivalent hands on experience. Any craft needs years of study and practical experience before you can be a master. Even then it's as much art as anything. You have to have a feel for it.

    --
    At what price learning? At what cost wisdom? The price is a man's peace of mind, and the cost is his life.
  166. I despair. by wonkavader · · Score: 1

    I always despair of this young'uns who ask about their programming careers while talking about a particular language. Until you're close to language agnostic, you don't have a programming career.

    Go learn why Java sucks. Go learn why every programming language sucks in some (or many) ways, so you can choose the right language for the task.

    Then use some other languages to actually do things.

  167. No {} by krischik · · Score: 1

    No the next language should be radically different and preferably be one which does not employ { and }. You learn from the differences not from the similarities.

  168. Re:Take the Sun Certified Java Associate Test by krischik · · Score: 1

    For a beginner I guess it might be better to start with the associate test. The programmer test is the biggest of the lot.

  169. What Now You Say? by Etriaph · · Score: 1

    If, by reading all of the material and going through all of the exercises you have thus far, you are preparing to write a test... congratulations, you're probably finished learning what you need to know. If you're preparing to get a job, you have some work ahead of you. I've been writing software professionally since 1997 (not as long as some, but long enough to impart *some* knowledge.) The more time you spend trying to solve real problems by writing software, the better you will become at doing just that. Having knowledge of an API, system, class library or a language's syntax will never compare to actually doing something useful with that language.

    When you get out of school you'll end up running into languages you've never worked with before, didn't spend any time learning and you will be able to pick up their syntax in a very short period of time (for me, recently, it's within hours.) Learning the gotchas of each language/platform combination can take a very long time. Learning how not to shoot yourself in the foot in those languages can take even longer. If I were you, I would create a project for yourself, define a list of requirements. Then, go through the list of requirements and attach an hourly amount to each one, your estimate of how long you think it will take you to perform those tasks. Then, perform them. Don't necessarily focus on making sure you stay within the time you set for yourself, just focus on providing the best solution per task that you know how.

    Your first self-made project might go over the hourly allotment, it may not, but either way you'll be well on your way. The next self-made project you assign yourself should be longer, more complex and involve more features (perhaps additions to the project you assigned yourself the first time.) Practice makes perfect. Also, do your best to try not to be "creative" necessarily, solve the problem, don't try to be a code hero, and you should do fine from there.

    --
    "It's here, but no one wants it." - The Sugar Speaker
  170. Just Do it by Anonymous Coward · · Score: 0

    Start working with an IDE like Eclipse or IntelliJ IDEA. I prefer IDEA over eclipse, and there's a free version that's perfect for a beginner. Next you should start learning a web framework like Struts, or a more general framework like spring. Get a database management system like MySQL and store and retrieve stuff. Configure the DB within the confines of the frameworks.

    Then start creating stuff. Make a simple web app.

  171. Programming puzzles by vrmlguy · · Score: 1

    I've seen web sites that present an assortment of algorithms for the visitor to write in the language of their choice; if someone has a link, please reply with it. However, my first search query turned up an interesting variety of links that are relevant. While I didn't find my objective, I found lots of sites discussing interview questions (hopefully, useful in the future) and reviews of various books (some Java, some other languages).

    I echo those suggesting learning a new, different language. I'd suggest Python (which has a varient, Jython, that is written in and is useable with Java) and C (because I agree that it will quickly teach you what really goes on during memory management).

    --
    Nothing for 6-digit uids?
  172. How about... by zztong · · Score: 1

    A favorite book of mine is "Refactoring - Improving the design of existing code" by Martin Fowler. It's probably best read after you've written code for a little while.

    You might find "Head First - Servlets and JSP" kind of fun if you're interested in programming web applications. I'd save JSP for later and focus on servlets if you're just starting out.

  173. Read Sun's Java Tutorial by Dalzhim · · Score: 1

    If you want to learn how to use Java's APIs, you can have a look at Sun's Java Tutorial at this address: http://java.sun.com/docs/books/tutorial/index.html There are quite a few tutorials to cover the basics, and then there is the specialized trails section which you can read when they become needed.

  174. Lots of time should not be wasted time. by Anonymous Coward · · Score: 0

    Why should he do that?

    Why exactly?

    Some of you are really impractical and suggest the stupidiest things frankly.

    If he does not have a formal programming background he should start to develop a solid understanding of how programming works. Algorithms,patterns in object oriented languages, the lot, applying his Java knowledge to that, that way he becomes more proficient in the aquired skill while developing a solid foundation about programming in general (after that he can do the lisp nonsense you are suggesting).

    If he has a background in programming (unlikely given the conetxt of his comment) he should apply what he just learned and get programming.

    Only in Slashdot somebody seriously suggests that the best way to fix newly acquired knowledge is dropping what you just learned and learn something else first,

    How can somebody be so ilogical and uninformed (any teacher will tell you that repetition, not comparision is required to root newly acquired knowledge).

  175. Oh goodness. by Anonymous Coward · · Score: 0

    Somebody with a degree can see beyond the language.

    I would go as far as to say that, depending on the University, you can even think about the social, cultural and political implications of what you do.

    Never met a self thought programmer that appreciated this, they always thought that their code deliviering a result whas all what was needed (obviating things like security, documentation, accountability, the history of the art in the fiel in question, and other aspects of the context in which a program is wirtten).

    Also the technical aspects of programming are more roundly appreciated and understood by somebody that has a full appreciation of how a system works (people without formal education often forget about the most important part of the system: the people, the users), and about how a computing system in particular behaves (most programmers without a degree I have met really believe that arrays or hashes can be as big as you want, no need to care about pesky restrictions of any kind....).

    There is a reason for a degree, but may not be one of the reasons you have thought about so far.

  176. Good idea, but not immediately after. by Anonymous Coward · · Score: 0

    The guy just learned Java.

    To jump into C now is frankly a stupid suggestion.

    He should become master of this domain first, and if he does not have a formal background in computing and programming he should quickly concentrate on that and practice in what he knows now.

    Unless what you want to do is to confuse him and deject hims as a future competitor, in which case I am happy to torpedo you evil plan.

  177. Hibernate, Hibernate & Hibernate by Civil_Disobedient · · Score: 1

    Hibernate makes all of Java worth it. I probably spend most of my weekly swear-word arsenal allotment on Hibernate, but fuck if it isn't the most powerful tool for connecting a web front end to a complex database schema (complex == dozens/hundreds of tables, stored procedures, complex joins, etc.)

  178. A round-about way of applying Java knowledge by Mad+Monk · · Score: 1

    It's not Java, but if you're looking for something to read, and you want to learn something in Java, then read this: http://designpatternsinruby.com/

    Then, go back and figure out how to do the same things in Java.

    You get the bang of learning Ruby, which is kinda fun, you get to learn OO design patterns which are very valuable, and you get the critical thinking of going from one language to another, and figuring out why they're different(or the same).

  179. anonymous coward by Anonymous Coward · · Score: 0

    I like to think of programming languages as languages, a form of communication between humans and machines and humans and humans (read code maintenance).
    So, equivalent to learning a new human language, with syntax, you have learnt the alphabet, the ability to form simple sentences and most importantly - swear.
    You will continue to swear (write awful code) a lot before you realize that you are pissing everyone and yourself off.
    Soon, you will start with kindergarten rhymes (organizing code into functions, following naming conventions, discover different methods of passing parameters, when to make a variable an instance variable or keep passing it in functions. etc).
    This step is the hardest: Next you would start with poetry, and that's where the fun is. (Object orientation, design patterns,...). You will feel invincible, confident and proud.

    Few tips for "along the way":
    1) The fastest way to learn a language is to speak as much as possible. Same applies to any computer language too.
    2) A linguist can master a language much faster than us layman blokes.
    Suggestion: Be a programming languages linguist. As you pick up languages, you will see common patterns in syntax, structure and code organization. A book on programming language theory or compiler theory can give you insight many of these patterns and reveal fascinating insights of why the syntax is the way it is and what you can easily say (code) and not so easily say (code) in any language

    And I wish thee "GodSpeed" in this journey.

  180. I wouldn't start with Java by nsebban · · Score: 1

    While Java isn't a bad choice, I don't think it's the best entry-point for someone learning programming by himself. In your case, I think I would start looking around for other options, especially Python. A good mix of book-reading for the pure theory, community-based support for your specific questions, and a LOT of practice is the key.

    --
    ____
    nico
    Nico-Live
  181. Software engineering by Anonymous Coward · · Score: 0

    Some suggestions here have said that you should write code, make a program of some type, etc. Those are of course excellent suggestions, and they will help you along the path to discovery, self-teaching, and mastery.

    But if you need to have an actual book to read while you're sitting at work, I would suggest something about software engineering. It's likely not Java-specific, and a good book very well may use another language for its examples. The basic goal, though, would be to learn how software is built in the much larger sense. Now that you understand what a tree is, how a loop works, and presumably how to implement common algorithms, you can start learning the concepts of how to put those pieces together into a larger work that solves a problem.

    If you're looking for a project to work on whenever you're not chasing a stoner with a dog, two chicks, and their secretly gay friend, I personally think that building small games (Pong, Frogger, Tetris) is a great way to build practical experience, but I'm probably pretty biased. Maybe you can think of something else you can create that will improve some aspect of your life.

  182. Next.... by Anonymous Coward · · Score: 0

    1 - Learn Java syntax

    2 - ???

    3 - Profit!

  183. Beware... by taradfong · · Score: 1

    My job is to code. I had a neighbor that worked in a paint factory. He got hurt, and went to school to learn software. Pretty soon, he's coming home talking to me about UML / Booch and other esoteric OOP topics that I barely had a grasp of. I thought, gee, wow, it is amazing to see how fast a blue collar guy can come up to speed. But then it all kind of fizzled out. And I wondered for a long time why that was. How could someone get so far and be able to recite complex comp-sci topics and then give up?

    And the answer is, there are (at least) 2 components to being a s/w developer. You need to be able to think and analyze and understand. But you also need to be able to - and more importantly - slog it out to make it work. And it's that slogging out that - at least in my experience - is where you truly grok the information and become effective and confident and useful.

    So, that's why I say 'beware'. You might be having one of those 'I know Kung Fu' moments, because you can understand your textbook. And that is a wonderful thing. But unless you cement that knowledge by actually using it - and in particular, by learning to debug hairy problems - it is at risk of floating away.

    I mean, I could pick up a cutting edge cardiology book and, given a few weeks, recite and even talk intelligently about topics that most doctors wouldn't know. I could probably impress virtually all of the population with this knowledge. But, I would be a long way from being someone anyone would hire to cut someone open. Balance your book knowledge with practical knowledge. You need a residency.

    --
    Does it hurt to hear them lying? Was this the only world you had?
    1. Re:Beware... by bolthole · · Score: 1

      eh.. more than that, I'd say you actually have to CARE about programming.
      Kinda like being an artist. you can "learn" how to paint. maybe even get decent at photo-realism.
      But if you dont WANT to paint... you're either not going to be very good with the final works, or you wont be very "productive".

  184. SQL, JavaScript, ANT, Design Patterns by The+Abused+Developer · · Score: 1

    add them to the luggage - on the current state of the market only Java is not going to get you a job. write a toy j2ee app with all the mvc buz in it - keep on the standards so that you learn the core - jsp, servlets, jdbc, leave the candies like spring/hibernate/struts/wicket for the icing at the end of handling the core like a pro.

  185. Re:Do we really want him writing code? by guyminuslife · · Score: 1

    "find a company with an entry level programming position -- there are plenty of them around!"

    Really? Where? 'Cause I've been looking.

    NEED JAVA DEVELOPER
    Must have:
    - 5+ years development experience in professional environment with Java, J2EE, JSP, and JDBC
    - Professional experience with Oracle RDMS.
    - Intimate knowledge of EMS/SAP/WYSIWYG/BLAHBLAH/$WHAT_OUR_VENDOR_SELLS systems.
    - Previous experience working in $METHODOLOGY
    - Bachelor's degree in Computer Science or related field.

    Even if they are hiring entry-level programmers, nobody says they are. How does one get "5+ years professional experience with $WHATEVER" if there's no one hiring that says, "Look, we don't care if you've used whatever API, just so long as you can learn ours pretty quickly."

    --
    I don't believe in time. It's a grand conspiracy designed to sell watches.
  186. Re:Do we really want him writing code? by bolthole · · Score: 1

    As to the submitter's question, my honest answer is to forget the syntax. What you really need to understand is the underlying logic of how and why to do things. Once you have a strong basis in logic, languages just become syntax and you can pick that up in a matter of days when the need arises. It also allows you to better recognize when a given language isn't the right tool for the job.

    Well, it's not JUST syntax.
    A *good* CS degree, would teach you the lesson, that different languages, require different approaches, to use them *well*.
    It's easy to "learn java syntax, and write java code".

    it is actually somewhat difficult (judging by the amount of FAIL out there) to write non-trivial, speedy, and *efficient* java code.