20th June 2016
A notification popped up on my screen, before disappearing a few seconds later. Someone had mentioned me on Twitter, a name that was familiar. Minecraft could wait, I went to see what this was about.
Ethan Lee, also known as flibitijibibo (I copied and pasted that, I still can’t write it without looking), asked a question, and it was a very interesting question.
If you don’t know him, have a quick look on Twitter. If you use Linux and like gaming, chances are you already have reason to thank him. He’s a very good developer, one that loves his job, and if I’m not mistaken, is becoming his own boss, doing what he loves best. His site presents him more than I could, but he is rather modest, he deserves more credit than he gives himself (probably one of the reasons why I like him). He also called me a “very nice person” once in one of his game’s README files, but for the life of me, I can’t remember which one it is. Anyway, I digress.
I would be interested in knowing if people really wanted to program for the machine they fell in love with, or loved programming in general.
Interesting question. Time for a quick history lesson, I suppose.
I was born on the 14th of April, 1977, in Singapore. I’m British, my parents are English, and for several reasons, my mother moved back to England shortly after my birth. My mother had a certain lifestyle which meant that I was often on my own. I don’t think I have any reason to complain; what I didn’t have in the way of family, I had in the way of learning resources. Books, videos and above all, a computer. A rather fancy Apple IIe, quite a beast for the time. I played a few games, wrote some extremely useless documents and had fun with spreadsheets. I was fascinated by the pure logic of this device, and also fascinated by the electronic expansion boards inside it. However, I didn’t really have a way to program it, so that had to wait for another year.
My first “personal computer” (not to be mistaken with a PC), was a Spectrum ZX81, a replacement for the family ZX80. Based on a 3.25Mhz Z80, it had a whopping one kilobyte of RAM, but if I’m not mistaken, I had an elite version that came with 4Kb of RAM. I had a few games, but the interesting thing about this was the BASIC interface. Just as a reminder, a very simple BASIC program looks like this:
10 PRINT "Hello, world!" 20 GOTO 10
The interesting thing about the ZX81 was the keyboard. Each key had the letter assigned to it (of course), but also a graphical character, and a BASIC instruction. To write “10 PRINT”, you would actually type in 10, and then the letter “P”, which would complete the “PRINT” directive.
This was interesting. I now had all the instructions available in BASIC, and little chance of writing something wrong, and now it was time to learn. At the age of 6, I wrote my first program. It was particularly boring, and was a crude imitation of teletext, something popular on televisions at the time.
Time went by, and computers came and went. Spectrum ZX82, Spectrum +3, Commodore 64, and then finally, the Amiga 500. Now this was the machine that got me hooked. It was based on a Motorola 68000 running at 8MHz, and had 512Kb of RAM. The games were awesome, and so were the utilities. I saved up some money, and bought AMOS, a BASIC IDE (well, sort of), and could write awesome games. I published my first “game” at the age of 14, a platformer called Kitten Curse. Apparently, it has fallen into the oubliettes of retro gaming, where it belongs. I wasn’t very good at graphics or music, so they were both terrible. The level itself was rather easy, but the code was all mine.
In parallel, I had come to love electronics. I was fascinated by the insides of a computer, and while people told me to try and build my own radio receiver, I preferred digital systems (and I still do).
I moved to France, and apart from “Hi, my names is James, and I have a passport”, I couldn’t speak French. Life is “interesting” when you are 15, and don’t have any friends, living out in the countryside. To cheer me up, my family bought me DEVPAC, a programming environment for my trusty Amiga. DEVPAC wasn’t BASIC, it was assembly.
Assembly let me do some incredible things, pushing the processor to its maximum potential. I made a few more games, including a second port of Kitten Curse, that was probably even worse than the first one. Hey, give me some credit, I was only 16!
Somewhere in my brain, a few neurons fired. This was a mix of both electronics and programming. I knew exactly what happened on the processor, and how it communicated electronically to other devices.
This is the difference. I wasn’t programming the computer, I was programming the microprocessor. That might not sound like much, but it made a difference then, and it still makes a difference in my career today.
When I tell the story, I get a few questions. Hey, you started so young, you must be an awesome developer! No, I’m not. I know what an awesome developer is, I’ve worked with a few, and I’m not one of them. How come? Read on.
Eventually, the Amiga died, and something died with me. I had little choice, it was replaced by a PC, a 386SX25. That machine was awesome, and gave me some pearls like Monkey Island, Lemmings and the BASIC pearl Bananas.bas. Then I tried x86 assembly. I hated every second of it, and I still do. On my 386, there were over 10 types of JUMP statements, and that was just the start. I quickly gave in.
This as a grey period of my development life. I retried BASIC, fiddling around more than developing. I tried C, and it was kind of fun, but I’d lost the love I had. Still, I found out that I could do hardware programming in C, and so my 386 became a control unit that managed the heating of my student flat. Originally, my system used the parallel port, but I soon created my own ISA card. That was fun! Just when I got used to it, they replaced ISA with PCI. Yes, I could play better games, but I could no longer make my own cards.
Something happened. We had some friends that were in the computer industry, and someone gave me an Acorn Archimedes. I forget which model, but I believe it had an ARM3 microprocessor. It had a version of UNIX, so I had a few games, a few tools, and everything I needed to create programs. It took me a while to try ARM assembly, and my only regret is that I didn’t try it earlier. Memories of my previous joy flooded back as I had a look at the assembly instructions, and the power they had. Everything was fluid, and I started writing assembly again. Quite a few years had gone by, and assembly was no longer a viable option for writing applications. While it was fun, it just didn’t work out.
I was back on PCs after a while, and I have been ever since. However, a lot has changed. Despite what I believed, I’m still working on ARM assembly, only this time, I’m using my PC to compile for a tiny processor. I’ve swapped my 320×200 screen for a triple full-HD monitor setup. I’ve swapped my 8MHz processor for a 4GHz multi-core processor. I’ve swapped my 880k floppies for a 4Tb hard drive system with a 12Tb NAS. However, I haven’t swapped my love for programming embedded systems. I love talking directly to hardware, knowing exactly what the output of a particular pin is. I love talking interrupts, cache, sleep modes and bootloaders. And don’t even get me started on optimizing! I’ve found my love again.
Well, sort of. I live in France, and after a professional difficulty, I went to work for a French consultancy agency. This is where things went very, very wrong. This isn’t what people think it is. It is a collection of engineers who are very close to burning out, exchanging stories of nightmare missions and situation. To name but one, this particular company sent me on an international trip to help a client. Two weeks in Brazil. Sounds nice? Well, for a start, we’re not talking beaches, but car manufacturing factories. The night guard at the hotel was armed, and didn’t joke around. I had strict orders to stay in the hotel, and not to leave without an escort. My girlfriend was also 8 months pregnant, and I could have missed the birth of my daughter (luckily, I didn’t). To top it off, remember the Air France flight AF447? The infamous Paris – Rio flight that went missing. No, it wasn’t that flight I was on (for obvious reasons), but it was the same route, not too long afterwards. And the co-pilot of AF447 was a personal friend of ours, so our wounds were fresh. At the time, no-one knew what happened. I arrived 2 hours late, and I turned my mobile telephone on to find several messages from my girlfriend, in tears, pleading with me to tell her I was alright. And this wasn’t even the worst story.
I used to love developing, but two things stopped that. One, the way developers are treated here in France. One of those clients rated developers work by the number of lines they wrote. The managers barely knew what an IDE is, but judged us by the number of lines of code we wrote. Java developers could write hundreds, but I was an assembly developer. So, out of rage, I wrote my cache control program, adding 500 lines of “NOP” (short for No OPeration, or basically, “do nothing”). That actually worked, I was pushed to the top of the list. Secondly, at close to 40, people asked me what went wrong during my career. Wait, you are 40, and you are STILL a developer, and not yet a project manager? Poor you! No, not poor me, I’m doing fine, thanks.
So, to answer Ethan’s question, yes, I did love writing for a specific computer (or at least, processor). I’ve tried writing multiple languages for PCs; C, C++, Pascal, assembly, Scala, Java… No such luck. Ironically, I do love Python, though. I don’t have to deal with memory, or timing, or data types, or anything, but I still love it. Maybe I do love programming, now that I’ve found a language that I love, as well as a computer that I love. Or maybe, after 2000 words, I still can’t answer Ethan’s question. Maybe I just needed more time, but a few things came along that just made me stop.
So, who am I today? I’m not a developer with Google, I don’t work for a Fortune 500 company, I work for someone much less fortunate, myself. Someone at ARM once called me world class, but I still don’t believe him. I now spend my time telling people how these things work. As Paul Rako from Atmel once said, I’m no longer an engineer who writes, but a writer who engineers. I’m jealous of people like Ethan who still love to develop. I really am. Now, enough reading me, go to his website, have a look at what he’s done, and go and play some of the games he’s ported. Off with you. Oh, and if you want to start programming ARMs or Arduinos, have a look at my book, you’ll understand where I am today.
26th May 2014
Writing a book is a huge project. My first book, Professional Embedded ARM Development, took something like 10 months, but I’ll never really know how long it took; it is made from extract of work notes over years of consultancy work. So why did I write it? Why does anyone write technical books… Don’t go thinking that it is for the money. We do indeed get paid a percentage of every book sold, but you need to sell a lot of books to make a living. For the reputation? Partly, yes. I also did it to help people out, and of course, the love of writing itself. I can spend hours on my keyboard.
Keyboard. The golden rule: to do a good job, you need the right tools. My previous keyboard was great; it was enough to type a few lines of code, but it was designed to frag, and would have been great if I had any gaming skills at all, or any time left (my World of Warcraft days are far behind me). Great for typing an email from time to time, it wasn’t up to the job for a 300,000 word book. So I changed my keyboard.
I live in a place where I have two supermarkets close by. One of them is big enough to sell computers and hardware. There are a few other shops around that also sell hardware, but I choose to buy it from another place, an Internet site. Why, am I so lazy that I couldn’t be bothered to walk 600 meters to go to a shop? It was for a different reason. I wanted to order my keyboard on an Internet site that I’ve used for years.
Materiel.net was born here, in Nantes, France. We’re proud of it. When their original site became too small, they moved a little bit away, and we were all sad. However, they didn’t move that far away, and they even made a showroom, still in the Nantes region. This is where you can get your parcels, but also where you can look at some of the products for sale, and get some great advice from the staff. They even go as far as to do some demonstrations; extreme over-clocking, for example. That’s nice, but doesn’t buying on Internet mean lots of time? After all, the products aren’t actually at the showroom, they are all stored at their main site. Buying on Internet means two days to put it in a parcel, three days for that parcel to arrive (just when you are out), and another four days to be able to go to the post office to retrieve it? Right? No, it doesn’t. I’ll give you an example. Late one night, my graphics card died. I didn’t have a backup card, and my system doesn’t have on-board graphics. My two screens were blank, and there was nothing I could do about it. I went to sleep. Early next morning, I got up, got my daughter ready, and was finally ready to work from home. 8:30 AM. I opened up my laptop, had a quick look at Materiel.net’s graphics cards, and selected one. That was actually the hardest part; we aren’t talking about five or six cards. As of right now, they have 267 graphics cards. I want an NVIDIA. Click. Okay, 131 cards left. PCI Express 16x, please. 128. Hmmm… Oh, yeah! Passive cooling! 7. Right, now we’re talking. I went with a “simple” card; I’ll change my monitors later, so in the mean time, I want a basic card that can handle 2 VGA monitors, and let me play Minecraft from time to time (hey, writing is hard! I need some way to relax). I ordered a low-end card. Click. Deliver to the Nantes showroom. Click. Card? Click. Thanks for your order! No, thank you. 9 AM, time to get back to work.
At 11:30, I received an email. Your order is ready! Come and get it. Seriously? I took a bus, and ten minutes later, there I was, and my card was waiting for me. It was prepared at their headquarters, sent by truck to the showroom, within 4 hours. It doesn’t get much better than that.
So, what does it take to write a book? A keyboard, yes. I needed to run more and more applications and virtual machines, so I needed memory. A hard drive failed in my NAS, so I needed to buy a new drive (and upgrade the storage capacity, too), so that was another order. I’m also taking trains and planes, so I needed a new laptop, and Materiel.net gave excellent advice for a new one, so I bought everything there.
A lot of people helped me for my book, and I thank them all. Some are thanked on the first few pages, but it isn’t possible to thank everyone. The technical editors are thanked, and of course my family who put up with me, especially my daughter who really wanted a cuddle from time to time (and who even figured out how to unplug my computer to get what she wanted). When the book was published, my editor sent out “author copies”, free books that I could sign and send to the different people who helped me, or as goodies. One went to ARM in the UK; I had a lot of help from someone over there. One went to Atmel in the US, another went to Silicon Labs in Norway. They helped me by sending me cards to use in my book. Who else helped me? Well, Materiel.net were sort of like a partner; they were the ones I ordered my computer parts from, but not only. The Raspberry Pi is a nice embedded system, and is used as an example in my book. Who did I order an RPi from? You guessed it.
I made a quick stop by the Nantes showroom, and handed them my humble gift; a signed copy of my book. I was thanked by the staff, and I went back home. That was a few weeks ago.
Today. Saturday. This has been a really busy week. I’m working on a second book, and I’m a little late. To help me through it, I’ve ordered some components. Mother’s day is also coming up fast, so I ordered some little presents. Atmel wanted to know if I could write about one of their new boards, and I’m only too happy. Amazon are the official Mother’s day suppliers. The postman has come, literally, once a day. UPS, DHL, and the French La Poste, one parcel a day. Monday, I received some books from Wiley. They need to be signed and sent to the UK. Tuesday, Atmel’s new development board arrived. Wednesday, the first Amazon order. Thursday, Adafruit Industries. Friday I wasn’t home, but the last parcel, from Amazon, didn’t need a signature. I came home later that day to find the parcel waiting for me, as well as a delivery slip. Another parcel was waiting for me, and required a signature. Since I wasn’t there, they would bring it tomorrow. Wait, what parcel? I wasn’t expecting another parcel.
Well, Saturday came, and here we are. I’ve received my parcel. I had a look at it, saw the shipping name, smiled, and signed. I hadn’t ordered anything from Materiel.net, but the parcel clearly stated the name. I brought it inside and had a look. I opened it up, and I had a smile for the entire day. The contents? First things first. On top was a letter, something I value more than anything else. A thank-you letter, and a photo of someone reading my book. What makes it really awesome is the fact that he is reading it to a giant stuffed rabbit, a minion, a PvZ zombie, Stitch and a crocodile that looks like something from Peter Pan.
I smiled, and carried on reading. The letter talked about their pride in creating an excellent service, one that made people like me come back again and again. An excellent service indeed! They have been voted best customer service years in a row. Anyone can sell things on Internet, even I can do it. The difference is the quality of the service, the speed in which orders are completed, and especially, when things go wrong. I have had two orders that “went wrong”. The first one was a memory stick that didn’t work on my configuration. One phone call later, and the young woman on the other end told me to send it back, and suggested another reference. Two days later, the order had been returned, and I had the new reference, and it did indeed work perfectly. The latest “problem” concerned an object that was no longer in stock. They sent me an email, apologized, and suggested a new product. It was sorted out (and waiting for me in the showroom) the same day. Problems do occur, and I don’t mind problems. The most important part is how they are handled, and these guys set the standards for other companies.
The second part of the letter talked a little about my family, and especially my daughter. They said sorry to have kept me too busy at times, instead of playing with Eléna. I am the only one responsible for that, no matter how good their products are. To say sorry, they also added a present; a mug with a heart on it. A typical gamer object, the heart is the sort you see on 8-bit games (or Minecraft), and is black when the mug is empty, and red when it is filled with steaming hot caffeine. They did indeed write that the mug is for her, but that’s OK, she can’t read yet. I’m a terrible father, but this is just too awesome to let her play with it, and I need caffeine for the next book.
So, why do I write books? I write books for letters like this. A quick letter is always nice, and I’m always thrilled to hear what people think, but letters like this go far beyond anything I expected. I cannot find the words to express how I feel, which is indeed a shame for an author.