@radekmie
By Radosław Miernik · Published on · Comment on Reddit
Should programming be fun? With nearly 7 years of commercial experience, it’s still a really tough question. On the one hand, I’m doing what I really like. On the other, I should… Get bored already?
Programming is my hobby. (Actually, I wouldn’t be where I am now, if it weren’t.) As I speak to others, it’s not that uncommon among programmers. But what is also not uncommon, is the fact that it changes in the first few years of work. It’s simple – if your work is your hobby, then your hobby feels like work.
Burnout is a thing; I hope we all know that. But let’s start small, just when the spark goes off. At first, there’s no drive for doing side projects. Then there’s no interest in new and once exciting things. At some point, it’s no longer about programming; it’s about work. Something got lost in the process.
What then?
I really consider myself lucky. Having started with programming back when I was 13, only because I wanted to create a mod for one game, is probably one of the most important decisions in my life. Of course, there are other factors, but hey – I want to keep my story a little more magical than I should.
I quickly went into “general” programming, with C and C++. Learned a lot, but my main problem was that it was nearly impossible to share anything I did with others, as configuring the entire environment on my friend’s computer took a couple of hours. In the end, my two minute long platformer was not worth it.
Because of that, I started with PHP. Version 5 was not that popular yet, and so was the hosting. But as most of my friends used the same ISP, they could see my creations in a local network; the rest used Hamachi. It was easy to make, it was beautiful (once styled), and it was rewarding. It was fun.
I used to play flash games at least forty hours a week at that time. And while my profile on Kongregate gathered tens of achievements, I learned how games work. Tools like the (in)famous Cheat Engine were ideal for learning how the game state can be handled (or manipulated), but also that it is also important not to rely on the player’s input. (Some services still don’t know that today.)
In the meantime, the need for persistence somehow forced me to learn about databases. At first, it was a text file read and dumped to disk on each operation. It was slow and fragile as hell, but hey – it worked. And if the file was publicly available through an FTP server, anyone could change it. Really, the fact that I could configure the game I made while playing it was crazy. It was fun.
Time has passed, webdev was growing faster than ever, and PHP was getting bombarded with tons of hateful comments1. As I was considering being a programmer, I wanted to have a backup plan. I started with Python and Ruby, basically at the same time. It was weird, as on the one hand, it was better than PHP on so many levels, but on the other, it felt like cheating – Django and Ruby on Rails had everything I needed to get started, so I could focus on the content.
It also helped me to get better with proper databases – ORM was a blessing. I no longer had to remember all of the mysql_*
functions, and the tables were defined in the code! Migrations were finally tolerable, index management was easier, and it worked with MySQL, PostgreSQL, and SQLite at once. It was fun.
At this point, I considered switching to Linux. I knew I had to sacrifice most of the games I used to play2, but updating WAMP or a Python distribution took hours if everything was fine; otherwise, it could take days. Sometimes it broke randomly, and it was easier to format the entire disk and start fresh. For some reason, I vividly remember doing it six times one day.
Once I installed Debian, I was petrified. I couldn’t do almost anything with it, let alone get up to speed with programming. But after a few days of reading and crashing it constantly (ah, Nvidia!), I had everything to continue my journey. And when I needed one more Python library, I was not further than one apt
or curl
away from it. That allowed me to experiment with literally anything: networking, graphics, parallel processing, GUIs… It was fun.
Throughout most of that time, JavaScript was somewhere near, quietly. For most of it, I simply copied random snippets I found on the internet and mashed them into a decently-looking UI. Thanks to jQuery and jQuery UI, I made it work on all browsers. (It was a big deal to make it work on Windows and on Linux simultaneously!) I never really considered it an important part of the entire application, but it helped to make it more appealing. But then I found AJAX.
It was a whole new world. I no longer had to fiddle with ActionScript to make the website download the content without reloading! It forced me to rethink basically every single thing I ever did, as now I was able to make it interactive in the browser. I played with it for weeks and implemented a dozen different chat-like applications, including one that had both web and desktop versions. At this moment, I knew I had to learn more about JavaScript. It was fun.
In high school, we had both physical and electronic grade books. The latter’s interface was strongly limited for a student; while I could see all my grades, I couldn’t see any statistics, like the average. As a “chart person”3, I copied the grades from the browser into a text file, cleaned it up manually, and threw it at Excel. It worked but was both tedious and error-prone.
When I was searching for a solution, I learned about bookmarklets – literally a browser bookmark that executes JavaScript on the website you’re on. It not only allowed me to calculate all sorts of statistics in a single click in a browser but also made me like JavaScript even more. I made a few bookmarklets more for myself and my friends and was happy with the outcome. It was fun.
All that experience allowed me to earn a little in middle and high school. Most of that was thanks to a few random people on the internet that needed a bookmarklet, some Python script for work, or simply their homework finished by tomorrow. It wasn’t much, but it was honest work.
After high school, my friend and I wanted to enroll in a JavaScript course. Not because we wanted to learn more about it, but because they guaranteed a job interview once you pass. Something happened, and my friend couldn’t make it, but I did. After a long discussion, they didn’t enroll me.
I got hired on the spot.
It took me four solid months to realize that I was on the edge of burnout. Now, as I look at it, it was more than obvious – I was irritated for no reason, getting up for work became harder than ever, and even when the project I led at that time reached an important milestone, it didn’t mean anything to me.
There’s no point in going into details about what exactly led to it, but I have to assure you that it wasn’t anyone’s fault. It was more about the direction that my role drifted in. In other words, I was no longer doing the work that I wanted to, and that made me unhappy. It was not fun.
After I finally realized what happened4, I talked to my boss, and we agreed that I could use some time off from the project. Of course, it’s unfair to jump off the next day for the client and the team; we planned a timeline of what it could look like. My time on the project was reduced month by month, down to two, maybe four hours a week. It was mostly planning and code reviews, and only because I wanted to do so.
While off the project, I focused on completely different tasks. I got more into consulting, which is the most interesting thing to do. I love being thrown a huge codebase I’ve never seen and figuring out what’s (potentially) wrong with it! That sounds a little sarcastic, doesn’t it? Well, it’s actually true.
Auditing the first few projects was great! I not only got to see how different teams approach similar problems but also how important team standards are. Honestly, I knew that already; I saw it in the teams I was in. But when you fast forward through a dozen teams in a month, it really puts you into perspective.
Besides auditing and consulting, I focused more on the Open Source Group I’m leading – we started working on v2 of uniforms
. It wasn’t as important as v3 almost a year later, but we did a lot of groundwork and planning only because I was feeling it yet again. Crazy how productive happy people are, huh?
Half a year later, I felt like I could get back on the project. I wasn’t pressured to do so; actually, it was the opposite. Still, as I learned to “read myself”, I felt encouraged and ready to try again. A few meetings defining my new role later, I was back on track.
Because I never fully left, there was no need to catch up with a lot of things. I continued one of the features I started before the break, but this time it was different. I was not only the person implementing it but also defining how it should work, look, and feel. I was in charge, fully. Of course, that’s far from a “standard” programmer’s work, but I wanted to give it a try.
The first version got released, and users were extremely positive about it! The amount of happiness it gave me was enormous. I remember being on a call with one of the users and hearing their ideas and comments on how they’d like to see it improve – they were honestly interested in my work!
That was the time when I realized how good the company and the project I was in were. The former helped me to change the things I was working on only because I wanted to; the latter let me take over a feature that literally made up more than half of the roadmap at that time. It was fun.
I’m thankful for the whole story. It hit me hard, but I was in a good enough place in my life then; enough to learn from it and grow throughout the process. Now, do I think it’s a universal truth? Hell no. But it may help, I think.
Thanks to what happened, I do care about the psychic state of a team more. It sounds trivial, but making sure that people you work with feel happy is crucial, and there’s no way around it. If you don’t know where to start, just talk to them.
Try keeping it fun. If needed, seek help. We’ll make it.
Most of them were not sophisticated enough to focus on the language itself but rather on blaming it for all of the poorly written services. Boy, it was so easy to get admin access back then!
Gaming on Linux today is incomparable to what it once was. Thanks to Wine, I can play basically everything I want. There’s also Valve’s Proton, but I’m not a Steam person myself.
I love charts. But just being presented with the data doesn’t make it for me. It has to be thought through, especially when the dataset is hard. Small things like annotations, value-dependent ordering, correct scale, or even a different color palette do have a huge impact. Data visualization is a thing.
I probably wouldn’t make it “on time” if it wasn’t for a few people. Having a second opinion on your own behavior is surprisingly important.