Anyway, the other thing which has always bothered me is an unjust telling off. In other words, if someone asserts their temper at me and whatever they're having a go at me for is not my fault, or if they are actually in the wrong themselves, then I really resent their attempts to make me feel small over something which I don't deserve to be made for feel small about. A simple example of this is one of the guys at work, who has a look about him which sometimes make you want to punch him in the mouth. People who have met me might recognise this as a description of me, but believe me, there are others. It's the way he permanently appears to be smirking. Again, I realise I have this problem too. Anyway, at some point, I said to him something like this:
Ashley: You sent a message saying it was fixed. I tried it and it's not.
Him: The change hasn't propagated yet, why did you test it?
Ashley: I just forced a test.
Him: You mustn't do that. If everyone did that there'd be loads of tests queued up. It will test itself when the change has propagated.
Seems like a reasonable exchange. Except that it is not possible to queue up these tests, it's either running or it's not. And the propagation isn't instant. By pressing the button the moment I found he'd made the change, I forced the propagation. In fact, he'd not added his change to the system yet. So, it was his early report which was wrong. My action was reasonable, if perhaps slightly impatient. I took it on the chin rather than arguing. When I have a big battle, I'll fight it. Sometimes keeping the peace is better.
So, you get the idea. I'll get very peeved if someone has a go when I don't deserve it. Sometimes I want to take revenge. I'll present two further cases.
Mindful as I am that people from work might read this, I shall try to avoid turning it into a battle in real life. I was trying to work with someone who has their own perception of how our software works. In their view a particular feature should be provided in multiple ways with a fall-back version if the alternative ways were not available on a particular machine. As an analogy, let's use the example of colour schemes. Let's imagine that for every user's choice of colour scheme, the software can either provide its own complementary colours, or drop back to the default colour scheme, if the user's chosen colour scheme is not one of the ones we support.
Now, this makes sense so far, I think. The question came about the distinction between the default colour scheme - the one provided by the system - and the colour scheme that we use in our office. Let's say in our office we use the colour scheme "reds". So while making the software we make everything with "reds" and also provide a default, which happens to look the same as "reds". The person I was talking to was arging that, despite the fact that these are the same - i.e. the default colour scheme happens to look idential to "reds" - they're not the same. One is the default, and one is "reds". This is a hard argument to follow, but I agreed with her. This is the difference between conceptual models and actual models. In concept, the default is the default, accessed by default when, for instance, someone chooses "blues" and we don't support "blues", so we drop back to "default" which happens to be red, but that's irrelevant. It's default we drop back to.
However, and this is the tricky bit. The conceptual model is just that. The code we write uses the actual model, which allows the conceptual model to come into existence as planned, but which can actually work in a different way. My problem was that I knew how the code actually works. In the code, you don't actually have any difference between "reds" and "default". They're one and the same. However, they're accessed through different avenues. In trying to explain that there was a difference between conceptual and actual model, I got a mouthful. I explained that the conceptual model could be satisfied if, secretly, "default" were an alias for "reds". I got a furious faced conversational partner. I was flummoxed, especially since I knew too much about the code and knew that it just didn't work the way the conceptual model wanted to pretend.
There was a good reason to make the distinction between "default" and "a specific set". The good reason is that the "default" might remain immutable while each specific set gets customised (so, the default might be deep reds like the original "reds", even if the "reds" are changed to lighter tones). However, this doesn't actually happen (another difference between conceptual and actual - conceptual allows for more possibilities that don't happen).
So, I kept the peace, backed out of the conversation explaining that I needed to research it and swallowed my pride. Most of all, I tried to avoid questioning why I was getting a mouthful of bitterness from someone I work with. I don't shout people down like that at work, and I don't expect to be shouted down in that way. I'll admit that there are times for empassioned arguments, but they're not to be directed with venom, just fervour. I was getting genuine anger. As though I was stupid.
I am not very stupid. A little, perhaps, but not very.
Well, I have found the punchline of this tale. Where I thought that we, perhaps, aliased an existing scheme to get "default", the answer is more delightful. We have a concept of "default". In that we do things the way they look to us - i.e. "reds". However, we don't actually provide a "reds". Instead, when the user chooses "reds", the system falls back to the default which happens to be all red. Nobody is any the wiser.
This is perverse and alien to the conceptual model. We don't provide the one specific scheme that we appear to suppose. It's beautiful. I want to ram it down the throat of the person who shouted at me...
...but I'm too much of a gentleman.
The Boy Racer
The car driving behind me last night was behaving in an aggressive and odd manner. I suppose the car wasn't behaving at all, the driver was to blame. A lad in his twenties with an attitude problem. Strangely, I think we perceive the union of car and driver as one. Anyway, the problem from the driver behind's point of view was that we weren't going very fast along the roads. In addition, he seemed to have someone following him, so I think he was concerned about the car behind. He was an arrogant little twat, either way.
At some point, he was throwing his arms up at me, suggesting I should go faster. I would gladly have done so, but there was a car in front of me and I didn't think it safe to overtake. The car behind got into the overtaking position - well, he flung his car into that position - as though to prove some sort of point. I tried to helpfully point to the car in my way and shrug it off. He remained a dick.
When the car in front got out of the way, I put my foot down and put some distance between me and the knob-end. Soon, however, a line of traffic was in front of me and the imbecile reappeared in my rear view. He appeared to be waving me and willing me forwards with his fingers. Occasionally, he shouted. It was partly comical and partly intimidating. I reckoned that I had the weight advantage, power advantage, age and maturity advantage, and bloody mindedness to survive. I took to driving at the speed limit. Where we had to slow down for obstacles in the road, I did so very deliberately... so as to piss him off. I also positioned my car in such a position which hampered his opportunity to overtake. It was a minor series of revenges.
I enjoyed the revenge.
It made me look at my own behaviour, though. I can drive up close and impatiently. I'd like to think that I do that when the driver in front is in the outside lane when they should be on the inside, or is driving at ludicrously low speed with an empty road in front of them. Either way, I shouldn't behave that way. Though I would add that people who are not so much as drivers as moving obstacles should probably find other modes of transport.
So perhaps I'm just as bad.