This post is rather a lot longer than normal, so I've included a table of contents.
- About asking questions
- A-level equivalent, 1994-1997
- 2 years HND equivalent, 1997-1999
- Military Service, 1999-2000
- University of Westminster, 2000-2003
- University is not the only route to make it in programming!
- Knowledge Technology Solutions, 2003-2005
- Fotango, 2005-2008
- Morgan Stanley, 2008-2012
- NET-A-PORTER / The OutNet / Mr Porter, 2012-2015
- LaterPay GmbH, 2015-Now
Hello! My name is Stig Brautaset. I am Norwegian, but because I've lived in England most of my adult life I feel more Brit ish.
- I originally trained to become a TV repairman, but decided it wasn't for me
- Then I studied to become an electronics engineer, but found that my heart wasn't in that either and my interest was more in computer programming
- I was a sonar operator on a submarine for a year
- I studied Artificial Intelligence at University in London
- Since 2003 I have worked in the software industry:
- in the personal finance sector
- at Canon's photosharing website
- in a big American Investment bank, in London & Hong Kong
- in luxury fashion online shops
- from home for a German micropayments startup company
- In 2007 I accidentally became internet famous—among iPhone developers—because of a library I made to connect to a database
- In April last year I moved here from London with my wife and son
What would you most like to know about? I'd like to tell you a little bit about all of it, but I can spend more time on some bits if you're particularly interested.
The Golden Message of this talk is that nobody knows in advance how things are going to turn out, and even if you make a "wrong" choice, that's not necessarily the end of the road.
It is entirely OK to not be sure what you want to do. And it's OK to change your mind later. I have—many, many times over. What has always been constant is I've always been learning and doing, and that's what I'm here to talk to you about today.
Feel free to ask questions at any time, by raising your hand. I am here mainly for your benefit. Obviously I am here for my own benefit too, but only because it makes me feel great if you learn anything useful from what I am prattling on about.
I would appreciate it if you tell me your name when you ask a question.
I thought I'd start in 1994, when I was about as old as you are now. Back then dinosaurs roamed the street, and people were terrified of Y2K.
What was Y2K?
Y2K stands for "Year 2000". K is short for Kilo, which means 1000.
In the early days of computer programming it was common to store just the last two digits of the year rather than all four, e.g. 98, rather than 1998. Can you see a problem with that?
Some programs couldn't tell if it was 1901 or 2001. Others, when displaying the year, would just display the characters "19" in front and then the year, and would incorrectly display
As the year 2000 approached, the papers were full of horror stories about planes falling out of the sky. China required all its top airline bosses to be on a plane on new-years eve 1999, as a way to make sure they would make flying safe for everyone.
Anyway, in 1994 I had just finished my compulsory education, and was fretting about what to do. A-level equivalent education had two tracks: an academic one, and a vocational one. I was fed up with school, to be honest, so went for the vocational one. I liked tinkering with my moped, but I didn't like the idea of becoming a mechanic and working in an unheated workshop during Norway's -10C winters. I chose to become a Radio and TV repairman instead.
After three years I passed my exams, and become a certicified TV repairman. However, at this point I'd also decided that this life was not for me. I wanted to become an Electronics Engineer instead. Now I had a bit of a dilemma: because I didn't take the academic track, I didn't have enough Maths, Physics and Chemistry to get in to College to study more electronics. And I was so far behind compared to the academic track that a single year of top-up schooling would not be enough to catch up.
In order to get in to University Collegue, I first took a two-year HND equivalent electronics degree.
This degree was originally intended to give people with industry background the theoretical basis to get more out of their jobs, and it gave you a foot in the door at Colleges and Universities despite not covering all the required subjects, like languages, history, and literature.
Yet, at the end of this course I've come to the conclusion that I wasn't actually that enamoured with electronics after all. I had bought a computer and had started becoming interested in programming, so I wanted to study that. I applied to the University of Oslo but at the same time I had also started to feel that I had "outgrown" Oslo, and wanted to learn English, so I was wondering about studying abroad.
Luckily I had time to think, because I was about to spend the next year on a submarine.
In Norway we still have compulsory military service, where you serve for about one year. You can choose between land, sea and air, and I chose to serve as a sonar operator on a submarine.
Why a submarine?
I had watched the film "The Hunt for Red October" a few years earlier and thought sonars were pretty cool.
My submarine went to a two-week NATO military exercise in the Mediterranean in March 2000. Diesel/electric submarines are not very fast, so the trip took about 8 weeks including sailing there and back.
On the way back to Norway we stopped for a weekend in France for topping up with fuel and food. I got a message saying I had got in to the course I wanted in London. I celebrated by taking a train to Paris for a couple of days. I visited the Louvre, Notre Dame and a few more sights I won't embarrass myself with trying to pronounce.
On Sunday morning I had run out of money and went to the train station to wait for my train. I was surprised to find it there an hour early, and more surprised when when it left as soon as I had sat down. I panicked, because I thought I was on the wrong train, but I was not.
Can anybody guess what had happened?
Daylight savings. Daylight bloody savings. The clocks had changed during the night, and nearly caused me to miss my train.
Daylight savings is a massive headache in computing. Imagine you have an important program that runs at the same time every night, and should only run once. Let's say it sends emails to lots of individuals and you don't want to send duplicates.
What could happen if your program is supposed to run at 1:30am every night?
Here's a couple things that could happen:
- In spring the program might not run at all one night because the hour between 1 and 2 doesn't exist.
- The program might run twice, and could send duplicate emails. Not good.
I left the navy in July 2000 and moved to London the following September.
I studied Artificial Intelligence at University. I did tolerably well, and here's the best recipe I can give you for succeeding at University:
- Go to all the lectures & labs
- Pay attention & take notes
- Make a decent effort doing the can on courseworks. I believe this is where you'll actually be learning to understand the subject
- Don't forget to have fun
There's only 8 hours of lectures and another 8. labs, at least there was when I did my degree, so there's loads of free time for coursework and other stuff.
Personally I really loved programming. I sat in my room and read books and web pages about programming, and experimented with programming.
In addition to programming I also started to go to Linux user group meetings. This was a great idea for my career, as it turns out. I met people there that have helped me a lot, even if it just meant forwarding my CV to the right people. At my first meeting I walked in the door and immediately a chap said to me "you look trustworthy: can you look after my laptop while I nip to the loo?" He didn't even bother waiting for me to respond before he legged it for the toilets. Lucky for him he was a good judge of character!
The day after my last exam I had my first job interview. I was ready for it. I mean, I had bought a cheap suit and everything. The day after that I found I got the job & I started working three weeks later.
I want to make absolutely clear that you do not have to have a computer science education to make it as a programmer. I happen to have one, but I know lots of accomplished programmers that started out in other fields, such as chemistry, physics, geology, biology, and even oriental art. Many accomplished programmers are university dropouts, and some never started a degree at all.
My first job was PHP programming. I had never done that before, so I had to learn on the job. This is not abnormal. Some employers want strong skills in a particular language, but others hire people who are just good at solving problems. I prefer the latter, though I admit there's probably more of the former around.
We built a web-based system for viewing stock market information, including price charts and live updating prices.
After a year in this job I wanted to learn a different programming language, Perl, so I started going to a London Perl programmers meetup. Through that I found out about an interesting company and applied for a job there. I got it.
I worked on a big online Photo album website owned by Canon Europe, where people could upload their photos and videos, arrange them into albums and order prints.
I loved this job and learnt a ton of stuff, but after two and a half years Canon decided to move the project to a different company, and we were all made redundant in four months. So I now had four months to find a new job, and in the meantime I could do pretty much what I wanted.
I decided to learn Objective-C programming.
Who knows which big company uses Objective-C?
Apple uses it. I decided to learn Objective-C programming because I wanted to do Mac OS X programming for a bit, rather than website backends.
In addition to learning Objective-C, I wanted to learn about a new database, called CouchDB. There was one catch: you had to use JSON to it, and I couldn't find a good JSON library for Objective-C.
What is JSON?
If two people want to understand eachother they have to talk the same language. It's the same with computers. JSON is one of the many languages a computer program can use to talk to another computer programs, and is commonly used by webapps.
I couldn't find a good JSON library I could use, so I decided to write one. I expected to spend a couple days on it, but I have probably never been more wrong.
I shared my work on my blog so that other people didn't have to write their own, and so I could get some comments on my code that I could learn from. When the iPhone came along just afterwards you were able to use my library there too, and since almost every app people of writing for the iPhone required JSON handling, my library ended up being very popular.
I never planned to write a popular library for the iPhone. The iPhone didn't even exist when I started writing it. It was just dumb luck. But it wasn't luck that made me spend a lot. my free time in the next years improving the library, and that was key to a lot of its success.
At the end of 2007 the last of us left and I went to join a bank.
I worked for Morgan Stanley, a large American investment bank, for 4 years. I worked on programs used by traders to manage their clients' investments.
It started off being mainly Perl programming, but later shifted to Java. I didn't much enjoy this job. It was too stressful, but it was hard to leave because it paid well. Don't fall into that trap.
After three years this job allowed me to move to Hong Kong, as they needed someone to support our product to the traders over there. Unfortunately that didn't really work out and after less than a year I quit and moved back to the UK.
Back in London I started working in the fashion industry. As I hinted at earlier, I got this job directly as a result of my JSON library. They used it in their mobile apps and were keen on hiring me, but they didn't have any open positions. The mobile team lead, an amazingly resourceful woman, convinced the Chief Architect that he should hire me to his team instead, and use me to help her mobile team. He agreed.
For the next two years I worked with different teams to help them integrate with the mobile team's apps. After that I becames tech lead for the product service team. They had a problem: every year during the Christmas sale the website would become too busy and crash because of all the traffic.
This was around September, I think. During Christmas Sale later that year the site did not fall over due to high load, for the first time in six years. This was a massive boost to morale for the team. To achieve it, we mainly added lots and lots of caching.
What is caching, you ask?
Let's say Bernie asks Alex what the time is. Alex doesn't have a wristwatch (who has nowadays?) so has to take their phone out of their pocket, turn it on and read out the time. Bernie is happy that it's almost lunchtime.
A minute later Cass asks Alex for the time. Because Alex knows what the time was a minute ago, and it hasn't changed enough to matter to Cass, Alex don't need to get their phone out of their pocket. The same time they told Alex. Alex used their cached answer from before to do less work answering Cass.
Some time later Dara asks the time. Alex's cached answer is now too old to be accurate, so Alex goes through the whole process of taking their phone out to check the time again. We say that Alex's cache had `timed out'.
Immediately after Dara has gone skipping down the hallway Ennis asks Alex what date. Alex has the patience of a saint and gets their phone out again. Alex has a cache but the information in it was not relevant, so we say they experienced a cache miss.
Finally Finley comes along to ask what year it is, and Alex says to jump out the window. Even saints have their limits. It's a good thing they were on the ground floor, really.
Timeouts & cache invalidation, by the way, are two fundamental problems in computer science that go hand in hand. What do you cache? How much storage do you use for your cache, and how long do you cache for? There are always tradeoffs—it's never a clear-cut situation.
I really liked this team, and the company, but my wife and I wanted to move to Northumberland. I asked the company if I could work from home up here, but they said no—which made me sad. I decided to quit, so I could move here anyway. I left around the middle of March last year and moved up here three weeks later.
In July last year I started working from "home" for a German company, and I still work there.
I feel incredibly fortunate to be able to live in this beautiful countryside and work with people in Poland, Germany, Portugal, UK, Canada and Brazil every day. Most of us work from home, but I rent an office in Berwick because my home broadband is not fast enough.
We "talk" mainly via a text-based chat, but we also use video and audio calls when that is more convenient. The main drawback of working remotely, or from home, is that we don't get to see eachother's faces very often and there's no chit-chat by the coffee machine in the kitchen, so a few times a year we all meet up in Munich, Germany, to learn a bit more about eachother.
That's all I have prepared. I want to round off by letting you know that a career in software development has been great for me, and it can be for you too. It's not about grinding out code, but about solving problems. And that's something that's needed in every industry. Working as a software engineer has allowed me to work in Banking, Technology and Fashion, in London, Hong Kong and here, with colleagues all over the world.
There are so many exciting fields that requires programming. For example:
- Self driving cars
- Space exploration
- Medical science
It's a field with massive opportunities for constantly learning, with new languages and technologies popping up all the time, making it an exciting and constantly changing career. It never gets old.