Dickinson's Computer Science Curriculum
Leah Goldberg | March 20, 2023


Reflective Blog Post: Dickinson's Computer Science Curriculum

College is a way for people to learn about topics that they are interested in and grow immensely through a variety of academic and personal experiences. Thus, it makes sense that students take the time to research colleges and carefully decide where to apply to, and which one to go to. Two of the main reasons that I decided to attend Dickinson College is because of its liberal arts education and the small class sizes that make it easier to build relationships with my professors and peers. Through the variety of classes that I took, especially during my first and second year, I feel that Dickinson has achieved its mission of providing me with a useful, innovative, and interdisciplinary education and has consequently helped me reach my personal goals.

Dickinson College Old West Buidling | Dickinson College
I am currently a Japanese and computer science double major, however it was not always my intention to study computer science. I entered college with the desire to major in Japanese and biology, with the hopes of pursuing my interest in marine biology. However, after reflecting on my interests during the winter break of my first year, I decided that I wanted to find something else that excited me. To figure this out, I took classes covering a variety of subjects including philosophy, psychology, sociology, and computer science. My introduction to computer science was COMP 130, taken remotely due to the COVID-19 pandemic. I had never taken a computer science course before and had very little knowledge on the subject in general. Despite the difficulties of taking COMP 130 during the pandemic, I found out that I really enjoyed the logical and creative aspects of programming. From that point forward, I have continued taking computer science classes, and now here I am today, just months away from graduating with a degree in computer science. Reflecting back on my time as a Dickinson student studying computer science, I believe that the classes I took managed to fulfill most of the goals set by the curriculum.

Through the core classes of the major, I have reached the technical goals of the curriculum that include understanding concepts such as data structures, algorithms, computational complexity, computability, and abstractions. From the very start with COMP 130 and COMP 132, I learned the fundamentals of programming which included the syntax of Python and Java, how to write functions and organize code, and about the benefits of well commented code. I remember in the very beginning of COMP 130, I didn't even know what a “comment” was in coding, or how to write them. Looking back, commenting code was a very basic concept and I remember feeling a bit embarrassed about asking the question in the first place. However, as this was an introduction to computer science, my professor warmly and enthusiastically answered my question, which created an atmosphere where I felt comfortable asking questions.

In COMP 132, another introductory class taught with Java, I recall being introduced to the ideas of polymorphism and data structures such as linked lists. The labs and homeworks for that class were engaging and did a good job at reinforcing the material that we learned. I especially remember our final lab, which gave us the opportunity to create our own Java class hierarchy concerning an appointment making system. This was the first time that we were not given any starter code, and the assignment was set up in a way where we implemented our initial idea the first week and then revised it based on feedback for the second week. Even though it was a small project, I felt proud to be able to create something completely from scratch, which boosted the confidence I had in my programming skills.

Java & Python | leverageedu.com
In the higher level classes, specifically COMP 256 computing abstractions, COMP 314 computability and complexity, and COMP 332 data structures and algorithms, I was able to further my knowledge of the fundamentals of programming and learn about how computers operated in a more general sense. I personally found computing abstractions to be a very interesting and engaging class, as it gave an overview of how computers were built from 0s and 1s that represent an abstraction of electrical signals. In that class, I particularly remember that learning about and working with lower level languages, such as assembly, helped solidify my understanding in how computer programs worked. In both the computability and complexity class, and the data structures and algorithms class, my knowledge on Big-Oh notation, well known computer algorithms, and types of computable programs was furthered. These two classes were two of the most difficult classes for me, particularly COMP 314. Despite this, I remember COMP 314 in particular sparking my interest in the P vs. NP problem. This inspired me to read parts of a book mentioned in my COMP 314 textbook titled The Golden Ticket: P, NP, and the Search for the Impossible by Lance Fortnow.

In addition to the technical goals of the computer science curriculum, I have felt that the courses I took met some of the goals concerning softer skills such as problem solving and working in teams. The computer science classes at Dickinson heavily emphasized groupworks to encourage strengthening our communication and cooperative problem solving skills. In the introductory level classes, we had weekly labs. Although group work was difficult sometimes, mainly due to communication issues, I believe that the heavy emphasis of group work early on helped us foster our abilities to work with people in a technical setting that may be helpful in pursuing a professional career in computing, and more generally, any career.

In the upper level classes, group work was easier to do since most people had the experience from the lower level classes. I remember two particular instances where I felt my partner and I pushed each other to grow by helping each other understand different computing concepts. One was in a lab in computing abstractions about writing our own interpreter for a made up programming language. I remember my partner being patient with my initial frustration of the lab, and helping me debug our code so that it worked. That experience helped me appreciate what a second pair of eyes can do in terms of reviewing code. And the other extraordinary group work experience was working with a partner for a database class to read and present a research paper about database systems. That was the first time that I had read such a technical research paper, and both the instructor and my partner were able to support me in understanding such a technical paper.

Aside from learning through group work experiences, Dickinson’s computer science curriculum has helped me develop my technical communication through various writing assignments. Two that stand out to me are creating a metaphor for the concept of web caching in my computer abstractions class, and creating and writing documentation on a merge sort algorithm in my data structures and algorithms class. The former allowed me to develop abilities to explain technical concepts in a non technical way, and the latter made sure I could write about a technical topic clearly and concisely. Furthermore, engaging with open source projects has also furthered my networking and communication skills, by giving me a sort of “simulated work environment” without the pressure of achievement, as long as I showed I was learning and making my own progress.

Collaboration | Medium
Generally speaking, I believe that achieving the goals of the computer science curriculum is consistent with the college’s mission of providing a useful, innovative, and interdisciplinary education. This is specifically emphasized in goals set by the computer science senior seminar of gaining an understanding of the impact of computing, and the social, legal, and ethical issues raised by computing. For me, the senior seminar discussion sessions have provided a safe space for students to talk and respectfully debate about a variety of computing topics. These discussions are not only informed by assigned readings, but by the personal experiences of my peers which opened my eyes to several new perspectives. Additionally, these discussions remind me that the field of computer science is not purely technical, and that there are many social, legal, and ethical impacts of computers as well. This multifaceted way of looking at computer science certainly achieves the college’s goal of providing an interdisciplinary education.

Last of all, both Dickinson’s goals and the goals of its computer science department has helped me towards achieving my own personal goals for college. My goals for myself in college were to make connections with several types of people, take advantage of the opportunities presented to me, find out what interests me, and grow into a more well-rounded, confident, and thoughtful person. Through just being in my classes and all of the group work, I have met people from a variety of different backgrounds. I was encouraged and inspired by the amazing computer science professors to pursue my newfound interest in computer science, which has presented me with memorable opportunities that allowed me to grow into a more well-rounded person. These opportunities include being an undergraduate researcher as part of an REU program over the summer and working with Dickinson’s academic technology specialist to develop chatbots to help Japanese language learners practice basic conversation skills. In all, I am very thankful to both my professors and peers who have contributed to my computer science education at Dickinson by encouraging and supporting me through my journey.

End.