2008–2009 Computer Science Courses
First-Year Studies: Googling the Telecosm—The Internet and the Future of Information
Level: FYS
Semester: FYS
They are everywhere. In our homes, offices, and classrooms and in less obvious places like telephones, televisions, and kitchen appliances. Some may already be in our wallets and soon, perhaps, in our brains. In this course, we will consider different but overlapping ways in which information-processing devices, and specifically networked computers, affect society. Questions we will address include, How do computers alter our quality of life through the use of instant messaging, electronic mail, Web searching, social networks, and electronic commerce? What is the economic impact of computer networks—not just the price of Google stock—but also in terms of the dot-com mania, the open-source revolution, and the ideal of a cashless society? What are the ethical and legal ramifications of the Internet’s facilitation of music and video piracy, distribution of pornography, and cyberterrorism? We will also investigate other computer security issues including spam; computer viruses and worms; identity theft; and cyberstalking of the MySpace-Facebook generation. How are privacy and First Amendment rights intertwined with these concerns? What effect do computers have on our culture, in terms of both content (e.g., book and movie plots) and process (e.g., digital film)? In part to address this question, we will read the cyberpunk fiction of William Gibson and Neal Stephenson. Finally, we will attempt to tie together these questions by considering the future of ubiquitous networked computing, including the next generation Internet, virtual reality, and teleimmersion.
Artificial Minds
Level: Open,Lecture
Semester: Spring
Though science has continued to reveal with increasing precision the ways in which patterns of matter and energy arrange themselves into life, the mind has largely eluded physical explanation. How does thinking arise from brain cells, and how can thought control the body? Researchers in artificial intelligence believe that the best way to understand the mind is to reproduce it in a machine. They have been exploring ways to program computers to behave intelligently since the middle of the last century. How far has the field of AI come since then, and what are its prospects for the future? In this course, we will examine the major paradigms of AI research in detail, from symbolic approaches such as knowledge representation, propositional and predicate logic, and search methodologies, to more recent approaches that focus on adaptation and learning, such as neural networks, genetic algorithms, artificial life, and robotics. We will also investigate the idea of swarm intelligence and machine creativity, and consider some important philosophical questions surrounding AI including consciousness, the mind-body problem, and the Turing Test.
An Introduction to Computer Science Using the Internet
Level: Open
Semester: Fall
This course will use the Internet as a vehicle to explore fundamental concepts in computer science. It will enable students to understand the World Wide Web by examining the fundamental technologies that make it possible. Topics include problem-solving techniques; algorithm and system design; control of a computer using HTML and JavaScript; network design; software translation; digital circuits and the theory of computation. Students learn the basics principles of computer programming by building applications for the Internet. This is not a course in Web design, although students will build Web pages; it is a survey of the major topics in computer science. The course does not presume any programming experience, but assumes that the student is comfortable working with a computer.
Computer Science: An Accelerated Introduction
Level: Open
Semester: Fall
This course is an accelerated introduction to computer science using the Python programming language. Students will learn the fundamental principles of problem solving with a computer while gaining the programming skills necessary for further study in the discipline. Throughout the course, we will emphasize the design of clearly written, well-structured programs. We will begin with procedural programming and work our way up to object-oriented concepts such as classes, methods, and inheritance. Along the way, we will explore graphics programming, basic data structures such as lists and dictionaries, multidimensional arrays, sorting and searching algorithms, recursion, and techniques for analyzing the efficiency of algorithms. Weekly lab sessions will reinforce the concepts covered in class through extensive hands-on interaction at the computer.
Object-Oriented Programming: Structuring the World with Classes
Level: Open
Semester: Spring
Problem solving in an object-oriented language requires more than learning new language structures. It requires a new way of thinking, shifting from a procedural approach that emphasizes algorithms and data structures to thinking about objects. Objects are software packages of behaviors and states and manipulating interacting objects is at the heart of object-oriented programming. Topics covered in the course include encapsulation, inheritance, abstract data types, and polymorphism. The language of instruction is Java, a popular OO language with substantial libraries to support the creation of sophisticated graphical user interfaces. Frequent labs support the course material; in the labs students gain hands-on experience under the supervision of the instructor. Conference work allows students to investigate a broad range of issues arising from the uses of technology, explore other programming languages, or learn Internet programming.
Open to any interested student with permission of the instructor required. Students should have at least one semester of programming experience.
Databases
Level: Intermediate
Semester: Fall
A modern database system is a collection of interrelated facts, recorded on digital media, and a set of computer programs to access those facts. These days, databases crop up almost everywhere: social networks such as Facebook, electronic mail, cellular phones, personal digital assistants, flight-reservation systems, and many other places. This course attempts to shed light on why and how our society has become so dependent on information processing by examining software (and to a lesser extent hardware) techniques that lead to the efficient storage and retrieval of information. Major topics include relational database design, query languages such as SQL, the object-relational model, ACID properties, and the client-server paradigm. Each student will be responsible for designing and implementing a Web-accessible database application of her or his choosing using open-source database software and a Web-application programming language such as PHP, Python, or Ruby. Students will work on their projects throughout the course and will demonstrate them to rest of the class at the close of the semester. We will also consider Web-application frameworks such as Ruby on Rails and Django. In addition to regular reading assignments, there will be several problem sets and short programming assignments. There will also be a more substantial programming assignment used to illustrate issues pertaining to the practical implementation of database systems. Suggested conference topics include alternative database models; data mining; database privacy and identity theft; Geographical Information Systems (GIS); and the implementation of a miniature database system.
Permission of the instructor is required. Students should have at least one semester of programming experience in C, C++, Java, or Python.
Robotics
Level: Intermediate
Semester: Spring
This course provides a hands-on introduction to robotics, an exciting and thriving subfield of artificial intelligence. We will study a variety of robot programming paradigms, including reactive and behavior-based control, as well as adaptive methods such as neural networks and genetic algorithms, which allow robots to learn from experience. We will use a software system called Pyro that will enable us to experiment interactively with robots—both real and simulated—using the Python programming language. We will also spend some time discussing developmental robotics, a newly emerging research area inspired by developmental psychology and neuroscience, which studies how autonomous robots can acquire their behavior and knowledge strictly through their sensory experiences and interactions with their environment. Students will have many opportunities for extended exploration through open-ended lab projects and conference work.
No previous knowledge of Python or robot hardware is needed, but students should be comfortable programming in a high-level object-oriented language such as Java or C++.
