Shanti Kolluri: Math and Computer Science Teacher
Courses taught at College Prep: AP Computer Science, AP Calculus AB, and Math 2
Interests outside the classroom: Dancing! Salsa, Hiphop, Belly Dancing, and Bollywood
How does Computer Science fit in the College Prep math curriculum?
Computer Science is a yearlong elective open to juniors and seniors. I’ve been teaching it for three years and there’s a prerequisite of Math 3. Students use the ideas of abstraction that are strengthened in their math courses to make generalizations during problem solving. We also use math to compare different algorithms that are used to solve the same problem. It helps us to make informed choices such as which solution is most efficient in terms of time, memory consumption, etc.
How is Computer Science structured?
Java is the main programming language taught in this course. The course has evolved as I’ve learned about my students’ interests and the technology available. Last fall, the class started with helping a character called Rudy collect all the green dots on a grid, while navigating mazes with gradually increasing levels of difficulty. Then we took a break from programming and learned some basics of electronics, understanding how breadboards, LEDs, potentiometers, buzzers, and ultrasonic distance sensors work. We wove these concepts into the context of programming using little computers called Arduinos (arduino.cc/en/guide/introduction). The students then learned some Processing, a programming language in which they explore graphics and visual effects. In addition to the usual assessments, students also get to demonstrate what they’ve learned in the course by working on a two month-long project in the second semester.
Do students come up with special projects?
Yes, the students come up with their own proposals for their final projects, while adhering to some guidelines. I’m learning as much from the students as they are from me. For example, two students this year have introduced me to an electronic part that was ordered all the way from Australia: an OBD (On Board Diagnostics) emulator. Most modern cars have an OBD port that allows us to listen in and gather data about things like emissions, speed, and mileage. These students are hoping to use information about the speed and GPS location of the car to make useful recommendations to the driver. They will interface the OBD emulator with an Arduino, and will write code to make these recommendations.
Is learning a computer language similar or different to learning a spoken language?
Most programming languages have some commonality amongst them which makes learning the next programming language easier than starting from scratch. As an analogy, all romance languages have enough of a similar base that jumping from one to the other isn’t too complicated. Learning Italian after learning Spanish, which both share the same root language, is easier than learning Turkish after learning Spanish. Learning a programming language is similar to learning a new language in that to become proficient, students need to try “saying” or programming new things and be comfortable with making a lot of mistakes in the process. Initially grammar or syntax will not be close to that of a native speaker, but one gets better with practice. Prep students bring that approach to computer science—they are willing to try new things, make mistakes, learn from them, and become more fluent in the language over time.
Are most of the students who take the class strong math students?
The class has an interesting mix of students. It’s a course in which there is something for everybody. The language enthusiasts approach it as if they were learning a new language like French or Japanese and that excites them. The math enthusiasts and students who enjoy thinking in the abstract enjoy looking at algorithms not necessarily in terms of code, but in terms of techniques that they can compare objectively using math. Some students are interested in understanding current events in technology. Recently a Google program beat one of the world’s leading “Go” players, which was not believed possible. Artificial Intelligence is evolving—the Google program beat the human contender by learning through playing; it applied experience to win. (wired.com/2016/03/googles-ai-wins-fifth-final-game-go-genius-lee-sedol/). Contrast that with Garry Kasparov playing chess against the computer Deep Blue in 1996. At that time, the computer was examining all the possibilities in the game at any given moment in time. Students are excited to learn about how computer science has evolved. Some students love electronics and others love building things from scratch. Still others bring their experience with 3D printers and laser cutters and integrate them into their ideas for their final projects.
Why are hardware and software both explored in Computer Science?
The idea of learning a programming language by learning the syntax of the language and trying to solve some common problems (e.g., check if a number is a prime or if a word is a palindrome) makes sense. However this does not resonate with everyone. Having a goal like “Can I make these LEDs light up in this pattern?” or “Can I make this door open, when this secret pattern is tapped on the door?” makes it more concrete for a larger number of students. The thinking then shifts from how does an “if” statement work in Java or how do I write a “loop” in Java, to what do I need to learn to write code that lets the hardware or software behave in a certain way. It brings a more visual or tangible goal to what can sometimes come across as an abstract process.
Integrating both hardware and software also brings up another layer of complexity that is representative of what happens in the real world. If something is not working, is it the hardware or the software? How do we problem solve? How do we isolate the source of the problem? Often, there is no right answer and there is more than one way to build something or make something work. It brings out the creativity in my students, one of my favorite aspects of teaching this class.