Intro to Computing Systems
This course looks at the inner workings of a computer and computer systems. It is an introduction to computer architecture. Specific topics include assembly language programming, memory, and parallelism. This course is programming intensive.
Where Are the Brain's Limits?
How does the brain enable otherwise ordinary people to display extraordinary abilities? This course will challenge our understanding of ourselves and each other by using a collection of stories, peer-reviewed research, and podcasts to compare popular media's portrayal of these individuals against science's current understanding of the brain.
Plant Diversity and Evolution
This course explores the tremendous diversity of the plant kingdom, emphasizing the local flora. Evolutionary relationships are discussed on the basis of comparisons of reproductive biology, morphology, anatomy, cell structure, and molecular biology.
Software Design & Development
Building large software systems introduces new challenges to software development. Appropriate design decisions and programming methodology can make a major difference in developing software that is correct and maintainable. In this course, students will learn techniques and tools that are used to build correct and maintainable software, improving their skills in designing, writing, debugging, and testing software. Topics include object-oriented design, testing, design patterns, and software architecture. This course is programming intensive.
Algorithms
How does Google Maps find the best route between two locations? How do computers help to decode the human genome? At the heart of these and other complex computer applications are nontrivial algorithms. While algorithms must be specialized to an application, there are some standard ways of approaching algorithmic problems that tend to be useful in many applications. Among other topics, we explore graph algorithms, greedy algorithms, divide-and-conquer, dynamic programming, and network flow.
Operating Systems
An introduction to the issues involved in orchestrating the use of computer resources. Topics include operating system evolution, memory management, virtual memory, resource scheduling, multiprogramming, deadlocks, concurrent processes, protection, and design principles. Course emphasis: understanding the implications of OS design on the programs you run and write (i.e., on their security, performance, etc.). This course is programming intensive.
Marine Invertebrate Physiology
Invertebrates are an incredibly diverse group of organisms that live in nearly all ecosystems across the earth. As ectotherms, invertebrates must develop plastic responses to environmental variation in order to survive. In this course, we will explore these plastic responses in marine invertebrates at all levels of organization -- from cellular to ecosystem scales -- through hands-on activities, projects, and synthesis of primary literature.