The following is the statement of purpose I wrote to pursue a Master's of Computer Science at the University of Iowa. The primary goal of this statement was to separate myself, a scientist, from the engineer.
Discussions concerning Computer Science often touch on the fact that the job market is welcoming and profitable. This seems to be a primary motivator for many who are interested in the undergraduate major. The interests of prospective students are also often rooted in adolescent experiences of pulling apart family computers and figuring out how the various components work in concert. This was the case for me. At the most basic level, forming this skillset arguably helps one better understand that there is an order of operations at work within a computer—something nervously discovered while trying to debug an issue when tinkering with the family computer goes awry.
Understanding this order and using it to solve new problems brings a sense of satisfaction, motivating those who expand on these learning experiences to earn their undergraduate degrees in computer science. These people often become engineers and go on to fulfilling careers solving computer related problems. Others, myself included, seek to continue their education by becoming a Master of Computer Science.
I was a material handler at a factory until I was laid off in 2015. I used that opportunity to pursue a college education. I knew how to put together a computer, but I had never taken that knowledge any further. I earned an Associate’s degree in Web Development and Programming at Hawkeye Community College and discovered that I had a knack for both programming and scholarship. I took advantage of this momentum and continued my studies in computer science at the University of Northern Iowa. Having a good understanding of higher-level languages (procedural and object oriented), I had the urge to learn the lower level. At the time my means of articulating this was, “Wanting to understand the 1s and 0s of a computer.”
One fascinating component of computer science is that there are so many different ways to solve a problem. As a current teaching assistant for the university’s “Intro to Computing” class, if a student is struggling with a concept I am able to explain alternative pathways to a problem’s solution, providing the concept with further context. Learning the Boolean circuit model of computation allowed me to understand “the 1s and the 0s of the computer.” For me, it contextualized the high-level languages I’ve learned. It broadened my understanding of computer science as a science of abstraction.
There are a set of filters for those who study computer science. Passing one of these filters is an important milestone in developing one’s understanding of the science and one’s ability to recognize abstraction. These moments include being able to debug a deep-seated error in a program, intuitively understanding all object-oriented concepts, and grasping the Boolean circuit model and understanding how it leads to higher level languages.
Having a comfortable grasp of these wide reaching concepts allowed me to succeed at comprehending the upper level courses I’ve taken. Favorites include a course studying lambda calculus through the functional programming paradigm, a translation of programming languages course where I developed a compiler to explore syntactic and semantic abstraction, and an undergraduate research course where I studied the population protocol model of distributed computing. Each course presented new sets of problems and explored a variety of ways to solve these problems—each presenting opportunities to explore this science.
Graduation at the university presents a new opportunity. Many graduating students will go on to apply their skills to specific domains in their future careers. This is a valid option for me, provided the current job market remains bountiful.
My sights are instead set on a different opportunity. The University of Iowa is accepting applicants for the graduate school to start in the spring semester. This is a chance for me to continue my education and apply myself to the study of more focused domains at higher academic levels. I have interests in both the Algorithms and Theory and the Formal Methods and Programming Languages areas of emphasis to help shore up what I have already learned.
I also have an interest in teaching what I’ve already learned. Being a teaching assistant has been a fulfilling experience and is something I wish to continue. Pursuing an MCS will provide the opportunity to hone that skill and perhaps lead to the opportunity of earning a PhD.
Finally, I wish to continue my research on different models of computation. Using my research of the population protocol I’ve developed a simulator that is able to analytically examine the deficiencies provided by applicable algorithms. I believe the courses offered in the aforementioned areas of emphasis will provide me with the right toolset to extend the usability of this model and others.
There is no doubt that I would do well as an engineer. There is no doubt that the courses offered by the Master of Computer Science program would be advantageous for such a career. I see more value in the program as a means of further developing my growth as a computer scientist. It is through the University of Iowa that I want to continue my research while practicing my ability to teach it to others.
I was accepted.
Nearing a year of being at the university, I've really been leaning into being an instructor. I've been privileged to have been offered the task of teaching Computer Organization for the summer session. I accepted this task and found it fulfilling.
Being able to elegantly describe the material is a skill I've been developing. One of my primary influences is Carl Sagan, who had the uncanny ability to transcribe complex ideas for the masses. This is something I want to be able to do.