I am an efficient person, and I am trying to find the best method of becoming a great Java developer. Here’s what I’m thinking:
- First, learn syntax and Object Oriented concepts. Practice it, and read it as fluently as a spoken langauge. Program very small, all-in-one class programs (30-50 lines) to practice basic concepts, and finish most of the codingbat pratice problems.
- Learn the fundamental libraries: java.util, java.lang, and java.io. Master these, and the concepts that apply to them. Write some small programs with simple class structure, and solve a bunch of problems on codeabbey with the newly taught concepts.
- Become familiarized with many of the other Java libraries by writing a program based around the concepts that are convered in it. Ex: I could make a simply painting application w/ java.awt. Each program may take a couple days to complete, and will have class structures that will become slightly more complex over time.
- Start making medium sized projects and study source code of highly successful java projects. These projects might take a week or two, and will mostly be clones of simple applications and utilities. Do this until I am very comfortable with Java and the standard libraries.
- Start to take on progressively bigger projects. Look for big open source projects to gain experience in, and look for small time jobs (that progressively get bigger) in Java development. Maybe get certification, and take some test to verify Java programming abilities.
I would love some criticism on my plan, and if some of the more experienced programmers could tell me what they would do if they were to learn programming all over again. I am currently on the tail-end of step 2, and am highly motivated. Thanks!
4
That sounds like a great plan. Unfortunately, as they say in in the military “No plan survives contact with the enemy.”
Learning any complex subject can rarely be handled in a such a simple linear fashion. The fundamental libraries are huge, and as a beginner you simply won’t have the context need to understand large sections of them. Heck, I’ve been programming for 25 years and large sections of them are completely opaque to me.
In my experience learning programming requires lots of loops and recursion:
- I hear about some cool new tool that might be useful in a small
project I’m working on. I read the documentation. I have no idea
what it’s talking about. - I Google and Wikipedia some of they key words. I’m still lost. I skim any related
books I haven on hand. I get an inkling of the general gist of the tool. I decide
it’s too complex and sophisticated for my current needs, so I move on. - After several weeks of working on my project I get a dim recollection that something
I’m trying to do was available in that cool tool I didn’t understand. I re-read the
documentation. I understand parts of it now! The rest is still opaque. - I try writing a few small sample programs using the cool tool. I can’t get any of
them to work. I go back to my project. - A after few days more of general reading and struggling with my project, a light bulb
goes off and I understand why my sample programs didn’t work. I go back to my
sample programs and get them all working. - I modify my project to use the cool new tool. It works … mostly.
- I re-read the documentation for the cool new tool and I see now that it is a
model of clarity and could not be written any more simply or precisely.
1
Like Charles, I have about 25 years’ commercial experience. The thing I find easier to learn a language is to just use it. Think of a project that you are interested in and just start working on it. You’ll learn the language and associated libraries as you go. Because it is a project you have interest in, you’ll stay motivated when things get difficult. Because it is a stand-alone project, it has a completion to look forward to. Keep the project small enough to be do-able
Learning a language is (relatively) easy. “Getting” a language takes time (Python was a big jump from C#). Learning all the associated libraries tends to be hard. You can’t learn them all, so target the project so you pick up the things you’re after.
I started a project a couple of months ago. The aim was to learn Swift, Mac development and Cocao. My previous project was Objective-C and OpenGL.