In this edition of Glam Grads, The Daily talked with Josh Alman, a Ph.D. student in theoretical computer science who came to Stanford in 2014 after studying math as an undergraduate at MIT.
The Stanford Daily (TSD): Tell me about your research in computer science.
Josh Alman (JA): Most of my research is about interactions between algorithm design and complexity theory. My research focuses on using tools from algebra to design faster algorithms. One of the most basic operations from linear algebra is multiplying two matrices. For a long time, researchers thought that the most straightforward way of multiplying two matrices had to be the fastest. In a recent paper, my coauthors and I use algebraic tools to solve “nearest neighbor search” problems faster. In nearest-neighbor search, you have a lot of data points, like images or DNA sequences or paragraphs of text, and you want to find pairs [that] are most similar to each other. By using techniques involving matrix multiplication and some neat polynomials, we were able to design a faster algorithm for these problems. I think it’s neat how algebraic tools can be used to solve a wide variety of problems.
TSD: Can you explain the projects that you are currently working on?
JA: One of the big projects I’m working on is trying to take the advantage of fast matrix multiplication algorithms in order to solve other problem factors. There’s a sequence of results including some big algorithms. I’m also working on a project with some of my friends about data search. There are a lot of long-standing data structures from a long time ago to solve important problems and it’s really difficult to prove … that the algorithms from the data structures from long ago actually are optimal and can’t be improved upon. So we are trying to use techniques in communication complexity — information complexity — to prove that the current data structures have to be optimal…
When you want to solve some problem or you make an app or a website, there are ways to make it faster. One way is to obtain better hardware, and lots of people who work in electrical engineering are working on getting better hardware to solve problems faster. Another way is designing faster algorithms for problems. I enjoy a mathematical approach to designing faster algorithms so that your hardware can follow fewer operations.
TSD: What are your plans for the future? What’s your dream job?
JA: I still have a few years to go before I figure out my plan, but I’m probably planning to continue [in] academia … becoming a [postdoctoral scholar] or professor and continuing research.
TSD: Why did you choose to study computer science as a Ph.D.?
JA: I came very close to going to math [for] graduate school instead of computer science. For most of my life, I was a mathematician. I got my bachelor’s degree in math. I had some interest in computer science from doing programming contests and having an internship during undergrad. I applied to a few computer science schools. I was actually [committed] to going to [school for] computer science after having a conversation with Donald Knuth, a computer science professor at Stanford. He was one of the people who started theoretical computer science, and he explained to me that mathematics is a very well developed field. People have been studying math for decades. Meanwhile, theoretical computer science is … newer, and if you do research in computer science now, you are starting the field and exploring new areas, whereas math was a bit more of a well charted path.
TSD: What do you like most about Stanford?
JA: I really like the weather… It’s way nicer compared to the East Coast, not to mention that the campus is beautiful. I like the people at Stanford a lot… [I’ve] learned a lot from everyone [I’ve been] around.
TSD: What advice would you give to people who plan to major in computer science?
JA: I think that a really strong math background is important for computer science. You can definitely make an app or a website without knowing what’s going on, but I think understanding math and theoretical computer science is really important for actually understanding what’s happening and figuring out how to make big improvements — not just applying existing frameworks but [coming] up with your own big new ideas. I really think studying math, and having a good math and theoretical computer science background, is very important.
Contact Vijeet Chaugule at vijee99 ‘at’ gmail.com.