Reflecting on 8 months of full-time self-study
After having worked as software developer in the industry for the last six years, I resigned 8 months ago to take a sabbatical. I always dreamed of taking some proper time off for doing computer science self-study and this year I finally made it happen. Apart from that, I also wanted to take a break from working full time in order to explore different work models for myself. At the time of this writing, both are ongoing topics. Now that 2019 is almost over, I found it to be a good time to reflect on how my sabbatical went so far, what I have learned about myself and where in this adventure I am at the moment.
Allow me to tell you a little bit about my professional background first, so that you can understand the context of where I am coming from with all this. I have been interested in computers since my early teenage years. I built some smaller websites here and there, and did a little coding on the side just for the fun of it. The outcomes of that weren’t particularly bad, but I don’t count it towards my professional experience. It was basically just a hobby, nothing that I was extraordinarily ambitious about.
After graduating from secondary school1 I studied mechanical engineering, mostly because I was interested in technology and applied sciences, which I was both genuinely eager to dive deeper into. During university my interests shifted though and I happened to slip into an engineering project, in which I – more or less by chance – took over the software development part in the construction of a prototypical research apparatus. Working myself into that was a tough challenge, but driven by curiosity I wanted to get a glimpse behind the curtain of what professional software development looked like in the industry. The learning curve was steep and I enjoyed it so much that I continued to work as programmer for that company. Later on I switched fields to the web, because I found that to be more compelling in regards to work processes and business applications.
It wasn’t easy to start off a career in the first place. On the one hand I have always been a strong learner so I knew that getting up to speed was only a matter of time, once I got a foot in the door somewhere. On the other hand my CV didn’t look all that convincing without a degree in computer science or much relevant experience. This situation was boon and bane at the same time though, because in order to make up for lacking expertise I learned some precious lessons about what it means to make yourself a valuable asset in the industry beyond the mere hard skills. I understood how important it is to get a solid comprehension of a particular business domain and to figure out effective ways to contribute to solving its problems on a broader scope. And I realised that a company is an inherently social environment, in which collaborative and communicational skills are profoundly important to making a successful impact.
My technical skillset is self-acquired for the most part. I worked hard for that and dedicated a decent amount of spare time throughout the years to build up my knowledge and develop my competences. I was never satisfied with “just coding stuff”, I rather aspired to understand how things work deep down and how they relate to each other. That way, I slowly but steadily established a conception of quality, developed a notion of what good craft looks like, and learned to reason about it with increasing confidence.
Today, I declare myself as being a professional software developer. This doesn’t mean I’m perfect, omniscient or that I know all the dodges. (Quite the contrary!) What it means is that I routinely take on ownership and responsibility for the work I am doing. I have a proven track record of solving problems and being productive, which I regularly received appreciative feedback about. I know what it needs to create useful and reliable software that profitable businesses can be built around. And yet, I always felt that I was missing something fundamental.
By tackling real-world problems and working myself into various technical domains throughout my career I have come in touch with many aspects of software development. I have, however, never systematically learned the basics of computers from the bottom up. While I use compilers and interpreters on a daily basis, I only have a rudimentary understanding of how byte- or machine code is actually generated. Although I have setup and managed distributed applications in decently sized cloud infrastructures, I wouldn’t be able to explain much about how the TCP/IP protocol stack works in particular. And despite having debugged tricky issues related to asyncronous data processing and eventual consistency, I don’t have particularly deep expertise of the replication mechanisms in distributed databases.
This was rarely a problem for me in practice, because I either learned about these things whenever I had to deal with them, or because I worked on higher abstraction levels anyway. Nevertheless, it bothered me deep down. Also needless to say that I suffered from the imposter syndrome countless times, especially in the beginning of my career. Books, which I bought whenever I wanted to get my teeth into a certain topic, continued to pile up at home. I just didn’t find the time and leisure to occupy myself with them besides a full-time job, which turned into an increasing source of frustration.
Therefore I decided to make a cut in order to address this issue and to dedicatedly focus on learning. The idea lingered around in my head for quite some time already and it became more and more tangible. Eventually rendering the decision was a great relief, despite the countless unknowns, and I handed in my resignation in spring. Since then, among other things, I implemented search and sorting algorithms in Scheme, dived into game development while creating a silly space shooter with a dear friend of mine and immersed myself in the innards of AVR microcontrollers. I don’t follow a systematic curriculum, my backlog of learning topics is more of an assorted collection containing things like computer architecture, programming languages or algorithmics.
My daily routines differ: I tinker with coding projects, study a book or watch online lectures – mostly it’s a mix of these three. But I also allow myself to take a few days off here and there to go on a climbing trip. I don’t have a fixed schedule for managing my time, I rather enjoy the liberty to drift along from one topic into the other, as long as I am sure that something substantial is coming out of it. (Which e.g. could be finishing off a book or completing an exercise.) So far, this approach has worked out for me, even though I haven’t made as much progress yet as I had initially hoped for.
Going to university wasn’t an option for me, by the way. I want to be in full control of my own curriculum, which is well facilitated given the exceptionally large amount of freely available resources. Other than that, I’m not necessarily interested in earning a CS degree.
Rethinking my work model
Apart from the goal to level up my hard skills, I also wanted to use the opportunity of this break to think over my current work situation and to explore different models. Even though I always enjoyed working in a stable team on a continuous product, I could never really settle myself down for the hustling treadmill of a 40h work week with a precisely numbered amount of vacation days per year. My idea is to try out working freelance in the future, which I’m currently about to prepare for. Since this is a whole new world for me that I haven’t had any touch points with so far, I’m glad that I am able to take my time in order to figure things out properly.
Another topic is my second job that I’ve been having since a couple of years now as instructor for rock climbing, mountaineering and outdoor education. Compared to my main job this is not nearly as profitable, but it is great fun and makes for a refreshing balance. Having more time at my disposal allowed me to intensify my activities there, which I wholeheartedly enjoy. In that regard I’m looking forward to the next year as well and am curious to see whether I can manage to reconcile both jobs in the longer term.
Making ends meet
Let’s talk money. The idea of doing a sabbatical is intriguing and not a single person who I talked to wasn’t excited about it themselves. There is, however, a flipside: the bills must be paid. Apart from a little extra income from my second job, I lived off savings for the last 8 months, mostly to pay for rent, insurances, food, and the countless miscellaneous things like internet service, gym membership or public transportation.
When my sabbatical started I often felt stressed because I virtually heard the clock ticking. Not having regular income means burning down savings, which the bank statements soberly prove in cold print at the end of every month. There is no illusion that I need to start making money again at some point and I could sense that hanging above my head like the sword of Damocles. Over time my perspective fundamentally shifted. Today I don’t perceive my sabbatical as “burning” money, I rather think of it as an investment into myself. I’m not quibbling here, I really do mean it like that. This sabbatical gives me the chance to develop myself professionally in a way that wouldn’t have been possible alongside a full-time job. Whether or not it will also pay off financially is not important to me, it’s solely about what I learn that determines the return-of-investment.
One thing that proved to be extremely helpful in preparation for this year was the fact that I maintain a thorough spreadsheet of all my regular spendings. This allows me to forecast how long I can autonomously live off a specific amount of money. Setting up such an overview needs to be done carefully and was a tedious exercise, but it rewarded me with precious confidence and turned out to be very accurate. Another vital factor for me is being deliberate about my expenses. I’m not radically frugal – I still go to concerts, buy sustainable food and do occasional (short distance) travels – but I uncompromisingly cut down on everything that I don’t feel provides enough value to me. In hindsight, my personal finance management was a key enabler for this entire undertaking.
Some people told me that they envied my guts to just quit and do my own thing. I have to say though, it doesn’t feel overly brave to me. Yes, it certainly required good preparation and a clear vision of purpose. But on the other hand, I also attribute a great deal to external factors that I have little influence on. Considering the current job market in software development, there couldn’t be better (read: less risky) times for such a venture. I’m not at all worried about not being able to get back into the job market at any time. I also don’t need to pay off student loans for the great education that I draw upon every day. And I was born into a safe and economically stable country, in which I have no less than all chances to shape my life however I want to. This year made me realise more than ever before how grateful I am to be given these invaluable priviledges.
While 2019 is almost over, my sabbatical isn’t. First off, there are still things left on my learning agenda that I haven’t sufficiently covered and that I’m still eager to look into. Second, coming to grips with starting as freelancer takes a lot of time. Admittedly, I also don’t rush myself here though, not just because I still want to focus on learning for now, but also because I’m still figuring out what I want to offer exactly and what the best starting point would be.
Keeping myself focused though, I’m confident to make good progress in reaching my goals throughout the next months. In any event, I look back on 2019 with satisfaction and am curious what the next year will bring. I sincerely hope that it’s going to be the same for you, whatever your plans are going to be.
I live in Germany, so “secondary school” is the “Gymnasium” in my case, which qualifies for university after a total of 13 years of schooling. ↩︎