|
Overview Schedule Assignments | |
Math 121: Intro to Computation This course is about computation. We study devices that compute according to some program, the design of programs for performing a specific computation, and particular computer programming languages that form the means for expressing algorithms. This course follows three tracks. We look at 1. finite automata, formal languages, and computability theory 2. the engineering of computing systems, including circuits, processors, and compilers 3. programming, basic algorithm design, and computer problem solving (in Haskell and Java) Our approach will generally be mathematical, and we'll be considering a number of computational systems. There is a rich collection of things that compute, both those abstractly defined and those actually built, varying widely in how and what they can compute. You'll find that exploring this wide variety and mastering portions of it will make you a versatile programmer. Each different model and means of computation will inform your understanding of each other one. This introductory note gives a fuller overview of the topics of the course. Meeting times We'll meet three hours per week for lectures, and one and a half hours a week in lab. Lecture F01 (Jim): 11:00am-11:50am Mon, Wed, Fri in Library 389 Lecture F02 (Jim): 1:10pm- 2:00pm Mon, Wed, Fri in Library 389 Laboratory FL1 (Jim/Zach): 9:00am-10:20am Thu in ETC 211 (Zach) Laboratory FL2 (Jim/Todd): 10:30am-11:50am Thu in ETC 211 Laboratory FL3 (Jim/Hannah): 1:00pm- 2:30pm Thu in ETC 211 Personnel Instructor: Jim Fix, Library 314 Office hours: TBD, but feel free to come by my office or make an appointment. Teaching Assistants: Texts We will be using Sipser's Introduction to the Theory of Computation for study of finite automata, grammars, Turing machines, and computability theory. The book is a great introduction to the theory of computing, in general, and does cover additional ground beyond the course. For programming and problem solving using the programming language Java, we will use Eck's on-line book An Introduction to Programming Using Java. For some parts of the course we will be working from notes that I'll be distributing in class. These will also be available on-line. The notes will cover notational prelims, recursive definitions, strings and formal languages, logic and circuits, and processor design. You might find the course schedule useful for seeing the readings helpful for each topic we cover. Lab Resources We will be using the Macintosh labs in the ETC for programming assignments. The main applications we'll run include text editors, the Terminal program, DrJava, Sun's Java commands, LogiSim, and the Helium Haskell program interpreter. You'll be saving your work on the Home Server, though you might also find it useful to get a flash memory drive to store your work as well. Responsibilities There will be written homework assigned regularly throughout the semester, roughly one or two short exercises a week. There will be weekly programming exercises, assigned at each meeting of the laboratory section. These will also be made available on the assignments page. There will also be a midterm and comprehensive final examination and a review session for each. You are encouraged to work with others on the laboratory assignments, discuss the written homework, and to seek help from me, the TAs, and the math tutors. The lab sections, especially, will be devoted to completion of the programming exercises and you should certainly take advantage of that time to ask lots of questions and work with others in the class.
Of course you are ultimately responsible for the work you hand in. It should reflect your thinking about and your understanding of the material. Finally Enjoy the course. | |