dagblog.
← Archive

My journey: A programmer approaching forty


Not long ago, I think it was on Zdroják, I read a piece by A. Dent, alias Martin Malý, about life as a programmer after forty. It spoke to me, so I decided to tell the story of my own journey.

I was born in 1979. Unlike Martin Malý, I didn’t start dabbling with computers in the depths of communism and the Cold War, but right after the Velvet Revolution. It was close enough that the occasional “Comrade Teacher” still slipped out at school. Some of my memories are pretty hazy as a result.

My cousin and I definitely played something on his Commodore 64, but my real start with computers, or microcomputers, came at Christmas 1991 at the tender age of eleven. My enlightened parents decided I was ready to own a Didaktik M, a black-and-white television, a dot-matrix printer that took carbon paper and a cassette player.

It came with a technical manual in Slovak describing the circuits and who knows what else. My father read it with the inevitable cigarette in his mouth and hooked up all those peripherals for the first time.

In those childhood years I saw the computer purely as entertainment, but certain technical questions nagged at me. How were the games made? How did you make the graphics? What about sound and music? Maybe I’m idealizing my younger self and it was really the games that captivated me, with those questions coming much later.

My father, who was very technically minded, got me a book on BASIC programming and I made my first tentative attempts. Did I have any idea what a processor or memory was, let alone how either worked? Absolutely no chance. I just started building simple programs by trial and error, ones that at most let you type in some text. Trial and error would be my best way to learn for all the years that followed.

I tried to imitate the graphics I saw in all the games, but my chances of success were slim. There was no Stack Overflow and no Google where you could type “computer games graphic.” The language education on offer at school was Russian, because the teachers simply didn’t know English or German.

Around that time, incidentally, Tim Berners-Lee had just launched the World Wide Web (WWW), which most people today understand, a little imprecisely, as the internet. I didn’t know anybody who had even a remote idea how computer games were made. In 1994 I started at the secondary technical school in Písek. The Didaktik M was falling out of fashion, and my eagerness for a computer education was quickly brought down to earth by Ohm’s law and semiconductors.

Instead of a computer screen, I stared at an oscilloscope and tried to understand things that were utterly incomprehensible to me. I wanted to play with computers, not build transformers or learn Boolean algebra. I was always more of a top-down person. In our two hours of computing (one classroom had 286s, the other 386s), we learned DOS, Norton Commander and stuff like that.

There were attempts to teach us Pascal, but anyone without a PC at home stood practically no chance of picking it up. Maybe I’m being too critical, since some classmates managed, but I was floundering like fries in hot oil. Around my second year I was having a terrible time at school, especially with math. I wouldn’t call myself thick, but without a good teacher, especially in technical subjects, it takes very little for things to stop making sense. Then you have to memorize them. I was never the kind to bury myself in my studies, so memorizing didn’t work for me. My grades eventually began to improve, but programming still passed me by even though I got a 486 PC around 1996.

Programming on the Didaktik M and on a 486 were worlds apart. The Didaktik greeted you with a blinking terminal where you could start typing a program. On the 486 you got DOS at best. Try writing a program in DOS when BASIC is all you know. By the end of secondary school, the most I had achieved was a poor qualification to carry on the family tradition of fixing televisions.

I didn’t get into university. In those days universities still chose their students, in the sense that only one in five got in. I’m glad, because I’d taken the coward’s route and applied to a teacher training faculty for computing instead of a technical university. I could have ended up an underpaid, neurotic geography or civics teacher with a permanent feeling of having wasted my life.

I went on to a higher vocational school, but was still miles from programming. My 486 was also getting old pretty fast. Maybe I wasn’t even thinking about programming then. But a series of three highly unlikely events set me on the path to becoming a programmer.

Remember Invex? It was a computer trade fair where teenagers went to play the latest games and drool over consumer electronics. It was also the first time I saw the futuristic design of Apple computers. On a poster, of course. It captivated me so much that it hung in my bedroom for years. As luck would have it, I bought a game at one stand for fifty crowns and was entered in a big prize draw for a souped-up computer (Pentium II, 3D graphics accelerator). What were the odds, one in a thousand, one in a hundred? To cut it short, I won.

The second stroke of luck was my graduation project in 2001. I had to do a work placement and work on the project during it. The trouble was that my supervisor had no time for me. I was helping out with computers, printers and the like at the ambulance service in Písek. I’d got the part-time job through one of my teachers, Mr. Oldřich Hlaváček, who suggested we try changing the subject of my graduation project.

One thing led to another and I started developing an information system at the ambulance service. At school we’d had some basics of databases, HTML and Visual Basic, if I remember correctly. With a little exaggeration, I was the product owner, analyst, Scrum Master, developer and tester all in one. For three months I just sat and programmed in PHP, MySQL, HTML and JavaScript. I learned it all diligently, sometimes by trial and error again.

Offline, there were books. Paper books, obviously. Going to the bookstore and rummaging through books from Grada was a pleasure. Books had two drawbacks. Many were obsolete as they left the printer. The other drawback was the price.

Online, email discussion groups were popular. There were several, some hosted on builder.cz and interval.cz. You sent in a question and sometimes got an answer. It could get pretty heated when somebody asked a perfectly innocent question like whether to use PHP or ASP. I poured oil on the fire a few times myself. Ah, youth.

After finishing my studies and successfully defending my thesis, I started compulsory military service. Instead of using a mouse and keyboard, I polished combat boots and learned to march around the parade ground. Alongside vital practical knowledge such as how to fold underwear, I developed a deeper aversion to uniformity, hierarchy and, above all, doing things that made no sense.

One masterpiece of military logic was pulling grass in August with mittens rather than using lawnmowers. We hadn’t been trained on those. You could have doubts about the intelligence of some of my comrades, but even the slowest could manage a mower. If you needed to sort something out with someone, you usually couldn’t because it would break the chain of command. You spoke only to your commander, who spoke to theirs, and so on. Excellent preparation for corporate life, or an excellent way to learn to hate hierarchies.

Unhappy family circumstances cut my service to three months. To anyone smirking and wondering what kind of military service that was, I’d wish a week of it firsthand before they pass judgment…

That brings us to the third stroke of luck. Civilian life. Hell, civilian life! Normal clothes, normal food, all the perks of ordinary life. There was just one worry: what was I going to do? My hometown of Písek isn’t exactly the center of the tech universe. Silicon Valley moguls aren’t exactly lining up at the door.

It was autumn 2001 and I was looking for work. The technical vacancies ranged from serving drinks in an internet café to administering a network or selling computer equipment. I went around the local firms, asked about jobs, sent out my CV and ended up on the books at the employment office. Where could I be today if that had worked out? Probably back at the employment office.

There was definitely interest in me in Prague, but I wasn’t interested in Prague. One afternoon my landline rang. The woman from the employment office told me to visit A.S.E.I. (Aplikace Systémů Ekonomických Informací, or Applications of Economic Information Systems), as they might have a job for me. Armed with the address, I set out to ask for work. Písek is a delightfully small town. Unfortunately, the company wasn’t at that address. I went back several times to make sure my eyes weren’t playing tricks on me. They weren’t.

So I told the polished woman at the desk that the company wasn’t there, even though the sign was. The woman, surely learned and wise, suggested I call them. Call? That honestly hadn’t occurred to me. I called the number and set up a meeting, otherwise known as a job interview.

Developers show off their GitHub today. I brought a printed thesis. I don’t remember exactly what they asked, but I loved it. Blinded by happiness and my own stupidity, I suggested to my future boss, Jirka Kotal, that we drop the formal Czech form of address. During the interview.

Since then I’ve put a lot of stock in how it feels, both when changing jobs and when hiring someone. I simply have to feel good about it. Incidentally, I’m no longer taken aback if a candidate starts addressing me informally at an interview.

Looking back, it was the dream job for my development at the time. Web applications, then called multi-tier applications, were newborns, and so was Java. Nobody knew servlets, or perhaps they hadn’t even been invented, so I went ahead and wrote my own HTTP server. Java was magic to me. My brain wasn’t ready for the mental leap from PHP to Java.

I’d been hired to build the face of those applications. We took a roundabout approach again. Instead of JSP, we generated XML dynamically and used XSLT to get HTML, then brought it to life with JavaScript. Friends, we didn’t have React, Ember, Angular or even jQuery. We had document.getElementById. Ancient history. AJAX and asynchronous server requests? Unthinkable.

I didn’t like Java. It was too complicated for me, and then there was object-oriented programming. It all turned around one summer when my mentor and colleague Ruda Pischek lent me Thinking in Java by Bruce Eckel . Damn, suddenly things started making sense. I’m exaggerating a little. I had to do a lot of programming. Ruda and I were always reworking something. Today we’d call it hacking.

We were delivering a web application to Komerční banka then. It was still running there as I wrote this. It was punk to the core. Both of us had a very hazy idea of security. I may have had none at all, and if Ruda had any, he hid it well.

A GET request with the employee number as a parameter returned that employee’s details. Alongside innocuous things like name and position, there were sensitive ones such as annual bonuses. It didn’t occur to us that the employee number should match the authenticated user’s until handover, when some smart aleck started looking through the CEO’s records.

Another blunder was using truncation at a specified character instead of rounding decimal numbers. A rating of 4.9 suddenly became 4 in an employee appraisal app. We thereby helped another bank cut its staff by roughly half. I hope the statute of limitations has run out by now. Ruda also managed to crush a disk array by sitting on it in the server room.

Around 2004 I got a taste of Hibernate and especially Spring. It was culture shock, a bit like going from PHP to Java. Blogging also introduced me to a few people from Prague, and the idea of working there one day was getting less scary. One day an SUV with Prague plates pulled up under my window with a guy from Ústí or some one-factory, one-smokestack hole up north. We went on to do a few good things together, such as CZ Podcast.

Filemon was already working for Ariba, was in Finland and was hatching grand plans. He wanted to rope me into making an Eclipse tool he could sell to Ariba. I always took his plans with a grain of salt. He had his head in the clouds and I had my feet on the ground, which is why he started several successful companies and I started none. I was interested in Roman Staněk’s company Systinet, where Filemon had worked before. Pavel Kolesnikov, known as Koles, recruited me there and did the same a few years later at GoodData. We knew each other entirely online, on the basis that you have a blog and I have a blog.

It’s 1 February 2006 and I’m on tram number 1 heading toward Želivského, Prague, the capital. I’d moved from a company with at most five Java developers to one with six times as many or more. I learned a few foreign words, started speaking Czech-English (“throw a meeting in there, dude,” “who are you losers hiring?” “we’ll port it to AIX”) and entered a different world.

I’d imagined it would be the world of web services, but it was a long way from that. Development was classic waterfall and nobody knew Spring. Still, I got to work with application servers, databases and middleware I wouldn’t otherwise have encountered. They also explained REST to me, and I made plenty of friends I could count on.

Alongside learning new things all the time, I began sharing some of what I knew. We started recording CZ Podcast and organizing meetings of the Czech Java User Group in Prague. Roman Štrobl, alias Roumen, was still involved then. He was the NetBeans development environment evangelist at Sun Microsystems.

Those were the days of silly debates like “Do you think Eclipse or NetBeans is better?” and “I’m telling you, big companies will never use Spring.” I worked a lot. I went to work even on vacation because I enjoyed it. From 2001 to 2008 I had at most two weeks of real vacation, meaning away from work. I was a young guy, after all.

The turning point came toward the end of 2009, when I was losing faith that HP, which had swallowed Systinet, could make good software products. How the hell would those printer guys know how to make software products? Let the state of HP Software and the remains of the once-proud Systinet validate my intuition back then. Filemon offered me a cushy spot at Česká spořitelna under the banner of his company JetMinds, which he was trying to establish there.

He was a man of the world and even promised me some stock options. But I lasted no more than half a year. Corporate life wasn’t for me. The corporate logic of “there’s no hole in our part of the ship” reminded me of my time in uniform. I missed having something to fight for and feeling the work mattered. In English we call that ownership now. I started eyeing GoodData, the startup Roman Staněk had founded. Unfortunately, there was no Java work there. Bad luck, kid. Another time, another life.

In spring 2010 Koles and Jarda Gergič came to CZJUG. We were talking about GoodData and they mentioned that part of the application was actually written in Java. I gasped and started asking questions. One thing led to another and I was there for an interview. I dispatched the questions almost before they asked them. My ego swelled enormously when Staněk himself called to explain the advantages and perks of working for him. Then no offer came. I was downright offended. Eventually they said they had some dubious reservations and surely couldn’t afford me, being a startup and all.

Not enough cash. If only they knew I’d have worked there for next to nothing. Startup, Silicon Valley, shares, product development. I was thirty and had no commitments, so why not try? The money would come, and once the company sold, I’d be rolling in it and partying with chicks in a Prague bar, I tell you. Reality can be a long way from the picture in your head.

Instead of Silicon Valley and a drive across the Golden Gate Bridge, I mostly took the Pendolino train via Pardubice to Brno. But it was worth it. I don’t mean Czech Railways’ catering or its inability to provide internet access. It was a great professional education. A.S.E.I. was primary school, Systinet secondary school and GoodData university. Suddenly I was working on a product customers actually used, unlike at HP. We were in the cloud on AWS, solving interesting problems, and both the company and the product grew.

I could tell you that I learned what a distributed system meant and experienced DevOps and NoSQL. The most valuable thing was the mass of smart people I could learn from. There was also a bit of an engineering alpha-male culture, with egos constantly measuring themselves against one another. An ideological fight about which technology was best made it worse. Even trivial decisions ended in deadlock because nobody wanted to concede their version of the truth. Futility upon futility.

There were a few failures I vowed never to let happen again at another company. I managed to keep some of those promises, such as sticking to one backend language, but not others, such as Ember. I spent five wonderful years there and once again didn’t get an exit. If there’s ever an IPO, let me know on account of the shares.

Five wonderful years… Friends, I had a great time. “A mortgage around your neck, a baby on the way, and you’re happy as a pig in clover. Why do you want to leave?” My wife thought I’d lost my mind. “You’re going to Zonky? Wouldn’t you rather go to Avast? Breakfast, lunch and dinner, and you know how much you eat. Five minutes from home. Our little boy and I could come see you.” How can I explain it? Some people, faced with two ways to meet a challenge, always choose the harder one on principle. That’s me. Maybe I’m competitive, or maybe I just don’t want anyone to be able to play it down.

And here I am at Zonky, a peer-to-peer money lending service. I asked myself about fifteen times what I was getting into. Tiny offices, a CTO driving a Fabia, and a stand-up canteen for lunch (no meal vouchers) called U mokrýho lokte, where Dad used to take me, probably back under communism. Still, it was a big challenge to build the service with a handful of people.

The first piece of great news came fast. The CTO was taking a three-month vacation and probably wasn’t coming back. You’re in charge. Bye, guys. Um, excuse me? I’ve come to terms with giving up programming after fifteen years. Tough luck, but the company thinks I can help it more by helping run the whole thing.

It has one advantage. When a developer brings me a brilliant idea, say rewriting everything in Scala, I have a million and one reasons ready for why it’s the dumbest idea under the sun. That really was just an example. Nothing against Scala except that it’s an academic language where you write something once and no one can ever read it again. But what do I know about Scala, right?

In those fifteen years I gained a bit of experience, which honed something called intuition. It sounds silly to say so when everyone wants to run a company on data now. They want to see elaborate calculations behind everything, nearly to the point of artificial intelligence, but it’s still the same. Besides intuition, I always had luck. Or was I lucky because I had intuition? Who knows.

I’ve tested a few principles that work across fields. Give people freedom and ask them to take responsibility. Trust them, or you shouldn’t have hired them. When something goes wrong, use it as a chance to learn. Never tolerate people covering themselves instead of taking responsibility. None of the hard skills is universal, because technology changes every day. What was accepted yesterday is taboo today. I don’t believe in upfront design of anything or grand planning, because neither survives its first contact with reality. And of course, there’s top-down trial and error. That’s probably the point of the whole story.

Actually, maybe just one thought. You need to get lucky with people at least, and I did, through CZ Podcast, CZJUG and this blog, for example. I hope my journey helps you with yours, but you have to walk it yourself.

Medium version

Related articles

Related CZ Podcast episodes