Ben Ford explained in an email that while serving in the British Armed Forces as a Royal Marine he had learned to code with a laptop on a battleship with no internet. This was definitely a story I had to get out there! #noexcuses
Many thanks for the interview! So can you give an introduction for people who want to know more about you?
I grew up abroad until I was about 10 years old. My dad is an engineer and worked on infrastructure projects in Africa and the Caribbean. So although we settled in Essex when we moved back to the UK, I don’t really feel like I’m from anywhere.
Maybe partly to do with that feeling of not fitting in, I decided in my early teens that I was going to be a Royal Marine when I grew up. It took me until my early 20s until I finally got round to joining, but in December 2000 I earned my green beret and joined 42 Commando in Plymouth. During my 4 years in the Royal Marines I took part in operational tours of Sierra Leone, Northern Ireland and Iraq, but I ultimately decided that I didn’t agree with the way our foreign policy was going so left in 2004.
Luckily enough, while at 42 Commando, a friend of mine had told be about this amazing operating system he’d just started using and that he could totally help me install on my brand new laptop. It turned out that he didn’t know Linux quite as well as he thought he did, and my laptop was completely bricked. However, learning how to unbrick it really captured my curiosity and arguably this is where my technical career was born!
What got you into programming and how did you learn coding on a warship with no internet?
By the time I was on the way to Iraq in 2003 onboard HMS Ocean I’d managed to unbrick my laptop, and had become really interested in all things technical. One of the things I came across in my journey learning Linux and unix was Eric S Raymond’s essay “How to become a hacker” (that’s hacker in the “learning how things work” rather than “learning how to break into things” sense). He suggested the relatively new language python as the best language to start with.
I begged some access to the ships communications center internet connection and ordered a book on Python from Amazon. I had a lot of time on the ship, so all the way from Cyprus (where the book finally arrived) to Iraq it was just banging my head against Idle and Python until it started to stick!
Did everyone else on board think it was a bit crazy as well or do people not really care?
I do remember a few comments, but I was mostly able to squirrel myself away below decks and get on with it.
You must have thought it was Christmas when you finished your tour of duty and got to connect to the internet! What projects did you make first?
When we went to Norway for winter training, I was playing with trying to do some image processing on topographical maps, but it was really too much of an advanced task for me level of skill at the time. The first real project I did was when I’d left the Marines and was working for a telecoms company as a field engineer in New Zealand.
We had to visit cell sites and fix them, but when the company I worked for took over the contract there was no way to find the sites (we had a several MB html file with lat and long coordinates and that was it). The project I wrote extracted the location and site information into a database, and then I wrote a Django project which showed all the sites on a google map. It was a much better solution, and this was really the point I’d built my skills from simple scripting to actually being a professional-level developer.
How did you get your first work as a developer?
I moved back to the UK in 2008 and was working at a startup in Oxford which was a Django app. I got my break into finance at a hedge-fund because the role had a very specific requirement: multiple databases with django. At the time that wasn’t something that django could do out of the box, and I’d figured out how to do it as part of a different telecoms project a little while ago. That narrow slice of specific knowledge was enough to overcome the lack of general depth in my self-education.
Later roles came as I was pushing more and more into functional programming and Haskell. There definitely wasn’t much haskell work around, and many people on the market had PhDs and very deep academic knowledge. I think what got me in the door there was the counterpoint of wide experience I offered to the very deep FP knowledge.
What advice do you have for someone who wants to get into programming?
The world is definitely your oyster right now. I would 100% advise people to go for it. People who can actually produce new functionality will be in huge demand over people who can only consume from existing systems.
My advice would be to grab a course online and just work through it. Some clojure resources are really well set up to take people from absolute beginners to programmers. My friend Renzo has also written a book designed to teach people really solid fundamentals from scratch.
Once you’ve done a basic course, start building things. Don’t wait until you feel your knowledge is ready before you start building. What you really need is skill, not knowledge anyway, and skill is built by doing.
Has your lack of a degree ever come up in conversation when job hunting? Do you tell people you learned on a warship?
It’s come up a few times 😀 I think if you play it the right way a different background can be an advantage and get you noticed in a pile of CVs. Certainly for my first finance job and a few since having Royal Marine on my CV made it stand out from the pile.
So my advice to you if you don’t have the traditional CS degree background would be: If you’ve done something unusual have a think about how that experience could make you more valuable to and leverage the shit out of it 😀
Do you think the rigorous training for the Royal Marines help with taking on the challenge of learning to code?
I’m a big believer in constraints. They are usually thought of in a negative way, as impediments or roadblocks, but they are essential to progress. I even wrote an article about that here. So although the discipline that was instilled in the Royal Marines was certainly helpful in learning to code, I actually think that the difficult conditions and constraints of no distractions was much more helpful.
I had nowhere to hide when I couldn’t understand something and felt stupid (an essential part of the process of learning to code). All I could do was plough through with the one book and built in language docs I had. I think I would find it much harder in today’s world of ever present distraction!
What are you working on at the moment?
I’ve increasingly noticed throughout my career that what look initially like technical problems often turn out to be people, communication or leadership problems. I thought for the longest time that my time in the Royal Marines was a completely separate phase, unrelated to my career as a programmer. I couldn’t have been more wrong!
As I started building my own teams and moving into leadership, I began researching high performance, culture and teamwork and I found that most of the core lessons were ones I was already familiar with from my time in the corps. Focus, discipline, repeatable high performance and continuous improvement where the backbone of my time in the forces, so I’ve launched my own company to help bring that to founders of growing startup companies.
Commando Development has two major thrusts:
- Helping funded startups put together their founding team and build their MVP in such a way that they build the right things and don’t have to stop the world and rebuild just as they achieve traction (a very common occurrence).
- Working with more established high growth tech companies to put the right development culture, leadership and systems in place for scaling.
As you can probably tell from the website, it’s still quite early days, but from experience working with companies in both phases of growth and conversations with founders, both are areas where companies can start to struggle (especially that phase transition from lean, hungry startup to established, mature company). My contact details are on the website, but anyone who reads this and would like to chat can get in touch via @commandodev or firstname.lastname@example.org