A Funny Java Flavoured Look at the World

Friday, April 14, 2006

The Learning Lifecycle of a Java Programmer

I was discussing with my fellow programmer that I felt my programming has improved recently because I had been reading the Head Firsts Design Patterns book but then I had also been looking at Object orientation programming articles and courses from the web. I think the real benefit has been that I think I have a better understanding of what qualities of a good piece of Java coding.

It got me thinking about the levels of how Java programmers improve or mature

1. Learning the fundamentals of the language
2. Improvement through experience and gained knowledge (e.g. using Java)
3. Greater knowledge by looking at fellow coders pieces of code (utility classes, useful packages) in your workplace and from the internet.
4. Reading good articles and books. I probably mean books more because they tend (on average) to look at subjects in more detail.
5. Learning from your mistakes and refactoring some code.
6. Understanding good design
7. Appreciating other good examples of coding and methods from other languages (including scripting)

They aren't really in any a definitive order. The motivation to blog this is because after reading about design patterns, I am starting to appreciate the design of code better. Even simple things like noticing the Locale class in Java acts like a Factory pattern and more importantly understanding why that is a good idea.

A fellow programmer of mine who is a C# programmer said that he had recently been looking at the template code in C# and he brought up the interesting point that to do his work he didn't need to really know it and he had read that 30 percent of programmers learn only enough to do their work. This made me think of the code I used to write a year or two ago, it got the job done but it was really spaghetti code, all linked together, hard to debug and none of it could be used in other parts of the software.

I don't think that the life of cycle of the Java programmer is as simple as I summarized above because I think if you studied for the Java SCJP 1.5 exam then this could also speed up your knowledge of Java but I don't think it would improve your ability to write good code. I think the biggest barrier to writing good reusable code is understanding what is good code and why it is. Basically trying to encapsulate change and be ready for it combined with designing solutions in a more abstract way. I never use to really understand the use of interfaces and although on the sun website there is documentation on how to use interfaces there isn't anywhere that explains why you would want to use them.

I would be interested in other peoples experiences and what their opinions on how developers improve and mature. I apologise for the post being a bit of a ramble, I had a point I was mulling over and thought I would note down my thoughts on it


  • After you fully understand design patterns and OO you get to another point with Java... the point where how to design things isn't really that hard, but all of the stuff you have to do to get Java to understand what you want becomes a pain. Once you're thinking in patterns and higher-order abstractions, the fact that Java is so verbose is just painful.

    Sorry, I don't have a good solution for you yet, but that's at least why lots of people are looking at Ruby and other languages. Unfortunately, those come with their own problems... For instance, with the power of those languages, imagine being on a team with developers writing code like you talked about writing a few years ago...

    By Anonymous Anonymous, at Fri Apr 14, 09:48:00 pm 2006  

  • a very interesting comment and you have completely understood the point I was trying to make.

    I think people in the Java community are purposely trying to head towards a simpler solution. I think there comes a point where a language keeps increasing in size that people start to think the best method to overcome the bloated current implementation is start again. In the Java community this is a regular occurrence with people frustrated with bloated and sometimes over complex nature of the language (EJB's).

    I haven't really looked at the new up and coming languages in any real detail but they do seem to suffer from tackling certain scenario's and not a multi tasking language like Java, C#.

    I believe this problem will only really come to a crises point when enough people get frustrated with Sun and really get behind a new language. OR Sun make Java open source. A worst case scenario in opinion will be that we will end up with a number of different flavours of open source Java.

    Anyway thanks for the response, you added a very useful comment to the debate, I would be interested to see what other developers think about it

    By Blogger The Hosk, at Sat Apr 15, 12:50:00 am 2006  

  • Occasionally I will read posts stating that Java's verbosity is overkill. I personally like it. I find it easy to read and produces code that may be self documenting.

    Yes, Ruby is shorter and more concise, but it's much more difficult to understand what the code is doing without a translator! That's my experience.

    By Anonymous Anonymous, at Tue Jun 20, 04:25:00 am 2006  

  • I disagree. Once you really appreciate higher level design thinking you learn how Java can be incredibly brief and remarkably succinct as a language. Moreoever, you start wondering why people still use scripting languages...

    And you especially don't type this anymore, nor do you care to listne to people who seem to feel obligated to... ;)
    FactoryImpl fact = FactoryProvider.getInstance().configurationProvider().getNewProvider();

    By Anonymous Anonymous, at Tue Jun 20, 04:32:00 am 2006  

Post a Comment

<< Home