Sophomore Spring: A Brief List of What I Learned

Research, courses, product management

Published on 13 May 2013

Here’s a concise list of [some of] the things that I learned this semester. I would say that the things that I learned this semester are a lot more diverse than those from last semester (I’d describe last semester as…math).


(I work in an HCI research group).

Demo or die.

Experimental design in HCI is very similar to experimental design in psychology. HCI is human-computer interaction; psychology is human interaction.

What does my advisor do in his day-to-day life? As an HCI professor, he is a master of experimental design. As an advisor, his day is often filled with meetings, colloquia, and proposals. I wonder when he finds time to hack on something or put together a project (but amazingly, he manages to do it).

What is the life of a grad student like? They seem to have a lot of time to code things. They attend a lot of talks, possibly looking for inspiration?

Group meeting is very insightful.

I’ve known, but now better understand, the concept of programming as a tool. The person reading your paper doesn’t care about your code, your backend, or your choice of framework.

Programming Languages

The class could be titled Programming Languages Theory, since it’s an introductory class. I think students who haven’t taken it and aren’t familiar with the field aren’t too sure what topics to expect.

What is programming language (PL) theory? Here’s a meme-style joke that I usually think of when someone asks me what it is:

What students outside of computer science think:
“Oh, so you learn how to program in a lot of different programming languages.”
What computer science students unfamiliar with PL think (myself included at the time):
“You do something formal with programming languages. You prove things about them. Or something like that.”
What it really is:
“Logic and inference rules. Induction. Semantics and types. More inference rules. Models.”

There is a lot more to the field, but that’s what was packed into the introductory course.

There also seem to be a lot of ways to teach a PL course. From looking at other resources on the internet, a lot of professors choose to make the whole course closely follow some programming language, and all concepts are taught with applications. I think I prefer the approach in my course, where the first half was purely theory and the second half mixed theory with code.

Computational Linguistics

Lambda-calculus has applications in grammars and quantifiers!

I actually gained a good understanding of the problems in natural language processing. It was a good class for breadth, and my final project, which tackled word sense disambiguation, was pretty interesting.

Prolog is interesting. I’m pretty impressed by how easy it is to build a basic parser in Prolog.


Clients don’t care about the technical details. Don’t make excuses, get things done, and translate them to the appropriate nontechnical language.

Keep communicating with the client. Just as you would manage up with your boss, go out of your way to maintain a good relationship with clients.


Javascript frameworks seem to be the new thing. Client-side frameworks for single page web applications make a lot of sense though, reducing the unnecessary overhead of maintaining the server. I’d definitely like to try Meteor. No jQuery spaghetti.

That being said, a lot more experience with web development this semester through my research project. If I could go back, I would have used a Javascript framework (but that’s what the first major project in a language is for!).