Interview with Hanhan Wang: EECS, robots, and more! by Melis A. '08
What it’s like to study electrical engineering and computer science at MIT
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.
Maybe I’m not looking enough into it, but is the bubble wrap in case it runs into the walls…?
I’m attempting an extremely watered-down version of this in my microelectronics class and I can conceive a couple of reasons for bubble wrap:
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!
The bubble wrap’s actually so the sonar signals sent out by the robot have a higher chance of bouncing straight back and getting picked up by the sensors.
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.
I do understand and agree with the axiom that parents should not get involved in decisions surrounding the choice of major. But EECS at MIT sounds so much exciting that I can’t but help ask how I can motivate my child to consider this major. I have heard comments such as “this is the most difficult major”, “the students enrolled in this major at MIT are the most unhappy”, “EECS majors have no life outside of academics” etc. etc. How to debunk these myths? Any pointers from anyone will be helpful.
Those myths might actually work to motivate your child, because we all know that MIT students are academic masochists
Ray is exactly right. Sonar reflects off of various materials differently – similar to how light reflects off of glass more precisely than a blackboard. So to get the most accurate readings, we actually pad the walls with bubble wrap! But, it has also proven quite useful when you’re frustrated in lab and end up popping the bubbles. hehe.
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.
This reminds me of the jokes my sister learnt at Carnegie Mellon:
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.
@HanHan: Does this have something to do with the low acoustic impedance of air in the bubble wrap?
Btw, my sister hadn’t a hint of coding experience when she arrived at CMU. You can make it if you try!
Thanks Hanhan for your response. You have said “With that said, course 6 is not for the faint of heart.”. Does than mean if a student is a bit unsure(particularly programming), they are better of going for some other major? If you measure the difficulty level between 1(least difficult) and 10(most difficult), where does EECS fall? What majors fall at or below 5?
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
For people with no prior exposure, programming can have quite a steep learning curve. This is because it takes time to get used to syntax and to really understand what is going on in the code. However after the initial phase that anybody can learn to program effectively so long as they put enough time in to it. So the main thing to do, if worried about programming, is to get as much prior experience as possible in an easy well structured language.
Ohh! I know what the bubble wrap is for!
(I took this class last semester. =P)
Hmm.İt’s Very good for the fictions movie
I’ve always (well .. for as long as I’ve wanted to go to MIT) wanted to be Course VI (probably 6-2) .. and its always cool to hear more about it
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
Question:
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?
“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
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.
in response to “A parent”
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.
The learning curve for most types of programming is not incredibly steep, and with a passion for it and the right teachers (but especially the former) it is fairly simple to pick up. I’m no genius (very far from it ), but I started programming in the 9th grade in pascal, and once you learn the fundamentals learning almost any language becomes much easier. I’d recommend anyone to give it a try before they get intimidated, and they may be surprised at what they find.
This is in Response to Dr. White’s blog entry. I hope it is alright for me to post comments here.
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.
Hi Melis, i want to thank u so much for the encouragement u’ve given us regarding EECS. I’m an incoming 2011 student who wants to do EECS.I dont know anyone at M.I.T. but I’d love to email you and ask questions so I can learn as much as possible before I start in September. Please email [email protected] to hear from you soon.
Hi Melis, i want to thank u so much for the encouragement u’ve given us regarding EECS. I’m an incoming 2011 student who wants to do EECS.I dont know anyone at M.I.T. but I’d love to email you and ask questions so I can learn as much as possible before I start in September. Please email [email protected] to hear from you soon.
Hi Melis, i want to thank u so much for the encouragement u’ve given us regarding EECS. I’m an incoming 2011 student who wants to do EECS.I dont know anyone at M.I.T. but I’d love to email you and ask questions so I can learn as much as possible before I start in September. Please email [email protected] to hear from you soon.
Hi Melis, i want to thank u so much for the encouragement u’ve given us regarding EECS. I’m an incoming 2011 student who wants to do EECS.I dont know anyone at M.I.T. but I’d love to email you and ask questions so I can learn as much as possible before I start in September. Please email [email protected] to hear from you soon.
As a course 6’er who has taken both the traditional “double-o’s” and the new curriculum (olay, hanhan and I are all lab assistants for the new 6.01), I think it is imporant to note that the new curriculum has a key benefit, in that it gives students exposure to a wider variety of material in a shorter period of time.
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.
one more thing – i’m sure Olay knows this, but ChemE is actually course 10. And yes, they’re hard-core, too.
I think Hanhan is great!
you mention that 6.01 and 6.02 will be taken in freshmen year. How do they fit these into their schedules with the freshmen credit limit?
Thanks a whole lot to Hanhan and the others for your insightful comments regarding EECS and programming.
How are 6.01 and 6.02 freshmen classes? I looked on the online catalog, and it says 8.02 is a prerequisite for 6.01, and 18.03 is a prerequisite for 6.02. Since most ’11s haven’t taken these classes already, will we take 6.01 and 6.02 sophomore year?
I, too, am an LA for 6.01 right now and must second all of the above comments. I will say that the main attraction of 6.01 over 6.001 for some people is just that it’s more hands-on, so it turns less people off right away. Furhermore, it exposes you to far more than just the theory of programming, and the wider breadth of topics serves to motivate future learning as someone mentioned earlier.
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.
I think it’s fun to make intelligent robots. I wonder what the future would be like…
As one of the faculty members involved in 6.01 and the development of the new curriculum, I am not sure if it is all right for me to comment on a blog more intended for students to talk to each other. If you would like to hear from me on this blog, post and ask any questions you would like me to try to answer. In a day or two, I will check back in and do my best to answer questions. I also think it would be perfectly reasonable for me to be asked to “go away”, and will do so even if I got only one such request.
Hello,I know it will be a long amount of time before
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.
Justin:
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
Justin, any language is ok because it gives you programming logic which can be applied on almost every other language. I started with QBasic and even programmed my first robots with it Now I mostly code in C and PHP, depending on what I need. C is great for controlling stuff with your PC and PHP easily extends it’s abilities. As for where to learn robotics, I can’t help you with that because I picked up basics from my father and the rest in school (I’m in a tech high school and the robotics group in my junior high was quite good). If you have any questions or problems you can post them at http://www.MITprospectives.org and hope that one of us will know what you need good luck
I I <3 Python!
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.
Hey Justin,
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.
Anonymous, the block diagram says 8.02 is a corequisite.
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?
Wow I didn’t expect so many responses!
Thanks for all the help.
Well, I’ve been admitted for MIT class of 2011, and I am really interested for majoring in EECS. To tell you the truth, I only know a little about Pascal, but I really want to try it anyway. I have read the comments posted above, about the suggestion to study Phyton first. Is there any other thing I have to prepare?
Justin:
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 ). If you want to try Pascal i recommend Lazarus, which is a great open source IDE.
Hope that helps.