It's not really a common combination: horses and computers. The outdoors is probably not the healthiest place for a computer, but then indoors isn't really the best place for a horse either. But every once in while the two meet...
This picture was taken when I was in the early stages of setting up BLACKDOG biomechanics, and I mean the *really* early stages, when I was still doing it just for myself (story for a different blog). I'm not sure how many people out there have ever programmed in python on a mounting block, out in the arena with their horse waiting patiently. Oh, while wearing Roeckl gloves (not that the brand has anything to do with it - I just like them). At any rate, there can't be many... which got me to thinking.
Mounting-block-coding aside, it feels like there is hardly any cross over between the world of tech and the horse-world. I'm not sure whether it's that tech people are smart enough to not get involve with half-tonne animals with a mind of their own, or that horse people tend to have better things to do than sit inside all day staring at a screen. But it feels like the two, at least in mindset anyway, suit the same kind of person.
When I was first introduced to programming at uni, I absolutely hated it. I actually chose my final year project based on it having absolutely-zero computing involvement (plus we got to work in the Natural History Museum). We were using the programming language C++, which is quite difficult to get to grips with. I'm not entirely sure why I hated it, possibly because I was rubbish, possibly because it's bloody fiddly, or maybe just because I was in a hurry to leave the lab so I could go ride or do something more interesting. Fast forward 10 years, and there's rarely a day where I don't write or edit code. And I don't hate it.
I'm not sure if it's just me, but C++ is irritatingly pernickety. To illustrate this, say I'm writing code as part of an application to help me keep track of how much I'm spending on bedding a month (for your mental health, I wouldn't recommend you do this. Some things are best left unknown). I need to know two things: a) the amount of bales I've used and b) the price per bale. Now, the amount I use each month is probably going to change depending on how many horses I've got in, what the weather is like, etc etc. Plus the price might change from time to time. Therefore, I use "variables" in my code. It's a neat way of organising your code so that you can easily change values as and when you need to, without having to find every instance that you've used it. So instead of writing
where we are assuming that I use 10 bales priced at £6.25 each, I'd write:
numBales=10 priceBales=6.50 cost=numBales*priceBales
This code snippet is how I would write it in python. It's easy, right, makes sense. I've said that the number of bales, numBales, is 10, which is quite clearly a number. Python is quite happy with this explanation. Python is the equivalent of a TBxID gelding; helpful, patient and willing. C++, on the other hand, is a Chestnut Mare. It can't possibly cope with me saying the variable called numBales is the number 10. No, I have to explicitly tell it in advance that the variable numBales is going to be a number and that number is 10. To me, first starting out, that was utterly ridiculous. OF COURSE 10 IS A NUMBER DAMMIT!
It turns out there's a good technical reason that C++ insists on being told what "flavour" a variable is going to be (has to do with the amount of memory it assigns during compiling) and it's one of the reasons that C++ is one of the highest-performing computer programming languages out there.
Sound familiar? The most pernickety... the most difficult... the most sensitive... being the best performing? What would us Dressage riders know about that!
Ok so got a little sidetracked there.... This level of precision, having to take the time to get things exactly right and to explain them in a way that something can understand clearly is precisely the skill we need to have when riding Dressage. There is very little difference in the aids for shoulder in and canter (inside leg on, outside leg back) other than a subtle shift in weight aid (lift the inside hip up for canter, inside hip down and over for shoulder in), so we have to make sure we've got our aids exactly right, else the horse is going to be pretty confused. Having the patience, the diligence and the mental capacity to be this precise is essential for programmers and riders alike.
I tend to think like I'm programming when I ride a test movement. I set up my variables in preparation, so think about the bend and the horse's positioning, before I execute the movement and "run the code". But that's probably just me being a bit odd....
I think, up until starting programming, I had been pretty good at most academic subjects. And if I wasn't, then I just avoided do it. I'm not good at art or music, so I just didn't do them. Programming was different. Turns out I couldn't avoid it. Well, not easily. So instead of doing what I usually did, and avoiding it, I actually had to apply myself.
Writing code takes a long time. Quite often it's a process of trial and error. You write a bit and test it. If it works, hooray, move on to the next bit. If it doesn't, then find the error. And programmers use Google search. A lot. Once I realised that writing a program isn't one single steam of conscious brilliance that just pours out of you, then I relaxed a bit more. I also realised that no-one was watching me be rubbish. No matter how many times I messed up a simple program, no one could see. Also, who would care!! As a result, I built up my skills base. I can now write code pretty much fluently in two languages (MATLAB and python) and with a bit of stuttering in three more (Java, R, C++).
By the way, this isn't saying how wonderful I am, it's just a case of learning the best language for the application I'm working on. When it comes to languages, despite however many years of schooling in French and Spanish, I can still only speak English....
Learning from failure
I've recently been reading "Black Box Thinking" by Matthew Syed, a book about failure and how we can use it productively to improve our performance. It talks about making a culture or a mindset where failure is an opportunity to learn. Sounds a bit lets-give-everyone-a-medal, right? But it isn't. It's about saying "ok, this hasn't gone right. Why? How can I make sure it doesn't happen again? How can I use this to make an improvement". Turns out that was exactly what I was doing when I was programming.
And it got me thinking that this is exactly the mindset we have to be in when we ride, right? Riding is difficult because it's all about feel. A trainer can tell you the positioning and explain the aids. You can watch some one else perform the movement, but most of our aids are so small, so subtle; a feel on the rein as a half-halt, a slight shift in weight, lifting a hip. So the only way we can really learn is by doing. All of the other things help us, and let us learn faster, but you'll never be able to ride a line of changes just from watching training videos, even if you're lucky enough to be riding a school master. So we have to try for ourselves. See what worked, what didn't work. We can learn from our mistakes; crossing the inside hand over the neck in leg yield causes the shoulder to fall out, swinging the outside leg too far back asking for a change while wearing spurs causes you to end up int he dirt. Either way, you learn from the mistake and don't do it again.
This is how it should work, anyway. Unfortunately, so many people find themselves in an environment where they're too worried about making mistakes to even try new things. I've heard well established professionals looking down their noses at riders who've been at Prelim "forever" forgetting / not realising / ignoring the fact that it's people like them who make an atmosphere where mistakes are punished. So people avoid the pain (psychological or otherwise) by not trying out the new thing. Sure, not every horse will get to Grand Prix, but there are very few horses that can't learn at least some of the advanced movements.
It's been really nice to see the trend on FB (thanks shiteventersunite and shitedressageunited) of professionals and amateurs alike showing themselves training horses and "getting things wrong". So the movement wasn't a 10, but they're still training the horse. You can bet that without practicing movements at 4's and 5's at home, those riders wouldn't go on to get 8's and 9's at a competition. We all start somewhere, and we should all be trying to start new things on a regular basis. And yeah, we'll be rubbish at first, but who cares!
We should bear this in mind for our horses too. When we teach them new things, they've got no idea what we want. They will make mistakes. It's how we respond to those mistakes that matters. If the horse is punished every time he makes a mistake, then he'll stop trying for us. Just a thought!
Anyway, this has been a bit of a ramble about being rubbish, why programming skills can be Dressage skills and a bit of a rant about C++. I think it goes without saying that all views are my own 😆