July 11, 2019
"Scribo Algorismus Ergo Sum". Who says such a thing? I guess I do. It is an addiction that has been part of me since I was a teenager. The real question is: how come writing code is still so much fun? I don't know, but it is!
Back in high school, in a small town in Canada, a machine appeared at the back of math class. It looked a bit like a big fat typewriter with a green screen on top. People mostly just stared at it, kids and teachers alike. I got curious and started trying some things.
After a while it turned out I could make it do things all by itself as soon as I learned how to speak its language. This was new stuff, I felt it!
I made a sweet deal with my math teacher: I would make sure that my grades would be excellent on every test, and he would let me spend every math class at the back with this strange machine. I studied math from the textbook at home instead. At school, I built a simple game on this new machine. There wasn't much to it, since there were only kilobytes of memory, and no pixel graphics. There was a bouncing asterisk that you guided around using slash and backslash, but everybody wanted to play it, because it was fun. For me, it was magical!
Math & Money
Fast forward a few years, where I was studying mathematics at the University of Waterloo, Combinatorics and Computer Science. I fell in love with the pure beauty of math, and at the time the "Personal Computer" appeared. Classrooms started filling up with PC's, a revolution was happening.
I took time off school during my second year to build some software with my older brother, using an incredible new tool and language called Turbo Pascal. Our program took care of bookkeeping, making it easy to classify revenues and expenses, and then generate reports for planning and taxes. My brother knew what the program had to do, and I was able to make it so.
We sold the rights to it, and then I paid off my student loan in one shot and bought a shiny new red Nissan car off the lot. My obsession turned out to be worth my while. Game on!
I have always been quite literally mesmerized by coding. After a few minutes, the rest of the room gradually disappears, and then my body seems to recede into the mist as well. The only thing that exists is my mind's eye dancing around the syntax on my screen, executing the code, while teasing structures into existence from nothingness. That's when I'm in the Zone! Decades later, I still spend quite a bit of time there, immersed, entranced. People sometimes don't see my joy because I have what's called a "resting bitchface", but trust me, I'm having Big Fun!
Fast forward again to the newborn Internet boom of the mid 90s. I was working at a company on embedded software for smartcards built for healthcare. This was good business. However, in early '96 I discovered Java, and I got hooked. Completely hooked. Irresponsibly, I quit my job (I was then a new dad with little kids), to take a deep dive. I couldn't help it, I just had to. I decided to start a project to build a simple 3D world that I had been thinking about for years. This new Java technology was so incredible to me, but my boss at the time thought it was just a toy. I took the leap! I was all-in.
There was a Virtual Machine (finally escaped Windows, which I had come to despise!), the precious safety-net of Stack Traces, and a new miracle: Garbage Collection. I could code five times as fast all of a sudden! (had coded C/C++/Pascal for 7 years, meticulously). With this new technology, my productivity would leave the other coders eating my dust. I created my own company "Beautiful Code BV" in 1998 as a freelance vehicle, and I was off to the races!
I soon became one of the first freelance Java trainers at Sun Microsystems in Amersfoort, teaching groups of coders how to shake off what they had learned and get Object Oriented instead. 'User Interface', 'Networking', 'Remote Method Invocation', 'Database Access', 'Multithreading', these poor students had to wake up fast and smell the Java! These were not your grandfather's programming challenges. This was really revolutionary!
Earth evolves a nervous system
Companies all over The Netherlands needed help getting teams up to speed with Java, this new lingua franca of the internet, as the general public started to learn that everyone would now have an email address and a website. In The Netherlands, all you heard everywhere was punt-N-L. Websites were HTTP colon slash slash.. something punt NL.. wait what?
I was all over the place, doing my best to spread "Beautiful Code", consulting with a few companies at a time. I bought a new laptop every year. Bigger, faster, smoother, brighter, better connected! I flew to San Francisco every year for the JavaOne conference, just because it was important to know where things were at and where they were going. I did teaching gigs in South Africa and Japan. Eventually, my attention was focussed on particular companies doing online payments and services as e-commerce ramped up. All the while, my message was that what made code beautiful was how effectively it could pass from the hands of one coder to the next. It was about longevity.
Up a notch
Nowadays, I lead a team at Worth Internet Systems. The game has changed again, and now things go even faster. Why? Because of Stackoverflow, forums, copy-paste and Google, and the powerful virtual machine technology in modern browsers. Learning to search has become very important. We all write code while leaning on the day to day experiences of countless other coders on the internet. In many ways, the world's developers operate like one big brain.
This was another tsunami for me, forcing me to unlearn what I knew and learn new things again. I used to learn from books, but now the pace is much faster and we have the amazing internet at our fingertips. Programming is very different when you search as much as you code. It's actually better, I found out, so I learned it.
La même chose
The process has changed dramatically, but if you take a step back you see that we're not really doing anything fundamentally different. Plus ça change, plus c'est la même chose ("The more things change, the more it's the same thing").
The diversity of challenges that programming Java once brought have now almost all reappeared in the browser with Typescript/HTML/CSS, and we now have to learn to program functionally and make components reactive. Nowadays, it all has to find its way to the cloud, so we have to pick up container tech and virtualization. Much of our work at WORTH is a conscious effort to discover which user experience really works. Therefore, teams have User Experience as a standard part of the team, and we build with comprehensive testing from the get-go.
With my team here at WORTH, we learned Angular and Typescript, a framework and language that we had never worked with before. We made these tools our own, internalized them, and built a set of very smart online forms for the Ministry of Foreign Affairs. The hard part was that we were building a user-facing app and set the bar high for testing. Our test suite helped us countless times finding issues before users did, and it allowed us to make design improvements to the code at the foundations as we learned better ways to work. As long as all the tests were still green, we knew that the code still produced a working result. We were raising the quality of the data coming in to the Ministry, and making it easier for people to do it all online.
Marching to the browser
Systems these days are full-stack, and the browser programmers from the old days (it's accelerating, so like 7 years ago) have to up their game and learn to deal much more with abstractions. The "front end" of the stack is doing much more of the logic now. Typescript allowed us to build the abstractions into the browser application. We even re-use some of the browser logic by compiling it again to the server-side. I've come to really appreciate how Typescript allowed us to program in a contract-based way using abstractions almost the same as in good old Java.
Moore's Law - The number of transistors on integrated circuit chips (1971-2016)
To be sure, it's weird being the only developer who has gone from kilohertz to megahertz to gigahertz, and from kilobytes to megabytes to gigabytes. I have weathered several tsunamis in the IT business that had me unlearn and adapt to totally new programming environments and paradigms. It comes with the territory in this business.
The hunger doesn't go away. Nowadays, I'm using Typescript on another project in my own time, because (you guessed it) once again I found some shiny new tech and had to set everything aside and take a deep dive. This time it was WebAssembly and WebGL that I had to learn. It's work in progress, but I'm building some kind of evolution game, I think. It's open source and I'm hoping to kick off and grow a small community of tinkerers interested in this tech and Darwin's natural selection.
Evolution game Galapagotchi.run
So. What will we be coding in 10 years? Good heavens who knows!
We can now apparently build blindingly fast code that runs right in browser, even on your phone. That's interesting. What could it mean? I think it's big. You will find WASM everywhere, eventually.
We can learn about the decentralized systems like Bitcoin and Lightning Network, Smart Contracts, and all things blockchain. That's something that looks like it could change the world. We can build mesh networking and content-addressing in InterPlanetary File System. We can learn to tinker with data science and get our hands dirty with machine learning.
My brain hurts
Aaaah! There is basically always far far too much to think about!
The best I can hope for is that I might be able to trigger the imaginations of my young colleagues so that they can withstand the changes which are surely coming their way in the future. Oh yeah, and of course to keep it fun, otherwise f$%k it right?
What always brings me back home is the precious feeling of being in the Zone, where everything but me and the code disappears. It's a place where magic happens, and it's even peaceful in a zen kind of way, even though lots is happening.
Like Rene Descartes would have said, if he could play with the gigglehertz processors that we take for granted: "I code, therefore I am."