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 Java.
NEW: Refactoring to Java 8 Lambdas and Streams Workshop
Are you currently using Java 6 or 7 and would like to see how
Java 8 can improve your code base? Are you tired of courses
that teach you a whole bunch of techniques that you cannot
apply in your world? Check out our one day intensive
Refactoring to Java 8 Lambdas and Streams Workshop.
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:
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 :-)
Would you like to receive our monthly Java newsletter, with lots of interesting tips and tricks that will make you a better Java programmer?