Exploring New Ways of Thinking and Problem-solving
Functional Problem Solving (CSC 151) will introduce you to computer science and computational thinking. As a student in this course, you’ll learn how to write your own programs and better understand the computer programs that impact your life. The algorithmic problems explored change from semester to semester; in a recent class, students used computational technology to explore humanistic subjects, with a primary focus on text-based digital humanities.
The course explores the functional approach to program-solving, particularly the value of higher-order programming, recursion, and referential transparency (don’t worry if these words are unfamiliar to you — we’ll explain in class, and no prior knowledge of computer science or programming is required). The course is taught workshop-style, which encourages collaboration; you’ll be expected to read materials in advance and work on problems in-class in randomly assigned pairings.
“Students learn much better by doing rather than listening,” says Samuel A. Rebelsky, professor of computer science. “Having peer mentors around to help makes it even better. Many of the students who take the course end up serving as mentors for subsequent sections.”
Rebelsky adds, “We’ve recently adopted a mastery grading approach that emphasizes students learning the material and demonstrating their understanding of it through smaller problem-solving throughout the semester and larger assignments where they receive feedback and can correct any deficiencies.”
The recent cohort of students who applied computational technology to the humanities found that because the humanities encompass a multitude of disciplines — languages, cultural studies, and performing arts — the problems they considered were also diverse. Reflecting the liberal arts ethos at Grinnell, the course will encourage you to explore multiple ways of thinking. The formal thinking required for computer science is often a unique experience for students; many find these problem-solving skills can be applicable to other settings that don’t involve programming at all.
“We’ll teach you everything we want you to know, and we like to do things differently,” Rebelsky says. You’ll also be exposed to functional language, an opportunity that few other introductory computer science classes offer. “We use a non-traditional language and approach in the course, and some students tell me that having a functional language on their résumés helps them get interviews,” he explains.
However, jobs aren’t the main goal, Rebelsky says. The primary focus is on developing new ways of thinking.