About Mal

Who Am I?

This is always the toughest question to answer. How do you distill what makes you you into a byte-sized nugget for people to grok? You kind of can't, not without losing a ton of detail, though I'm sure you've already picked up on part of what makes me me in the choices I've made for the presentation of this site so far, or maybe in the way that I write, or perhaps in the way I'm rambling and not really answering the question posed by the heading above.

I love a lot of things in life. I'll share a few below.

Music

I love music, especially metal, and especially Meshuggah. I had known about Meshuggah for a while before I actually fell in love with their music, which happened when I stumbled upon Yogev Gabay's two-part analysis of Meshuggah's "Bleed" from their album ObZen. I had heard this song before but I had never really listened to it all that closely; I just assumed it was gallops for seven minutes straight. What a fool I was. Yogev's video introduced me to the world of music theory as seen through the lens of rhythm. I instantly fell in love with polyrhythm and polymeter, and it has influenced all of the music I've fiddled with or created since.

I listen to other things too but it's mostly Meshuggah.

Yogev Gabay's analysis of Meshuggah's "Bleed", part 1

Yogev Gabay's analysis of Meshuggah's "Bleed", part 2

An amazing video about Meshuggah's rhythms by Metal Music Theory

Meshuggah's Catch Thirtythree is my all-time favorite album

Programming

I started out hacking at custom stories for Amnesia: The Dark Descent, none of which I ever finished and are all now lost to time. I remember sitting there using Notepad on Windows 7 back around 2010, not at all understanding what was going on when trying to script level events and interactions. Eventually I took my first programming course in Visual Basic during my sophomore year of high school, then the AP computer science course in Java during my senior year. These were the first courses I ever actually cared about in school. I went on to get a computer science degree and graduated in 2019, then moved to Chicago to start my career as a developer at a web tech consulting company. I have been working in various levels of web development ever since.

I'm starting to get back into programming as a hobby (i.e. outside of my job), and I think I've come to realize that I don't really care for web development professionally. I would like to do something lower-level that involves a deep understanding of how computers actually work: game engine development, some facet of cybersecurity (appsec or netsec, perhaps?), OS/kernel development, browser development (?), or programming embedded systems or device drivers. Over the past few years, though, I feel as if I've let my core programming skills and computer knowledge actively degrade. In an attempt to remedy this I've picked up and been reading (or intending to read) a few books that I'll list below.

As an aside, I do own physical copies of all these books. PDFs and eBooks are great, especially when you can find them free online, and they do save a lot of space, but I prefer the experience and tactile sensation of reading the actual, physical book.

Code: The Hidden Language of Computer Hardware and Software (2nd Edition) by Charles Petzold

This is a wonderful bottom-up introduction to computers and how they work. Rather than starting with a high-level, dynamically-typed language like Python or JavaScript, this book starts by talking about Morse code. It introduces the concept of encoding and transmitting information in various ways and gives a simple overview of electric circuits and how they work. After this point you'll become familiar with the basics of Boolean logic and learn how we can encode complex logical expressions into electric circuits by constructing logic gates from physical components such as switches and transistors. Eventually you'll have walked through the construction of a very simple CPU and how it's able to read and execute software instructions from RAM.

I had a blast reading this book. It's 480 pages and I think I read it in about a week, though if you pace yourself (unlike I did) it could take about a month, especially if this is your first foray into computer architecture. There are few errors (one notable one is an example of a logical AND or OR operation that is mislabeled) and the writing style is fairly easy to follow. Chapters 19 through 23 or 24 walk through the creation of a CPU and are easily the densest and most difficult chapters in the book, so if you can get through those you'll be in a very good place if you want to delve deeper into computers.

If you know someone who is interested in learning about computers or computer science this book makes a great gift.

Modern Operating Systems (4th Edition) by Andrew Tanenbaum and Herbert Bos

This book is all about -- you guessed it -- modern operating systems (or at least what was considered modern as of 2014), the software that directly manages hardware components and provides a set of abstract interfaces for programmers and users to utilize. Most chapters introduce and delve deep into a single core function of an operating system: memory management, file systems, I/O, and processes, to name a few. You'll learn about the history behind each, the hardware that enables it, and the software that runs it. Further, there are two case studies focused on Linux and Windows 8, respectively, near the end of the book that provide concrete examples of the theory introduced prior.

This is just a straight up textbook, so it's a harder read than Code: Hidden Language. It's also massive, sitting at 1027 pages excluding the bibliography and index. There aren't any errors in the book that I've noticed aside from some minor typos, though the authors occasionally structure their sentences in weird ways which can make some parts difficult to understand.

I started reading this book immediately after I finished Code: Hidden Language and I believe the latter provides a decent foundation for being able to understand most of what is discussed. Having some knowledge of C and assembly code will help immensely since operating systems and device drivers have to interface with hardware components at the lowest levels.

A free online copy of the book can be found here.

Game Engine Black Book: DOOM by Fabien Sanglard

When most people talk about DOOM's engine, they like to discuss how it renders graphics. More specifically, they like to talk about binary space partitioning (BSP) and, perhaps to a lesser extent, diminished lighting. While both of these are impressive, especially given the hardware of the time, they're definitely not the full story.

This book gives an overview of the engine as a whole rather than just its graphics pipeline. Not only does this talk about details of the engine itself, but it also walks through the hardware of the time such as the NeXT computers on which DOOM was developed as well as the history of the game's ports to various platforms and the challenges that came with them.

Essential Mathematics for Games and Interactive Applications (3rd Edition) by James M. Van Verth and Lars M. Bishop

As part of getting back into programming as a hobby, I started getting into some very simple game development, mostly using Godot. One of the issues I keep running into, however, is that I don't remember much about vectors (the math ones, not the data structure ones) or linear algebra. I could just look online and copy/paste code, tweak it, and just take shots in the dark until I get the effect I want, but I would much rather be able to reason about the domain of the problem I'm solving and come up with the solutions myself. Or, at the very least, if I do grab a solution from online, I want to be able to fully understanding what it's doing and why it works so that I can engage in more directed experimentation rather than floundering my way to a result.

This is another book I haven't had a chance to read yet. It talks about way more than just vectors; it discusses floating point operations, collisions, a bunch of stuff you'd see in a college-level computer graphics course such as perspective transformations, etc. I'm probably going to be taking actual notes with this one. Surprisingly there aren't any problem sets even though it's basically a math book. One cool thing is that it includes the software implementations of some algorithms in C or C++.

You'll probably want to have a stable foundation in algebra, geometry (high-school level), trig, differential calculus, and integral calculus.

You can find a free PDF of the book here.

Introduction to Algorithms (4th Edition) by CLRS

This is actually the first book I ordered around the end of first quarter 2023 when I decided I wasn't as skilled as I'd like to be as a software engineer. I still haven't finished this book. I started out fairly strong, but I quickly got stuck on the analysis part because the last math I had really done was back in 2018. Since I really wanted to understand not only the algorithms themselves but also the spatial and temporal analyses of those algorithms, I took a detour to Khan Academy to refresh myself, starting at college algebra and working my way to integral calculus. Some stuff ended up happening and my return to this book fell to the wayside, but I still view this as an obstacle that I will eventually return to and conquer. After I review my discrete mathematics and probability again. And maybe multivariable calculus because that's the course that kicked my ass back in college and prevented me from getting a math minor.

Anyway, it's all about algorithms and analyzing those algorithms. If you're going to get into computer science or software engineering, it wouldn't hurt to know a few of these, even if you eschew the actual analysis part and just memorize the big O time complexities. You'll probably pick up on some data structures along the way since data structures and algorithms tend to go hand in hand.

Video Games

There are definitely a lot of things that I would like to go into depth about here but it would probably take longer than I like for a first update to this site. I grew up on the sixth through the eighth console generations, though at some point in the middle I did get way more into PC gaming. I've spent many thousands of hours playing many hundreds of games, and gaming in general (D&D, for example) is the primary way I've connected and bonded with friends throughout the years. I have a lot of opinions on the state of modern AAA games, most of them fairly negative.

My favorite game is probably Divinity: Original Sin 2.