Developing competence

Long term survival in technology business requires companies to have top notch engineers. The companies in Silicon Walley benefit from the huge talent pool in the area. The best companies do think about developing their people, there even the bad ones benefit from the smart companies and are only willing to hire people they think are already good.

European companies face a different challenge. There are not many R&D hubs with many big companies present. Typically the local talent pool is smaller and focused on narrower segment, like mobile game development in Helsinki, or car software in Germany. Finland used to have large amount of mobile software engineers, but due to platform change, the old Symbian skills are obsolete.

Nokia managed to develop many great engineers that are now great specialists at other companies. To grow into a great engineer usually needs two things 1) right amount of time 2) suitable challenges. For example to become a great browser engineer, you would have to spent many years in doing fixes and new features for browser engine, even if you are talented. Nokia's best browser engineers have joined companies like Intel, Apple, Samsung, Microsoft, Huawei, and Nvidia and still work on browser technologies. To develop that kind of talent Nokia invested in Webkit development for many years and then on Linux side on Gecko development for several years.

Sometimes companies forget that they have opportunity to grow the engineers from talents to great engineers and only setup new R&D in already hot areas like Silicon Walley, or even worse only hire top engineers (instead of top talent).

There are challenging software areas where it can make a huge difference what kind of people you have and how long are you willing to stay in the area. All too easily I see companies moving responsibilities and restructuring their operations. These can be really bad for talent and demanding asset development. For example Google couldn't have made Chrome great by just developing one more UI on top of Webkit. Google needed to invest time and money on Webkit engine development, their own JavaScript virtual machine development, and forking Webkit to Blink. All of these required years of work, hiring great people, and growing talent into great engineers.

While I applauded Nokia's browser team development as a good thing, sadly most of Nokia's development work seemed to be much more short sighted, and even in the browser area Google is much better than Nokia ever was as Chrome's success both on desktop and mobile proves.

Way too often I still see companies only willing to hire ready people, instead of healthy mix of eager young engineers and experienced guys. Hiring is only small part of developing people. Keeping the right people and giving them right jobs is probably even more difficult.


Programmer stereotypes

M.E. Driscoll wrote an interesting piece about the traits he sees in top engineers in Silicon Walley:
A couple of weeks ago, I was drinking beer in San Francisco with friends when someone quipped:

“You have too many hipsters, you won’t scale like that. Hire some fat guys who know C++."

It’s funny, but it got me thinking. Who are the "fat guys who know C++”, or as someone else put it, “the guys with neckbeards, who keep Google’s servers running”? And why is it that if you encounter one, it’s like pulling on a thread, and they all seem to know each other?

And continues to characterise them as:
  • Their craft is creating software
  • Their tools of choice are C, C++, and Java – not Javascript or PHP
  • They wear ironic t-shirts, and that is the outer limit of their fashion sense
  • They’re not hipsters who live in the Mission or even in the city; they live near a CalTrain stop, somewhere on the Peninsula
  • They meet for Game Night on Thursdays to play Settlers of Catan
  • They are passive, logical, and Spock-like
  • So it's C++ fat guys with neckbeards vs. JavaScript hipsters. In my experience its quite different in Finland.

    We do have JavaScript hipsters and some of them are really competent and obviously some not. Fat C++ guys that are great engineers are actually quite a rare.

    Majority of super competent C++ developers I know are regular boring engineer types (we used to use term "Nokia Engineer" to describe the type). These are people with 1,5 kids, golden retriever, wagon Volvo, and lives in a house in suburbs. They dress like normal engineers and most of their free time they use with their family. They really are passionate about their work and see it as craft, and do tend to use languages that are appropriate for the job, and definitely are logical. When they go shopping in saturday with their families they will not stick out in the crowd from the regular folk.

    I don't know if my experience is because of the companies I've been to, or if Finland's culture of not sticking out of the crowd has really limited the size of fat C++ coder community and forced the to fit society more than in Silicon Walley.


    Photo management with Android

    During my recent trip Nexus 5 was the only camera I used. I know its not the greatest, my Pureview 808 would have been a lot better, but I decided to only carry one phone daily. I'm usually quite happy with the quality of the pictures Nexus 5 is able to capture.

    The longer I've used Android I've discovered more and more little things I do not like in it. Photo management is something I've actually started to hate in Lollipop. Photos app UI is ok, its not great but does the job. I think most of the issues are because of cloud synchronization and grouping of local images.

    For example deleting image is a blocking operation and may take several seconds and I need to confirm dialog "Delete everywhere". The app does poor job in figuring out local vs. cloud and many times I had to wait loading of image for long time (loaded from cloud) even though the same image was available locally. Also, in "All images" list I see duplicates of images (cloud, local) and in some cases even a third one (local low resolution preview).

    After trip I wanted to import images to iPhoto. For all images it imported both preview and the actual image. Perhaps that was an issue in iPhoto, but couldn't Android have stored previews to non-visible dir so that they would not be imported?

    There is also plenty of little annoyances in photos app and photo management like notification with led/sound about such a trivial thing as "n of your images was backed up" on succeeding automatic backup. I hate these issues because taking photos is one of the key features in a mobile phone for me. I like to take photos, share them, modify them, transfer them to computer for various uses and do all of this often.

    I may need to install Sailfish on my Nexus before I throw it to the wall. I'm also seriously considering iPhone 6.