This is an old revision of the document!
This is Prof. James C. Hoe’s personal and unofficial recommendations to an ECE undergrad. Many topics also apply to MS students. I also started a new MS-specific blog.
In places, this page contains certain biases toward someone who is interested in computer architecture. This bias exists not to exclude students in other fields of study but to encourage students to seek out mentors knowledgeable about their own areas.
I will continue to expand this page as time goes on. This page does not reflect the opinions of anyone else, and there is no guarantee of suitability. I believe every word I said, but that doesn’t mean you should too. This writing is informal, but please help me make this better by pointing out mistakes.
ECE says you need 379 units for a BS degree (starting class of 2012).
My interpretation of that statement: Without any AP credits, you should not have to take more than 4 courses per semester for 8 semesters. Most of you have AP units, so this means you could actually take less, or take 4 courses per semester that included other more “well-rounded’ courses beyond the 379 needed to graduate.
ECE says, “An overload is defined as any schedule with more than 54 units in any semester. A student will only be permitted to overload (by no more than 12 units according to the Undergraduate Catalog) if he or she achieves a QPA of at least 3.5 out of 4.0 in the previous semester.”
My interpretation of that statement: If you go beyond 4 “real” courses, you are overloading, and the quality of learning suffers. (There is a reason you see the prefix “over” in the word “overloading”. It is a warning that you are operating beyond the intended range.) Ask yourself, are you here to learn as well as you can or as fast as you can? What most students do not realize is that there is typically more than a factor 2 difference (to be conservative) between the absolute performance of the best “A” student and the lowest “A” student in a course. Just because you got an A, you should still ask yourself, did you get as much as you can out of that course? If you are taking 66 units, you don’t have time to get as much as you can out of your courses.
You might be tempted to think by overloading you are getting more “units” per dollar (of tuition) out of CMU. Don’t confuse that with how much learning and retention you are getting for your dollars. Overloading is not worth it.
There are so many different courses you could take as an ECE undergrad at CMU. This can get really confusing. The suggestions below are simply a representation of what “I” would have taken had I been an undergrad in ECE today. (This is what ECE provides as general examples.)
- 18-100: Introduction to ECE (12 units)
- 18-200: Emerging Trends in ECE (Sophomore Seminar) (1 units)
- 18-202: Mathematical Foundations of Electrical Engineering (12 units)
- 18-220: Fundamentals of ECE: Electronic Devices & Circuits2 (12 units)
- 18-240: Fundamentals of ECE: Digital Logic & Computers3 (12 units)
- 18-213 (15-213): Introduction to Computer Systems (12 units)
- 18-290: Fundamentals of ECE: Signal Transmission and Processing (12 units)
(Note: 18-213 and 18-290 are new core requirements in the new ECE curriculum starting with the Class of 2012.)
I strongly discourage anyone from taking more than 2 core courses in a semester. It is not a goal to finish all 4 core courses in your sophomore year. Take them in the order of your interest so you can get to the right 300-level courses sooner.
- 18-320: Microelectronic Circuits (12 units)
- 18-341: Logic Design Using Simulation, Synthesis, and Verification (12 units)
- 18-447: Introduction to Computer Architecture (12 units)
(Note: For the class of 2012 and later, 18-447 will remain a depth course. You will need to take one of several qualifying 18-34x courses—e.g., 340, 341, 348, 349—or 18-320 as its prereq.)
- 15-410: Operating System Design and Implementation (12 units)
- 18-545: Advanced Digital Design Project (12 units)
There are still 50 units of Free Electives. They should not all be technical, but it does give me the time to take a few more courses (without overloading). Here are examples of some courses I would consider choosing from (as a student interested in computer architecture).
- 18-340: Digital Computation
- 15-411: Compiler Design
- 18-441: Verification of Computer Hardware Systems
- 18-525: Integrated Circuit Design Project
- 18-540: Rapid Prototyping of Computer Systems
- 18-740: Advanced Computer Architecture
I would make it a point to take a few fun, non-ECE courses (freshman-level intro courses are just fine).
I would also include a senior project. If I were interested in going to graduate school, I would start my senior project the summer before the senior year. I would not try to do undergraduate “research” during the semester with a full course load. Lastly, I would do a technical internship in the industry the summer before my junior year.
Again, this simply reflects what I would have done as an undergrad. If you don’t like what you see here, don’t be shy about asking another professor closer to your area to tell you what he/she would do.
I am assuming this question is asked by someone who is interested in the computer systems area (think 18-213/15-213) that is in this overlapped region between ECE and CS. (You would be glad to know that this overlap in computer systems is especially deep reaching and seamless at CMU as compared to most other schools, including some with so-called EECS departments.) If someone in applied physics or theory is asking this question, come talk to me directly; I am curious to meet you.
What is clear is that a systems person should absolutely take classes from both ECE and CS. Beside data structures and algorithms, topics like OS, compilers, networking are all par for the course. If so inclined, taking a course in theory or programming languages is helpful with acquiring a new way of thinking that does not come naturally to a systems person.
Separate from my recommendation to take courses from both departments, I don't see any good reason to go through the trouble of achieving both degrees. The more competitive your are as you advance in your study and career, the more you should expect to be judged by what you can do and not what you credentials would suggest you should be able to do. For the best jobs and graduate schools, no one is going to care whether you have CS or ECE or both degrees.
I am however a strong advocate for double-major or minor with very dissimilar disciplines (Business, Drama/Art/Music, Sciences…) if you are driven to do so by your unique interest or talent, and not for trophy hunting.
I assume all of you have the mental “horsepower” if you are at CMU in the first place. It is easy to do well if 1) you enjoy what you are studying AND 2) you apply good study “mechanics”. If the former is false, you have a big problem. But, the latter just takes discipline. I was going to write about study mechanics, but then I found this. This link isn’t presented from quite the right context, but it has got the basic study mechanics well covered. Now you have an actual recipe for success written down in front of you, do you have the discipline to follow through?
Studying correctly will make learning more pleasant and productive—all the while taking LESS (not more) time. Nothing is more frustrating (and a big waste of time) than showing up to a lecture and not understanding what the professor is talking about. (Did you do the reading assignment beforehand?) Nothing is more frustrating (and a big waste of time) than struggling on a homework assignment that you fundamentally have no clue about. (Did you wait until the night before the deadline so you cannot get help in office hours? Did you skip the relevant lecture in the first place? Did you do the reading assignment?) These unpleasant scenarios and others like it can be avoided if you had the discipline and mechanics to do the right thing in the first place; trying to make up afterwards is a forever up-hill battle. Every topic you don’t understand well now will make it that much harder to understand the next topic that depends on it—don’t let it snowball.
I often get asked by students (even seniors) the question “do I need to know X for the exam.” This is a sure sign that this student is still under the high-school’ish mentality of studying for grades rather than studying to learn. Ask instead the question “do I need to know X if I want to have a career in Y.” Similarly, when you receive a low grade in a course, worry less about how it impacts your GPA; worry more about what the grade is telling you—you didn’t learn the material as well as you should.
It always puzzles me why I don't get more questions in class. I know I cannot possibly be getting through to everyone all of the time.
Rule of Thumb #1: If the professor said something that doesn't sound right or is not clear, there is a pretty good chance he/she overlooked to explain some important detail/assumption or made an outright mistake (yes, it does happen, and no, we are not always testing if everyone is awake).
Rule of Thumb #2: If the professor said something that doesn't sound right or is not clear, there is a pretty good chance the rest of the class is confused by it too.
In both cases, it is your duty and privilege to ask for clarification. (Caveat: this works much better if you went to lectures prepared, i.e., having done the reading assignments.) If you were wrong about it, it is better to find out then and there.
You cannot really “study” for a final in the last minute. If you really could make a big difference by cramming in just the days before a final, we wouldn't need semester long courses. You can only “review” before the final what you studied and learned over the whole semester.
A great way to review for a final is to work out old “practice” exams. The most effective way to do this is to finish reviewing first and then test yourself with the practice exams to see how prepared you really are. It is useless to study an old exam itself; it is even worse to study an old exam's solutions. Keep in mind, it is not good enough to understand the solutions; you need to be able to come up with the solutions without prompting. It is not good enough to know how to do those exact problems; you need to be able to solve problems of the same nature in general.
Lastly, I often see students studying lecture slides. Lecture slides contain very little information on their own; they are more like mental tabs to remind you of what was said in the book or in the lectures. If you have not read the book or did not attend the lectures, there is very little you can extract on your own from the lecture slides themselves. If you are not doing the reading assignments or you are not attending lectures, then you are really missing out on learning.
All in all, if you are going to spend the time reviewing, make sure you are not just going through meaningless motions. Otherwise, you are much better off just getting a good night sleep before the exam.
My second least favorite duty in teaching is to assign grades. My least favorite is to deal with cheaters.
It troubles me greatly that some students put so much more emphasis on getting the grades over actually learning the knowledge. Some degree of this is difficult to resist (e.g., cramming the night before the exam), but we all know what this can also mean when taken to the far extreme.
You would do much better if you worked on learning the materials. Your grades reflect how well you have learned and not the other way around. One day you will leave CMU and will have to make a real living with what you have learned; your GPA and diploma can offer little solace to you or your boss if you cannot perform on the job.
For anyone even contemplating cheating, you should understand it is just not worth it. First of all, cheating cannot fix the fact that you really don't know or aren't able to do what you will need in the subsequent courses and in your later life. Second, although the chances of getting away with any one isolated instance of cheating is typically quite good, any one incident is also unlikely to have a noticeable positive impact on your semester letter grade. For that, one has to be cheating systematically, and one will surely get caught for that. Third, think back to when you were little and how your mother could always tell when you lied. She couldn't read your mind; you were just more obvious than you think. Similarly, we (professors), having spent basically our whole life in school, know a lot about cheating and cheaters. You are not going to easily fake us out with something we have not seen before. Lastly, by watching a student over the course of a semester, we (professors) have a very good sense for what is a student's expected performance and trend. You will get the grade you worked for.
For someone who is already feeling the pressure to cheat, you should realize that this is the symptom of a much deeper problem. Some how you have let your study fall behind and out of control. If you continue the same course, your problem will only snowball. The only way to recover is to identify the problem and to change what you are doing to regain control. Cheating is a poor patch job that does nothing to fix the root of the problem. I encourage everyone to take at look at this very helpful page on how to avoid being caught up in this bad situation in the first place. (Notice their suggested way to address academic integrity is to do better in the first place so there is no reason to consider cheating. I fully agree with this.)
It is very good to do undergraduate research, especially if you are planning to go on to graduate school. It will give you a taste of “research”, and it will give your advisor something concrete to write about in the recommendation letter (if you do a good job that is). Follow this link to see a short overview of undergraduate research and graduate studies opportunities at CMU.
I typically advise undergraduate students against doing formal research projects during the semester (where there are hard commitments or you are graded). Undergraduate course work is hard enough at CMU. Try to do both at the same time, at least one side is going to suffer. (Experiences say undergraduate students will prioritized course HW, projects and exams over research since research project usually don't have set week-to-week graded deadlines.)
This doesn't mean you shouldn't do things outside of classrooms. Look into, for example, Build 18 (http://www.build18.org/), the Robotics Club, the Mobot Race. It is also just fine to think of something cool to hack together on your own. Especially during the semester, you should look for things that are relaxing and fun to do but won't add extra pressure to your course load. (If you say “but I am already doing well enough and still have all this time”, see what I have to say about overloading. If you are really that good, you really should try to do still better.)
I strongly recommend you (undergraduate students) to try out research during the summer when you can devote the time and really get something out of the experience. You have to have realistic expectations though. Many of our freshmen and sophomores are already very skilled in programming and may be even hardware design, but “research” is about a lot more than development skills. The more courses you have taken, the more you will develop the maturity of thinking and the depth of understanding that are needed for productive research. In the earlier years, look around for “projects” (as oppose to research) opportunities. There are a lot of projects on campus that could make use of good programming or hardware design skills. My current favorite is Red Whittaker's Lunar-X effort.
The summer after your junior year is the ideal time to do a research project; make sure you have taken the key Depth course in your area of interest by then. (For example, if you are interested in my work, the key course to have taken is 18-447.) Undergraduates interested in summer research at CMU/ECE can apply here. But if you are at CMU, you should be approaching professors directly for opportunities right around the middle of March. (There are additional discussions on how to approach a professor about a project.)
I do work with undergraduates on research. Almost without exceptions, the following are true.
- The student is planning to go to graduate school.
- The student is interested in computer architecture and hardware.
- The student has taken 18-447 (and done well).
- The student has substantial experience with C (or some other programming language) AND Verilog (or some other HDL).
- The student is available for full-time research (for pay) in the summer before the fall of her/his graduate school application.
I only have resources to work with 1 or 2 students each year. So I prioritize heavily for those who fit the above criteria. I have stopped working with undergraduate students during the academic semesters, except 1. someone continuing from a summer project, or 2. someone who just needs a “consulting” mentor for his/her honors senior project of his/her own design. I am generally very willing to talk to you (CMU undergrads) especially if you come during my posted office hours.
To find out which school and professor is working on what in computer architecture, go to the Conference Page at the WWW Computer Architecture Page. Look up the recent conference papers and see what topics interest you. Try to read a few papers; even if you can't understand every detail in a paper, you should be able to get a good sense for what the work is all about. Try starting your search with the International Symposium on Computer Architecture (ISCA). (Every field has 1 or 2 premier conferences. You should know—or get to know—what those conferences are for the field you are going into.)
Rule #1: Unless the professor knows you by name without prompting (and for good reasons), don’t bother asking him/her for a letter. Rule #2: If a professor appears reluctant to write you a letter, it is little use to try to persuade him/her. An impersonal, lukewarm “form” letter will not help and may actually hurt your case. If you know you are going to need recommendation letters in the future, start building relationships early.
For formal letters, make sure you ask your letter writers at least one if not two months ahead of the deadline. Be sure to provide very clear instructions to your letter writers. Provide pre-addressed and stamped envelopes if appropriate. Remind your letter writers again a couple of weeks before the deadline. If possible, take it upon yourself to verify the letters have been received by the destination.
Much of the above still applies, but references for industry jobs are much less formal. Be sure to ask for permission before you list someone as your reference. It is customary to just say “Reference available upon request” on your resume. Usually companies won’t even bother to ask you for your list of references until after you have gone through a first interview and done well.
College is all about finding your knack.
Hopefully you don't know anyone like this.
Didn’t find the answers you were looking for? Try emailing me the question directly. How to contact me.