My current research is in the area of computer science education. I am interested in developing pedagogies and tools that encourage active learning in computer science classrooms.
Guided Practice: Guided practice is a pre-class activity that aims to ensure students are adequately prepared for active engagement in the classroom. It consists of a series of worksheets containing learning objectives and exercises that accompany required pre-class reading or viewing.
Below C Level: Below C Level is a simulator for the x86-64 assembly language targeted at students and other novice programmers. It is designed with simplicity and clarity in mind, to avoid distracting novices from irrelevant or unimportant details.
Previously, my current research revolved around using dynamic program analyses to aid in the design and programming of multicore processors. The following list is a sample of the projects I have been involved with.
Kremlin: Kremlin aims to answer the question, “What parts of this program should I spent time parallelizing?”. In this sense, it is like
gprof, but for parallelization. Kremlin profiles a serial program and tells the programmer not only what regions should be parallelized, but also the order in which they should be parallelized to maximize the return on their effort. Available on BitBucket
Kismet: Kismet helps mitigate the risk of parallel software engineering by answering the question, “What is the best performance I can expect if I parallelize this program?” Kismet profiles serial programs and reports the upperbound on parallel speedup based on the program’s inherent parallelism and the system it will be running on.
GreenDroid: GreenDroid is a mobile applications processor designed to dramatically reduce the energy comsumption in smartphones. It employs specialized processing cores that target key portions of the Android platform.
I also previously worked in the area of nanoelectronic architectures and DNA self-assembly with Alex Orailoglu at UC San Diego.