(Not) Learning from history

Vorlath writes:

So the compiler will be written in itself. It’s a really strange concept.

Not to denigrate what seems like an otherwise noble project, but compilers are routinely tested by using them to compile themselves.

Every generation of developers seems to rediscover old ideas and believe they invented them. Its one of the most irritating occupational flaws we programmers have.

Java vs .Net – Specifics

Today’s episode was brought to you by my colleague Griffin’s post about J2EE. While I don’t really mind what anyone’s programming language preference is (everyone knows Smalltalk is the best, right?), I find the lack of details…. disturbing. Get specific! Otherwise its just ranting, and we wouldn’t want that would we?

So, some specific shortcomings of Java that are affecting me right now:

Insufficient separation of classloader hierarchies. Its almost impossible to successfully deploy 2 versions of the same class in a single JVM. This is often manifested by XML parsers and the resulting musical chairs of classpath reordering to try and get the ‘right’ one to load first. .Net’s AppDomains do a better job. The ray of light in this case is the MVM (aka ‘Barcelona’) project that introduces Isolates and should be in Java 1.6.

JTable. Very powerful, but the degree of subclassing and overriding you have to do for anything beyond the basics is scary. Plus there’s always the nagging fear that you’ll get 80% done and hit a wall that forces you to throw it all away and reimplement as a bunch of custom panels and labels and…. GridBagLayouts. Oh, GridBagLayout. If ever there was a class that needed an entire book devoted just to it, this is the one. Sure its possible to layout the UI in almost any way imaginable using this layout but you’ll find out just how many ways there are to do it wrong in the process. And just when you think you’ve got it sorted, you innocently try resizing the window…. (cue Psycho stabbing music). Argh!

Google for Lotus Notes

Just installed the latest Google desktop, and its brilliant. The scratchpad may actually replace index cards & notepads for jotting things down while working, as it sits off to the side without getting in the way of what I’m doing. The best feature however (for me), is that I finally have a fast and effective search capability for Lotus Notes. There is a small trick however, as the normal version doesn’t include the plugin.

First, install the Enterprise version (also free, but you have to register), including the Notes plugin. Then (without uninstalling it), install the normal version over the top. The plugin stays, and you get all the goodies of the latest version. Recommended for anyone who’s ever tried to search their email in Lotus Notes.

Small caveat: it only searches local files, so you have to be using replication.

The Problem with Tasks

Problems are fun. Problems are like puzzles. They present a challenge to be overcome. Problems stir up the competitive instinct and allow really quite obsessive degrees of focus to be brought to bear on them until they capitulate. The challenge and reward of solving a problem is why many developers will happily spend 30 minutes writing code to automate a 15 minute task and consider it time well spent.

The problem with problems is that they are hard to put on a plan. Project managers would probably rather turn all problems into tasks. Problems are undisciplined, and sometimes called ‘risks’. Tasks are safe, measurable, definite and look good on a gantt chart. To many developers, unfortunately, tasks are dull, repetitive and tedious. The same developer who could bring scarily intense levels of dedication to bear for hours at a stretch in order to solve a thorny problem might well struggle to concentrate for the 15 minutes needed to perform a routine task and will probably spend an hour or so in displacement activity while working on it, not because they’re lazy (they just spent 4 hours solving a problem without taking a break or even, quite possibly, blinking), but because they can’t make their brain engage.