The Java Specialists' Newsletter
Java version: Java 8
How Can I Become a Champion Programmer?by Dr. Heinz M. KabutzAbstract:
In this newsletter, Heinz talks about some characteristics that are useful if you want to become a successful champion Java programmer.
Welcome to the 227th edition of The Java(tm) Specialists' Newsletter. It has been a while
since I've written a non-technical piece, but programmers keep
on approaching me for advice on their career paths, so I think
it is time for another one. Incidentally, if you are in the
mood for something different, I've started writing up some
of the worst foods that I've cooked on Heinz's
Worst Recipes. My passion is cooking, strongly
influenced by my desire to eat, as can be confirmed by my
waistline. I'm not all that good as a chef though, since I
never follow recipes, so a lot of my food had to be thrown
out as sadly inedible. Sometimes with enough trial and
error I get lucky. In my blog, I document both the failures
and the successes. It has absolutely nothing to do with
Please see our new "Extreme Java" course, combining
concurrency, a little bit of performance and Java 8.
Extreme Java - Concurrency & Performance for Java 8.
How Can I Become a Champion Programmer?
A few months ago, I was sitting in a restaurant in Paris with
my business partner Carl and our French course instructor Xavier.
Carl and I were having an animated discussion about all the
cool technology we used to play with when we were younger.
At one point in our conversation, I noticed that Xavier was
particularly quiet. I decided to ask him his age. I cannot
remember exactly how old he was, but he was closer in age to
my second child than to me. All those many years of
experience that I had programming and which happened at the
same time as Carl's, meant absolutely nothing to him.
In our career as software engineers, knowledge in our subject
matter has a half-life of three years. This means that after
three years, half of what you know is worthless. The older I
get, the more difficult it is to find people who have any
idea what a TSR is, and even less who have written one. In
DOS we were not able to have multiple programs running at the
same time. Thus if we wanted a background utility, such as
a calendar or calculator, we could code it as a
Terminate-Stay-Resident program, and call it up with a
special key combination from any other program. This has
been unnecessary for at least the last 20 years. You will be
excused if you have never heard about it, but in the 80s, you
could have a good business writing TSRs.
This matter of the three year half-life of knowledge in our
industry is a very good thing. You can never grow old. I
remember when I was a teenager, people warned me against
becoming a programmer, as I would be forced to constantly
learn new things. To me this is a huge benefit in our jobs.
First off, your mind stays fresh and active. The last time I
saw my grandmother, she was 98 years old. She could hardly
walk, but her mind was still as sharp as a razor. She saw my
MacBook Pro and said: "Oh, that looks so nice, I want to buy
one." She was constantly learning new things and it kept her
brain awake. Secondly, if you see some particular technology
that you are not particularly interested in, you can simply
ignore it and in a few years time, it will be replaced by
something else. My example here is subversion. I used it,
because I had to, but I never was particular to it. I
certainly didn't become a subversion expert. Of course, a
few years later, git came around, so goodbye to subversion.
Sadly, one of my customers is busy moving over to subversion
- from CVS!!! In 2015!
Let's get to the question of my title - how can you become a
champion programmer? I think there are several
characteristics that are helpful:
Brilliant memory. As a teenager, I managed to
convince myself that I had a shocking memory, thanks to a
thoroughly uninspiring history teacher in grade 8. However,
as I have progressed along the career as a programmer, I
surprise myself at the instant recall I have of what Java
sources looked like before. I can read a method in the JDK
and quite often tell you if it has changed from previous
versions. Don't ask me to remember people's faces or their
names, but Java code I can. If only names were for-loops!
Fortunately we can still be champion programmers without a
great memory, but it is a distinct advantage.
Mathematical aptitude. You don't have to be a maths
ace to be a good Java programmer, but it certainly helps to
have an aptitude for the subject. In January I had a bit of
spare time and decided to try some of the Project Euler
puzzles. One particular problem was running for 9.5 hours to
find a solution. Whilst it was busy executing, I looked at
the problem and with a bit of research discovered a
relationship between the numbers that we could use to
optimize the solution. I ran it again and this time it took
6 minutes. In the meantime my first algorithm was still
puffing along, trying to come up with the answer. After
looking at the numbers a bit more, I discovered another
pattern that I hadn't seen before, and now it completed in 6
seconds. Had I tried to brute-force optimize the code
through clever programming tricks and parallelism, I might
have sped up the time a bit, but there is no ways it would
have gone down to 6 seconds.
About 10 years ago, Sun announced the Java Champion program.
The idea was to find the top 1000 Java experts in the world,
who are also actively doing things to help promote Java. We
are at about 160 now. Oracle have continued with the program
and in the last couple of years we have seen some more
interest in this recognition. It is a self-elected group.
New champions are proposed by existing champions and then it
is put to the vote. Usually we need about a dozen +1's
before accepting the person. A single -1 will veto the
proposal. People who propose themselves will be considered,
but usually do not get enough support to make it.
Programmers have often asked me how they could become a
Java Champion. "Easy", I would say, "just publish 200
articles on Java like I did. Or write Hibernate. Or Spring.
Or Jacoco. Or answer thousands of questions on StackOverFlow
and publish dozens of great articles. Or organize the
largest Java conference in Europe."
You need to do something exceptional. This will take time
and effort. No one becomes a Java Champion based on their
charm and good looks. There's a reason why we don't have
mugshots next to our names ;-) It's hard work. You should
not even do the work in order to become a Java Champion.
Just do it selflessly and let someone else praise you for it
eventually. It feels better that way. Not every champion
programmer will be recognized with the official title of
"Oracle Java Champion".
Regardless of the path you choose, your career as a champion
programmer will require dedication. It is not something that
you can do 9-5. You cannot learn everything that you need to
during your day job. Instead, it will require evenings and
weekends studying and staying up-to-date. The biggest
travesty is when programmers get to their 40s and go past
their sell-by-date. They might have done a fine job
programming Java, but unless they refresh their knowledge by
reading books, articles, go to conferences and attend
challenging courses, not for the piece of paper, but for the
knowledge gained, they will eventually become worthless.
Industry will toss them out like a used napkin. Don't be
that napkin! Learn, learn, learn. And the best way to learn
is to share your knowledge with your peers.
How to share your knowledge? Nowadays, we have a plethora of
options available. We can answer questions on StackOverflow
or similar websites. We can organize lunch-time
brown-paper-bag lunches where we talk about a technical
topic. Many years ago at one company I was, we worked our
way through the Design Patterns book this way. It takes a
bit of sacrifice. You might have to give up your lunch and
some evenings to prepare your talks. However, you will learn
far more than if you are simply a consumer of information.
The Java(tm) Specialists' Newsletter is currently read by roughly 70000 Java programmers
in 130+ countries. It started very small. I sent it to
an initial set of 80 friends and family (including my
brothers, mother and father). I begged them to please
forward it to their friends and colleagues. Over time, it
slowly grew. I am sure if you look around, you can find 80
email addresses. That's how it starts. All beginnings are
small. It grew slowly but steadily. I know if you look at
the figure of 70000, you might be in awe of the number, but
it is a really small percentage of Java programmers.
I'd like to finish with one last characteristic that is
helpful: passion. Almost all of us have had to do boring
computer work. Very few of us have enjoyed that. In my one
job, they gave the task of organizing our source repository
to an electronic engineer. He completely missed the plot
when it came to source control, and made us copy the source
tree between directories. Since we all did this at the same
time for our weekly build, the server slowed down to a crawl.
It would take hours, with the machine jammed up and all of us
just waiting. It was painful and frustrating. I did not
have much passion for VSS. Find something that you can feel
passionate about. It needs to be a topic that you would
happily do after work hours. For me it is researching the
nooks and crannies of the Java ecosystem and then writing
about them in my newsletter. Passion is what keeps on
driving us when all reason tells us to stop.
A bit like I feel about cooking. Except that I'm fortunately
a better programmer than I am a chef :-)
Related Java Course