| For non-Stanford Students |
Due to the large volume of email, I cannot reply to request and questions from non-Stanford students. Sorry... Both the Electrical Engineering and Computer Sciences departments maintain detailed information about the admission process for Stanford graduate and undergraduate programs (EE, CS). Once you are admitted, we can discuss specific research opportunities and funding.
| For Stanford EE and CS students |
I am generally interested in Computer Systems Architecture. For information on the projects I am currently involved with, read my Research page. My work currently involves processor & system architecture, parallelizing compilers, and parallel programming models. I am not involved in any circuits research at this point.
If you are a Stanford EE or CS graduate student interested in one of the above topics: Please send me an email with your CV, including a brief description of your background and experience in architecture and/or system software. I will do my best to arrange a meeting with you shortly after I review your information. You can also stop by my office hours. I also suggest you read the following note on what I expect from students.
If you are a Stanford EE or CS undergraduate student looking for some exposure to research: There may be opportunities for helping with development of system software, simulation tools, benchmark applications, or with evaluating hardware systems. Please send me an email with a brief description of your background, unofficial transcript, and experience from programming and hardware courses.
| Advice for and Expectations from New Students |
The following is a list of advice and/or expectations from the graduate students I work with. Several of them are directly from David Patterson's "How to Have a Bad Career in Industry or Academia".
Success is determined by you: Your advisor can only set up an opportunity for research. What you do with it is primarily up to you. Don't expect your advisor to tell you what to do from the very beginning till your very end. After a certain point, the ideas, the implementations, the papers, and the success will be mostly because of your talent and hard work.
Learn on your own: Computer systems is a huge, fast moving field. Don't expect your advisor to know everything. Read and learn on your own. Attend seminars and conferences, talk with your colleagues (students or professors), read papers, follow references. Once you know a few new things about a topic, teach your advisor about it...
Show initiative: There are many quite students who can execute a task once they are told to. The students that really excel are those who are active participants in a research group. Those who ask questions, offer replies, suggest new problems to work on, come up with innovative new solutions to problems. So, don't sit back and wait to be told what to do. Be active. Every now and then you may ask a "stupid" question or suggest a "bad" idea. This is only natural... And don't get intimidated by the intelligence of the faculty or other students.
Work in group project: Computer systems research is almost always a group activity. There are few grant research ideas that can be handled by a single student these days. Many students have a hard time working in groups. The don't like the idea sharing their new ideas or mistakes with others and have a general insecurity about who gets credit for what. Make your research group an asset instead of a problem. If you are a good team player you can benefit greatly from a group project. First, you will learn much more than your immediate research (expert in one topic and knowledgeable in many other). Second, you will probably end up with many more papers that if you worked on your own. You will have access to all the tools & technology developed in the group (less time spent implementing basic tools). In addition, the influence of the other team members will become a source of inspiration for you. Finally, you will make some good friends that will be very useful in the future, no matter what you do next...
Be broad: Several student rush to overspecialize on a niche research domain. While this may seem the fastest way to get to results, you should try to resist the temptation. The importance of your research topic and the impact of your thesis will be much higher if you have a broad understanding of computer systems technology. Don't just take architecture classes. Take classes in compilers, operating systems, networking, and other systems area. Don't just attend architecture seminars or talk just to students and faculty specializing in architecture.
Be organized: Organize your work to achieve short-term (daily, weekly) and long-term (monthly yearly) goals. Your time is a very valuable commodity. Use it in a smart way. In addition, keep good notes of the ideas, issues, and bugs you run into. This is the best way to avoid duplicating work and to have a head start on all papers, reports, etc.
Be honest about your work: The worst thing you can do is to ruin your reputation as a student or as a researcher. Be honest when you promise to deliver something (result, paper, etc). Be honest when you present your research accomplishments. It is easy to be dishonest with both and get away with it in the short term. However, your advisor and colleagues will eventually catch up with you and, once your reputation is damaged, it is very difficult to recover.