Last year, I spent plenty of time studying software development and building my side projects in my free time.

As we step into 2024, I have decided to look back, review my progress and set goals for the upcoming year.

Books

In 2023, I read several interesting books about software development. These books didn’t just teach me more about computers and software; they also sparked inspiration, encouraging me to learn more about new ideas.

  • How Computer Really Works by Matthew Justice – By far, my favorite book this year. I wish I had read it earlier. The book covers plenty of interesting topics, ranging from low-level concepts like logical gates, S-R latch, binary operations, and how the CPU performs them, through memory, clocks, and hardware, to assembly, operating systems, networking, internet protocols, the worldwide web, and more!
  • Grokking Algorithms by Aditya Y. Bhargava – One of my favorite books that I read this year. It serves as a great introduction to Algorithms and Data Structures. The author does an excellent job explaining complex concepts in an easy and approachable way. This book has inspired me to continue studying A&DS next year and deepen my understanding of them.
  • The Linux Command Line by William Shotts – A great book that improved my day-to-day Linux workflow. The book introduced me to many useful commands and tricks. I wish there were more explanations about Linux inner workings and perhaps less emphasis on bash scripting. Nonetheless, I still learned a whole bunch about the Linux file system, permissions, and more.
  • Practical SQL by Anthony DeBarros – I picked up this book as part of my effort to study low-level technologies and explore GIS along with Postgres’s geospatial features. It was not a miss! The book is incredibly interesting. It inspired me to create a project that uses raw SQL without Prisma or other ORMs. However, I wish it covered how Postgres works in general instead of just listing features. I suppose that’s why there is word “practical” in the title.
  • How Internet Really Works by ARTICLE 19 – This compact book with amusing illustrations was a delightful read. The first half is insightful and engaging. I gained a lot of knowledge about protocols, networks, and DNS. However, the second part of the book shifts its focus to censorship, security, community, and moral (?) aspects of the internet – not exactly what I was looking for when purchasing the book.

Tutorials

  • Data structures and algorithms with python – I’ve been following just one tutorial this year, but haven’t completed it yet. While the tutorial isn’t bad, I’m realizing it’s not the optimal way for me to study. The explanations are often too verbose and lengthy. It’s cumbersome to skip or jump back and forth to find the specific moments I’m looking for.

Projects

I dedicated a lot of time to my side projects this year. Unfortunately, I wasn’t able to bring any of them to a level where I feel comfortable sharing or showcasing. This is one of the most dissatisfying aspects of my progress this year.

While my primary motivation for working on side projects is to test ideas, learn new concepts, and apply knowledge gained from reading books, it is crucial for them to produce visible results—results that I can showcase.

For this to happen, I need to put more attention on planning the scope and outcome of the project before I start working on it.

I will also need to stop starting new projects before finishing the old ones, or constantly changing underlying technologies. These were the main reasons why my side projects are not completed.

Let’s take a closer look on my side projects overview

  • Architecture Office Review App – This is my longest ongoing project that underwent numerous technology changes. I am not giving up on it yet, although it is currently on pause. This project is essentially a Glassdoor copy but designed exclusively for architects. It uses SvelteKit, Postgres, and Prisma. I set up a Linode VM and deployed both the production and staging versions for a while. The project includes build and migration CI/CD pipelines.
  • Game rating app – This year, the office where I work was equipped with a tennis table. I decided to build a small app to rank players, and I managed to create it over a weekend using SvelteKit and Firebase.

    I decided to add one more feature – a tournament. This required modeling a double-elimination tournament structure, which turned out to be a rather complex task. I managed to create a tournament builder that constructs the tournament structure recursively, assigns players to matches, and allows adding game results. The next step will be to support saving tournament results to the database and building an existing tournament from the database.
  • This Blog – Initially, I built this blog using SvelteKit and Firebase. I used Markdown to write posts, but this approach turned out to be quite limiting as I needed more than simple Markdown. I decided to set up WordPress and use its REST API with the existing SvelteKit frontend. This turned out to be a very easy and fast solution. I removed the Firebase dependency, set up a WordPress instance on Linode, and adapted my SvelteKit app. I completed it all over one weekend.
  • Architecture Map – I started this project to learn Leaflet and practice using PostgreSQL and Prisma. The project includes Firebase authentication, a form for adding buildings to the database, a Leaflet map with clickable markers, clustering, and a building overview side panel. Additionally, the project features a pipeline that builds and dockerizes the app, updates the image on the server, and runs migrations.
  • GADM reverse geocode REST api – This project is inspired by the ‘Practical SQL’ book. The idea is to create a REST API that supports reverse geocode queries for the open-source GADM dataset. The main challenge lies in adapting the GADM dataset to PostgreSQL and supporting relations between tables of various administrative division levels.

Blog Posts

I wrote just a handful of posts this year. They are mostly notes from books I was reading.

I found that this style of taking notes is rather time-consuming and perhaps not the most efficient when it comes to learning and memorizing concepts.

In the coming year, I will try to focus more on writing posts that describe the progress of my studies and projects. I aim to write more short posts with updates on my studies.

2024 – Plans

In 2023, I decided to focus on building a strong foundation of my software development knowledge instead of pursuing the latest trends and frameworks.

I aim to learn more about computers, hardware, the internet, networking, databases, algorithms, data structures, and distributed systems.

I will continue this path throughout 2024.

  • Practice: C language. I will spend the first six months of this year learning the C language. This should expose me to many important concepts, such as pointers or memory allocation. I will combine it with my other studies and implement several algorithms and data structures using the C language.
  • Practice: Go Lang or … – I will use the second half of this year to learn one of the modern compiled languages like Go, Rust, Zig, or Scala. I will continue my algorithms and data structures studies using this language.
  • Practice: Programming Paradigms -I will embark on a programming languages ‘speed run’ and create a simple CLI app (e.g., todo) with a variety of languages: C, C++, C#, Go, Lisp, Java, Haskell, Rust, Assembly, Zig, Scala. I am confident that this exercise will yield interesting observations, broaden my horizons, and provide me with a better idea of which modern language I want to study during the second part of this year.
  • Concepts: Docker / Kubernetes – I’m already familiar with the foundations of Docker. I am planning to read a book that will introduce me to Kubernetes.
  • Concepts: Testing – I haven’t been exposed to testing yet. I will use free online resources to learn about language/framework-agnostic ideas and concepts related to software testing.
  • Book: System Design Interview – I am looking forward to reading this book.
  • Book: How Linux Works – Reading this book will be a continuation of my operating system study after ‘How Computers Really Work’ and ‘The Linux Command Line’
  • Book: Cracking Coding Interviews – I will use C and Go-lang to practice the examples from this book.
  • Project: GADM REST API – with this project I will continue practicing my knowledge of SQL/Postgres and Go Lang
  • Project: Game Ranking App -I will complete this project and use it as an opportunity to learn about web development testing.
  • Project: Architecture Office Review App – I want to pick up this project again, define MVP and deploy it until the end of 2024.

The list is rather ambitious, and I am sure it will be difficult to complete all the points. I will prioritize the most interesting and valuable positions, and the rest will need to wait for 2025!