Skip navigation

Monthly Archives: March 2008

I started out writing this one as a response to some of the comments to my previous post. I guess I had too many thoughts and this warranted a separate post in itself. First and foremost, I wish to state that I value and respect everyone’s opinion, for the matter that was discussed was very very subjective. However, as always, I will blurt out what I think in this blog.

I am not against people who learn new languages, and yes, I would never say that Java is just enough (though I love it immensely). But people mostly learn a language, use it a bit and then move on. For me it’s like leaving the climb 200m from the summit of Mt. Everest, just because someone seemed to mention a new and difficult mountain to climb. For me, I will climb the new mountain, but let me get to the top of this one first, is my attitude. Many people try to look for new and better ways of doing things when learning a new programming language, but they haven’t charted all the territory of the language that they know currently. It is this attitude that needs to be taken care of, in my personal opinion.

As a computer engineer, when my father asks me something about computers (esp. hardware) that I don’t know, I feel ashamed somewhere. Sure, I specialize in software, but still I should have known everything about this field, is what I feel. At Sun, everyday offers me something new to learn about Java, something trivial which I should have known (which does my self respect no good, but keeps me honest), something not so trivial. What I gather in such experiences is invaluable if and when I move to a different platform. Don’t we all master the art of quickly learning a new language, once we have learnt a couple of them? I think I am trying to learn an effective way of mastering a language/platform, and I do believe, having patience and a mind that constantly seeks out the unknown seems to be essential elements to achieve it.

I would also like to state that learning a language in and out does not guarantee success. Many people know the language, the working of the platform, but are a bit short of knowing about computer science fundamentals. For eg. I have never used a B-Tree at work, but I know what it is, and there might come a time, perhaps 20 years down the line, when my knowledge of a B-Tree and how it works, will lead me to write a significantly better program, and more importantly, make me feel good about myself. One must pay due respect to the science and not just the current state of practice.

I often see many fellow software engineers learning new programming languages every now and then, in the hope that they are increasing their "marketability". They seem to think that the more programming languages they know, the better. C, C++, Java, Javascript, Python, Perl, Ruby, Groovy, Scala, C#… the list goes on and on. These chaps are the first to get swayed by PR of companies marketing these languages (Microsoft for C# and .NET being a prime example). Hell, I talk as if I have been a saint, no, even I used to be in this – "Run to learn the latest language" club.

But over time, I have figured out that learning a language is never accomplished without using it in and out, in all sorts of ways, in all complexities, in various projects. What’s the average length of a code example in a book? Roughly 100 lines. And what’s the average size of code bases? 1000s and 1000s of lines. Unless you use the language to create something, you are not using the language at all. After all, a programming language is just a means to an end. It’s a tool in your hand to create an application, a service, something concrete and tangible.

Having come over to the Java world 2.5 years back, I have this habit of looking back on the code that I had doled out when I was new, and compare it with the code that I churn today. I find such a huge difference. The code that I produced 2.5 years back, is down right laughable in some places. Being at Sun, I was able to work with some very very smart people and hone my skills as a programmer (there is still a huge scope for improvement, as my recent experiences in the NetBeans land have told me). The code reviews have taught me a lot and continue to. I have been fortunate enough to work with some real wizards of design and Java platform and I am always in awe of such people and their ability to assimilate complexity and I try always to study their approach to problem solving. It gives you lots of pearls of wisdom and improves you as a programmer.

Even after this, when I feel that I write much better code than I used to, there is still a long long way to go for me in the world of Java. I still don’t know the little things which one gets to know when he is aware of the Java Language Specification. I still haven’t really decompiled a Java class, and tried to understand the byte code. I still am baffled by the whole area of memory management. I haven’t ever done a performance analysis or improved performance of code written by a different programmer. Never used NIO, still need to go slow when dealing with multi threading…. the list goes on and on. As Bharath Ravikumar (my former colleague at N1 SPS development team) rightly pointed out when I discussed this with him, it’s a matter of spending time gathering these experiences. I should try and work on all sorts of things in Java, and when your day job cannot satisfy such a quest, it’s best to turn to open source to satisfy your creative hunger.

You can make out the difference between someone who has just learnt the language and someone who has made better use of the time to work on projects in that language.

Now some readers may say that knowing just Java is not good enough, some languages are much better suited for certain applications. I totally agree. But, knowing a low level language (C), a middle level language (Java) and a dynamic language thoroughly, should be good enough for most, if not all, applications.

I attended the NetBeans day at Hyderabad, and I came out with some pretty interesting discussions, meetups and lots of positives. From what I heard from the audience, Roman Strobl has become a celebrity. His style of presentation and humor was appreciated by all. The audience loved his presentations. Last year, Roman’s good friend, Geertjan Wielenga, had a similar success.

However, as always, there was one presentation which was humorous, for me atleast. Collabnet, the company behind Subversion, had a talk. Their presenter started off very well with defining Collabnet’s objectives and it’s lineage. A very crisp presentation. And in 10 minutes he finished his slides (right on schedule) and handed over to some Subversion contributor from Chennai (the only one in India). And this guy winged the whole presentation. Far removed from the reality of the composition of the audience (many were students with only a cursory knowledge of SVN), this guy rambled on and on giving obscure examples (no, they were not added to the slides, so you really had to follow him through the labyrinth of his examples). This guy must be a fantastic engineer, but he surely came a cropper as a presenter. People around me first became disinterested, then groaned, then some of them slept in the cool air conditioning. And people like me, who had better things to do in life, got up and left, for good.

I see this problem time and again, mostly with Indian speakers. They speak too fast, they fill up their presentations with tonnes of slides (without any graphics or anything to keep the audience interested), and almost none of them add spice to their talks with humor. And yes, most of them forget the audience. They find some nodding heads in the front rows, and then the whole session is presented only to those nodding heads, be it a presentation in front of 70 or 700 people. They will stick to their monologue, blurt out their stuff and go away. The audience sleeps, or leaves.

Please guys, time to learn some presentation skills. Think out of the box, you are not presenting a paper at such conferences. There are better ways to get your message across.