Building My ASCII GIF Generator
November 09, 2025
Inspiration / Motivation
Towards the end of my five years at Cal Poly, I stumbled upon low-level programming and computer science theory. Specifically, I took CSC 225 and 357, Intro to Computer Organization and Systems Programming, during the winter and spring quarters of my final year. I was often told that “low-level programming” and “computer theory” weren’t necessary or were optional to become a software engineer, and as a stats and business student, I believed it at face value.
While I understand why some people say these topics aren’t essential, I now believe more emphasis should be placed on them. When I told CS students I was taking these classes purely out of curiosity, I received the same puzzled look each time, as if wondering why I would do that to myself. Many would say things like, “Yeah, those are just classes you have to get through,” or “You don’t use that in industry.”
This sentiment is understandable, if you plan to be a front-end engineer, you don’t need a deep understanding of operating systems, but having a baseline knowledge will never hurt. These classes have a well-earned reputation for being challenging, yet I’ve realized through my internships and research that simply knowing how to “drive the car” isn’t enough. When my code broke, especially while using PyTorch, I often found myself searching online for hours, and as a last resort, pulling the LLM slot machine arm and praying. Having a deeper understanding of how things work under the hood will help turn confusing jumbled stack traces into logic trains you can follow and understand.
Learning low-level programming doesn’t mean you’ll instantly understand every stack trace, but it does help you grasp what’s happening under the hood at a much deeper level. I’ve only just begun to realize how little I truly know about operating systems, low-level programming, and computer science theory, but even this small exposure has completely changed the way I think about and approach coding.
TLDR
Taking low-level programming and systems classes late in my degree changed how I see programming. Understanding what happens under the hood has made me a more thoughtful, intentional programmer. I encourage anyone taking this to seek out lower level programming / deeper conceptual classes either in their curriculum or through self study.
Project Description
I recently worked my way through A Tour Of C++ to gain basic syntax skills and wanted to put them to use. After some thought, I decided to make an ASCII Art Generator! This generator allows you to load any PNG or GIF and have ASCII art spit out onto your terminal.
Example
See below this satisfying cube loop gif.
Run this through my script, and Voila!
While far from perfect, this project was a fun way to dive into C syntax, despite reading A Tour Of C++, and get exposure to many major parts of C.
Learning
With my background in Python and R, before taking CSC 225 I had no idea what the stack and heap were beyond data structures. Having to manually manage memory with malloc and free was frustrating at first, but it forced me to focus more deeply while coding in C. Not having many built-in data structures by default meant I had to get creative, at one point, I used a double char pointer to allocate a list of strings with variable sizes.
Seeing how much goes on behind the scenes in a language like Python was eye-opening. It also gave me insight into why Python operations can be slower, and why Python is, in many ways, evolving into a C wrapper. I still love coding in Python, but there’s something uniquely satisfying about writing in C. So if you haven’t ventured into the land of segmentation faults yet, I highly recommend it. Along the way, I also learned how to handle file input, create Makefiles, and use gcc.
If you’re interested in seeing my imperfect and beginner-level C code, you can check it out on GitHub: CFrames
Takeaway
As you’ll see if you visit the GitHub link, my code is far from perfect and doesn’t always follow the best design practices in C. While that’s definitely a drawback, it’s also a beginning. In the spirit of my first post on this blog, the most important thing is simply to start, no matter how small your first step is.