ASCII filter I coded in C# and HLSL

WP1 Revised

Matthias Horgen
6 min readNov 17, 2020

What is programming? Many people may see it as a monotonous task, boring to both learn and do. To me, programming is a source of knowledge, uncoupled from my formal schooling, that I came to learn myself. It is a puzzle solving marathon and a medium through which I can express my imagination. While learning to program, I improved my problem solving skills, expanded the breadth of my creativity, and picked up essential organizational habits that I seriously lacked before. Moreover, I’ve been able to apply this knowledge that I gained to schoolwork and other hobbies, which helped me gain better understanding of them and learn the material faster.

I first started programming because I wanted to make video games, something that was as far removed from school as possible. I was drawn to game development because I loved video games, and always found myself wanting to add new mechanics to games I’d play. I was thirteen when I wrote my first line of code. The line was written in Python, a simple programming language that reads as close to English as is functionally possible; it was easy enough for my young brain to grapple with. I started off making bare-bones projects: command line calculators, code to solve programming puzzles, a character that moves around on the screen. As my confidence grew, I eventually started working on creating an actual game.

Some game prototypes
Procedural gas giant I made in the game engine Unity

After two or so years of solely focusing on game development, I decided to explore different avenues of programming. I got into creating generative art, a type of art in which one uses certain types of coded algorithms to generate images. It was a natural deviation from games. The genre shared the visual appeal: I got to actually see what my code actually looked like. It was that element of aesthetics that made me like it as much as game development.

Fractals generated using Java

Another area of programming that I explored was machine learning. I was interested in it as a recreational endeavor outside of school, but I discovered that there included quite a lot of “schoolwork” required to learn it. I had to learn a bunch of notation and higher level math to really understand what was going on and solve problems efficiently. Since then, I’ve been jumping around from theme to theme, trying to keep myself engaged and curious by maintaining the variety in the projects that I did. As I continued to learn, I was surprised to find the intuition that I gained from years of programming blending into other aspects of my life.

Results of trying to teach a computer how to draw numbers

Recently, I’ve learned about a teaching approach called project-based learning (PBL for short). The main idea of PBL is “learning by doing”; knowledge is acquired through continuous work on projects. Formally, it is “a student-centered pedagogy…in which students acquire a deeper knowledge through active exploration of real-world challenges and problems…PBL contrasts with paper-based, rote memorization…by instead posing questions, problems or scenarios.” (Wikipedia). Learning about PBL gave me a term to describe my programming journey, and understand why it was so effective. PBL emphasizes the importance of student choice and voice (Larmer, 2010). Working on projects that I was curious about gave me motivation to learn relevant knowledge. Moreover, this knowledge happened to be applicable to disciplines outside of computer science.

As I got better at programming, I found myself getting better at problem solving in general. Problem solving is ingrained in the programming process. Without it, programming is restricted to writing short, simple programs that have no new, novel ideas: droplets of code in the boundless sea of possible programs. But I wanted to create a variety of unique and interesting programs. Motivated by my creativity, I constantly pushed the bounds of my programming skills. And in doing so, I had to solve a bunch of problems, in both the writing of my code and the theory in which it was based, that were new and foreign to me.

I was soon to find that my problem solving and critical thinking skills that I gained from programming were helping me perform in other subjects as well. My grades in my science classes benefited from this the most. I was more proficient at revising and correcting problems that I got wrong on tests and homework. The process of backtracking through my logic to find the error in the worksheet was similar to debugging. Correcting my work now felt more natural and intuitive. Also, I could apply my experience at creating programs, while being limited by resources and constraints, to the designing of labs and science projects with limited equipment and material.

Creativity is another skill I’ve been able to develop on my programming journey. My creativity was stretched and strengthened by the solving of problems that I had already been doing; creativity and problem solving are deeply entwined. Also, through the coming up of ideas of programs to create, I developed a sense of aesthetics. I was always drawn to create programs that produced a visual output. Through programming, I was able to express my creativity in a way like no other before; it was a creative way to be creative. And it was through this process of expressiveness, that it seems like I’ve strengthened my creativity much so. Now, I feel more comfortable with my imagination, to the point where being creative feels almost effortless.

I also learned valuable organizational skills while working on many programming projects. A decently-sized project takes quite a bit of organization to maintain. This I learned the hard way, through many failed attempts at trying to implement grandiose ideas while being lazy and neglecting to organize. From my mistakes, I’ve learned to adopt habits that make coding large projects a lot easier in the long run. If I didn’t, I’d be spending more re-figuring out what old code did and how everything fit together. Over time, these habits led to better organization in my life outside of programming. The urge to keep my source code clean, structured, and conforming to standard conventions made it easier to format word documents for academic and informative papers in my English class. I became accustomed to adding comments to all my programs, clearly explaining what each function does, the intent behind esoteric lines of code, and why my future self should not touch a fragile, barely working subroutine so that he doesn’t accidentally break it. This led me to start using comments in the drafting process when writing essays and papers, which streamlines the process. I maintain an uncluttered virtual workspace through the use of organized folders and certain naming conventions for certain files. The benefits I reaped from a clean virtual workspace were enough for me to start organizing my desk and physical workspace in a similar way. Using planners to remind myself of what I need to code next has naturally generalized to me using planners for school and academic work.

Programming has provided me with such an engaging way to learn critical thinking, problem solving, and creativity. When I began, I had no idea that this simple hobby of mine could teach me so much about other aspects of life. Through programming, I was able to become a better learner. This is why learning to program has been foundational to my personal intellectual journey, and will be so for years to come I’m sure.

Works Cited

“Project-Based Learning.” Wikipedia, Wikimedia Foundation, 2 Sept. 2020, en.wikipedia.org/wiki/Project-based_learning.

Larmer, John, and John R. Mergendoller. “Seven Essentials for Project-Based Learning.” Seven Essentials for Project-Based Learning — Educational Leadership, 2010, www.ascd.org/publications/educational_leadership/sept10/vol68/num01/Seven_Essentials_for_Project-Based_Learning.aspx.

--

--