My interest in coding began in the fall of my sophomore year when I enrolled in a political science course called Introduction to Data Science. I hoped that developing analytics skills would enhance my abilities as a researcher. Throughout that fall, I devoted more time to my R homework than anything else, and yet, I never felt drained. I found great satisfaction in the creative problem-solving that coding demanded. When I took Advanced Data Science the following semester, my desire to continue coding only grew stronger.
Feeling boxed in by Humanities, Finding a way to study computer science
After spending a summer conducting political research for Penn’s Computational Science Lab, I seriously contemplated pursuing a CIS education to complement my political research goals. I debated for months whether to study computer science. On one hand, nothing brought me more satisfaction than coding. On the other hand, I excelled in language and communication. My transcript and resume seemed to point toward a destiny in the humanities—boxing me in. It was too late to switch majors, and even pursuing a minor would be challenging.
Fraught with indecision, I anxiously enrolled in CIS-1100: Introduction to Computer Science mere days before classes began. Although the material was daunting at first, in time, 1100 grew to become one of my favorite classes I’ve taken at Penn. By the semester’s end, I felt torn knowing that I was set to spend junior spring in D.C., temporarily unable to move forward with my CIS education. However, through conversations with friends and department advisors, I wrestled with the intricate logistics and charted a path forward that would enable me to graduate with a CIS minor. While I had paved a challenging road, I was thrilled to finally hold a blueprint and was determined to see it through.
SNF Paideia Dialogue Funding Opened New Possibilities
Thanks to the generous Dialogue Funding from the SNF Paideia Program, I could afford to take CIS-1200 as soon as possible to stay on track. This meant enrolling in the accelerated 6-week summer course and foregoing a summer internship to have ample time to focus on my studies. Taking CIS-1200 this summer was the only viable way for me to complete my desired CIS minor before graduation, and I am immensely grateful to the SNF Paideia Program for enabling me to fully realize my academic ambitions.
Taught by Professor Eric Fouh, the CIS-1200 curriculum builds upon the foundation laid in CIS-1100 by emphasizing the design aspects of programming. The course covers various topics, including data types, abstraction, modularity, test-driven development, programming patterns, functional programming, and object-oriented programming. In the first half of the course, we delve into concepts in OCaml, a functional programming language with its own unique characteristics and educational value. Although OCaml was initially challenging to grasp, I grew to appreciate its sleek simplicity. I particularly gained a better understanding of recursion—the practice of calling a function within its own implementation. The second half of the course expands upon CIS-1100 by covering advanced topics in Java, an object-oriented programming language. Immersing myself in this content helped me refine my Java skills and harness the full potential of this widely used language. As a result of CIS-1200, I now approach programming with a stronger holistic perspective. I feel confident not only in writing code snippets but also in constructing effective programs from initial design to final implementation.
On paper, CIS-1200 is not expected to be excessively challenging compared to other CIS courses. However, the fast-paced nature of the 6-week Summer Session condenses a typical 16-week course into a fraction of the time. With weekly homework assignments and quizzes, daily live-coding sessions, twice-weekly recitations, and two midterms, I found myself investing over 30 hours per week into the course. Essentially, CIS-1200 became my full-time job. And I absolutely loved it.
Professor Fouh proved to be an incredibly effective and engaging teacher who genuinely cares about ensuring his students grasp the challenging material. Additionally, the course TAs were invaluable resources. Their patience, availability, and guidance not only helped me complete assignments on time but also greatly enhanced my understanding of the course content. Despite the demanding workload, working through CIS-1200 was a pleasurable experience, and I feel fortunate to walk away with a remarkably enriched understanding of computer programming.
Relationship Between Computer Programming and the Art of Dialogue
Taking CIS-1200 also deepened my appreciation for the role computer science plays in the art of dialogue. When I initially applied for funding to take the course, I argued that learning programming languages was necessary to engage in dialogue with computers and harness the immense problem-solving power of machines. While CIS-1200 confirmed the validity of this point, it also compelled me to grapple with the intricate relationship between computing and human language.
Of course, many of us are intimately familiar with computer-generated language. AI chatbots like ChatGPT serve as sophisticated tools to appropriately process and respond to given prompts. Although the mechanisms behind programs like ChatGPT are immensely complex, AI in its simpler forms can be utilized by novice programmers like myself to replicate basic approximations of novel language. In the final homework assignment of CIS-1200, we were tasked with building a Twitter bot—a Java-based pipeline that reads a user’s tweets as training data and generates new tweets of a custom length. To achieve this, we employed a “Markov chain” to predict the next word in a tweet based on observed probabilities. The end result is a program capable of generating new tweets that mimic natural language in the unique style of a chosen Twitter user.
Creating the Twitter bot was my favorite assignment of the course and prompted me to consider the fascinating implications of computer-generated language. For fun, I fed my brother’s Twitter data into my bot to showcase my new program. While the results were entertaining, the generated “tweets” were noticeably awkward and far from polished. Here are a couple examples:
“clinched a spike will happen and divisive politics that coming. rt rt all their name. his first goal in. i afford to deliver.”
“antonio gibson for debate; yeh gone? harris vs nyj. at least someone knows a porsche. all their lives as they peacefully assembled to.”
It’s evident that something akin to English is definitely… happening? and that my brother tends to tweet about politics and football. However, beyond these basic observations, it’s challenging to classify these sentences as proper tweets. They lack structure, grammar, and consistent themes. Yet, at the same time, they offer a strangely concise and informative glimpse into my brother’s personality and interests.
I ended up scrolling through hundreds of these computer-generated tweets based on various Twitter accounts. As I read, I gained a deeper understanding of the intricate relationship between computers and human dialogue. While the tweets may have been imperfect and lacked the finesse of well-crafted language, they provided an intriguing glimpse into the intersection of computing and language. The limitations of my bot’s language generation made me realize the complex nuances involved in human communication. It highlighted the artistry, context, and subtleties that make our interactions unique and meaningful. The experience strengthened my appreciation for the challenges involved in developing truly sophisticated dialogue systems and the importance of balancing technical capabilities with human-centric considerations.
I could easily dwell on the potential “what-ifs” of not choosing sooner to pursue a full major in CIS. However, I have come to cherish the unique perspective I have cultivated as a student of political science. Combining my understanding of political systems, social dynamics, and the impact of technology, I believe I bring a valuable interdisciplinary lens to the field of computer science. Though my decision to pursue a CIS minor was not an easy one, I am immensely satisfied with the choice I made. It has broadened my horizons, enhanced my problem-solving skills, and given me a well-rounded foundation that uniquely positions me to contribute meaningfully in the ever-evolving landscape of technology and society. I am excited to continue my learning journey and explore the limitless possibilities at the nexus of computer science and political science.