An Interview with Michael L. Littman
“The image of the computer scientist working alone in a dark cave is not representative of reality. There is a tremendous amount of interaction in the field, especially on large software projects.”
Michael Littman is the chairperson of the Department of Computer Science at Rutgers University, the State University of New Jersey. Before he became a department chair, he taught an introductory computer science course and more advanced classes in algorithms and discrete mathematics. His research focuses on artificial intelligence and machine learning.
Professor Littman received his Doctor of Philosophy in Computer Science from Brown University in 1996. He also holds masters and bachelors degrees in Computer Science from Yale. He has taught at Duke University and Princeton University and has served as a Principal Technical Staff Member at AT&T Labs Research.
In your own words, what is computer science?
Computer science is the study of how to express complicated processes in simpler ways that computers can carry out on our behalf. That is the essence, but there is more to computer science than that description offers. Concepts of information processing are not restricted to the study of computers. I try to get all of my introductory students to think about the nature of computer science and to understand that it existed as an intellectual pursuit even before computers were invented.
What classes do you teach in computer science?
Before I became chair of the department, I taught several different classes on subjects including algorithms and discrete mathematics, as well as an introductory computer science class for non-majors.
The algorithms class teaches students how computers are used to solve mathematically defined problems. For example, suppose a billion numbers and names are stored in a computer file and need to be organized. The study of algorithms is about designing and evaluating which approaches to organizing this information are most efficient and reliable. Google uses algorithms that are so efficient that they are able to organize and allow almost instant access to a trillion webpages.
The discrete mathematics course provides the mathematical underpinnings to make it possible to define and analyze algorithms for important problems. Discrete math is a little different from the math you do in high school in that it focuses on objects and how they interact with each other instead of continuous quantities. Computers represent continuous quantities like time or color as sequences of ones and zeros.
How long have you been a professor of computer science?
Between Rutgers and Duke University, I have been teaching for 12 and a half years. I was a professor at Duke University for 3 and a half years before I moved back to New Jersey and worked for AT&T. I have been teaching at Rutgers since 2002.
If a student said to you, “I am interested in studying computer science,” what would your response be?
First, I would say, “Great!” Personally, I find computer science very fun, although I may not represent most people. I started creating things with computers when I was 13 and found it so engaging that I never stopped.
I would tell prospective students that computer science is shaping the future of society. As students, they will be in a position to think about how technology will be used and how it will evolve. As professionals, they will define what it means for humans to interact with computer technology and what the role of society should be in that interaction.
Finally, I would tell prospective students that there is a lot of money in the field. If they can understand computer science and enjoy working with computers, they will have stable careers.
In your opinion, what are the biggest hurdles or difficulties that students entering a computer science program have?
Students entering a computer science program often find it difficult to rigorously attack problems that they do not understand, and their natural impulse may be to give up. They must be willing to struggle mentally with difficult concepts, especially undergraduate students. They cannot expect to succeed merely by showing up, reading the material and taking the exams. They have to be creative yet careful thinkers.
Also, there are 2 standard misconceptions that students entering computer science programs sometimes have. The first is that computer science is all about programming. Programming is to computer science what mixing solutions is to chemistry. It is an important tool, but there is a deeper conceptual process at work in computer science beyond the details of a particular program or programming language.
The second misconception is that computer science is a lonely profession. The image of the computer scientist working alone in a dark cave is not representative of reality. There is a tremendous amount of interaction in the field, especially on large software projects. There are many meetings and direct conversations. Even writing code that other programmers will read later is an indirect form of communication. Students should not be scared of computer science for fear of being isolated.
What personality traits do you think would help someone succeed as a computer scientist and what traits would hinder success?
Like any professional, computer scientists need stamina, organization and an ability to stay on track. Curiosity and inquisitiveness are also very important traits for computer scientists to possess. Computer scientists should look at things and question the underlying mechanics. The kind of people who watch a computer-animated film and ask, “Wow, how did they make the water flow so realistically?” could become great computer scientists.
Conversely, students who are uncreative and do not ask questions will struggle. Analyzing, understanding and building complex systems takes both creativity and inquisitiveness, which is something that students often do not realize about computer science. In addition, students with short attention spans may struggle while creating complex systems. Computer scientists need to be able to stay on task for long periods of time.
What courses in computer science are most important for a student to take?
Algorithmic classes, discrete math classes and programming classes are considered the core of study in most computer science programs. These fundamental courses usually take a year and a half to complete and will teach students the necessary concepts as well as provide them with fairly intense programming training.
After the core classes, students choose a concentration and take classes important for career specialization. These concentrations include topics like the mathematics of computer science, computer games, computational biology, user-interface design and systems programming.
Outside of computer science, what courses would you recommend to a student?
I recommend calculus classes to help students think rigorously and solve problems. Any advanced mathematics class that deepens problem-solving skills is very helpful.
For people like me who study artificial intelligence, classes in psychology are incredibly valuable. Generally, the most interesting things you can do in computer science intersect with other pursuits, and there are many combinations. Computer science combined with psychology, history or theatre can all lead to interesting work. If you would like to make a contribution in multiple fields, it is important to also take classes in a focus area that is separate from computer science.
Can you give a few study tips that would help a computer science student succeed?
Timeliness and pacing are very important for computer science students. They should not procrastinate, and they should make sure they know what they are doing before they do it. Students should also study together when they can. Group study can be just as informative as a book or a lecture.
For a student who is not interested in an academic career, what is the optimal level of education needed for a job in the field of computer science?
A masters degree is generally required in order to work in a corporation as a software professional. A PhD is not needed for these jobs, as those positions are more hands-on and do not entail research. Many companies are eager to hire students with recent bachelors degrees, so long as they receive additional training. Some companies train in-house, and some will actually send their employees to a university to get their masters degrees. There are many directions that you can select to gain further education in this field.
What is the job outlook for students with degrees in computer science?
The job outlook is strong. As department chair, I am constantly getting e-mails from companies in the area wishing to employ my students and asking how to get their attention. Personable students who have good technical skills are not having any trouble finding work.
Software development positions with various companies are common. In our area of the country, there are many pharmaceutical companies seeking people to help maintain their computers, run their systems and develop new software and processes. Cosmetic companies, banks, investment firms and other organizations are always looking for people with computer skills. Not all computer science majors end up working directly with technology companies.
For students interested in boosting their resumes, project work is helpful. I would encourage students to get involved in local computer science organizations if they are available. At our school, we have an undergraduate student association in computer science. It is very valuable to get involved and help run these organizations. It is not just about technology. It is also about showing you have the ability to interact with and organize people. Teamwork is an important skill that students pick up in these computer science organizations.
How can undergraduate students prepare themselves if they are interested in studying computer science at the graduate level?
When considering graduate study, students should make sure that they actually enjoy computer science and are not pursuing an advanced degree just because it seems like the natural step after a bachelors degree.
It is also critical that students try some project or research work before graduate study. Many undergraduate programs offer opportunities to interact with professors on independent studies and existing projects, and those experiences will make a huge difference. Students who want advanced degrees need to have excellent research skills, and the only way to develop them is to become engaged in projects as undergraduates.
In terms of selecting schools, students should identify at least 2 professors who share their research interests at any prospective school in case things do not work out with the first professor. Students should check out the websites of different universities and read up on who is doing what, then reach out to professors with similar interests by e-mail. Students should never simply ask if a professor would be willing to work with them. I get a lot of those e-mails, and I do not enjoy them. The e-mails should express interest in aspects of the professors’ work and pose questions that relate to it.
Finally, students should know that a bachelors in computer science is not a prerequisite for graduate study. At Rutgers, we often admit students who have majored in other areas. Math majors seem to work out best, and economics and philosophy majors work well too. Any discipline with some amount of rigorous problem-solving can translate to computer science with the addition of programming skills. Playing catch up with computer skills in graduate school can be difficult, so students should obtain them as soon as possible.
What advice do you have for students who are interested in studying computer science?
Some computer science students who are comfortable with computers and good at programming have never had to grapple with mathematical thinking. They struggle because they do not know how to face the mathematical aspects of the work. Students who take an interest in computer science need to know that math cannot be avoided and must be understood deeply.