ProgrammingAlthough there is no Institute undergraduate requirement in programming, many students choose to take an introductory-level programming course during their four years at MIT, either to satisfy an internal departmental requirement, to learn a new computer language, or even just for fun.
There are a number of classes available this fall, covering a range of topics and levels of difficulty; among the offerings are Computers and Engineering Problem Solving (1.00), Structure and Interpretation of Computer Programs (6.001), Introduction to Interactive Programming (6.030), and Introduction to Computer Methods (10.001).
1.00 is “more appropriate for [students not majoring in Electrical Engineering and Computer Science (Course VI)] -- in engineering, science and management,” said Professor of Civil and Environmental Engineering Steven R. Lerman ’72, who is teaching 1.00 fall with Principal Research Scientist V. Judson Harward of the Center for Educational Computing Initiatives. 1.00 is “more applied [and] applications-oriented” than 6.001, and taking it earns twice as many units as 10.001. In the fall term, both 1.00 and 6.030 are being taught in Java. In the spring, 1.00 is taught in C or C++.
6.001, which is a 15-unit course and offered during both the fall and spring terms, is “aimed at people who want to get an exposure to a lot of ideas in programming languages,” said Professor of EECS Duane S. Boning ’84, who is teaching the course this fall with Assistant Professor John S. Chapin. 6.001 uses the language Scheme.
The Java-taught 6.030 is specifically intended for first semester freshmen without prior programming experience, according to Professor of EECS Lynn A. Stein, who created and is teaching the fall course. The course is good for “people who want to learn about programming” as well as “thinking how to problem-solve,” she said. 6.030 focuses explicitly on programming, unlike 6.001, in which students learn Scheme as a vehicle to learn about programming methodology and theory.
10.001 is a 6-unit course which is required for Chemical Engineering (Course X) majors. It is popular with freshmen during IAP; during the first half of the class, students learn C, and the latter half of the course explores numerical methods. “It’s not really a computer science course; it’s really a ‘how you solve problems’ course, whereas 6.001 is really a CS course,” said Assistant Professor William H. Green, Jr., who is teaching 10.001 for the first time this fall.
The 12-unit 1.00 “tends to require a lot of work,” said Harward. For a first semester freshman, especially one with no programming experience, the course tends to be “too intensive,” according to Harward. Additionally, the course has Calculus (18.01) as a prerequisite.
However, “more of the fall-term [students have] some type of experience in some type of programming,” Lerman said. The class is “certainly appropriate for those individuals.”
Lerman obtained his bachelor’s degree in civil engineering from MIT, and stayed to pursue graduate work in transportation systems analysis. Originally intending to study physics, Lerman ended up in civil engineering after taking a freshman advising seminar. Currently, he works “in the application of computer technologies in education,” he said.
Harward, who has been at MIT since 1988, studied archaeology at Harvard, receiving undergraduate and graduate degrees. Although he has taught a number of courses in archaeology elsewhere, this is the second time he is teaching 1.00, the only class he has taught at MIT.
“Teaching’s fun,” he said. “It forces you to rethink a lot of questions... that you haven’t revisited for years.” He has had on-going research interests in multimedia and object-oriented programming.
6.001, one of the most popular classes at MIT, “focuses on a whole spectrum of ideas in programming languages, and a very wide variety of styles and paradigms in program design,” Boning said.
Boning took 6.001 the very first year it was offered in 1980, having taken a degree in EECS at MIT as an undergraduate and continued to study the subject at MIT for graduate school. His background is on microelectronic devices and systems, and he has taught 6.001 several times as well as having taught recitations in Signals and Systems (6.003) and Introduction to Communication, Control, and Signal Processing (6.011).
He enjoys both the opportunity to do leading-edge research and the opportunity to work with students, both through courses in undergraduate education and research by being a professor.
Chapin studied modern Japanese history as an undergraduate at Stanford University, and stayed there to pursue graduate work in computer science. He has been at MIT since 1997, although this is the first time he will be lecturing 6.001.
Chapin recommends that students “take a variety of courses, including... humanities, because students aren’t just going to get that opportunity later in life.”
6.030, another course developed at MIT, was first offered under the number 6.096 several years ago and is part of Stein’s research into “Rethinking CS101.” This fall, approximately 1,000 students will be using the course material in over a dozen schools internationally, even though the textbook will not be published until next year, according to Stein.
Traditionally, introductory computer science classes are based more on algorithms, Stein said. 6.030 is “more about network distributed events and server-based programming.”
She majored in computer science at Harvard University, and pursued graduate work in the field at Brown University. Her outside interests include fiction, fantasy, knitting, cooking, gardening, travel, and her family.
10.001 is offered during the fall and IAP terms. During the fall, 10.001 is “not a very hard course” and “mundane,” according to Assistant Professor William H. Green, Jr., who is teaching the class this fall. However, during IAP, 10.001 is “one of the most memorable or painful experiences at MIT.” A true “firehose course.”
Green majored in chemistry at Swarthmore College, and obtained his doctoral degree in chemistry at the University of California, Berkeley. “I worked for six years in industry... it’s hard in industry to do really good research, because the business needs are paramount.” He currently researches “using computers to model chemical reactions and complicated kinetics.”