Edit 14 June 08: I'm marking this post as purgeable because large chunks of it are borderline unreadable, even to me. If anyone finds the subject matter particularly fascinating, leave a comment and I'll rewrite it.
There is a phenomenon in the educational system known as "dumbing down". It's a least-common-denominator situation: where some people have trouble understanding a concept, you either remove the concept from your syllabus or spend crazy amounts of time explaining it.
The problem this creates is that the "improved" material is far harder for smart people to understand. Case in point: my actuarial study notes...
Actuaries are (ideally) clairvoyant accountants. Whereas a normal accountant can only see what your assets are worth now, an actuary can look at something like the cashflows associated with a pension scheme or insurance policy and make an educated guess about how much those cashflows will be worth in the future. This requires substantial maths to try to pin down the odds of various events (death, illness, car crashes) happening to the individual who took out the policy.
So actuaries have to be quite heavily trained. In England, this training is regulated by the Institute of Actuaries. The IoA run the actuarial exam system. They also provide a sort of syllabus known as the "Core Reading", which is a very terse description of everything examinable.
Problem is, a lot of people who take the exams don't have a strong maths or finance background.So a secondary market has grown up, which is mostly filled by the Actuarial Education Company (ActEd), a for-profit organisation supplying lecture notes. ActEd license use of the Core Reading material from the IoA, and they intersperse it with lots of detailed discussion.
This can sometimes be very useful. For example, where the Core Reading might just list a type of tradeable asset by name, the ActEd notes will provide a detailed description with examples. However, sometimes it can be very very annoying.
Currently I'm trying to read up on Markov Chains. For me, this is not a difficult concept. But revision is going veeery veeery sloooooowly, because for every five lines of actual maths I also have to digest two pages of wordy, confusing, often seriously dubious information. This slows my learning pace down to a crawl, not least because I frequently have to re-read stuff to convince myself that yes, they are bothering to say something that obvious.
If their only problem was overdocumentation of the Core Reading, I'd be unhappy but I'd accept it. I'm aware that many people (cough*economists*cough) don't have my familiarity with mathematical terminology, and these people also deserve some support. But what I can't handle is the fact that the Core Reading is also underdocumented.
Sounds paradoxical? Well, let me explain. The average mathematical proof, as written down, will contain approximately one part non-obvious statements to four parts obvious ("trivial") statements. The trivial bits are just mathematical filler - they make it easy to see the links between the key non-trivial assumptions and the conclusion.
As a mathematician, I would expect ActEd to take the following approach: lay out the whole proof, devote a fair amount of time to justifying the key assumptions, and if necessary spend a smaller number of column inches dissecting and rephrasing the rest of the logic.
Apparently ActEd disagrees. Their main approach appears to be: go through the proof step by step (no overview), ignore any steps that would take too long to explain, and go into mind-numbingly overwrought detail on the bits that economists might possibly be able to get their heads round. It's a sort of triage approach.
For example, one section of the material I'm working on is devoted to "time-homogenous Markov jump processes". This is a very technical name, but the concept is simple. Imagine a system (say a person) that can be in a number of states (say healthy, sick or dead). Specify the rates of transition between the various states (for instance the rate of transition from dead to healthy is zero).
One problem we often need to solve is: what are the odds of staying in a certain state S for a certain length of time T. Now it's fairly easy* to find out the odds of a person starting in one state (say healthy) and being in that state again in e.g. two years' time. But that doesn't take into account the possibility that they might have skipped between states (healthy->sick->healthy).
One approach to calculating this is as follows. Define a set of events** Bk. B0 is the event that the system is in state S at times 0 and T. B1 is the event that the system is in state S at times 0, T/2 and T. B2 gives S at times 0, T/4, T/2, 3T/4 and T. And so on, with each new event doubling the number of times after time 0 that the system must be in state S. All of these are relatively easy to calculate.
Notice two other things. Firstly, event Bk "contains" event Bj if j is less than k. For example, you can't hit S at times 0, T/2 and T (event B1) without automatically hitting S at times 0 and T (event B0).
Secondly, the event that the system stays in state S until time T (the thing we were having trouble calculating) is the union of all the events Bk. You achieve stasis (an event we'll call {T0>T}, meaning that the first transition time is later than T) by achieving all the events Bk.
This is hard to see, but imagine if the system hopped out of state S for just a minute then hopped back in again. There would be some value of k large enough that a multiple of 0.5k would fall into that minute. So if you leave state S, you forfeit that event, and therefore you forfeit the entire ensemble of events.
So we can now outline a method for calculating the probability of {T0>T}.
Step 1: {T0>T} = U0-∞(Bk)
The U symbol means a union of events, and the ∞ means that you include all such events right up to k=infinity.
Step 2: U0-∞(Bk) = limn→∞(U0-n(Bk))
This means that, if you take a finite union (up to n) and then let n tend to infinity, you get the same result as just going straight to infinity.
Step 3: limn→∞(U0-n(Bk)) = limn→∞(Bn)
This follows from our earlier note that each of these events contains all lesser events. If you take the union of a finite number of events, you just get the largest of those events.
Step 4: Therefore P({T0>T}) = limn→∞(P(Bn))
P(X) just means "probability of event X taking place".
We now have a nice elegant approach to calculating this nasty value P({T0>T}). We can just find a formula for the values P(Bn), and then see what happens as n gets bigger and bigger. The limiting value of this series will be the probability we're after.
Now, this was not an easy proof for me to explain. But allow me to point out three things:
1) Anyone who's got this far in the course will already have a thorough understanding of terminology like events, unions, probabilities, etc. ActEd doesn't need to explain that at this point.
2) The ActEd notes focus entirely on the symbol-manipulation steps 2-4. These steps are basically trivial - they shouldn't require much more than the line or two of elaboration I gave them. The mathematically interesting step 1, which should be analysed in detail, is completely ignored.
3) And yet they still took more words to describe this proof than I've used in this entire essay!
Reading these notes is giving me such a headache.
* Trust me on this. Or alternatively complain loudly and I'll provide you with a more detailed explanation.
** An event is a thing that may or may not happen, depending on the random behaviour of the system being studied
Read the full post
Thursday, January 22, 2009
Sunday, January 11, 2009
Practical philosophising
Edit 14 June 09: I'm considering purging this post. There's some good philosophy going on in there somewhere, but it is not well-argued. I'll probably rewrite it as a sequence of posts at some point.
The basic principle of modern skepticism is that it's not about what you believe, it's about why. A good decision made for bad reasons is an oxymoron: flukes don't count.
Of course, this is not a complete answer. How do you know if your reasons for believing are good? For a start, you can look at how different approaches have panned out in the past...
In some areas, this is pretty much a solved problem. As far as figuring out how e.g. fundamental physical objects interact, it's a gimme: the scientific method as applied to physics is where it's at. Similarly for chemistry, cosmology and basic biology. By following the scientific method, you can analyse, understand and, most importantly, predict. The end justifies the means.
So what are the limitations of this method? What are the pathological situations where it breaks down? My favourite example is poker. By definition it's impossible to predict the responses of a good poker player: if they were predictable, they wouldn't be any good. The scientific method breaks down when someone is actively trying to subvert your results, which is why many excellent scientists get badly suckered by psychics.
And yet, in many ways, this is the area where understanding is most important to us. We live in a world constructed almost in its entirety by other people, none of whom would feel terribly comfortable if they thought we fully understood them. The man who understands you can manipulate you, can use you for his own ends. Attempting to understand someone borders on the disrespectful, and people will resist it tooth and nail.
The extent of this effect can be demonstrated by looking at the quite frankly convoluted procedures psychologists have to use. To get useful results from a subject, the good psychologist will have to thoroughly deceive that subject about the goal of the experiment. If you're doing an experiment about attention spans, tell them it's about pattern recognition. If you're doing pattern recognition, tell them it's about political reactions. Otherwise your data will be hopelessly contaminated by your subject's second-guessing of their own behaviour.
So how can we understand another person well enough to e.g. date effectively? There are two basic approaches: the theoretical and the practical.
The theoretical approach tries to achieve an understanding of your date that's one level deeper than your date expects. This approach is well known by stage magicians: by planning one step further ahead than your audience expects, you can create the most magical effects.
One example that I like was provided by my sister. When she was younger, a number of her friends were big fans of the horoscopes in the local paper. So if she was on the out with a friend, and that friend's horoscope said "a person wearing blue will be important to you today", my sister would wear blue. By understanding the factors that influenced her friend, she could achieve a closer relationship.
In dating, a similar role is played by the modern romance. Human beings are strongly conditioned by films and books to expect certain things of each other. This doesn't always work out well for us as a species. It's noticeable that the heros from action movies would have real trouble with the heroines from romantic films. So when an action-loving bloke meets a romance-loving girl (or vice versa) there are likely to be fireworks. And not in a good way.
The way to get round this is exactly what you'd expect: watch lots of sloppy romance films. This is a real issue for me - I'm a hide-behind-the-sofa kind of guy when it comes to this sort of thing. I empathise with the characters far too much to watch them blithely making fools of themselves in this way. I can't stand Mr Bean either.
But in the interests of fostering better communications between the sexes, I'm willing to make the effort. I just watched my first romantic comedy in years: the film Hitch, with Will Smith playing a relationship coach. I can't say I enjoyed it - in fact I spent most of it clutching my head and yelling at the screen "no! You idiot! Don't do that!!!" But I feel I've grown as a person. Soon I hope to be able to view stuff like this without needing heavy doses of anaesthetising whisky first.
Oh, and the practical approach to dating? That's to just try it a few times and see what works. In the end, this really is the only way of getting anywhere with something as complex as a woman...
Read the full post
The basic principle of modern skepticism is that it's not about what you believe, it's about why. A good decision made for bad reasons is an oxymoron: flukes don't count.
Of course, this is not a complete answer. How do you know if your reasons for believing are good? For a start, you can look at how different approaches have panned out in the past...
In some areas, this is pretty much a solved problem. As far as figuring out how e.g. fundamental physical objects interact, it's a gimme: the scientific method as applied to physics is where it's at. Similarly for chemistry, cosmology and basic biology. By following the scientific method, you can analyse, understand and, most importantly, predict. The end justifies the means.
So what are the limitations of this method? What are the pathological situations where it breaks down? My favourite example is poker. By definition it's impossible to predict the responses of a good poker player: if they were predictable, they wouldn't be any good. The scientific method breaks down when someone is actively trying to subvert your results, which is why many excellent scientists get badly suckered by psychics.
And yet, in many ways, this is the area where understanding is most important to us. We live in a world constructed almost in its entirety by other people, none of whom would feel terribly comfortable if they thought we fully understood them. The man who understands you can manipulate you, can use you for his own ends. Attempting to understand someone borders on the disrespectful, and people will resist it tooth and nail.
The extent of this effect can be demonstrated by looking at the quite frankly convoluted procedures psychologists have to use. To get useful results from a subject, the good psychologist will have to thoroughly deceive that subject about the goal of the experiment. If you're doing an experiment about attention spans, tell them it's about pattern recognition. If you're doing pattern recognition, tell them it's about political reactions. Otherwise your data will be hopelessly contaminated by your subject's second-guessing of their own behaviour.
So how can we understand another person well enough to e.g. date effectively? There are two basic approaches: the theoretical and the practical.
The theoretical approach tries to achieve an understanding of your date that's one level deeper than your date expects. This approach is well known by stage magicians: by planning one step further ahead than your audience expects, you can create the most magical effects.
One example that I like was provided by my sister. When she was younger, a number of her friends were big fans of the horoscopes in the local paper. So if she was on the out with a friend, and that friend's horoscope said "a person wearing blue will be important to you today", my sister would wear blue. By understanding the factors that influenced her friend, she could achieve a closer relationship.
In dating, a similar role is played by the modern romance. Human beings are strongly conditioned by films and books to expect certain things of each other. This doesn't always work out well for us as a species. It's noticeable that the heros from action movies would have real trouble with the heroines from romantic films. So when an action-loving bloke meets a romance-loving girl (or vice versa) there are likely to be fireworks. And not in a good way.
The way to get round this is exactly what you'd expect: watch lots of sloppy romance films. This is a real issue for me - I'm a hide-behind-the-sofa kind of guy when it comes to this sort of thing. I empathise with the characters far too much to watch them blithely making fools of themselves in this way. I can't stand Mr Bean either.
But in the interests of fostering better communications between the sexes, I'm willing to make the effort. I just watched my first romantic comedy in years: the film Hitch, with Will Smith playing a relationship coach. I can't say I enjoyed it - in fact I spent most of it clutching my head and yelling at the screen "no! You idiot! Don't do that!!!" But I feel I've grown as a person. Soon I hope to be able to view stuff like this without needing heavy doses of anaesthetising whisky first.
Oh, and the practical approach to dating? That's to just try it a few times and see what works. In the end, this really is the only way of getting anywhere with something as complex as a woman...
Read the full post
Wednesday, January 07, 2009
Pythonia
"I aten't dead"
- Granny Weatherwax
Warning: blog post contains factual inaccuracies. See comments section for discussion.
So I keep meaning to write up my experiences in India, and I keep getting distracted. For example I've developed an interest in clockwork (don't ask).
Even more braincell-consuming is my ongoing effort to produce some sort of computer game worthy of the title. This is going very slowly, mostly because I'm taking a very anal approach to it. In short, I want to make it Pythonic.
An explanation. My favourite programming language, Python, puts a lot of effort into inculcating its users with good programming style. This is something very different from simply being able to program in the language, in the same way that not every writer of English prose can compete with Shakespeare. Good Python code, like any other form of poetry, should be elegant, non-kludgy, readable, evocative... Pythonic.
In particular, Pythonicism discourages "procedural" programming. This is code that consists primarily of single instructions linked by commands to go to a given line. For example, if you wanted to print out the numbers from one to twenty, a procedural approach would look like:
line 1: x = 0
line 2: add 1 to x
line 3: print x
line 4: if x < 20 then go to line 2
line 5: quit
The problem with this approach is that, unless you read and comprehend the entire program, it's a pain to figure out what the blazes it's doing. Let's say you start reading at line 3. What does x equal? From line 4 you can figure out that it's a number, but there's no clear indication of what x starts out as or how it changes over time. This is not a problem for this program as it's so short, but a 1000-line example would soon make your brain explode.
By contrast, a Pythonic approach would look like:
line 1: for x in range(20):
line 2: print x
If you start reading at line 2, you'll see that the text is indented, which means it's a consequence of some preceding statement. "Oh," you'll say, "I need to look to see what this command is a subclause of. I'll look at the line above." And you look, and lo and behold the line above contains all the info you need to understand x: its starting point, its limit, and its mode of change. Not only is this code shorter, it's vastly more readable. That 1000-line program starts to look manageable.
The Python idiom actually has a very simple root: the principle of minimum power. Always use the most restrictive command that can achieve a given goal. It takes a bit of thought to realise that a "for" statement is less powerful than a "go to" statement, but it's true. A "for" statement imposes certain constraints: the list of values must be predefined, and in any iteration you can only move to the next value in the list.
By contrast, with "go to" statements, you can achieve any pattern of recursion, however convoluted. When you read code, what you're mostly doing is narrowing down the possible explanations for what the program actually does and how it does it. "Go to" statements do not narrow things down at all, so code with them in is harder to read than code that uses more restrictive statements. This is why "go to" statements are evil: any program containing them tends to become an unmaintainable mass of spaghetti.
So Pythonicism makes for nice programs. But it also makes for headaches on the developer's part as he/she desperately wrestles with how to make a program not only functional but elegant. This is not easy. It's like trying to write instructions for an educationally subnormal employee that at the same time read like the most beautiful sonnet.
The example I'm hitting is game design. The game I'm working on is extremely simple in concept: it's a turn-based game, and the actual game logic is not complicated in the least. But I'm having real trouble because I can't see how to structure the code Pythonically. Procedurally, things look like this:
1) Start the program up
2) Draw the menu screen
3) Once the "start new game" option is selected, initialise all the game variables
4) Draw the game-board screen
5) Let the user play a round (updating the board as they go)
6) Let the computer play a round (updating the board as they go)
7) Go to 5
This is perfectly viable... and completely procedural. A more Pythonic approach is still forming in my brain, but certain subtleties have become apparent. Firstly, the user actually has two roles: "dungeon-master" and "player". As dungeon-master, the user gets to choose the game settings (difficulty etc) and save or load games. As player, the user is limited to playing with the pieces they're given - no metagaming.
Secondly, the core logic of the game should be agnostic as to whether a given player is human or AI - no cheating. There will therefore be two equivalent components that provide player decisions, one of which happens to have a lot of AI code in it and one of which happens to have a user interface. The user-interface component will have to be tolerant of occasional switches from player mode to dungeon-master mode. This raises a number of design questions, for example what happens if two players try to use dungeon-master mode simultaneously?
So what's the pay-off from this incredibly abstract approach to designing the game? Well, there are two main advantages. Firstly, once I've got the structure sorted out to my satisfaction, inserting the actual game logic will be a piece of cake: I won't have to worry about unexpected interactions between the various bits of code, because each will have a well-planned interface to the wider world. Secondly, extending the game will also be very easy - for example I could make it a network game with minimal effort.
It's still painful though. That's the joy and despair of poetic Pythonic programming.
Read the full post
- Granny Weatherwax
Warning: blog post contains factual inaccuracies. See comments section for discussion.
So I keep meaning to write up my experiences in India, and I keep getting distracted. For example I've developed an interest in clockwork (don't ask).
Even more braincell-consuming is my ongoing effort to produce some sort of computer game worthy of the title. This is going very slowly, mostly because I'm taking a very anal approach to it. In short, I want to make it Pythonic.
An explanation. My favourite programming language, Python, puts a lot of effort into inculcating its users with good programming style. This is something very different from simply being able to program in the language, in the same way that not every writer of English prose can compete with Shakespeare. Good Python code, like any other form of poetry, should be elegant, non-kludgy, readable, evocative... Pythonic.
In particular, Pythonicism discourages "procedural" programming. This is code that consists primarily of single instructions linked by commands to go to a given line. For example, if you wanted to print out the numbers from one to twenty, a procedural approach would look like:
line 1: x = 0
line 2: add 1 to x
line 3: print x
line 4: if x < 20 then go to line 2
line 5: quit
The problem with this approach is that, unless you read and comprehend the entire program, it's a pain to figure out what the blazes it's doing. Let's say you start reading at line 3. What does x equal? From line 4 you can figure out that it's a number, but there's no clear indication of what x starts out as or how it changes over time. This is not a problem for this program as it's so short, but a 1000-line example would soon make your brain explode.
By contrast, a Pythonic approach would look like:
line 1: for x in range(20):
line 2: print x
If you start reading at line 2, you'll see that the text is indented, which means it's a consequence of some preceding statement. "Oh," you'll say, "I need to look to see what this command is a subclause of. I'll look at the line above." And you look, and lo and behold the line above contains all the info you need to understand x: its starting point, its limit, and its mode of change. Not only is this code shorter, it's vastly more readable. That 1000-line program starts to look manageable.
The Python idiom actually has a very simple root: the principle of minimum power. Always use the most restrictive command that can achieve a given goal. It takes a bit of thought to realise that a "for" statement is less powerful than a "go to" statement, but it's true. A "for" statement imposes certain constraints: the list of values must be predefined, and in any iteration you can only move to the next value in the list.
By contrast, with "go to" statements, you can achieve any pattern of recursion, however convoluted. When you read code, what you're mostly doing is narrowing down the possible explanations for what the program actually does and how it does it. "Go to" statements do not narrow things down at all, so code with them in is harder to read than code that uses more restrictive statements. This is why "go to" statements are evil: any program containing them tends to become an unmaintainable mass of spaghetti.
So Pythonicism makes for nice programs. But it also makes for headaches on the developer's part as he/she desperately wrestles with how to make a program not only functional but elegant. This is not easy. It's like trying to write instructions for an educationally subnormal employee that at the same time read like the most beautiful sonnet.
The example I'm hitting is game design. The game I'm working on is extremely simple in concept: it's a turn-based game, and the actual game logic is not complicated in the least. But I'm having real trouble because I can't see how to structure the code Pythonically. Procedurally, things look like this:
1) Start the program up
2) Draw the menu screen
3) Once the "start new game" option is selected, initialise all the game variables
4) Draw the game-board screen
5) Let the user play a round (updating the board as they go)
6) Let the computer play a round (updating the board as they go)
7) Go to 5
This is perfectly viable... and completely procedural. A more Pythonic approach is still forming in my brain, but certain subtleties have become apparent. Firstly, the user actually has two roles: "dungeon-master" and "player". As dungeon-master, the user gets to choose the game settings (difficulty etc) and save or load games. As player, the user is limited to playing with the pieces they're given - no metagaming.
Secondly, the core logic of the game should be agnostic as to whether a given player is human or AI - no cheating. There will therefore be two equivalent components that provide player decisions, one of which happens to have a lot of AI code in it and one of which happens to have a user interface. The user-interface component will have to be tolerant of occasional switches from player mode to dungeon-master mode. This raises a number of design questions, for example what happens if two players try to use dungeon-master mode simultaneously?
So what's the pay-off from this incredibly abstract approach to designing the game? Well, there are two main advantages. Firstly, once I've got the structure sorted out to my satisfaction, inserting the actual game logic will be a piece of cake: I won't have to worry about unexpected interactions between the various bits of code, because each will have a well-planned interface to the wider world. Secondly, extending the game will also be very easy - for example I could make it a network game with minimal effort.
It's still painful though. That's the joy and despair of poetic Pythonic programming.
Read the full post
Monday, December 15, 2008
Epiphalicious
So I recently took a trip to India, to attend the wedding of a friend from work. This was great fun and the trip was a hell of a learning experience in its own right (of which more anon).
There was, however, one element of the trip that proved a little... distracting. You see, I wasn't the only one who was willing to hop on a long-haul flight for the chance to see a proper Indian wedding. I had a fellow-traveller. A girl. Who I've had a mild crush on for a while.
I'm fairly sure she has no interest in me, and the trip probably did little to change her opinion given how fish-out-of-water we both were in Delhi. However, it's a demonstrable fact that close proximity to someone enhances one's emotional response to them*. In short, the crush has devolved into full-scale infatuation.
And then comes the office Christmas party. And she's wearing a gorgeous dress, looking incredible, and I'm feeling like the village idiot as I shamble around trying to dance without breaking anyone's toes. I can't even pluck up the courage to make a move. This sucks...
Now at this point you're probably thinking this is going to be another of those pitifully whiney posts I've been coming out with lately. But somewhere between the champagne and the Jack Daniels, I have a join-the-dots moment. I figure out what it is that's making me unhappy.
The girl is a part of it, sure, but I've had the same frustration when faced with my inability to move up the career ladder. It's the feeling that I've hit my limits, that I've found some kind of glass ceiling beyond which I can't progress. I stare out across the impenetrable ocean of my own inadequacies and weep, for there are no more worlds I can conquer.
This is just an organising principle for thoughts that have been percolating for a while, but describing problems helps me find solutions. It occured to me that, as long as I'm improving in one area of my life, I won't care so much about the rest.
And improvement takes less effort than I expected. I've spent the weekend tidying my flat. I've given a load of my old books to charity. I've sorted out dry-cleaning and food shopping and getting various parts of my life organised, and taking a bit of exercise.
Ah, the exercise. I'm very badly out of shape, and the first fifteen minutes of my half-hour jog on Saturday nearly did me in. But I reached the top of a hill, and I felt my muscles start to fall into line, and I got my breathing in check, and I looked at the world spread out before me, and I felt happy.
It's Sunday as I write this and I'm just about to head out for another run. I know it isn't solving all my problems: at some point there will be a reckoning with the girl, if only to give me closure. But I now know that, when the moment comes, I'll be a better person than I am today. And that's enough.
* Or at least that's how I imagine it would look to an outsider. Speaking from the inside of my own skull, I just think she's really smart, attractive, unconventional and generally fun to be around.
Read the full post
There was, however, one element of the trip that proved a little... distracting. You see, I wasn't the only one who was willing to hop on a long-haul flight for the chance to see a proper Indian wedding. I had a fellow-traveller. A girl. Who I've had a mild crush on for a while.
I'm fairly sure she has no interest in me, and the trip probably did little to change her opinion given how fish-out-of-water we both were in Delhi. However, it's a demonstrable fact that close proximity to someone enhances one's emotional response to them*. In short, the crush has devolved into full-scale infatuation.
And then comes the office Christmas party. And she's wearing a gorgeous dress, looking incredible, and I'm feeling like the village idiot as I shamble around trying to dance without breaking anyone's toes. I can't even pluck up the courage to make a move. This sucks...
Now at this point you're probably thinking this is going to be another of those pitifully whiney posts I've been coming out with lately. But somewhere between the champagne and the Jack Daniels, I have a join-the-dots moment. I figure out what it is that's making me unhappy.
The girl is a part of it, sure, but I've had the same frustration when faced with my inability to move up the career ladder. It's the feeling that I've hit my limits, that I've found some kind of glass ceiling beyond which I can't progress. I stare out across the impenetrable ocean of my own inadequacies and weep, for there are no more worlds I can conquer.
This is just an organising principle for thoughts that have been percolating for a while, but describing problems helps me find solutions. It occured to me that, as long as I'm improving in one area of my life, I won't care so much about the rest.
And improvement takes less effort than I expected. I've spent the weekend tidying my flat. I've given a load of my old books to charity. I've sorted out dry-cleaning and food shopping and getting various parts of my life organised, and taking a bit of exercise.
Ah, the exercise. I'm very badly out of shape, and the first fifteen minutes of my half-hour jog on Saturday nearly did me in. But I reached the top of a hill, and I felt my muscles start to fall into line, and I got my breathing in check, and I looked at the world spread out before me, and I felt happy.
It's Sunday as I write this and I'm just about to head out for another run. I know it isn't solving all my problems: at some point there will be a reckoning with the girl, if only to give me closure. But I now know that, when the moment comes, I'll be a better person than I am today. And that's enough.
* Or at least that's how I imagine it would look to an outsider. Speaking from the inside of my own skull, I just think she's really smart, attractive, unconventional and generally fun to be around.
Read the full post
Wednesday, December 10, 2008
I don't know what they're smoking, but I want some
So I've just spent a couple of days frantically coding in (you guessed it) Excel/VBA. And I'm actually feeling surprisingly good about it.
This is because the task I'm dealing with involves extracting large blocks of data from various databases and then processing it in Excel. Up until a week ago, this was a truly hideous task for me, requiring a big messy chunk of partially-hardwired code to handle dumping the data into Excel.
Now, though, I'm happy. I've discovered a feature that takes care of all that: the QueryTable object. You just feed it an SQL query, point it at a cell, and it handles the rest. It has its limitations, but is generally rather nice. Apart from one issue.
Yes, there's always something. But this particular problem had me scratching my head in bewilderment: this lovely little feature has only the most cursory mention in the help file. I'd have been using it for months if I'd known about it.
The documentation it does have is likewise minimal. It took me two hours to figure out how to use a parametrised query, and actually getting a system up and running took a full working day.
Why, Microsoft? You actually did something right for a change: you produced a conceptually-elegant tool to solve a clearly-defined and commonly-occurring problem. There is almost nothing about QueryTables that I can complain about. So why the blazes aren't you shouting to the world about it?
Please please get the hang of when it's appropriate to blow your own trumpet. Or alternatively, pass me that spliff.
Read the full post
This is because the task I'm dealing with involves extracting large blocks of data from various databases and then processing it in Excel. Up until a week ago, this was a truly hideous task for me, requiring a big messy chunk of partially-hardwired code to handle dumping the data into Excel.
Now, though, I'm happy. I've discovered a feature that takes care of all that: the QueryTable object. You just feed it an SQL query, point it at a cell, and it handles the rest. It has its limitations, but is generally rather nice. Apart from one issue.
Yes, there's always something. But this particular problem had me scratching my head in bewilderment: this lovely little feature has only the most cursory mention in the help file. I'd have been using it for months if I'd known about it.
The documentation it does have is likewise minimal. It took me two hours to figure out how to use a parametrised query, and actually getting a system up and running took a full working day.
Why, Microsoft? You actually did something right for a change: you produced a conceptually-elegant tool to solve a clearly-defined and commonly-occurring problem. There is almost nothing about QueryTables that I can complain about. So why the blazes aren't you shouting to the world about it?
Please please get the hang of when it's appropriate to blow your own trumpet. Or alternatively, pass me that spliff.
Read the full post
Thursday, December 04, 2008
Ground Rules
In the great discussion about God, it's quite common for otherwise perfectly sane people, on both sides of the argument, to start frothing at the mouth and claiming that the Other Side wishes to censor, physically injure or otherwise silence them.
In many cases, this is sheer paranoia. Most folks, religious or otherwise, tend to be pretty nice when you get to know them, and are happy to allow space for the beliefs of others.
In many cases, this is not paranoia. Religious arguments tend to attract a worrying number of nutjobs of all stripes. Once the legislators get involved, it's quite easy for little things like free speech to go right out the window.
As such, I would like to propose a code of conduct for religious debate. The purpose of this code is to mark out a middle ground in this debate between the various groups of crazies who want to see all belief systems but theirs forcibly purged from the planet.
Please leave a comment if you agree with this code, or if you wish to suggest changes to the wording. By signing up, you are showing solidarity with folks of other religious denominations who stand against the forces of zealotry in their own ranks.
The Moderacy Manifesto
I hold beliefs that touch on religious topics (henceforth "religious beliefs"). I feel these beliefs are justified. I reserve the right to discuss these beliefs: to present arguments in support of my beliefs, and to critique the arguments of others.
I recognise that other people hold different beliefs on these topics. I acknowledge that these people feel their beliefs are justified. I respect their right to hold and discuss their beliefs, even where those beliefs conflict with mine.
I do not judge an individual's moral character solely on the basis of their religious beliefs. I accept that it is possible to be a good person whilst holding religious beliefs different from mine.
I do not approve of religious discrimination that results in physical, legal or financial hardships. I will not materially discriminate against anyone solely on the basis of their religious beliefs. However, I reserve the right to materially discriminate based on their actions, even when those actions are inspired by religious beliefs. I also reserve the right to discriminate in ways that do not result in hardship.
I ask my government not to censor, fine, imprison or otherwise penalise any individual or group simply for holding or discussing particular religious beliefs. I ask my government not to endorse, subsidise or otherwise support any individual or group simply for holding or discussing particular religious beliefs. This includes individuals or groups that hold the same beliefs as me.
Although I may disagree with other participants in this discussion, I respect their sincerity and I respect their rights. I believe that mutual tolerance, of the form described above, is the best way to demonstrate that respect.
Read the full post
In many cases, this is sheer paranoia. Most folks, religious or otherwise, tend to be pretty nice when you get to know them, and are happy to allow space for the beliefs of others.
In many cases, this is not paranoia. Religious arguments tend to attract a worrying number of nutjobs of all stripes. Once the legislators get involved, it's quite easy for little things like free speech to go right out the window.
As such, I would like to propose a code of conduct for religious debate. The purpose of this code is to mark out a middle ground in this debate between the various groups of crazies who want to see all belief systems but theirs forcibly purged from the planet.
Please leave a comment if you agree with this code, or if you wish to suggest changes to the wording. By signing up, you are showing solidarity with folks of other religious denominations who stand against the forces of zealotry in their own ranks.
The Moderacy Manifesto
I hold beliefs that touch on religious topics (henceforth "religious beliefs"). I feel these beliefs are justified. I reserve the right to discuss these beliefs: to present arguments in support of my beliefs, and to critique the arguments of others.
I recognise that other people hold different beliefs on these topics. I acknowledge that these people feel their beliefs are justified. I respect their right to hold and discuss their beliefs, even where those beliefs conflict with mine.
I do not judge an individual's moral character solely on the basis of their religious beliefs. I accept that it is possible to be a good person whilst holding religious beliefs different from mine.
I do not approve of religious discrimination that results in physical, legal or financial hardships. I will not materially discriminate against anyone solely on the basis of their religious beliefs. However, I reserve the right to materially discriminate based on their actions, even when those actions are inspired by religious beliefs. I also reserve the right to discriminate in ways that do not result in hardship.
I ask my government not to censor, fine, imprison or otherwise penalise any individual or group simply for holding or discussing particular religious beliefs. I ask my government not to endorse, subsidise or otherwise support any individual or group simply for holding or discussing particular religious beliefs. This includes individuals or groups that hold the same beliefs as me.
Although I may disagree with other participants in this discussion, I respect their sincerity and I respect their rights. I believe that mutual tolerance, of the form described above, is the best way to demonstrate that respect.
Read the full post
Thursday, November 20, 2008
Ubuntu 8.10: The Verdict
I've been using the latest version of Ubuntu, codename Intrepid Ibex, for a couple of weeks now. Given this, I think I can give a fair verdict on it.
The verdict is: meh.
There's not really much that's actively wrong with Intrepid. I've noticed a general decrease in system responsiveness and reliability compared to Hardy Heron (the last release), but frankly that's like saying Kilimanjaro is unacceptably small compared to Everest. It's still damn good by comparison with e.g. every instance of Windows I've used in the last few months. I have high hopes of penguinising my dad in the near future, as his loathing for his company Vista laptop increases.
The only other issue was the grace notes (quite ironic). Intrepid has a bunch of cute little features (see below) which, unfortunately, weren't actually installed when I upgraded my system. I've since hunted them down and installed them, but this definitely abbreviated the honeymoon period.
The big disappointment for me is probably OpenOffice 3.0. As far as I can tell, there is no way in which it is substantially cooler than 2.0, and the list of "great new features" is going to make any MS Office user roll their eyes and yawn theatrically. Considering what projects like Firefox and KDE have achieved in the same time, this is starting to get a bit silly. The longer this goes on, the more chance that Novell will be successful in forking the codebase and filling it full of Microsoft encrustations*.
So what do we get out of this release? Well, whilst there's nothing here to really make you go "wow", there are a number of little exploratory tweaks that could easily snowball into major developments. For example, each user now has an encrypted section in their home folder. Throw in the GnuPG plugin for Thunderbird and it looks like Ubuntu is rapidly becoming the first OS to have user-friendly crypto built in.
Another window on the future is Ubuntu's collaboration with the BBC to provide well-integrated access to media. Basically a huge chunk of content has just become available as a glorified playlist, via the Totem player. No need to piddle around on websites, just click through the list. I'm currently listening to the Digital Planet podcast.
Finally, a fair bit of love has been bestowed on Nautilus, the file browser. It has Firefox-like tabbed file browsing and a rather impressively effective previewing system. Very cute.
In general, this version took two steps forward and one step back. If you're on Hardy, I wouldn't particularly recommend you upgrade. That said, I'm glad it's out. Its showcase of features has enough neat ideas to keep the community busy for a long time.
* This may be an unfair accusation against Novell. However, their deals with Microsoft have scared the crap out of most penguinistas - we're worried they'll go kamikaze on us like SCO did a few years back. They would get caned if they tried, but Linux needs that sort of problem like it needs a hole in the head. Given this, everything that Novell touch (especially stuff like Mono and Moonlight that they touch with Microsoft's help**) tends to be interpreted as an early chess move in the game leading up to lawsuit. This may or may not be paranoia.
** It's definitely not paranoid to be worried about Microsoft. It used to be that they'd just try to squish open source. These days they seem to have graduated to trying to corrupt it - embrace, extend and extinguish. Microsoft is the living expression of why the open source movement needs the free software movement - open source's pragmatism doesn't handle attacks of this kind very well.
Read the full post
The verdict is: meh.
There's not really much that's actively wrong with Intrepid. I've noticed a general decrease in system responsiveness and reliability compared to Hardy Heron (the last release), but frankly that's like saying Kilimanjaro is unacceptably small compared to Everest. It's still damn good by comparison with e.g. every instance of Windows I've used in the last few months. I have high hopes of penguinising my dad in the near future, as his loathing for his company Vista laptop increases.
The only other issue was the grace notes (quite ironic). Intrepid has a bunch of cute little features (see below) which, unfortunately, weren't actually installed when I upgraded my system. I've since hunted them down and installed them, but this definitely abbreviated the honeymoon period.
The big disappointment for me is probably OpenOffice 3.0. As far as I can tell, there is no way in which it is substantially cooler than 2.0, and the list of "great new features" is going to make any MS Office user roll their eyes and yawn theatrically. Considering what projects like Firefox and KDE have achieved in the same time, this is starting to get a bit silly. The longer this goes on, the more chance that Novell will be successful in forking the codebase and filling it full of Microsoft encrustations*.
So what do we get out of this release? Well, whilst there's nothing here to really make you go "wow", there are a number of little exploratory tweaks that could easily snowball into major developments. For example, each user now has an encrypted section in their home folder. Throw in the GnuPG plugin for Thunderbird and it looks like Ubuntu is rapidly becoming the first OS to have user-friendly crypto built in.
Another window on the future is Ubuntu's collaboration with the BBC to provide well-integrated access to media. Basically a huge chunk of content has just become available as a glorified playlist, via the Totem player. No need to piddle around on websites, just click through the list. I'm currently listening to the Digital Planet podcast.
Finally, a fair bit of love has been bestowed on Nautilus, the file browser. It has Firefox-like tabbed file browsing and a rather impressively effective previewing system. Very cute.
In general, this version took two steps forward and one step back. If you're on Hardy, I wouldn't particularly recommend you upgrade. That said, I'm glad it's out. Its showcase of features has enough neat ideas to keep the community busy for a long time.
* This may be an unfair accusation against Novell. However, their deals with Microsoft have scared the crap out of most penguinistas - we're worried they'll go kamikaze on us like SCO did a few years back. They would get caned if they tried, but Linux needs that sort of problem like it needs a hole in the head. Given this, everything that Novell touch (especially stuff like Mono and Moonlight that they touch with Microsoft's help**) tends to be interpreted as an early chess move in the game leading up to lawsuit. This may or may not be paranoia.
** It's definitely not paranoid to be worried about Microsoft. It used to be that they'd just try to squish open source. These days they seem to have graduated to trying to corrupt it - embrace, extend and extinguish. Microsoft is the living expression of why the open source movement needs the free software movement - open source's pragmatism doesn't handle attacks of this kind very well.
Read the full post
Monday, November 17, 2008
Cuts like a knife
Entia non sunt multiplicanda praeter necessitatem.
- William of Ockham
The scientific method is probably the most important investigative tool we as a species have ever produced. As generally understood*, it is a means of comparing and contrasting hypotheses. It uses three conditions: accuracy, predictivity and parsimony.
Accuracy is easy to understand: a new model of the universe must be consistent with existing data. So general relativity looks like Newtonian dynamics at low energies, quantum atoms behave like point particles on human scales, and so on. A theory of gravity that did not produce an inverse square law would be no damn good.
Predictivity is similarly straightforward: a model can't just describe what has happened so far, it must also give us some clue what's coming up. This is for two reasons. Firstly, it limits people's ability to equivocate, which stops science descending into an angels-on-pinheads talking shop. Secondly, it means that the entire business occasionally generates useful real-world results.
Parsimony, also known as Ockham's Razor, is not so clear. In short, it states that you shouldn't include more "stuff" in your model than necessary. So never assume a conspiracy where stupidity is an adequate explanation; never infer psychic powers where outright fraud is a possibility; never choose epicycles over ellipses.
But what do we mean by "simple", and how do we justify this principle? The two questions are interlinked: a thorough justification of the Razor will of necessity give us a working definition of simplicity. Let's take a quick tour through some historical arguments put forward for this enigmatic principle. We should accept the simplest explanation because...
1) ...Simplicity is so damn cool.
This is probably the original view of Ockham's Razor. As far as Classical civilisation was concerned, simplicity was a desirable goal in itself, without needing any further justification.
This presupposes some kind of human aesthetic sense which would allow us to distinguish the simple from the complex. It's very "Zen and the Art of Motorcycle Maintenance".
I remain unconvinced by this for two main reasons. Firstly, I don't think it really answers the question; it just wraps it in even fuzzier clothing. Secondly, even after several thousand years there is no consensus about whether God is defined as simple or complex. If our aesthetic sense can display inconsistency in a case as grandiose as this, what hope does it have in other, subtler, contexts?
2) ...Simplicity is more likely to be true.
This is an intriguing notion. Could it be the case that the universe is in some way geared towards elegant explanations? It's actually quite a common belief, not just amongst the religious, but also among scientists who see elegance amidst the chaos.
However, I'm not aware of any good explanation of why this should be the case. In the absence of that, it's impossible to say that this rule holds generally. And I'm fairly sure there's a certain amount of confirmation bias here.
There are some broad philosophies that would make this explanation more plausible. In general, though, I fall on the side of Sir Arthur Eddington: the mathematics is not there until we put it there.
3) ...Simplicity makes better targets for science.
This was Popper's take on parsimony. He believed that simple hypotheses were, if false, far easier to squash than complex ones.
This view has a certain amount of empirical support. Consider for example the epicycle "hypothesis". Turns out that, by sticking enough extra epicycles onto a planet's orbit, you can match almost any data set. So the hypothesis was rendered so fuzzy as to be undisprovable. Undisprovable hypotheses are the plaque in science's arteries: they seriously impede progress and they're almost impossible to get rid of.
In this sense, simplicity relates to the number of "magic variables" that an hypothesis contains. Epicycle theory had an arbitrary number of magic variables that could be set by scientists: the radii and rotation speed of the epicycles. Galileo's elliptic orbits, by contrast, were specified entirely by a single gravitational constant plus the masses and present velocities of the various heavenly bodies. It took several centuries to disprove epicycles. By contrast, if Galileo had been wrong, it could have been demonstrated in a matter of months.
4) ...Simplicity is functional
Let's say you have a tiger charging towards you. You have two explanations of its progress: one in terms of mass, momentum, chemical interactions and the behaviour of various neurons, and one in terms of it being a bloody great big cat that wants to eat you. Which model do you think would do most for your survival chances?
Humans only have a limited amount of computational resource at hand, so it makes sense to shepherd it as much as possible. Why waste valuable neurons believing in yetis, ghosts, gods? It doesn't make it any easier to dodge the tiger, and it reduces the space available for beliefs that could.
From this point of view, simplicity means computational simplicity: the model that generates the most accurate results in the shortest time. One interesting feature of this is that simplicity may actually vary from organism to organism: a cyborg with a silicon brain might have far different preferences from a mammal with a bunch of neurons. Heck, even different processors could lead to different views of the world.
This is probably the most popular explanation for Ockham's Razor as far as the philosophers are concerned. Game over? Probably... but this explanation also causes great fuss. Philosophers do not generally like pragmatism - it can change so easily from situation to situation, making a mess of all our overarching frameworks.
If Ockham's Razor is pragmatic, then a sufficiently strong pragmatic incentive could lead us to discard it. Furthering our position within the tribe, motivating ourselves, avoiding depression - all these become valid reasons for unparsimonious belief**.
We skeptics can find only a Pyrrhic victory in justifying the Razor by reference to pragmatism. In slicing away the gods, we slit our own philosophical wrists.
* According to Karl Popper, anyway. Kuhn would disagree. I tend to equivocate on this: I think that, while Kuhn probably describes the practice of science better, Popper provides a necessary level of justification. In football terms, Kuhn is the coach who talks about positions and tactics; Popper is the coach who talks about human biology.
** Or at least for giving the impression of belief. But for someone who isn't a good liar, it might be necessary to persuade themselves.
Read the full post
- William of Ockham
The scientific method is probably the most important investigative tool we as a species have ever produced. As generally understood*, it is a means of comparing and contrasting hypotheses. It uses three conditions: accuracy, predictivity and parsimony.
Accuracy is easy to understand: a new model of the universe must be consistent with existing data. So general relativity looks like Newtonian dynamics at low energies, quantum atoms behave like point particles on human scales, and so on. A theory of gravity that did not produce an inverse square law would be no damn good.
Predictivity is similarly straightforward: a model can't just describe what has happened so far, it must also give us some clue what's coming up. This is for two reasons. Firstly, it limits people's ability to equivocate, which stops science descending into an angels-on-pinheads talking shop. Secondly, it means that the entire business occasionally generates useful real-world results.
Parsimony, also known as Ockham's Razor, is not so clear. In short, it states that you shouldn't include more "stuff" in your model than necessary. So never assume a conspiracy where stupidity is an adequate explanation; never infer psychic powers where outright fraud is a possibility; never choose epicycles over ellipses.
But what do we mean by "simple", and how do we justify this principle? The two questions are interlinked: a thorough justification of the Razor will of necessity give us a working definition of simplicity. Let's take a quick tour through some historical arguments put forward for this enigmatic principle. We should accept the simplest explanation because...
1) ...Simplicity is so damn cool.
This is probably the original view of Ockham's Razor. As far as Classical civilisation was concerned, simplicity was a desirable goal in itself, without needing any further justification.
This presupposes some kind of human aesthetic sense which would allow us to distinguish the simple from the complex. It's very "Zen and the Art of Motorcycle Maintenance".
I remain unconvinced by this for two main reasons. Firstly, I don't think it really answers the question; it just wraps it in even fuzzier clothing. Secondly, even after several thousand years there is no consensus about whether God is defined as simple or complex. If our aesthetic sense can display inconsistency in a case as grandiose as this, what hope does it have in other, subtler, contexts?
2) ...Simplicity is more likely to be true.
This is an intriguing notion. Could it be the case that the universe is in some way geared towards elegant explanations? It's actually quite a common belief, not just amongst the religious, but also among scientists who see elegance amidst the chaos.
However, I'm not aware of any good explanation of why this should be the case. In the absence of that, it's impossible to say that this rule holds generally. And I'm fairly sure there's a certain amount of confirmation bias here.
There are some broad philosophies that would make this explanation more plausible. In general, though, I fall on the side of Sir Arthur Eddington: the mathematics is not there until we put it there.
3) ...Simplicity makes better targets for science.
This was Popper's take on parsimony. He believed that simple hypotheses were, if false, far easier to squash than complex ones.
This view has a certain amount of empirical support. Consider for example the epicycle "hypothesis". Turns out that, by sticking enough extra epicycles onto a planet's orbit, you can match almost any data set. So the hypothesis was rendered so fuzzy as to be undisprovable. Undisprovable hypotheses are the plaque in science's arteries: they seriously impede progress and they're almost impossible to get rid of.
In this sense, simplicity relates to the number of "magic variables" that an hypothesis contains. Epicycle theory had an arbitrary number of magic variables that could be set by scientists: the radii and rotation speed of the epicycles. Galileo's elliptic orbits, by contrast, were specified entirely by a single gravitational constant plus the masses and present velocities of the various heavenly bodies. It took several centuries to disprove epicycles. By contrast, if Galileo had been wrong, it could have been demonstrated in a matter of months.
4) ...Simplicity is functional
Let's say you have a tiger charging towards you. You have two explanations of its progress: one in terms of mass, momentum, chemical interactions and the behaviour of various neurons, and one in terms of it being a bloody great big cat that wants to eat you. Which model do you think would do most for your survival chances?
Humans only have a limited amount of computational resource at hand, so it makes sense to shepherd it as much as possible. Why waste valuable neurons believing in yetis, ghosts, gods? It doesn't make it any easier to dodge the tiger, and it reduces the space available for beliefs that could.
From this point of view, simplicity means computational simplicity: the model that generates the most accurate results in the shortest time. One interesting feature of this is that simplicity may actually vary from organism to organism: a cyborg with a silicon brain might have far different preferences from a mammal with a bunch of neurons. Heck, even different processors could lead to different views of the world.
This is probably the most popular explanation for Ockham's Razor as far as the philosophers are concerned. Game over? Probably... but this explanation also causes great fuss. Philosophers do not generally like pragmatism - it can change so easily from situation to situation, making a mess of all our overarching frameworks.
If Ockham's Razor is pragmatic, then a sufficiently strong pragmatic incentive could lead us to discard it. Furthering our position within the tribe, motivating ourselves, avoiding depression - all these become valid reasons for unparsimonious belief**.
We skeptics can find only a Pyrrhic victory in justifying the Razor by reference to pragmatism. In slicing away the gods, we slit our own philosophical wrists.
* According to Karl Popper, anyway. Kuhn would disagree. I tend to equivocate on this: I think that, while Kuhn probably describes the practice of science better, Popper provides a necessary level of justification. In football terms, Kuhn is the coach who talks about positions and tactics; Popper is the coach who talks about human biology.
** Or at least for giving the impression of belief. But for someone who isn't a good liar, it might be necessary to persuade themselves.
Read the full post
Monday, November 10, 2008
Bah
So in the run-up to halloween I did a lot of thinking about my costume. I was going to a party where I knew people were going to make an effort, and I ended up spending many hours on a rather nifty scarecrow outfit.
It helps that I'm ridiculously lanky, but height maketh not the scarecrow. I ended up hollowing out a pumpkin pinata* to make a mask. I worked through several pages of half-remembered electronics-related maths to give the mask glowing red eyes** that wouldn't explode at any inopportune moment (say, when my real eyes were 3cm away cos I was wearing the bloody thing). I even spent a couple of spare train journeys really puzzling the other passengers by meticulously attaching strands of raffia to rings of elastic, to create that "straw falling out the sleeves" effect.
It went really well, and I got second prize. I was only pipped to the post by a guy who came in the best Marlon Brando getup I have ever seen.
And now a friend of mine is having a birthday, and throwing... a fancy dress party. Based on the theme 1985. I wasn't even toddling in 1985. I do not have much awareness of fashions at the time. And the party is on Friday, so I'm panicking.
The pertinent questions, therefore, are as follows:
1) How much Adam Ant garb can I acquire at short notice from the local fancy dress store?
2) How much Adam Ant garb can I get away with wearing on public transport without being given a lovely new fancy dress outfit, this one with the sleeves tied together?
Answers on a postcard.
* I'm aware this should have a squiggle above the "n", but I'm lazy, so there.
** Incidentally, it is perfectly possible to carry a large round object stuffed full of wiring and batteries on the London Tube without anyone so much as batting an eyelid. So remind me: what's the point of all these CCTV cameras again?
Read the full post
It helps that I'm ridiculously lanky, but height maketh not the scarecrow. I ended up hollowing out a pumpkin pinata* to make a mask. I worked through several pages of half-remembered electronics-related maths to give the mask glowing red eyes** that wouldn't explode at any inopportune moment (say, when my real eyes were 3cm away cos I was wearing the bloody thing). I even spent a couple of spare train journeys really puzzling the other passengers by meticulously attaching strands of raffia to rings of elastic, to create that "straw falling out the sleeves" effect.
It went really well, and I got second prize. I was only pipped to the post by a guy who came in the best Marlon Brando getup I have ever seen.
And now a friend of mine is having a birthday, and throwing... a fancy dress party. Based on the theme 1985. I wasn't even toddling in 1985. I do not have much awareness of fashions at the time. And the party is on Friday, so I'm panicking.
The pertinent questions, therefore, are as follows:
1) How much Adam Ant garb can I acquire at short notice from the local fancy dress store?
2) How much Adam Ant garb can I get away with wearing on public transport without being given a lovely new fancy dress outfit, this one with the sleeves tied together?
Answers on a postcard.
* I'm aware this should have a squiggle above the "n", but I'm lazy, so there.
** Incidentally, it is perfectly possible to carry a large round object stuffed full of wiring and batteries on the London Tube without anyone so much as batting an eyelid. So remind me: what's the point of all these CCTV cameras again?
Read the full post
Tuesday, November 04, 2008
A => B
It's UPGRADE TIME!
And, for me, new version of Ubuntu => time to change desktop background. I don't know why I've got into the habit of doing this, but it keeps life interesting. Last time I nicked a picture of Mars off the NASA website, but this time I want something a bit more fun.
I just so happen to notice that the new version of Ubuntu has a new built-in theme: Dark. Cue a frantic search for Lovecraftesque backgrounds. Something black and murky, with slimy tentacles just visible at the edges of the light.
And I can't find a damn thing.
There are lots of pictures that use Lovecraftian monsters - shuggoths, Cthulhu of course, even a rather good one of the colour out of space. But these are all Lovecraft backgrounds, not Lovecraftesque backgrounds.
The difference is subtle, but real. Lovecraft backgrounds include his characters. Lovecraftesque backgrounds convey his flavour of cold-sweat, hair-raising uncertainty about one's place in the world*. It's the "Signs" principle: that film was a lot scarier when you couldn't actually see the damn aliens.
On the bright side, I did find a rather nice collection of steampunkania. But I want tentacles, dammit. I don't suppose anyone has any suggestions?
* Of course, in Lovecraft's stories, our place in the world is actually very clearly-defined: Cthulhu's small intestine.
Read the full post
And, for me, new version of Ubuntu => time to change desktop background. I don't know why I've got into the habit of doing this, but it keeps life interesting. Last time I nicked a picture of Mars off the NASA website, but this time I want something a bit more fun.
I just so happen to notice that the new version of Ubuntu has a new built-in theme: Dark. Cue a frantic search for Lovecraftesque backgrounds. Something black and murky, with slimy tentacles just visible at the edges of the light.
And I can't find a damn thing.
There are lots of pictures that use Lovecraftian monsters - shuggoths, Cthulhu of course, even a rather good one of the colour out of space. But these are all Lovecraft backgrounds, not Lovecraftesque backgrounds.
The difference is subtle, but real. Lovecraft backgrounds include his characters. Lovecraftesque backgrounds convey his flavour of cold-sweat, hair-raising uncertainty about one's place in the world*. It's the "Signs" principle: that film was a lot scarier when you couldn't actually see the damn aliens.
On the bright side, I did find a rather nice collection of steampunkania. But I want tentacles, dammit. I don't suppose anyone has any suggestions?
* Of course, in Lovecraft's stories, our place in the world is actually very clearly-defined: Cthulhu's small intestine.
Read the full post
Monday, November 03, 2008
I Am Not Alone
It's intensely reassuring every time I discover that someone else has the same views as I do. Especially when it's obvious that they're far smarter and more articulate than me.
Read the full post
Read the full post
Wednesday, October 29, 2008
Riddle me this
OK, so I moan about the job market et al. But really I'm having a rather good few weeks. The VBA training courses are over*, so I don't have to worry about producing more training materials. A couple of other sources of panic have passed me by. I'm working 8-6 to make up hours, and I'm struggling with my halloween costume, but these are fairly minor problems really.
And so I do what I do every time my mind starts to free itself up: I come up with interesting little tasks for myself. I've been working on a pygame-based strategy game. I've started looking back over my textbooks in search of cool concepts. And I'm trying to invent a new kind of puzzle.
A whatnow?
Every month, the UK's actuarial trade mag, The Actuary, has a puzzle page. Since the actuarial profession consists entirely of maths geeks, these are often rather good (I'm still trying to figure out how they do the 16*16 Sudokus without employing a supercomputer or two).
However, it's quite rare for the puzzles to show real innovation. Normally they're of a pre-existing type (crosswords, sudoku, logic puzzles, number grids). The actual problems are damn hard, but they're not conceptually challenging**.
I'd like to change that.
I'm working on what I believe is a new design of puzzle. It will require not only sudoku-style pattern recognition, but also excellent spatial awareness. This is because it is played on the surface of a truncated polygon. Yes.
It's not going to make me famous, but if I'm contemplating leaving the actuarial profession then I would like to go out on a high note. Causing actuaries across the UK to spit coffee over their keyboards would be a good start.
* Actually they went really well. I discovered about an hour before giving the second training day that some of my trainees were from other companies that were paying my company for the training. This caused much panic. But the day went like a charm, the trainees really enjoyed it, and I can now put "professional trainer" on my CV :)
** The November edition contains a counterexample, but even that is just a combination of sudoku and another pre-existing type.
Read the full post
And so I do what I do every time my mind starts to free itself up: I come up with interesting little tasks for myself. I've been working on a pygame-based strategy game. I've started looking back over my textbooks in search of cool concepts. And I'm trying to invent a new kind of puzzle.
A whatnow?
Every month, the UK's actuarial trade mag, The Actuary, has a puzzle page. Since the actuarial profession consists entirely of maths geeks, these are often rather good (I'm still trying to figure out how they do the 16*16 Sudokus without employing a supercomputer or two).
However, it's quite rare for the puzzles to show real innovation. Normally they're of a pre-existing type (crosswords, sudoku, logic puzzles, number grids). The actual problems are damn hard, but they're not conceptually challenging**.
I'd like to change that.
I'm working on what I believe is a new design of puzzle. It will require not only sudoku-style pattern recognition, but also excellent spatial awareness. This is because it is played on the surface of a truncated polygon. Yes.
It's not going to make me famous, but if I'm contemplating leaving the actuarial profession then I would like to go out on a high note. Causing actuaries across the UK to spit coffee over their keyboards would be a good start.
* Actually they went really well. I discovered about an hour before giving the second training day that some of my trainees were from other companies that were paying my company for the training. This caused much panic. But the day went like a charm, the trainees really enjoyed it, and I can now put "professional trainer" on my CV :)
** The November edition contains a counterexample, but even that is just a combination of sudoku and another pre-existing type.
Read the full post
A compass is no good if you don't have a map
A definite advantage to working in a group full of contractors is that they're very happy to give careers advice. This is not something you get normally: the average co-worker, unless they're very chilled, will not tell you to ditch your company and strike out for greener pastures.
I've got a fair number of interesting ideas off them. In addition to searching for conventional jobs, one guy suggested that I take up contracting myself. On that front, I'm probably pretty employable: certainly the work I'm doing at the moment poses little challenge. Also I have an actuarial exam* under my belt, which looks damn good on a CV.
This option would probably do wonders for my bank balance. Contractors quite often get a stupidly large pay packet compared to conventional employees. There are two downsides, though. The first is reduced financial stability, which might be a problem if we hit a recession. The second is lack of career development, which is a massive issue for me. I would honestly rather hammer railroad spikes through my skull than do boring job after boring job for years on end**.
A second option, which I've just spent a fair chunk of evening discussing, is say "screw it" and go get an MBA or something. This idea holds a fair amount of interest. Technical skills for me are pretty much a solved problem, whereas managers tend be be confronted with challenges that involve people and are hence much weirder and more interesting.
My worries here are (again) twofold. Firstly, I'd hate to feel like I was running back to university as soon as it looked like the real world was putting up a fight. It is important to me that I retain my self-esteem in this area. When I feel like I'm on top of the world and everything is going consistently well - that's the time to go back to uni. Of course, at that point I may not feel like I need to.
Secondly, I read Dilbert. I know what people think about the stereotypical MBA, and I would hate to have them think that way about me. I've been in the real world for slightly over two years now, so I'm not a complete n00b, but it would worry me to study an entire course about management without ever having, y'know, actually been a manager.
I'm bouncing off the walls trying to figure out what to do next with my life. Some of those walls are figments of my imagination - for example, financial stability isn't really an issue for a young single male. This doesn't help much, though, because I don't really know which of the walls are illusory and which are solid and waiting for me to bust my nose on them.
Basically, I think this situation calls for a bit more self-confidence... and a lot more reading the job pages.
* Possibly two - fingers crossed for the November exam results!
** Which of course is why I'm doing the job search in the first place :(
Read the full post
I've got a fair number of interesting ideas off them. In addition to searching for conventional jobs, one guy suggested that I take up contracting myself. On that front, I'm probably pretty employable: certainly the work I'm doing at the moment poses little challenge. Also I have an actuarial exam* under my belt, which looks damn good on a CV.
This option would probably do wonders for my bank balance. Contractors quite often get a stupidly large pay packet compared to conventional employees. There are two downsides, though. The first is reduced financial stability, which might be a problem if we hit a recession. The second is lack of career development, which is a massive issue for me. I would honestly rather hammer railroad spikes through my skull than do boring job after boring job for years on end**.
A second option, which I've just spent a fair chunk of evening discussing, is say "screw it" and go get an MBA or something. This idea holds a fair amount of interest. Technical skills for me are pretty much a solved problem, whereas managers tend be be confronted with challenges that involve people and are hence much weirder and more interesting.
My worries here are (again) twofold. Firstly, I'd hate to feel like I was running back to university as soon as it looked like the real world was putting up a fight. It is important to me that I retain my self-esteem in this area. When I feel like I'm on top of the world and everything is going consistently well - that's the time to go back to uni. Of course, at that point I may not feel like I need to.
Secondly, I read Dilbert. I know what people think about the stereotypical MBA, and I would hate to have them think that way about me. I've been in the real world for slightly over two years now, so I'm not a complete n00b, but it would worry me to study an entire course about management without ever having, y'know, actually been a manager.
I'm bouncing off the walls trying to figure out what to do next with my life. Some of those walls are figments of my imagination - for example, financial stability isn't really an issue for a young single male. This doesn't help much, though, because I don't really know which of the walls are illusory and which are solid and waiting for me to bust my nose on them.
Basically, I think this situation calls for a bit more self-confidence... and a lot more reading the job pages.
* Possibly two - fingers crossed for the November exam results!
** Which of course is why I'm doing the job search in the first place :(
Read the full post
Wednesday, October 15, 2008
The Joys of Jobhunting
As of a few days ago, I'm finally getting my act together and looking round for a new job. Hopefully a change of company won't be necessary - I do actually like the people I work for - but if they try to send me out on placement again then they'll have to catch me first.
We're now several evenings on, and certain axioms of jobhunting are starting to become clear to me. To whit:
1) The jobs that catch your attention are the ones you have neither training nor experience in.
I've lost count of how many really cool jobs I've looked at and reluctantly clicked past when it became clear that BA Hons Cantab was not going to cut the mustard.
2) The jobs that match your specialist skills are boring as hell.
As a maths grad, my options are apparently finance, finance or - just to push the envelope a little - finance. I do not find finance particularly interesting. It varies between the accountancy end of the spectrum, which requires basic numeracy but no real maths knowledge, and the predictive disciplines (actuarial, quant, etc), which require the ability to pull large numbers of assumptions out of thin air and then pass the blame when it all falls through.
There's also cryptography, but apparently only if you have a first class degree. I have a 2II. Ohttre gung.
3) The jobs that you don't need specialist knowledge for are dangerously vague.
At present, the best example of this is "project management". Beware of any job with this label: chances are it's a pure documentation job. What has happened is that large number of job jobhunters have decided that PM is the fashionable thing. In response, large numbers of recruitment agencies have started mentioning PM in all their ads, regardless of appropriacy.
Ditto "analyst", which normally turns out to be a sales job.
4) More recruitment agencies does not equal more opportunities.
It is incredibly hard to find actual decent job opportunities online. The major online recruitment agencies just recycle each other's listings. Any good jobs vanish like a rump steak in a piranha pool, and the remainder circulate until they're withdrawn or some idiot applies for them.
This seems to be a classic case of the Internet exposing how dysfunctional an industry is. Maybe recruitment agencies are better in person than online, but I doubt it.
5) Life's too short for this crap.
Every single vacancy you come across will have the phrase "please send CV plus cover letter in it". Sounds easy, right? Problem is, it takes a fair few hours to thrash out a decent cover letter. This can quickly become a limiting factor.
Requesting a cover letter is good sense on the part of the company. If applying for the job ceases to be a ten-minute task, applicants can't just employ a "CV shotgun" approach but must actually consider whether it's worth their time to apply. It encourages respect for the application process.
Unfortunately, this encouragement of respect is entirely one-way. In general, companies don't bother to reply to CVs they don't like, not providing even a soupçon of feedback. When you've spent three hours preparing your application, this is very lame.
Conclusion) I hate jobhunting.
As far as I can tell, the entire jobhunting process is a sneaky trick by companies to help them retain their employees. I've been actively hunting for less than a week and I'm already concluding that sticking hot needles through my fingernails would be less painful than attempting to leave my current employer.
But I know that, if I don't, before I know it I'll be a 40-year-old "placement specialist" and candidate for Ark B. I want to do something with my life, dammit.
Read the full post
We're now several evenings on, and certain axioms of jobhunting are starting to become clear to me. To whit:
1) The jobs that catch your attention are the ones you have neither training nor experience in.
I've lost count of how many really cool jobs I've looked at and reluctantly clicked past when it became clear that BA Hons Cantab was not going to cut the mustard.
2) The jobs that match your specialist skills are boring as hell.
As a maths grad, my options are apparently finance, finance or - just to push the envelope a little - finance. I do not find finance particularly interesting. It varies between the accountancy end of the spectrum, which requires basic numeracy but no real maths knowledge, and the predictive disciplines (actuarial, quant, etc), which require the ability to pull large numbers of assumptions out of thin air and then pass the blame when it all falls through.
There's also cryptography, but apparently only if you have a first class degree. I have a 2II. Ohttre gung.
3) The jobs that you don't need specialist knowledge for are dangerously vague.
At present, the best example of this is "project management". Beware of any job with this label: chances are it's a pure documentation job. What has happened is that large number of job jobhunters have decided that PM is the fashionable thing. In response, large numbers of recruitment agencies have started mentioning PM in all their ads, regardless of appropriacy.
Ditto "analyst", which normally turns out to be a sales job.
4) More recruitment agencies does not equal more opportunities.
It is incredibly hard to find actual decent job opportunities online. The major online recruitment agencies just recycle each other's listings. Any good jobs vanish like a rump steak in a piranha pool, and the remainder circulate until they're withdrawn or some idiot applies for them.
This seems to be a classic case of the Internet exposing how dysfunctional an industry is. Maybe recruitment agencies are better in person than online, but I doubt it.
5) Life's too short for this crap.
Every single vacancy you come across will have the phrase "please send CV plus cover letter in it". Sounds easy, right? Problem is, it takes a fair few hours to thrash out a decent cover letter. This can quickly become a limiting factor.
Requesting a cover letter is good sense on the part of the company. If applying for the job ceases to be a ten-minute task, applicants can't just employ a "CV shotgun" approach but must actually consider whether it's worth their time to apply. It encourages respect for the application process.
Unfortunately, this encouragement of respect is entirely one-way. In general, companies don't bother to reply to CVs they don't like, not providing even a soupçon of feedback. When you've spent three hours preparing your application, this is very lame.
Conclusion) I hate jobhunting.
As far as I can tell, the entire jobhunting process is a sneaky trick by companies to help them retain their employees. I've been actively hunting for less than a week and I'm already concluding that sticking hot needles through my fingernails would be less painful than attempting to leave my current employer.
But I know that, if I don't, before I know it I'll be a 40-year-old "placement specialist" and candidate for Ark B. I want to do something with my life, dammit.
Read the full post
Monday, October 13, 2008
That height rant
My, how things have gone downhill. Remember the good old days of conspiracy theory? You had the shooting of JFK, the CIA, the KGB, various mafias. And if all else failed, just call in SPECTRE.
These days, sadly, the conspiracies are much more mundane. I'm the victim of one at the moment. I've never successfully interrogated one of its operatives (damn cyanide pills), but I've been calling it CAT.
Campaign Against Tallness.
Now you may be thinking, what kind of conspiracy is this? It doesn't sound very intimidating, does it. But before you come to that conclusion, please examine Heathrow airport's Terminal 1 building. As a 6'4" tall guy, I have no problem with the ceiling (6'7") or even the doorframes (6'5"). What I do have problems with is the emergency lights (6'3"). The emergency lights in their sharp-edged, plate steel cases that are positioned right above the centre of the main walkway.
I feel this particular design feature conclusively proves not only CAT's existence, but also its dryly sadistic sense of humour. Blofeld had nothing on these guys.
Another CAT operative is at work in the car industry. Ever seen one of those cute little smart cars? Ever tried getting into one when you're 6'4"? Didn't think so.
And don't get me started on clothes. You would not believe how few trouser brands there are that even fit a 34" leg, let alone look good. Size 12 trainers? Sorry, that's one size higher than anyone holds in stock. Tough cookies.
So what actually is the evil goal of CAT? My best guess at the moment is that all its members are sensitive about their diminutive stature. By selectively eliminating tall individuals, or at least limiting their ability to breed*, they can ensure that soon everyone will be their height or lower.
For example, another of my (6'4") friends has a massive white streak in his hair from running through a (6'2") door. If he'd been running any faster, he'd have been permanently removed from the gene pool.
Of course their evil plan is ultimately self-defeating. Someday they may succeed in wiping out all the tall people.
But at that moment, CAMS (Campaign Against the Medium Sized) will stab them in the back. Bwahahahaha...
* And doesn't this just bring a whole new meaning to "not tonight baby, I've got a headache"?
Read the full post
These days, sadly, the conspiracies are much more mundane. I'm the victim of one at the moment. I've never successfully interrogated one of its operatives (damn cyanide pills), but I've been calling it CAT.
Campaign Against Tallness.
Now you may be thinking, what kind of conspiracy is this? It doesn't sound very intimidating, does it. But before you come to that conclusion, please examine Heathrow airport's Terminal 1 building. As a 6'4" tall guy, I have no problem with the ceiling (6'7") or even the doorframes (6'5"). What I do have problems with is the emergency lights (6'3"). The emergency lights in their sharp-edged, plate steel cases that are positioned right above the centre of the main walkway.
I feel this particular design feature conclusively proves not only CAT's existence, but also its dryly sadistic sense of humour. Blofeld had nothing on these guys.
Another CAT operative is at work in the car industry. Ever seen one of those cute little smart cars? Ever tried getting into one when you're 6'4"? Didn't think so.
And don't get me started on clothes. You would not believe how few trouser brands there are that even fit a 34" leg, let alone look good. Size 12 trainers? Sorry, that's one size higher than anyone holds in stock. Tough cookies.
So what actually is the evil goal of CAT? My best guess at the moment is that all its members are sensitive about their diminutive stature. By selectively eliminating tall individuals, or at least limiting their ability to breed*, they can ensure that soon everyone will be their height or lower.
For example, another of my (6'4") friends has a massive white streak in his hair from running through a (6'2") door. If he'd been running any faster, he'd have been permanently removed from the gene pool.
Of course their evil plan is ultimately self-defeating. Someday they may succeed in wiping out all the tall people.
But at that moment, CAMS (Campaign Against the Medium Sized) will stab them in the back. Bwahahahaha...
* And doesn't this just bring a whole new meaning to "not tonight baby, I've got a headache"?
Read the full post
Monday, October 06, 2008
That VBA Rant
So in addition to my regularly-scheduled job, I somehow agreed to do some training for the group of grads who joined the grad scheme the year after me. In Visual Basic for Applications. Which I loathe.
Now it's easy for me to say I hate Microsoft products. I'm a Linux user and a civil liberties geek, so it's fairly natural for me to hate those monopolistic bastards and their locked-down software. But this goes waaaay beyond that.
Visual Basic was the first programming language I ever learned. A friend introduced me to it when I was fourteen, and I was soon able to produce a cute little quiz program that got me really good marks in IT class. At the time I thought VBA was the bee's knees.
The process of disillusionment took a while. It probably started when I took an internship at a software company that did all their work in Python. The people were really nice, but it was immediately obvious how bad my programming style was. Stuff that should be completely intuitive for any programmer just wouldn't fit into my skull. I left with a much expanded repertoire of concepts, and a very strong sense of what makes code easier or harder to maintain.
My education continued over the years. A key resource was the comedy site The Daily WTF which, in addition to being hilarious, is a brilliant primer on how not to write code. There's a strong dose of the scientific community to professional programming: most coding conventions have arisen from years or even decades of gradual refinement by large numbers of skilled practitioners.
The icing on the cake was probably my university years. I did maths, and the programming modules were by no means focused on best practice, but I got very very good at elegantly expressing difficult algorithms in code. Software is the true language of mathematics; standard mathematical notation is just a shorthand.
And there's something beautiful about writing code for a well-designed programming language. When concepts and implementation tie together neatly, it brings a tear to your eye. Python is very good on this point: if you can think it, you can probably express it in Python code.
And then I took on a summer job with a telecoms consultancy. Who did all their programming in VBA for Excel. And I realised how very far I'd moved on. By week 4 I was gnawing at tables trying to get this kludgy toy language to do what I asked it to.
It doesn't have proper error handling. It doesn't have a proper object layer (try passing a function as an argument and call me a liar). It's not even remotely self-consistent in approach or content. Most of the Excel component is a wrapper round the Excel UI, which means that things like text search aren't at all programmer-friendly. Source control? Don't be silly.
Almost every language has something going for it. Java is slow and ugly, but at least it's portable. Lisp is impractical, but so very elegant. C++ is time-consuming, but good grief it's powerful. VBA is ugly, platform-specific, hard to use, lacking in basic and advanced functionality, but... there is no but.
As languages go, VBA stinks.
And yet, despite knowing this, I've managed to land myself in an industry with the highest concentration of VBA users on the planet. The vast majority* of actuarial "tools" are just spreadsheets with a VBA layer to do the messy stuff (batch-processing, goal seeks, etc).
I really can't take much more of this. It's as if I was a semi-pro mountain biker and the company forced me to ride around on one of those tiny clown bikes. It's as if I was a fencer and the only weapon they'd give me was a feather duster.
What makes it worse is that most people don't think this way. They've never even spoken to programmers, they show no awareness of software best practices or concepts like separation of concerns. Their idea of version control is taking a backup copy every few days (and that's only if they're particularly on-the-ball). Even commenting the damn code is seen as a bit avant-garde.
Most of them have had no formal training. Now I freely admit that neither have I - I'm a software dilettante. But I know my limitations, and I put a fair amount of effort into discovering what lies beyond them. By contrast, most people in the finance industry are alchemists: they take what they've learned from one or two tutors** and elevate it into divine knowledge.
I worry that, if I stay too long, I'll turn into one of them.
So I'm producing this VBA training material, and hating every minute of it. It's like swimming through treacle. The only good thing I can say is that, once the training is over, the company will have someone else to lumber with VBA-related tasks.
Rant over.
* The only alternative appears to be COBOL. This kinda says it all.
** Who learned it from their tutors, who learned it from their tutors. The chain generally terminates with a bloke who read "VBA for Dummies".
Read the full post
Now it's easy for me to say I hate Microsoft products. I'm a Linux user and a civil liberties geek, so it's fairly natural for me to hate those monopolistic bastards and their locked-down software. But this goes waaaay beyond that.
Visual Basic was the first programming language I ever learned. A friend introduced me to it when I was fourteen, and I was soon able to produce a cute little quiz program that got me really good marks in IT class. At the time I thought VBA was the bee's knees.
The process of disillusionment took a while. It probably started when I took an internship at a software company that did all their work in Python. The people were really nice, but it was immediately obvious how bad my programming style was. Stuff that should be completely intuitive for any programmer just wouldn't fit into my skull. I left with a much expanded repertoire of concepts, and a very strong sense of what makes code easier or harder to maintain.
My education continued over the years. A key resource was the comedy site The Daily WTF which, in addition to being hilarious, is a brilliant primer on how not to write code. There's a strong dose of the scientific community to professional programming: most coding conventions have arisen from years or even decades of gradual refinement by large numbers of skilled practitioners.
The icing on the cake was probably my university years. I did maths, and the programming modules were by no means focused on best practice, but I got very very good at elegantly expressing difficult algorithms in code. Software is the true language of mathematics; standard mathematical notation is just a shorthand.
And there's something beautiful about writing code for a well-designed programming language. When concepts and implementation tie together neatly, it brings a tear to your eye. Python is very good on this point: if you can think it, you can probably express it in Python code.
And then I took on a summer job with a telecoms consultancy. Who did all their programming in VBA for Excel. And I realised how very far I'd moved on. By week 4 I was gnawing at tables trying to get this kludgy toy language to do what I asked it to.
It doesn't have proper error handling. It doesn't have a proper object layer (try passing a function as an argument and call me a liar). It's not even remotely self-consistent in approach or content. Most of the Excel component is a wrapper round the Excel UI, which means that things like text search aren't at all programmer-friendly. Source control? Don't be silly.
Almost every language has something going for it. Java is slow and ugly, but at least it's portable. Lisp is impractical, but so very elegant. C++ is time-consuming, but good grief it's powerful. VBA is ugly, platform-specific, hard to use, lacking in basic and advanced functionality, but... there is no but.
As languages go, VBA stinks.
And yet, despite knowing this, I've managed to land myself in an industry with the highest concentration of VBA users on the planet. The vast majority* of actuarial "tools" are just spreadsheets with a VBA layer to do the messy stuff (batch-processing, goal seeks, etc).
I really can't take much more of this. It's as if I was a semi-pro mountain biker and the company forced me to ride around on one of those tiny clown bikes. It's as if I was a fencer and the only weapon they'd give me was a feather duster.
What makes it worse is that most people don't think this way. They've never even spoken to programmers, they show no awareness of software best practices or concepts like separation of concerns. Their idea of version control is taking a backup copy every few days (and that's only if they're particularly on-the-ball). Even commenting the damn code is seen as a bit avant-garde.
Most of them have had no formal training. Now I freely admit that neither have I - I'm a software dilettante. But I know my limitations, and I put a fair amount of effort into discovering what lies beyond them. By contrast, most people in the finance industry are alchemists: they take what they've learned from one or two tutors** and elevate it into divine knowledge.
I worry that, if I stay too long, I'll turn into one of them.
So I'm producing this VBA training material, and hating every minute of it. It's like swimming through treacle. The only good thing I can say is that, once the training is over, the company will have someone else to lumber with VBA-related tasks.
Rant over.
* The only alternative appears to be COBOL. This kinda says it all.
** Who learned it from their tutors, who learned it from their tutors. The chain generally terminates with a bloke who read "VBA for Dummies".
Read the full post
Tuesday, September 30, 2008
Depressing much
It's no secret that I'm not particularly enthused by my current job. I'm on placement (e.g. my company is renting me out) to a big life office. The job title was "manual calcs" which, in the actuarial world, usually means a fair amount of juicy maths.
Actuarial maths doesn't really float my boat, but I figured I'd at least get some good old-fashioned brain stimulation. No dice. The job turns out to be basically data entry: extracting information from old systems and posting it to pensions administrators. Not exactly world-changing stuff.
One thing I don't mind about the job is that it gives you a certain feeling of connection. You read all these names, all these dry facts about people, and you wonder what their life is like. This lady went to Australia. Was it an elopement? This guy married at the age of 60. Did he finally meet the love of his life?
This young fella who was only in the scheme for a year. Did he find his dream job elsewhere?
Then there's the death claims. These quite often give a sense of connection, but for entirely the wrong reasons. Today I processed one that really got to me: a top-tier medical professional, lonely and living alone, committing suicide.
When you read something like that, you can't help but wonder: will that be my life? Will I live without love? Will I die with no-one to mourn me?
I'm 23 and I've been single for 5 years now, which time included my entire university career. I'm fairly sure that I'll be able to fall off this particular wagon given time, but it's not immediately obvious how to go about this. That's really disturbing, when you think about it: the only thing between me and a really depressing death claim is 40 years.
I'm not scared of kicking the bucket (no, really!). I just don't want to have too many regrets when it happens. The situation definitely calls for me to do something drastic. The problem is, I don't have a damn clue what.
Answers on a postcard.
Read the full post
Actuarial maths doesn't really float my boat, but I figured I'd at least get some good old-fashioned brain stimulation. No dice. The job turns out to be basically data entry: extracting information from old systems and posting it to pensions administrators. Not exactly world-changing stuff.
One thing I don't mind about the job is that it gives you a certain feeling of connection. You read all these names, all these dry facts about people, and you wonder what their life is like. This lady went to Australia. Was it an elopement? This guy married at the age of 60. Did he finally meet the love of his life?
This young fella who was only in the scheme for a year. Did he find his dream job elsewhere?
Then there's the death claims. These quite often give a sense of connection, but for entirely the wrong reasons. Today I processed one that really got to me: a top-tier medical professional, lonely and living alone, committing suicide.
When you read something like that, you can't help but wonder: will that be my life? Will I live without love? Will I die with no-one to mourn me?
I'm 23 and I've been single for 5 years now, which time included my entire university career. I'm fairly sure that I'll be able to fall off this particular wagon given time, but it's not immediately obvious how to go about this. That's really disturbing, when you think about it: the only thing between me and a really depressing death claim is 40 years.
I'm not scared of kicking the bucket (no, really!). I just don't want to have too many regrets when it happens. The situation definitely calls for me to do something drastic. The problem is, I don't have a damn clue what.
Answers on a postcard.
Read the full post
Thursday, August 28, 2008
Recommended Reading
So I've been meaning to read something by Cory Doctorow for a while. The guy has class, and he's a prominent member of today's civil-rights community, which I have a lot of respect for.
I've finally gotten round to looking up his site, and read one of the e-books he makes freely available: Little Brother. It freaked the hell out of me. And it prominently raised a question that's been bothering me for a while: why don't most people pay any attention to attacks on their rights?
Why do people cheer when the government arrests people, locks them up without trial, and won't release them even if they're proved innocent? Why do people accept the government's right to snoop on people in the hope of catching them in minor misdemeanours? In short, how can anyone hear the words "if you've nothing to hide then you've nothing to fear" without spitting soft drink all over their keyboard?
Governments are made of people. People can get things wrong. Worse, a decent minority of people are power-hungry bastards. Any organisation that possesses power will tend to attract such individuals like wasps to a picnic. Once a critical mass of bastards builds up, a powerful organisation can go bad real fast.
Terrorist groups are also made up of people, most of whom can be legitimately considered to be bastards. However, there are several important differences here:
1) Governments have better raw materials. So far no terrorist has ever got hold of a nuke; the government of the USA has about 10,000 and once blew up two whole cities.
2) Governments have more manpower. Al Qaeda is estimated to have on the order of 20,000 members worldwide, many of whom have day jobs. The UK Civil Service has 500,000 full-time employees, and that's just one component of one country's government.
3) Governments have stronger surveillance capacity. Fraudsters have to struggle to get access to even a few people's records; the UK government has lost 30 million personal records this year alone, including mine.
4) Governments tend to get the benefit of the doubt. If any non-governmental group had killed as many dogs as the various USA police forces, they'd have been (ahem) hounded out of the country.
Governments have 99% of the power, 99% of the weapons, and 99% of the mob support. Goverments have a long history of going bad. And yet we're worried about those terrorists who don't work for the State?
Read the full post
I've finally gotten round to looking up his site, and read one of the e-books he makes freely available: Little Brother. It freaked the hell out of me. And it prominently raised a question that's been bothering me for a while: why don't most people pay any attention to attacks on their rights?
Why do people cheer when the government arrests people, locks them up without trial, and won't release them even if they're proved innocent? Why do people accept the government's right to snoop on people in the hope of catching them in minor misdemeanours? In short, how can anyone hear the words "if you've nothing to hide then you've nothing to fear" without spitting soft drink all over their keyboard?
Governments are made of people. People can get things wrong. Worse, a decent minority of people are power-hungry bastards. Any organisation that possesses power will tend to attract such individuals like wasps to a picnic. Once a critical mass of bastards builds up, a powerful organisation can go bad real fast.
Terrorist groups are also made up of people, most of whom can be legitimately considered to be bastards. However, there are several important differences here:
1) Governments have better raw materials. So far no terrorist has ever got hold of a nuke; the government of the USA has about 10,000 and once blew up two whole cities.
2) Governments have more manpower. Al Qaeda is estimated to have on the order of 20,000 members worldwide, many of whom have day jobs. The UK Civil Service has 500,000 full-time employees, and that's just one component of one country's government.
3) Governments have stronger surveillance capacity. Fraudsters have to struggle to get access to even a few people's records; the UK government has lost 30 million personal records this year alone, including mine.
4) Governments tend to get the benefit of the doubt. If any non-governmental group had killed as many dogs as the various USA police forces, they'd have been (ahem) hounded out of the country.
Governments have 99% of the power, 99% of the weapons, and 99% of the mob support. Goverments have a long history of going bad. And yet we're worried about those terrorists who don't work for the State?
Read the full post
Tuesday, August 26, 2008
Eureka
One of my favourite books, Cryptonomicon by Neal Stevenson, contains frequent references to a specialist mailing list for crypto geeks. The problem is that, in the real world, any mailing list offering high-level cryptographic discussion quickly gets colonised by opinionated numpties. So, in true Darwinian form, they're quite hard to locate.
I think I've just stumbled across one here. This is great for me, because I've wanted to develop a more advanced knowledge of cryptoanalysis for some time. Probably not so good for the list that it's been discovered by the outside world.
Once my forthcoming actuarial exams are over, I'll have to have a browse through the archives (in between learning Bengali and ancient Assyrian and brushing up on my computational biology). I'll let you know if I discover anything particularly interesting.
Read the full post
I think I've just stumbled across one here. This is great for me, because I've wanted to develop a more advanced knowledge of cryptoanalysis for some time. Probably not so good for the list that it's been discovered by the outside world.
Once my forthcoming actuarial exams are over, I'll have to have a browse through the archives (in between learning Bengali and ancient Assyrian and brushing up on my computational biology). I'll let you know if I discover anything particularly interesting.
Read the full post
Thursday, August 14, 2008
Random poetry day (week?)
If you can keep your head when all about you
Are losing theirs and blaming it on you,
If you can trust yourself when all men doubt you,
But make allowance for their doubting too;
If you can wait and not be tired by waiting,
Or being lied about, don't deal in lies,
Or being hated, don't give way to hating,
And yet don't look too good, nor talk too wise:
If you can dream - and not make dreams your master;
If you can think - and not make thoughts your aim;
If you can meet with Triumph and Disaster
And treat those two impostors just the same;
If you can bear to hear the truth you've spoken
Twisted by knaves to make a trap for fools,
Or watch the things you gave your life to, broken,
And stoop and build 'em up with worn-out tools:
If you can make one heap of all your winnings
And risk it on one turn of pitch-and-toss,
And lose, and start again at your beginnings
And never breathe a word about your loss;
If you can force your heart and nerve and sinew
To serve your turn long after they are gone,
And so hold on when there is nothing in you
Except the Will which says to them: 'Hold on!'
If you can talk with crowds and keep your virtue,
Or walk with Kings - nor lose the common touch,
if neither foes nor loving friends can hurt you,
If all men count with you, but none too much;
If you can fill the unforgiving minute
With sixty seconds' worth of distance run,
Yours is the Earth and everything that's in it,
And - which is more - you'll be a Man, my son!
- "If" by Rudyard Kipling
This poem is the best expression of the Stoic philosophy I've ever come across, and every time I read it I find some new application to my life. Stoicism is intended to inure people to the stresses of existence - a good lifestyle for kings, generals, and those who try to arrange large lunch gatherings.
Read the full post
Are losing theirs and blaming it on you,
If you can trust yourself when all men doubt you,
But make allowance for their doubting too;
If you can wait and not be tired by waiting,
Or being lied about, don't deal in lies,
Or being hated, don't give way to hating,
And yet don't look too good, nor talk too wise:
If you can dream - and not make dreams your master;
If you can think - and not make thoughts your aim;
If you can meet with Triumph and Disaster
And treat those two impostors just the same;
If you can bear to hear the truth you've spoken
Twisted by knaves to make a trap for fools,
Or watch the things you gave your life to, broken,
And stoop and build 'em up with worn-out tools:
If you can make one heap of all your winnings
And risk it on one turn of pitch-and-toss,
And lose, and start again at your beginnings
And never breathe a word about your loss;
If you can force your heart and nerve and sinew
To serve your turn long after they are gone,
And so hold on when there is nothing in you
Except the Will which says to them: 'Hold on!'
If you can talk with crowds and keep your virtue,
Or walk with Kings - nor lose the common touch,
if neither foes nor loving friends can hurt you,
If all men count with you, but none too much;
If you can fill the unforgiving minute
With sixty seconds' worth of distance run,
Yours is the Earth and everything that's in it,
And - which is more - you'll be a Man, my son!
- "If" by Rudyard Kipling
This poem is the best expression of the Stoic philosophy I've ever come across, and every time I read it I find some new application to my life. Stoicism is intended to inure people to the stresses of existence - a good lifestyle for kings, generals, and those who try to arrange large lunch gatherings.
Read the full post
Subscribe to:
Posts (Atom)