Computer science studies the representation and manipulation of information. These days that includes pretty much everything: art (image and video processing, digital music, dance technology), science (numerical methods, bioinformatics), the humanities (cognition, language)—you name it. In any field you can think of, digital techniques are being used to store, edit, analyze, simulate and just play around with the content. The computer is an incredible tool. Computer science (CS) looks at what it can do, and how to use it.
Students studying computer science at Marlboro will develop skills in programming and problem solving as well as documentation, testing and debugging methods. Programming is at the core of the curriculum, since it is the language in which computational recipes are expressed in everything from low level nitty-gritty operating system protocols to abstract formalisms in high level languages. As part of writing good code, students will also learn to ensure that their programs work as expected, and to communicate clearly what the program does and how to use it. The curriculum explores these ideas within many areas of study, typically using open software tools and systems.
My doctorate degree is in physics, which I taught at Marlboro from 1988 to 2002. My physics research used computer simulations to study quantum chaos and cosmology. Since 2002, I’ve been working with various internet technologies, including collaborative education tools. Most recently I’ve been developing a dance scripting system. I have research interests in digital dance and music technology, the internet and scientific computing Most topics in undergraduate computer science are possible for Plan-level work, and
interdisciplinary plans are common, particularly those combining computer work with the sciences or arts.
INTRODUCTION TO PROGRAMMING WITH PYTHON (NSC552)
This is a first class in computer programming, and as such a foundation class for further work in computer science. Much as a competency with English grammar is required for writing, an understanding of programming is required for nearly all intermediate and advanced work in computer science. A similar course is offered every fall, though the language chosen varies from year to year. Python is a modern, elegant, high level scripting language, popular at Google among other places. In addition to learning about “object oriented programming,” loops, input/output and all that, expect to also learn a variety of computer skills and basics. Prerequisite: None Introductory | Credits: 4
INTERNET TECHNOLOGIES (NSC583)
BUILDING GADGETS: AN OPEN ELECTRONICS LAB (NSC597)
A hands-on exploration of interactive electronics using a programmable microcontroller such as the Arduino, some sensors, motors and a computer. After looking at some basics of circuits and loading programs at the start of the term, you’ll choose a project, purchase the materials, build it (probably following a recipe) and explain it. We will likely also play with 3D printing using a RepRap. To take this course, you should be comfortable with a do-it-yourself approach to tinkering, and have had some exposure to foundation courses in physics and/or computers. Prerequisite: Permission of instructor Multi-Level | Credits: 2
DIGITAL MULTIMEDIA (NSC551)
An introduction to computer manipulation of images, music, animation and video, including background topics in optics, acoustics and the internet. The equipment and software will be flexible, but will emphasize open source systems such as Audacity (sound), the Gimp (images) and Blender (animation). Where schedules allow we will connect with the various art labs (photo, music, video), but much of the work won’t require specialized equipment. Expect weekly assignments and tests as well as a midterm and final projects. Prerequisite: None Introductory | Credits: 2
GROUP THEORY & RUBIK’S CUBE (NSC203)
This course will explain the basics of a branch of mathematics called group theory by examining Rubik’s Cube and other similar puzzles. My hope is that the puzzles will motivate the ideas behind group theory. Although this is an introductory course and does not depend on any previous math (we will, for example, hardly use numbers at all), students should be comfortable with abstract thought. Prerequisite: Some facility with abstract concepts Introductory | Credits: 2
LINUX SEMINAR (NSC581)
An exploration of various aspects of the Gnu/Linux operating system, including package management, the kernel, networking, security and how it all fits together in the various distributions. Topics may vary depending on the interests of the participants. May be repeated for credit. Prerequisite: Some familiarity with Unix Intermediate | Credits: 2
PROGRAMMING WORKSHOP (NSC490)
Class discussion of students’ programming projects. Variable credit, depending on the amount of work produced and class participation. Prerequisite: Previous programming experience or permission of instructor Multi-Level | Credits: 3
An examination of some of the classic recipes in computer science, such as searching methods and data structures, hashes, Monte Carlo methods, parsing and cryptography. Expect some math as we look at the asymptotic behavior of these algorithms and which kinds of problems are “hard.” Other topics may include Turing machines and cellular automata. We will probably use the C programming language. Prerequisite: Previous programming experience Intermediate | Credits: 4
WEB PROGRAMMING (NSC579)
ARTIFICIAL INTELLIGENCE (CDS34)
An examination of the methods used in problems encountered in trying to teach computers to “think.” Topics covered will be among the following: representation of knowledge, learning, game theory, perception, neural networks, cellular automata, cognitive modeling and natural language processing. Most people who work in AI program in Lisp, and so we will likely use it as well (learn it along the way), but that won’t be the main focus of the course. This is an intermediate course in computer science and as such assumes previous programming experience. Prerequisite: Substantive programming experience Intermediate| Credits: 4
DIFFERENTIAL EQUATIONS, CHAOS AND SCIENTIFIC COMPUTING (NSC584)
Differential equations are the language with which physicists describe the way the world works. This course looks at ways to understand these equations with both traditional symbolic methods as well as numerical computer simulations. We’ll start with linear equations such as the harmonic oscillator and progress to nonlinear systems that exhibit chaotic behavior, using computer tools such as Mathematica to write programs that explore the solutions to the equations. Prerequisite: Calculus Intermediate | Credits: 4
COMPUTER SYSTEMS (NSC592)
A look at what goes on “under the hood” of a computer, in the implementation in machine code of a C program running on a Linux computer. Sometimes called “computer organization,” a course like this one is a required part of most computer science degree programs, typically taken by sophomores after a course or two in basic programming concepts. Topics include the C programming language, machine-level data representation and assembly language, processor organization, system performance, memory caching, code compilation and linking and similar fun stuff. This course is likely to be offered every few years. Prerequisite: Previous programming experience Intermediate | Credits: 4
INFORMATION THEORY (NSC582)
An introduction to what computer scientists mean by “information,” including topics in data compression (such as zip files and mp3), error correcting codes, information entropy, cryptography and randomness. Prerequisite: Some background in programming as well as math through at least pre-calculus Intermediate | Credits: 4
FORMAL LANGUAGES AND THE THEORY OF COMPUTATION (NSC543)
A mathematical introduction to the theory of computation. Topics include automata such as Turing machines, formal languages such as context-free grammar, and computability questions as described by “NP-complete” problems and Godel’s incompleteness theorem. This is an upper-level course that presents the foundations of theoretical computer science. Expect practice with lots of mathematical proofs, with programming examples to build intuition. Prerequisite: Formal mathematics and programming experience Advanced | Credits: 4
Traditional plans in computer science require a steady diet of programming practice; a typical sequence would be the Intro Programming course, followed by either Algorithms or Programming Workshop, and continuing into Artificial Intelligence and Computer Systems. A background in mathematics—particularly discrete math—is very helpful, especially for the advanced courses such as Formal Languages and Information Theory. Students interested in internet topics would typically start with Internet Technologies (or have an equivalent background) followed by Web Programming. The various low credit exploratory courses such as Gadgets and Digital Multimedia, combined with other introductory CS courses and other fields of study, lead to tutorials in those topics.
Current and past introductory and intermediate CS courses are online at http://cs.marlboro.edu, including in most cases a syllabus, assignments and notes. Advanced work is typically done in tutorials. A tentative schedule of future courses may be found at http://cs.marlboro.edu/term/next.html, along with a description of the roughly two-year cycle of foundation courses in programming and internet technologies. The specifics will depend on student interests and backgrounds.
Although it is perfectly possible to do a Plan in pure computer science, most CS Plans are interdisciplinary, applying computational methods to another field. Examples include:
To include a computer science element, an interdisciplinary Plan must include a programming or other technical component. The use of a computer application such as a word processor or video editor is not enough in and of itself. For example, a photography student who used PhotoShop to produce images would not be working in computer science, while one who explored the implementation of digital watermarks in photographic images would be.
The internet is a popular focus for interdisciplinary plans, connecting computer science with fields such as sociology, graphic design, cryptography and international studies. In addition to the internet courses at Marlboro, additional topics in web technology and web design are available for cross-registration at Marlboro’s Graduate School (http://gradschool.marlboro.edu) in Brattleboro.