Systems Programming Journey | Background
I'm Kiire Constantine, the other of the blog 0xkiire where I blog about low-level systems and programming. I specifically interested in having a deeper understanding on how computer systems are organised and work under-the-hood beyond the abstraction layer that we often program against. My other interests include but are not limited to math, physics and games programming.
I started my programming journey as a young teenager who wanted to hack around on the web by creating websites and web applications. This nurtured my interest in web technologies and started my web programming learning journey, where I learnt html, CSS and JavaScript as any beginner would. It was a very terrible experience as it was my first time trying to learn stuff on my own without any previous experience or guidance from anyone. As time moved by I found FreeCodeCamp YouTube channel and with the past to-and-fro hooping to topics that I didn't even understand then started to make sense. After some time things clicked and I moved on to learn python with the solo aim to understand Django and build my own Full-Stack applications, which I finally archived. This was a less terrible experience than that of JavaScript as I had already laid ground for the fundamentals and was just learning syntax and a few back-end terms. After this, I learned C# and .NET and everyone was hyping it for enterprise scalability and cross-platform nature with the ability to share a code-base for web, mobile and IoT via the .NET runtime. I particularly found the .NET framework fascinating and fell in love with it. For learning C# I used Introduction to Programming with C# by Nakov and is one of the foundational books I would highly recommend.
After a long time of being comfortable creating web apps and mobile apps with the .NET frameworks, something weird started to happen, I realized I couldn't reason about whats going on with the code I write. Questions like how does the computer know this is a web app and not mobile?, why can't the python interpreter run my C# or JavaScript code?, Why can't my .exe file run on my friend's MACBOOK?, how does the computer even differentiate between python and C#?
After a long such for answers, it all lead me to systems programming or low-level programming. I continued with deeper research as these still didn't make any sense at all. After a very long time I find a blog post talking about how good the book Computer Systems A programmer's Perspective is when it comes to understanding computer systems. I bought a copy right away and started reading it, at the time every thing started making sense and I started to appreciate how computer work. I read this along side the C Programming Book and wasn't that of a hard thing until I reached pointers and dynamic memory management as this was in a very different dimension from the garbage collected languages I was used to previously. After sometime my mentality shifted and started to appreciate the beauties of manual memory management after a couple of segfaults, dangling pointers and buffer overflows. The journey continued and I came across David Petersons Computer Organisation and Architecture books, Operating Systems Three Easy Pieces, Programming From the ground up, Crafting Interpreters, Engineering Compilers and more that have true changed my perspective about programming and learned alot along the way.
Current Progress
I'm currently hacking on the Zig Programming Language1 and I'm creating my own web framework Zypher reflecting on the beginning of my journey. This is of special interest to me not only because I have learned a lot along the way but mainly because I couldn't reason out how Django and .NET MVC that I used to use everyday were engineered.
- A very opinionated and amazing low-level programming language that gives you all required premitives to exploit your cpu for maximum performance. ↩