Electrical Engineering and Computer Science (more commonly referred to as Course 6 or EECS) is the most popular major at MIT with 700 undergraduates. The EECS department is the best in the country and has pioneered the fields of artificial intelligence, computer science theory, and electrical engineering. Course 6 alums and professors have developed the first video game and joystick, a detector for interplanetary communication, HDTV, Ethernet, and much more. They have also founded companies such as Hewlett-Packard, Qualcomm, Analog Devices, and Texas Instruments. I sat down with Hanhan Wang, a senior majoring in Course 6 to learn about her experiences with the major.
Hanhan’s love for Course 6 is contagious! In high school, she learned about robotics through Carnegie Mellon’s summer programs and later taught LEGO robotics to middle schoolers at RoboCamp. After realizing her interest in computer science, she naturally made the transition to MIT. She loves the EECS department because of the phenomenal professors, resources, and students. Hanhan especially enjoys the non-competitive environment where everyone pushes themselves to achieve more and people are always willing to help. Granted, every Course 6 major has to work extremely hard, but she loves what she is learning. Next year, she will be designing satellite antennas and communication systems at Orbital Science Corporation.
Currently, she is a lab assistant, or L.A., for a new class called 6.081 (Introduction to EECS 1). Course 6 will be changing its curriculum for the Class of 2011, and Hanhan explained the current system and the modifications being introduced. I will try to cover it briefly, but if you’re looking for a detailed curriculum, go to http://www.eecs.mit.edu/ug/newcurriculum/index.html.
Current curriculum:
- 4 required subjects (6.001-6.004) that teach you everything you need to know for your more advanced EECS classes
- Differential equations and an Advanced math class
- A departmental lab class
- 5 “Headers,” which are advanced classes (e.g. 6.011, Introduction to Communication, Control, and Signal Processing)
- 1 Department Lab such as the infamous software lab, 6.170 where students design a RSS reader, GizmoBall, or Anti-chess.
- 6.UAT and 6.UAP as a senior
New curriculum:
- As a freshman, take two introductory lab class that is team-based and very broad. The first class, 6.01, the class that Hanhan is helping with, focuses on Python programming and circuit theory in order to control a robot. The second class, 6.02, focuses on computer architecture and communications theory on a simplified cell phone wireless system.
- 3 foundation subjects (which will include some new classes like an Introduction to Quantum Physics)
- 3 “Headers”
- 2 Advanced/Grad classes in a specific area of EECS
- 1 Department Lab
- 6.UAT and 6.UAP as a senior
A Tech article quoted EECS Department Head W. Eric L. Grimson PhD ’80 as saying, “We wanted to develop an introduction to the department that responds to several important pedagogical issues: it should cut more broadly across all of EECS, it should have a strong hands-on experience, and it should engage students in more direct contact with teaching staff than the traditional lecture/recitation format.”
I took a little trip to the 6.081 classroom and saw the Pioneer robot in it’s natural habitat (a “play pen” with bubble wrap walls =) ). The robot is controlled via the students' Python code on a laptop. This week's lab teaches robot localization – how a robot can figure out where it is in when you place it at a random spot in a maze. The robot has a map of the maze in its software brain. When it wanders around the maze, the sonar sensors take unique readings from each physical maze location. Then, it does some probability calculations to figure out its most likely position, based on its current sonsar readings, the path it has already traversed, and the optimal sonar readings expected at each maze location. This approach works extremely accurately, although sometimes the robot gets confused when the maze is symmetrical! Can any of you guess what the bubble wrap is for?

If you have any questions about Course 6 or the class, post a comment and I’m sure someone can answer it.
Comments (Closed after 30 days to reduce spam)
Posted by: Karen on May 13, 2007
1) To protect the robot when it develops a mind of its own and veers into the wall
2) To pop when you're frustrated at your robot
3) To protect your robot when you get frustrated with it and throw it against the wall
4) Robot that can pop the most bubbles wins!
Posted by: Snively on May 13, 2007
If the walls didn't have the bubble wrap, the sonar might just bounce off the smooth walls at an angle and never get back to the sensors.
Posted by: Ray on May 13, 2007
Posted by: A parent on May 13, 2007
Posted by: 0 on May 13, 2007
To the parents out there - I think a lot of students, especially the female ones, are never exposed to topics in EECS through traditional high school curriculum. So you really have to look for these motivations outside of school. Does your child's high school have a FIRST robotics team? It's a great program where students build a robot to compete in various challenges. I was lucky that I grew up around Carnegie Mellon - so there were lots of summer programs and daycamps that they ran in the topics of computer science. Are there any universities in your area?
I think early exposure is crucial to getting students into this major. A lot of my female friends say "I wish I had chosen course 6, but I never programmed before and was too intimidated in a freshmen class where everyone is already a coding whiz." The thing I always remind myself is that they have more experience, but that doesn't necessarily mean intelligence. With that said, course 6 is not for the faint of heart. You have to be passionate about EECS to make it through the long psets and labs. But I love it, and I wouldn't be any other major. The only issue I had is that students need to shower before coming to lab...hehe.
Posted by: Hanhan on May 13, 2007
Why are you still awake?
Answer: CS212!
Why are you stealing my food?
Answer: CS212!
Why are you throwing furniture down the stairs?
Answer: CS212!
Ahh, comp sci. The perfect excuse for all sorts of behaviour.
Posted by: Tung Shen '11 on May 13, 2007
Btw, my sister hadn't a hint of coding experience when she arrived at CMU. You can make it if you try!
Posted by: Tung Shen '11 on May 13, 2007
I have heard way too often about programming being so extremely difficult for beginners that it turns OFF otherwise potentially bright students. In your view, is there anything that institutions such as MIT can do to break this barrier. Is it that EECS uses this as a selection process to let in ONLY those who have a inborn interest in programming? Are there any counselling/help sessions at MIT to raise the confidence level of otherwise bright students, with regards to EECS
Posted by: A parent on May 13, 2007
Posted by: 0 on May 13, 2007
(I took this class last semester. =P)
Posted by: Laura on May 13, 2007
Posted by: Bilim Teknik on May 13, 2007
Since first learned that they were redoing the curriculum (week before this years CPW, my spring break) ..its worried me a bit .. I mean, I have faith in MIT's staff to make worthwhile classes, but I'm just kind of nervous that its getting "watered down", so to speak. 6.001-004 are traditions .. and its a little scary/sad to see them go .. I mean I know that some of the old material from 6.001 thats not gonna be in 6.01 is moving to 6.005, but it just seems like some of it 's gonna get lost. Can someone who knows better help to ease my fears?
Either way, just to get a chance to learn the old way (and to get a grip on some Scheme, my first LISP) I'm tryin' to do 6.001 via OCW and the iCampus Tutor. Hopefully, I'll get to learn it this way and then get a chance to learn it the new way in '08. Also, I already know quite a few languages, but since I started with Perl (and yes.. I realize the oddity of learning a language like perl first), I never really bothered to learn Python (since they are similar purpose). So I ask someone who's taking (are helping to teach) 6.081/2, is it worth my while to get a jump on Python or should I just wait until I take the class?
Thanks,
~Donald
Posted by: donaldGuy on May 13, 2007
From what I've heard, Course 6-2 is basically both of 6-1 and 6-3. Is it those two fully combined, or is it a water-down version of both?
Posted by: 0 on May 13, 2007
Traditionally, 6.001 and sometimes, 6.002 have been known as the "weed-out" classes. Most students who dislike 6.001 (Scheme programming) or 6.002 (electronic circuits) realize that they're not interested in the major. I was terrible in 6.001, but the class tries to give students every possible resource to succeed. There are lab hours where lab assistants will help you with projects. There are office hours, and you can go to any TA's office hours. The best part is that there are so many students taking the class with you who are always willing to help. I worked on projects til 5am with friends - they've become my best friends through MIT!
In terms of this "watering down" of the curriculum, I have to say this: C1 is not meant to be a replacement for 6.001. It's an extra layer in between. The modified 6.002-6.007 will just be as rigorous as the old 'double-Os'. I think the main benefit of the new curriculum is that it allows students the space to take advanced classes earlier. I've taken very interesting grad classes such as Digital Signal Processing and Feedback Control Systems, and I just wish I had the time to take more!!
6-2 is a combination of 6-1 and 6-3. It just gives you more flexibility, in the case that you don't want to be a hardcore computer scientist or circuit boy/girl. Most employers also prefer engineers who understand both software and hardware, so it's a great path to take.
Posted by: Hanhan on May 13, 2007
I took the 6.081 class that Hanhan helps out with and I myself have helped/am helping with the class for the past school year. I came into the class with ZERO programming experience and I came into MIT with the perception that I could not do programming because I was not a coding whiz. I took the 6.081 class and I really got to have a fascination with programming. I am sure that there are people with similar stories who took 6.001.
Also, you have to remember that EECS is not ALL about programming. I know of several people who are strictly 6.1 (EE). Again, I myself came in solely for EE, but then I decided to do both. And the truth about MIT is that regardless of what you study, you better be willing to put in the effort, whether it is "easy" or not. I would rank EECS around a "8" and I think the only major that I know of that would rank higher or the same in difficulty would be ChemE (course 20), because at least our test averages are higher. Either way, you just have to pursue something you like
For the person who asked, 6.2 is not a water-down version of both. You take the same classes that people studying either 6.1 (EE) and 6.3 (CS) would take. The only difference is that you would probably lack the depth that the 6.1 and 6.3 people have.
Posted by: Olay on May 13, 2007
Posted by: JamesM on May 13, 2007
The drawback to the older core, in my opinion, is that it is easy to get lost in the details of the problem sets and lectures. These courses give you a strong grounding (hence we call them "foundation" courses now) - but it requires an extraordinary will to keep one's heart in the material without knowing quite where it's going. After taking 6.01, students will know why it is they should care about op-amps (or even what they look like), why feedback is important, and numerous other carrots to motivate future work. Engineering today is all about integration of ideas, not about building circuits OR programming OR mathematics - it is all three combined, and more. I think anyone willing to try the new core, as i have, will be come out more enlightened to what exactly engineering is than they came in.
Posted by: christian on May 13, 2007
Posted by: christian on May 13, 2007
Posted by: Minh on May 14, 2007
Posted by: a parent2 on May 14, 2007
Posted by: A parent on May 14, 2007
a parent2: While there is indeed a freshman credit limit, there is no list of required freshman classes. Freshman, like any other year, can take any classes they want, so long as they fit into the unit limit and their advisor approves. As a result, they can take both 6.01 and 6.02 their freshman year if they choose to, and spread out some of the GIR's (I know plenty of people who've done this spreading out, myself included).
Hope that helped.
Posted by: Michael Borohovski on May 14, 2007
Posted by: Jacob White on May 14, 2007
I looked at the 6.01 course outline. It has certainly been made interesting and beginner friendly. Designing a program to actuate a Robot seems like a very practical and fun way to introduce programming, particularly for students who have no exposure to programming. It is much easier for students to relate to things that are tangible. This method of teaching is a welcome departure from a curriculum that dwells in the abstract and theoritical realm which can quickly put off beginners who are testing the waters. The project focus as opposed to classroom sit-in exams should lower the anxiety level somewhat. Having said that, the course does seem to have the rigor worthy of any MIT class.
Posted by: A Parent on May 14, 2007
Posted by: elena on May 14, 2007
Posted by: elena on May 14, 2007
Posted by: elena on May 14, 2007
Posted by: elena on May 14, 2007
Posted by: 0 on May 14, 2007
Posted by: Freiddie on May 14, 2007
I am able to apply to MIT (Class of 2012),I was interested in a language suitable for beginners that is easy to learn, as well as useful.
Our school's programming class teaches a obscure language that seems to have no purpose other than creating two-dimensional games.
Besides,the language is windows-only,making the it use-less for me, as I only have Linux machines.
I would also like to know where would be a good start at building robots, as our school does not have a program or course for robotics.
Unfortunately,neither does our community.
Posted by: Justin on May 15, 2007
I admire your initiative to get a head-start in some of this stuff. If you want a great beginner's language, I would recommend trying Free Pascal. Pascal's syntax is extremely logical and there aren't any really difficult components to memorize in it. Plus, I'm almost 100% certain that Free Pascal can be coded and compiled on both Windows and Linux, so it might be a great place for you to start. Otherwise, you may want to pursue a Linux-based version of C, as I can only assume there are countless out there.
As for getting started with Robotics, that might be a bit trickier. If there's no FIRST Robotics Teams within your vicinity you'll have to get a bit creative to get involved in that. I know summer camps/classes exist for Robotics (perhaps even a few at MIT?), so if you really want to devote some time to it you should look for one such program. Hope I was of some help to you.
Posted by: JamesM on May 15, 2007
If you are running linux, there are already a number of compilers and iterpretors installed on your machine. As JamesM said, working in a UNIX world, knowing C is always a good thing. You already have gcc, the GNU C Compiler, so thats a good option. Scripting languages are also great to know, you could try just playing around with bash. Python is supposedly good for beginers, plus its whats used in 6.01-02 (/6.081-082), so you could get a jump on it. I started with Perl, the syntax is a little cryptic for some, but I thought it a great language cause of its flexibility, etc. Ruby is also fantasticly fun and pretty easy. For all of these there are plenty of free tutorials online, just try google. Or if you really want, I can give you some specific suggestions.
Personally, Pascal is a bit dated.. its still a good language, but I think Ruby or Python are probably your best bets.
Best of Luck,
~Donald Guy
a hopeful '12
Posted by: donaldGuy on May 15, 2007
Posted by: Sh1fty on May 15, 2007
I actually had very little programming experience coming to MIT, but I did have a very strong logic background thanks to my dad, the computational math PhD. That helped me more than learning any language. And you can gain those logic skills from any math competition.
Posted by: Hanhan on May 15, 2007
Thanks for all the help.
Posted by: Justin on May 15, 2007
Is 18.03 a prereq. instead of coreq? Does this mean that 6.02 is not a freshman class for those that havent taken diff. eq. by the end of 1st semester?
Posted by: Josh '11 on May 16, 2007
Posted by: Jonathan Pradana on May 18, 2007
As Sh1fty said, "any language is ok because it gives you programming logic which can be applied on almost every other language".
That is totally true. However most schools that i know of start teaching students with Pascal because it is so easy to learn. Its also great for picking up "correct" programming habits because it's designed for structured programming (so you can't do any weird stuff
Hope that helps.
Posted by: Chessy on May 20, 2007
Add a comment
Comments have been closed.