Spring 2013 Courses

101. Introduction to Computer Science
Daniela Oliveira M 1:00 - 2:25, W 1:00 - 2:25 Searles-223
What is computer science, what are its applications in other disciplines, and what is its impact in society? A step-by-step introduction to the art of problem solving using the computer and the Java language. Provides a broad introduction to computer science and programming through real-life applications. Weekly labs provide experiments with the concepts presented in class. Assumes no prior knowledge of computers or programming.
210. Data Structures
Eric Chown T 1:00 - 2:25, TH 1:00 - 2:25 Searles-126
Solving complex algorithmic problems requires the use of appropriate data structures such as stacks, priority queues, search trees, dictionaries, hash tables, and graphs. It also requires the ability to measure the efficiency of operations such as sorting and searching in order to make effective choices among alternative solutions. Offers a study of data structures, their efficiency, and their use in solving computational problems. Laboratory exercises provide an opportunity to design and implement these structures. Students interested in taking Computer Science 210 are required to pass the computer science placement examination before class starts.
240. Operating Systems
Daniela Oliveira M 2:30 - 3:55, W 2:30 - 3:55 Searles-126
An introduction to operating systems concepts, design, and implementation. Operating systems (OS) are essential to any computer system and, although we have witnessed rapid changes in applications and in the use of computers, the fundamental concepts that underlie an OS remain the same. Students get hands-on experience experimenting with Linux, a real, widely used, open source OS. However, the core concepts are applicable to most operating systems: Windows, OS X, FreeBSD, Solaris. Compares differences in design choices among these other systems. Topics include process management (scheduling, threads, interprocess synchronization, and deadlocks), main memory and virtual memory, file and I/O subsystems, and the basics of OS protection and security.
281. Mobile Computing
Eric Chown T 10:00 - 11:25, TH 10:00 - 11:25 Searles-223
As computer science enters the “post-PC” era basic computing paradigms are shifting to take advantage of mobile platforms such as phones and tablets. Covers all aspects of programming for mobile devices including development environments, programming languages, the use of touch screens for input, and associated sensors such as accelerometers and GPS. Students engage in a series of introductory projects before taking on a large self-designed term project that highlights the differences between mobile applications and more traditional applications designed for the desktop.
289. Theory of Computation
Stephen Majercik M 11:30 - 12:55, W 11:30 - 12:55 Searles-223
Studies the nature of computation and examines the principles that determine what computational capabilities are required to solve particular classes of problems. Topics include an introduction to the connections between language theory and models of computation, and a study of unsolvable problems.
344. Nature Inspired Computation
Stephen Majercik M 10:00 - 11:25, W 10:00 - 11:25 Searles-224 Linux Lab
The size and complexity of real-world optimization problems can make it difficult to find optimal solutions in an acceptable amount of time. Researchers have turned to nature for inspiration in developing techniques that can find high-quality solutions in a reasonable amount of time; the resulting algorithms have been applied successfully to a wide range of optimization problems. Covers the most widely used algorithms, exploring their natural inspiration, their structure and effectiveness, and applications. Topics will be drawn from: genetic algorithms, particle swarm optimization, ant colony optimization, honeybee algorithms, immune system algorithms, and bacteria optimization algorithms.