CS 201: Data Structures. Instructor: Amy Csizmar Dalal, Time: 2a
Prerequisite: CS 111 or consent of the instructor.
Think back to your favorite assignment from Intro to Computer Science. Did you ever get the feeling that "there has to be a better/smarter way to do this problem?" The Data Structures course is all about how to store information intelligently and access it efficiently. How can Google take your query, compare it to billions of web pages, and return the answer in less than one second? How can one balance the tradeoff of being able to store information so that it can be retrieved quickly, but also can be quickly updated? Ideas such as stacks, queues, trees, linked lists, graphs and hash tables will be examined, and we'll look at how to program them as well as how to analyze them for their performance.
CS 208: Computer Organization and Architecture. Instructor: Sherri Goings, Time: 3a
Prerequisite: CS 111 or consent of instructor
People talk about how computers speak a language consisting entirely of zeros and ones, and about all the computer’s work being done by a really big collection of transistors. But if you gave most of those people a big pile of transistors and plenty of solder, or pencils and papers enough to write millions of ones and zeros, they would not be able to build or plan a computing machine. In this course, you will learn how a collection of transistors or similar devices can be assembled to manipulate ones and zeros to cause computation to occur. Along the way, you will learn about machine and assembly language, integer and real numerical representations, digital logic, datapath design, caches, and pipelining.
CS 251: Programming Language Design and Implementation. Instructor: Laura Effinger-Dean, Time: 5A
Prerequisite: CS 201 or consent of instructor
What makes a programming language like "Python" or like "Java?" This course will look past superficial properties (like indentation) and into the soul of programming languages. We will explore a variety of topics in programming language construction and design: syntax and semantics, mechanisms for parameter passing, typing, scoping, and control structures. Students will expand their programming experience to include other programming paradigms, including functional languages like Scheme and ML.
CS 322: Natural Language Processing. Instructor: David Liben-Nowell, Time: 2A
Prerequisite: CS 201 and 202 or consent of instructor
Just yesterday, I said into the air near my iPhone "text Jeff Ondich can you recommend any good books about natural language processing so that I can teach CS 322 this fall?". The iPhone (or Siri, the voice-recognizing demon inhabiting the phone), responded by telling me that she was going to text the following message to Jeff Ondich [mispronounced]: "Can you recommend any good books about Metroliner processing so that I can teach CS 320 to this phone." Siri processed the sound waves coming in through the microphone, turned them into a sequence of words (the sequence of words that I spoke, more or less), and understood them well enough to figure out that "text" was a command and to figure out that the next chunk of sound that I'd uttered was a name that best matched Jeff's name out of 381 contacts, including 5 Jeffs, in my phone.
Siri is an example of natural-language processing software: that is, software that manipulates languages such as English or Spanish or Javanese, as opposed to formal languages such as Python or Java. In this course, we will study topics like speech recognition (turning speech sounds into text), parsing (determining the grammatical structure of a sentence), stemming (e.g., associating "running," "ran," and "runs" with their common stem "run"), semantic analysis (extracting meaning from the words in a sentence or collection of sentences), anaphora (how pronouns and indefinite noun phrases can refer to previous nouns), the extraction of useful statistical data from large bodies of text, and dialogue systems.