Tuesday, August 30, 2005

C++ and Java ...

I work at IBM Research on the WebFountain project. I pretty much do 95% of my programming work in C++. I consider myself a fairly decent C++ programmer. Nevertheless, every once in a while I run into these embarrassing moments, where I write a simple piece of code and lazily use an explicit cast and all of a sudden my simple program simply won't work. That's the reason why there is the C++ casting operators static_cast, dynamic_cast and const_cast. My advice is, that you should learn how to use them because they can save you a lot of time. Anyway, thankfully I found the problem myself after I asked my friend and co-worker Dan to take a look. But it was still embarrassing having to tell him that I f..... it up.
Which brings me to my next point, C++ and/or Java. That thing would have never happened in Java, since there aren't any pointers and you either geta compiler error for casting inappropriately or you get an exception during runtime. However, even though you have to be more careful in C++, I like it better because it gives you more control and programmers who start out in a language like C or C++ are generall the better programmers because they have to know the concepts of memory management.
I mean, why for crying out loud, does a simple instant messaging application written in Java have to have a memory footprint of 50MB or more (referring to an in-house IM client which is nice but a memory hog). I occasionally interview people for jobs here and come across students that only learned Java and never wrote a line of C or even Assembler. I think that's wrong because it teaches them to not worry about memory management because there is garbage collection. I know machines have more memory and get faster by the minute, but the way some programs are written these days, it looks like there will always be a programmer to fill the extra Gig of RAM.
The moral of the story is, to be careful when and how to cast, and C++ is still way cool.

Tuesday, August 16, 2005

Good programmers, big projects and useless head counts ...

Someone send me links to two blog posts related to programmers and working on a big project.

The fist one is about how working on a big project is somewhat like trap:
Formula Engine Rewrite

Reading it, I felt like I only need to replace the company and project names with the names of my cmpany and project and it would still make sense ...
I still like my project and I am still working on it (IBM's WebFountain) but nonetheless, there is lot of truth in what he is writing about.

The other one is from the blog "Joel on Software" and deals with the widely spread misconception (Hitting the High Notes) that adding more programmers to a project will help finish it faster and get more done. What you really need is a few really good programmers.

Which brings me to the point I am trying to make today. In most big companies, each group has a certain number of positions available, so called head count. Additionally, such head counts are categorized into different salary levels, so that you cannot just hire a bunch of kick-ass programmers and also pay them a competitive salary because it would exceed the salary budget. Instead, what is being done is to fill positions with average programmers that fit into certain salary levels. Waiting for the right guy to come along also does not work, because if you don't use the head count you will lose it. My solution to the problem is to get rid of the notion of head count and just give each group a certain budget for salaries. Then it is up to the group to decide on whether they want to get 10 medicore developers or 3 to 4 really good ones that are paid slightly (or significantly) more. Just having people for the sake of filling head count is not right, and if you have an important position to fill, you want to get a good if not great programmer. To stay competitive you can't be stuck in some head count, salary level jungle that makes it impossible to make a competitive offer.

Now, what if you don't use your salary budget in a year. Well, there is two ways, you can use the money to reward you top performers at the end of the year, or you just save the money. I also don't believe in the model that a lot of companies have that you will get less money next year if you don't spend it all. Makes no sense whatsoever. You get punished for being conservative in spending money. Yeah, really makes no sense. I will leave it at that for today.

Thursday, August 11, 2005

What about the title of this page ... ?

Well, my real first name is Jörg or Joerg if you cannot find the ö on your keyboard or know how to type using key combinations. It is a German name and the -J- is pronounced as a -Y-. Anyway, I work as a programmer/researcher and, like all good or not so good programmers, I like coffee and espresso. When my work buddies and I go out for lunch we usually cap it off with a cup of Joe from Starbucks. (I am not the biggest fan of Starbucks because they really make money selling milk, but I will leave this to another post). So back to getting coffee at that Starbucks. After standing in line for a few minutes and being bombarded by a whole lot of displays that scream at you: "Please by whatever is displayed here, even though you only want a cup of coffee ...", it is finally my turn to put in my order. As part of that they generally want to know my name. Now, here is where it gets interesting, pronouncing my name the right way in English gives you no idea how to spell it. The correct pronounciation would sound something like saying Yirk. No, no, I know what you are thinking, sounds an awful lot like jerk, but I must disagree here. Back to Starbucks. So I spell my name for them and they write it on the cup which will eventually be picked up by the barista, who will prepare my Americano or coffee and then try to call my name. That's usually the time I am being called a jerk. Even more interesting, looking on the cup after I finally hold it in my hands, I see the weirdest names:
  • jurich
  • jourg
  • yurk
  • jorge
  • joreg
  • george
  • gork
  • borg
There is many more and the saddest part of this story is that I spelled my name for them, -j-, -o-, -e-, -r-, -g-. And what you see above is what I find on the cup. Now, I will leave it up to you to make a judgement what this says about Starbucks or the people who work there. But it provides me and my work buddies with tremendous entertainment to see what variation of my name they come up with.
In the future, expect more here about all kinds of stuff, not just buying coffee and spelling names.