Friday, October 22, 2010

A letter to my analysis code

Dear Analysis Code,

I appreciate that you think I don't understand you. In fact, you're quite right. I freely admit that I was hoping my knowledge of your inner workings would have to extend no further than that needed for a paragraph in the 'Numerics' section of our paper. You see, I am not your author. It would be best to consider me more like a step-parent. The hands-off distant kind that took on the role after you'd left for college. I was hoping that your part had been played in the analysis of my simulation and now all I must do is gather together your outputs for presentation. I did not intend to run you again nor indeed did your sculptor, since he had left the field altogether.

Perhaps this hurt. Maybe you felt neglected as you were left to corrupt and your modification time-stamp slowly age. Or did you feel guilt, wondering repeatedly if it were your internal logic loops that drove your developer out of academia? Having now worked with you, I admit this cannot be ruled out. Whatever the reason, it has become clear to me in the last 24 hours that your revenge has been planned a while.

How you must have laughed when I started rummaging through your files. It was true that you were needed, desperately needed, once again. Without you, the paper and the months of work I had put into it would be wasted. The files I had been using were wrong and the updated analysis had never been completed. I needed to do it myself. I needed you.

You had me over a barrel, Code, and I think you knew this. Not for you though, were obvious scenes of displeasure. It would have been too simple to just not compile, throw up 'library not found' errors or run out of memory. They were all problems I was expecting and therefore beneath you. Instead you compiled, you ran smoothly and outputted the expected data while I held my breath. I thought I had been victorious and my delight was great. Then, after four different operations, I looked at one of the results.

It didn't look totally wrong.

But it didn't look totally right.

In fact, I might have passed it by in my elation had I not being paying careful attention. I believe this was your plan. To force me to re-complete the paper only to later realise the results were still incorrect. It did not work. I saw through your fake productions and realised there had been a error. But how was this possible? It's true this was a different data set, but the changes were marginal compared to what you had run before. The main difference was there were more simulation times to analyse. Did you realise this, Code? Is that why you decided to strike? You knew you would have to iterate through not 29 outputs but 73? Did you think that maybe I was not overly enthused by the prospect of this either?


Yes. Yes you did, and you demanded vengeance.

You knew the only way to get to the bottom of this problem was to read your source files. All of them. And discover exactly what made you tick. You didn't want to be used, you wanted to be understood. I confess, I was only in this for the publication. That was never enough for you.

So here we are, you and me. Right where we were at 10:30 pm last night. If we're still here at the weekend I may burn you onto a DVD just so I can throw you out the door. Perhaps you think that if I understand how you work, I'll use you again. It is a ruthless plan that I've come to associate with you. Just so you know though, Code, the success of this is intimately tied to this paper being accepted for publication. If it isn't, I swear that I will hunt down every last version of you and delete them from disk.

You are not the only one who can be vengeful.


  1. You know I am quite possibly in love with you. That's the funniest thing I've read on the topic of one of my pet peeves: oh the bitter, bitter world of numerical software.

    Mangled makefiles and obscure unresolved gcc symbols aside, what makes me want to pull my hair out is the fact that with nonlinear (and by definition nonconvex) system of equations, one never really knows if one has right solution. Because it's just one of many local, feasible solutions. So even if you did all the right things, the software might still return the "wrong" answer.

    Was the convergence tolerance too tight, dear? Oh no, perhaps the diamon... I mean, scaling factors I gave you last Christmas were not to your liking? Wait, let me rearrange some equations here.... oh now you like that, don't you? Why should the order of the equations matter? You never told me anything about LU Pivoting Order.... when did you start seeing him? Yes, it's alright, I'm still here for you... I don't mind being a numerical cuckold....

    It's an abusive relationship, that's what it is.

  2. \o/

    I think my "favourite" bug fix has been to print "hello" in the middle of a program; an event designed merely to see if the program reached that point but one that oddly sorted out the memory issues the code was having.

    I don't even know.