James Marshall

on leave yearlong

BA, Cornell University. MS, PhD, Indiana University-Bloomington. Special interests in robotics, evolutionary computation, artificial intelligence, and cognitive science. Author of research papers on developmental robotics, neural networks, and computational models of analogy; author of the Metacat computer model of analogy. SLC, 2006–

Previous Courses

Bio-Inspired Artificial Intelligence

Intermediate , Seminar—Spring

No previous knowledge of robot hardware is needed, but students should be comfortable programming in a high-level object-oriented language such as Python, Java, or C++.

The field of artificial intelligence (AI) is concerned with reproducing the abilities of human intelligence in computers. In recent years, exciting new approaches to AI have been developed, inspired by a wide variety of biological processes and structures that are capable of self-organization, adaptation, and learning. Examples of these new approaches include evolutionary computation, artificial neural networks, autonomous robots, and swarm intelligence. This course will provide a hands-on introduction to the algorithms and techniques of biologically-inspired AI, focusing primarily on evolutionary systems, neural networks, and robotics from both a theoretical and practical standpoint. Topics to be covered include genetic algorithms, genetic programming, supervised and unsupervised neural network learning, reinforcement learning, reactive and behavior-based robot control, evolutionary robotics, and developmental robotics. Throughout the course, we will use the Python programming language to implement and experiment with these techniques in detail and to test them out using both simulated and real robots. Students will have many opportunities for extended exploration through open-ended, hands-on lab exercises and conference work.

Faculty
Related Disciplines

The Computational Beauty of Nature

Open , Lecture—Spring

This course will explore the concepts of emergence and complexity within natural and artificial systems. Simple computational rules interacting in complex, nonlinear ways can produce rich and unexpected patterns of behavior and may account for much of what we think of as beautiful or interesting in the world. Taking this as our theme, we will investigate a multitude of topics, including: fractals and the Mandelbrot set; chaos theory and strange attractors; cellular automata, such as Wolfram's elementary automata and Conway's Game of Life; self-organizing and emergent systems; formal models of computation, such as Turing machines; artificial neural networks; genetic algorithms; and artificial life. The central questions motivating our study will be: How does complexity arise in Nature? Can complexity be quantified and objectively measured? Can we capture the patterns of Nature as computational rules in a computer program? What is the essence of computation, and what are its limits? Throughout the course, we will emphasize mathematical concepts and computer experimentation rather than programming, using the computer as a laboratory in which to design and run simulations of complex systems and observe their behaviors.

Faculty
Related Disciplines

Quantum Computing

Intermediate , Seminar—Fall

Prerequisite: one semester of linear algebra or equivalent mathematical preparation.

Physicists and philosophers have been trying to understand the strangeness of the subatomic world as revealed by quantum theory since its inception back in the 1920s, but it wasn't until the 1980s—more than a half-century after the development of the theory—that computer scientists first began to suspect that quantum physics might hold profound implications for computing, as well, and that its inherent weirdness might possibly be harnessed as a source of immense computational power. This dawning realization was followed soon afterward by key theoretical and practical advances, including the discovery of several important algorithms for quantum computers that could potentially revolutionize (and disrupt) the cryptographic systems protecting practically all of our society's electronic banking, commerce, telecommunications, and national security systems. Around the same time, researchers succeeded in building the first working quantum computers, albeit on a very small scale. Today, the multidisciplinary field of quantum computing lies at the intersection of computer science, mathematics, physics, and engineering—and it is one of the most active and fascinating areas in science, with potentially far-reaching consequences for the future. This course will introduce students to the theory and applications of quantum computing from the perspective of computer science. Topics to be covered will include bits and qubits, quantum logic gates and reversible computing, Deutsch's algorithm, Grover's search algorithm, Shor's factoring algorithm, quantum teleportation, and applications to cryptography. No advanced background in physics, mathematics, or computer programming is necessary beyond a basic familiarity with linear algebra. We will study the quantitative, mathematical theory of quantum computing in detail but will also consider broader philosophical questions about the nature of physical reality, as well as the future of computing technologies.

Faculty
Related Disciplines

Introduction to Computer Science: The Way of the Program

Open , Lecture—Fall

This lecture presents a rigorous introduction to computer science and the art of computer programming, using the elegant, eminently practical, yet easy-to-learn programming language Python. We will learn the principles of problem solving with a computer while gaining the programming skills necessary for further study in the discipline. We will emphasize the power of abstraction and the benefits of clearly written, well-structured programs, beginning with basic imperative programming and working our way up to object-oriented concepts such as classes, methods, and inheritance. Along the way, we will explore the fundamental idea of an algorithm; how computers represent and manipulate numbers, text, and other data (such as images and sound) in binary; Boolean logic; conditional, iterative, and recursive programming; functional abstraction; file processing; and standard data structures such as lists, dictionaries, and trees. We will also learn the basics of computer graphics, how to process simple user interactions via mouse and keyboard, and some principles of game design and implementation. All students will complete a final programming project of their own design. Weekly hands-on laboratory sessions will reinforce the concepts covered in class through extensive practice at the computer.

Faculty
Related Disciplines

Data Structures and Algorithms

Intermediate , Seminar—Spring

Students should have at least one semester of programming experience in an object-oriented language such as Python, Java, or C++.

In this course, we will study a variety of data structures and algorithms that are important for the design of sophisticated computer programs, along with techniques for managing program complexity. We will use Java—a strongly typed, object-oriented programming language—throughout the course. Topics covered will include types and polymorphism, arrays, linked lists, stacks, queues, priority queues, heaps, dictionaries, balanced trees, and graphs, along with several important algorithms for manipulating these structures. We will also study techniques for analyzing the efficiency of algorithms. The central theme tying all of these topics together is the idea of abstraction and the related notions of information hiding and encapsulation, which we will emphasize throughout the course. Weekly lab sessions will reinforce the concepts covered in class through extensive hands-on practice at the computer.

Faculty
Related Disciplines

Principles of Programming Languages

Intermediate , Seminar—Fall

This course explores the principles of programming language design through the study and implementation of computer programs called interpreters, which process other programs as input. A famous computer scientist once remarked that if you don't understand interpreters, you can still write programs and even be a competent programmer; but you can't be a master. We will begin by studying functional programming, using the strangely beautiful and recursive programming language Scheme. After getting comfortable with Scheme and recursion, we will see how to design our own languages by starting from a high-level description and systematically deriving a low-level implementation through the application of a series of program transformations. Along the way, we will become acquainted with the lambda calculus (the basis of modern programming language theory), scoping mechanisms, continuations, lazy and nondeterministic evaluation, and other topics as time permits. We will use Scheme as our “meta-language” for exploring these issues in a precise, analytical way, similar to the way in which mathematics is used to describe phenomena in the natural sciences. Our great advantage over mathematics, however, is that we can test our ideas about languages, expressed in the form of interpreters, by directly executing them on the computer.

Faculty

First-Year Studies: Achilles, the Tortoise, and the Mystery of the Undecidable

Open , FYS

In this course, we will take an extended journey through Douglas Hofstadter’s Pulitzer Prize-winning book, Gödel, Escher, Bach, which has been called “an entire humanistic education between the covers of a single book.” The key question at the heart of the book is: How can minds possibly arise from mere matter? Few people would claim that individual neurons in a brain are “conscious” in anything like the normal sense in which we experience consciousness. Yet self-awareness somehow emerges out of a myriad of neuronal firings and molecular interactions. How can individually meaningless physical events in a brain, even vast numbers of them, give rise to meaningful awareness, to a sense of self? And could we duplicate such a process in a machine? Considering these questions will lead us to explore a wide range of ideas, from the foundations of mathematics and computer science to molecular biology, art, and music to the research frontiers of modern-day cognitive science and neuroscience. Along the way, we will closely examine Gödel's incompleteness theorem, mathematical logic and formal systems, the limits of computation, and the future prospects for artificial intelligence.

Faculty
Related Disciplines

What do you love about Sarah Lawrence students?
A lot of my students are wonderfully self-motivated, and especially during conference projects, I feel they’re teaching me as much as I’m teaching them. One student wanted to study formal logic, so we spent a semester going through a formal logic textbook together. Another student wanted to study the theory of computation, which is a course I took as an undergraduate. We spent a semester doing theory of computation proofs, which helped me to relearn some of the material and get back into that mindset. It felt like we were colleagues for a semester, grappling with these ideas together.

What do you love about teaching at Sarah Lawrence?
One thing I really like is the flexibility in teaching, and being able to design courses that really excite me. I based my most recent First Year Studies course on Douglas Hofstadter’s book Gödel, Escher, Bach, which is one of my very favorite books. I always wanted to design a course around that book, and I was able to do that here. The Computational Beauty of Nature explored fractals, chaos theory, and complex systems, all topics that I find fascinating. Another great thing I love is hanging out with my colleagues in the Science and Math faculty group. We talk about quantum computing sometimes, or things like information theory or cognitive science. We often get together for social events and parties, too, which is fun.  It’s nice that we’re all from different disciplines, not just from computer science.