James Wang, a senior majoring in Computer Science (CS) at Hopkins, is the lead developer at Semester.ly, a course scheduling platform popular at the University. In an interview with The News-Letter, he discussed his thoughts on coding, advice for those interested in a career in computer science and his appreciation of teamwork in coding projects.
The News-Letter: How did your interest in CS begin?
James Wang: CS fit really well with what I liked, which is making stuff and solving problems. My programming journey started when I wanted to be a professional video game player. My dad struck me down. He suggested I look into making games instead. I was like, “Alright, if I can't play games professionally, maybe I can make them.” I started learning programming pretty seriously after that.
N-L: Here at Hopkins, you were head course assistant for classes in the CS department. What have you taken away from those experiences?
JW: You actually learn a lot by reading other people's code. There are small things, just programming tricks in general, that you wouldn't really notice if you just programmed on your own. Also, you learn what not to do. You see that some things just don't end up working as well as they were intended to.
The other thing is developing this sense of what the author of the code was trying to do. A lot of the time, you're trying to understand a student’s code and how they intended it to work. It helps if you put yourself in their position. That’s been pretty useful with Semester.ly too. Because we don't have contact with the original developers, we have to read their code to try to figure out what they meant.
N-L: What services are you hoping Semester.ly provides to students?
JW: I hope that it's better than [the Student Information System] SIS. That's the original goal — just being a more convenient way to schedule your classes. I hope that we can enable users to find others who are in their classes and allow them to talk to each other. I hope that it continues as an active CS project because it offers a lot in terms of work experience. It's a real project that people use, so there are stakes associated with it. In that way, it’s almost like an internship.
N-L: What are some current and future plans with Semester.ly?
JW: Right now, we're working on three projects. The first is increasing the site speed in general, since there is a lag with a good number of the portions of Semester.ly. The second is data analytics. While it's not something that a lot of the people using Semester.ly will see, we're trying to get more data so that we can make better decisions on what people use and don't use. The third project is making the search a little bit better. When you search abbreviated course names, like IFP, it'll find the actual classes that you need.
I have hopes that one day we’ll have more social features, like being able to friend other people who use Semester.ly and being able to view their schedules along with yours.
N-L: Can you speak a bit about your process for working in a team and completing different projects?
JW: Every CS major can relate to not feeling great about a project. A reason that I might not be satisfied with a project is if it doesn't feel like a team project — if it doesn’t feel like we're doing work together. You can have a top-down hierarchy where everyone is delegated to do something. That’s definitely something that works, but it's just something that I don't prefer.
Doing work in a collaborative setting is amazing. Obviously, the end result is the feeling of “Oh my gosh, we did this whole thing together” and that we're all contributing to a larger goal. Like for Semester.ly, our most recent feature was dark mode. Everyone had something to do there. Things that would take much longer to do by yourself can be done much more quickly and with much less stress if you all do it as a team. You feel connected with your team.
N-L: Coding is becoming an increasingly important skill across many different industries. Do you have any advice for someone wanting to get into that field or maybe feeling intimidated by the field?
JW: CS is a hard major. I'd be lying if I said it wasn’t. It’s a very hard topic because, really, it’s just a form of math. My advice is to approach CS by trying to understand how things work. Math and CS are both really logical things with steps that build up to whatever thing you're learning.
Anyone can learn programming, which is an aspect of computer science. Programming is being able to express your thoughts and what you want to do in a computer language. Anyone's capable of learning a language. Computer language is just another language that you can learn to speak and write. You spent years learning math, right? So don't feel frustrated if you take a while to start to understand how computer science works.
N-L: How do you think creativity factors into computer science?
JW: A lot of my previous talk has been about software engineering, which is more applied to businesses and industries. When you're working with software and programming, everything you build is related to other people. In the end, you're making software that other people will use. There’s always a social implication to what you're working on.
Even the process of writing code involves creativity because there are infinite ways to write a program. The act of translating something into code is a creative process. Building software is a creative process. Programming itself is also an art. It really is — writing code can be very beautiful, and it can be very messy.
N-L: If you had to speak a coding language to communicate with other people, which would it be?
JW: I would probably speak Python. If you personify the programming languages, Python is this casual guy with its indents who doesn’t really care about a lot of things, like private versus public variables. It’s a very loose language. You can do whatever you want when you're coding in Python. I like to be casual in most settings. I don't really like being too formal or talking too much.