Course Outline

Introduction to Computer Science 2: Algorithms and Application

Professor Dr K Darcy Otto
Title Introduction to CS 2: Algorithms and Application
Code CS 4384
Credits 4
Term Spring 2026
Times TF 10h30–12h20
Location Dickinson 239
Delivery Fully in-person
Contact Email
Office Hours TF 4:10 pm

Description

Embark on a deeper exploration of computer science, where the focus shifts from programming and foundations of computer science, to the intricacies of algorithms and their real-world applications. This course reinforces and builds upon the concepts introduced in Introduction to CS 1, and provides an introduction to working with arbitrarily large data structures.

You will learn not only how to explore possible solutions using computational thinking, but also how to analyze and understand the data that drives these solutions. You will explore a selection of topics such as self-referential data definitions, composition, and recursion. These techniques will provide you with some tools to make sense of the vast amounts of data often encountered in computing tasks.

This course does not simply aim to expand your technical skill set. It seeks to cultivate a critical mindset that questions, analyzes, and interprets data, so that you can make informed inference and decisions. It invites those who are intrigued by the power of algorithms to engage computation in diverse contexts, setting the stage for advanced study in science, the arts, and beyond.

This course leads directly to Data Structures and Algorithms, and provides support for Systems 2 (Software).

Learning Outcomes

  1. Develop the ability to translate real-world problems into computer-executable solutions using elementary programming concepts.
  2. Grasp functions, scoping, and abstraction in order to structure complex ideas into logical, readable code.
  3. Understand data structures, and how to organize, store, and manipulate data within applications.
  4. Apply principles of program design to organize complex tasks and develop the environment in which programs operate.
  5. Acquire a foundation in programming that supports more advanced work in computer science and related subjects.

Readings

  • Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurth. How to Design Programs, 2nd ed. MIT Press, 2014. Online.

Evaluation

Midterm 35% Comprehensive
Final Examination 45% Comprehensive
Engagement 20% Participation, Exercises
  • Midterm and Final Examination: Both tests will cover everything we’ve discussed in class and read about. You’ll see conceptual questions, design challenges, and programming problems.

  • Engagement: Your engagement grade comes from completing exercises on time, active participation, and showing up regularly. The exercises are drawn from our readings, and are listed on the class schedule.

  1. Class Schedule: Current schedule of readings and exercises
  2. Course Repository: Worksheets and other documents, including solutions to problems
  3. Electronic Whiteboard: For information sharing during class
  4. Etherpad: For code sharing during class
  5. Solutions: Publicly posted solutions for HTDP 2e
  6. DrRacket: Our development environment, to be installed on your machine
  7. S Combinator Challenge: Show that the S combinator is universal

Racket

We use Racket in this course because it stands in the tradition of languages like Lisp and Scheme: languages created to explore the deepest ideas of computer science, not just to follow industry trends. It teaches you about computation at the most fundamental level. As Paul Graham argued in Beating the Averages, using a language with the expressive power of Racket changes how you think, because it gives you conceptual tools you wouldn’t otherwise have. At the same time, Racket is practical: it has a gentle learning curve, an excellent development environment (DrRacket), superb documentation, and emphasizes clarity of thought.

  1. Download Racket from here. There are versions for all modern Macs, Linux machines, and Windows. The file name will look something like:

    • racket-9.x-aarch64-macosx-cs.dmg on an Apple Silicon Mac
    • racket-9.x-x86_64-macosx-cs.dmg on an Intel Mac
    • racket-9.x-x86_64-win32-cs.exe on a PC
    • racket-9.x-x86_64-linux-cs.sh on Linux
  2. Install Racket: On a Mac, open the .dmg file and drag the Racket folder to Applications. On a PC, run the .exe installer and follow the prompts. On Linux, open a terminal and run: sh racket-9.x-x86_64-linux-cs.sh.

  3. Start DrRacket: On a Mac: this is in the Racket folder of your Applications list. If your computer complains that DrRacket is not from a “trusted developer,” go into the Finder, then Applications, right-click DrRacket, and click “Open” to bypass this. You only need to do this once. On a PC: this is in the Racket folder of your Applications list. On Linux: after installation, you can usually start DrRacket from your Applications menu. If not, open a terminal and run: drracket &

Lab computers in Dickinson have DrRacket pre-installed, if you prefer not to install it on your personal machine. You can also use them as a backup if your installation runs into problems.

Course Policies

  1. Outline: This outline is subject to arbitrary change. I shall announce any changes in class; if you are not present, you are still responsible for finding out what I announce.
  2. Late exercises: Exercises will not be accepted late without an acceptable medical or compassionate reason. All exercises are due at the beginning of class for which they are assigned.
  3. Attendance: Come to class. Three unexcused absences might mean a marginal pass; four could mean a failure, even if your other work is fine. Excused absences don’t count.
  4. Laptops and Cell Phones: Don’t use mobile technology in class unless I specifically permit it. Take notes with pencil and paper (unless you have special accommodations).
  5. AI Tools: Don’t use ChatGPT, Claude, or similar tools for assignments unless I explicitly allow it. If I do allow it, you must cite exactly how you used it according to Chicago style.
  6. Office hours: Office hours are first-come-first-serve, unless you have an appointment. If you want to schedule something, email me a few times that work for you.
  7. College Policies: Be familiar with the college rules on class attendance, as well as academic and artistic ethics.
  8. Grading: If you opt for a letter-grade, your mark in the course will be translated according to the following scale: A+ (90–100), A (85–89), A– (80–84), B+ (77–79), B (73–76), B– (70–72), C+ (67–69), C (63–66), C– (60–62), D (50–59), F (0–49). If you do not opt for a letter-grade, the scale is as follows: Pass (65–100), Marginal Pass (50–62), Fail (0-49).

A Note about AI within Computer Science

Artificial intelligence can generate code, but it cannot decide what problems are worth solving, nor judge whether a solution is effective, ethical, or just. Computer science is less about mastering tools than about cultivating the habits of mind that let us interpret, understand, and evaluate. It asks how abstractions shape systems, how systems shape society, and how we might imagine technology serving human flourishing rather than undermining it. To study CS is therefore not only to learn how machines work, but to engage in broader questions about seeing clearly, reasoning correctly, and imagining responsibly in a world increasingly shaped by computation.

A Note on Liberal Arts Learning

An overarching objective of this course is to help you develop as a student of the liberal arts. True students of the liberal arts are able to reflect on the context in which they live, and reason about what it means to live a meaningful and happy life. Thus, they are able to be more than just children of their own time. But this means we must be willing to put our ideas to the test, see our own errors, and develop intellectual courage and humility. It also helps not to take ourselves too seriously.