Philip Wadler has moved to Edinburgh to become Professor of Theoretical Computer Science. He’s a bit of a well-rounded clever bunny, he is. He’s been involved in the design of Haskell, support for generics in Java, a whole load of XML stuff and a static type tool for Erlang (which we were discussing recently at Ergnosis). This makes me wonder about PhD plans all over again.
One of his most admirable traits is that he writes extremely well. You know the quote: “Programs must be written for people to read, and only incidentally for machines to execute”? Well, (within his field) I think Philip Wadler writes for humans to read, and only incidentally for computer scientists. Heh!
I’ve always hated dry academic papers; In fact, I hate any situation where information is deliberately made to seem arcane or difficult by the use of jargon or needless layers of abstraction. Joel understands this. Richard Feynman understood this.
The closest I come to having a “life philosophy” is my continual belief that nothing is really as difficult as people make it out to be. That’s why I just go ahead and do things like melting metal (it ain’t as hard as you’d think either). There is some primitive force which makes people want to dress up their knowledge to make it seem more impressive, and they are reluctant to share that knowledge – as if somehow that will drain away some of their own power. There’s something very Emperor’s New Clothes (Gutenberg text) about it. Maybe “knowledge horder” is a suitably pejorative term.
My parents are both teachers. One consequence of this is that I have no inclination to become a teacher! But, I feel very strongly about education and about equality of opportunity. I guess when I see people “dressing up knowledge in jargon”, I perceive people who are building unnecessary barriers around learning. If it isn’t really hard, don’t make it seem hard.
Today, I am frustrated. I have a fairly good idea of what my “dream development environment” would look like. I am confident that I would be significantly more productive and less stressed if I could use it today to develop applications. However, I’m not sure I’ll ever get to use it.
History is littered with the carcasses of failed software tool companies. There are many great ideas and years of effort lost. The big problem is that you can’t break cleanly from the past. If you build a brilliant new C++ IDE, you’d better be sure that it still works with CVS or other text-based version control systems. Otherwise, no-one is going to start using it. So, that ties you to keeping source code in ascii text files.
If it’s so great, does it need to sell?
If it’s so great, write it youself, use it yourself and clean up – erlang.
Real world concerns – working with existing code, fitting in with cvs, hiring people
Europe retains its sanity over software patents. The proceedings make fun reading. I wrote to my local MEP about this back in June. However, my local MEP was firmly sticking to his party line and said “thanks but no thanks” to my viewpoint and said that they would be supporting the move. Grr! So much for representative democracy! “Sorry, you had your vote three years ago .. why are you bothering me with your viewpoint, puny citizen?”. Still, all’s well that ends well.
I’ve been looking for a decent hardware ebook reader for a while. I want something which is the size and weight of a paperback book, with a highres greyscale screen. I haven’t found such a beast, and I’m starting to plot how I’d build one of them myself.
Here’s an excellent optical illusion. The human visual system rocks.
If I had a tiny monkey, it’d have a blog. All the cool kids at Voxar and Ergnosis have one now, so I’ve gathered links at the left side of this page. Yay for the internet! This removes all need for actual conversation. We can just have a sucession of concurrent monologues.
Actually, if I had a tiny monkey, it’d sit on my shoulder whilst I run a 10k. Foolish humans.
James Gosling talks to artima.com about exceptions and how they’re used in the real world.
The discussion about the “one true path” strike a chord with me. I spend several years working on a networked medical application. When you’re talking to a network then anything can happen. The network goes silent. You get the wrong kind of packet. The network layer gives an error. You receive a data packet containing bad data (like, “length of next data item = 0xffffffff bytes”). The machine you’re talking to rudely drops the connection rather than terminating gracefully. These aren’t theoretical problems — they occur regularly in the field. And if you don’t handle each and every one of them correctly, you’ll get annoyed customer phoning you up and you spend your weekend fixing bugs instead of having fun.
And if you think you’re safe because you’re not talking to a network, how does your application cope when the users disk gets full? Every single write to a file can potentially fail.
So, I think the whole notion of the “one true path” is a seductive fallacy. It’s seductive becuase the “one true path” is where all the cool stuff happens. Coders love making computers do cool stuff. In constrast, handling all the exceptions and return values is dull – it’s is a bit like “dotting the i’s and crossing the t’s”. Who cares if your application bombs when the user’s disk is full? Well, the user sure will.
But when you are a grown-up programmer then you don’t get to just do the cool stuff. All of those “error conditions” are first-class code routes, just like the “one true path” and some day Real Soon Now a customer is going to run down one of them.
Here’s a fun idea: Before you ship your next product, run your test plan on an instrumented build and record code coverage information. Then in your shipped product, detect when an end-user starts running down a codepath which wasn’t touched by your testing and then pop up a big alert box saying “Warning: You are the first person to ever run this bit of code!!”. I’d love to hear of a company which dares to do this.