My STEM Path: Computer Science
By Joey Kyle Stickels, Hamline University
When I was about 10 years old, I started spending many hours on my family computer playing with a tool and website called Scratch. This tool offered me a canvas which seemed to present near infinite possibilities. Despite its simple and easy to use interface, I could program surprising complexity with just a few visual code blocks. Ultimately, I really wanted to make video games. I dreamt up worlds and systems that I wanted to execute inside of Scratch. Over the next couple of years, I eventually figured out how to make scrolling backgrounds and basic object collision. There was something absolutely unbelievable in getting this program to work for me. And all this time, through these little projects I set out to complete, I was teaching myself basic programming and problem solving skills. Although I never completely finished any project, I certainly learned a lot about algorithmic thinking through Scratch
As I entered middle school as a kid with undiagnosed ADHD and learning disabilities, I was suddenly in completely over my head. I was constantly struggling to focus in class and keep up with assignments outside of school. Somehow, however, I could keep engaged with Scratch projects for hours on end, teaching myself new skills through independent learning. I had a thrilling feeling accompanying being fully engrossed in an activity, which was something I otherwise felt only while drawing pictures. The process of setting out with an idea in mind and accomplishing tasks while learning skills along the way was something I rarely ever encountered outside of my personal programming journey. I still encountered many obstacles, like spending hours debugging code or running into math I just didn’t understand yet, but these problems felt so rewarding to solve.
Eventually, I wanted to learn a “real” programming language. I set out to do just that many times - with very little success. I would get to the point of understanding the basic syntax of a language, but I didn’t know where to go next. For me, there was a huge gap between understanding the basic structure of code, and understanding how to solve any particular problem beyond telling the computer to print “Hello, World!”. I spent many years stuck somewhere in this stage, because it was very difficult to find resources. I wanted to make video games, but I just couldn’t figure out how to start. I couldn’t wrap my head around how I could break down the problem into steps that I could reasonably attack. No matter how much I planned the projects I wanted to complete, my goals seemed unattainable because the computer science seemed so intimidating.
During my freshman year of high school, I transferred to a project-based learning charter school in Saint Paul called Avalon. Ultimately, Avalon turned around my entire approach to learning, and made it possible for me to take control of my learning and feel successful in my education.
In high school, I started teaching myself the scripting language Lua to make small modifications to my games. Still, I continued to struggle with basic concepts in CS that made it very difficult to get anything to work. There was a large gap between what I was interested in doing and what I could actually manage to complete no matter how passionate I was about a project, I was still missing some basic foundational skills. I continued to feel intimidated by the massive world of computer science, without seeing a reasonable point of entry.
It wasn’t until I took Discrete Mathematics alongside an Introduction to Programming course in college that everything began to click into place for me. Suddenly, with the right resources and curriculum, I was developing algorithmic thinking skills that made Computer Science (CS) concepts much easier to understand. Programming transformed from a difficult topic I wanted to understand better, to an exciting tool that I could use to solve problems and learn. Overcoming the intimidation I felt after trying for years to wrap my head around CS was an amazing relief. Finally, I felt excited about what I was learning and I was building a toolkit that I fully understood from the ground up.
Outside of my college education, I have spent many hours independently learning about a number of CS-related topics. I continue to feel that thrill I first experienced as a child when I finally figure out the steps required to solve a problem, which also fuels my curiosity about what I can manage to do. Programming can also act as one facet of a creative outlet for me. Coming up with ideas is a creative exercise in itself, but concrete problem solving is also inherently creative. Completing a CS related project often requires a multidisciplinary approach, especially in software and game development.
Much of the time, CS is thought of as being just about programming. When we first think about learning CS, the obstacle seems to be just understanding how to read and write this new language of computer programming. Learning a programming language is certainly important to the discipline of CS, but it is very important to understand that this is not the singular goal. CS, above all, is about learning how to problem solve by manipulating new languages, and learning to do so effectively and efficiently. Understanding a programming language allows us to access a whole new world of problems and solutions - the domain of CS.
The most important skill we learn in an introductory programming class is the ability to think algorithmically. CS revolves around breaking down a problem into manageable chunks and figuring out the steps that need to be taken to solve the problem. This, in essence, is what an algorithm is; a list of clear, repeatable steps used to solve a problem. In reality, this idea does not apply only to computers, but to life in general. We often take an algorithmic approach to many tasks in life, especially those we deal with habitually such as opening a door or filling a car’s gas tank.
CS can be used as a tool to better understand many other disciplines. Given the ubiquity of CS applications in other disciplines and the growing number of digital tools many people use daily, CS education should be universal and accessible to all. However, there are glaring disparities in access to CS education, despite the numerous resources available. There are many resources available today that weren’t around when I first started my journey with programming, making many topics more and more accessible to anyone interested.
Access these resources in Joey’s Guide for Independent Computer Science Learning