When I entered college, I barely knew anyone who programmed, and I didn’t have any family or friends who worked in the field. As such, I encountered things in my freshman and sophomore CS classes that surprised me. Below are some things I wish I knew when I was entering college as a freshman intent on majoring in Computer Science.
A lot of people will have more experience than you.
When I went into my first programming class, I had less than a year of casual programming experience. My next course in the introductory sequence, though it ended up being one I enjoyed, was considerably more difficult, and suddenly the skill gap between me and my peers became obvious. While there were some like me, who struggled but ultimately managed to get their projects working while learning a lot, there were others who saw the projects as easy, and talked about finishing them far more quickly than I could. I began to doubt my ability to do well in the major, and after another semester that was even more challenging than the last, I often wondered if it was worth continuing on in the major when I was so far behind so many people.
I’m glad I decided to stay in the major. When I feel self-conscious, I try to think about how much I’ve learned since entering college. While making comparisons between yourself and your peers is inevitable, just remember that you probably didn’t start with the same level of experience. Of course someone who’s been programming for five years is going to be quicker than the person who’s been coding for one.
This experience gap between classmates is such an issue that, as part of its efforts to increase women’s participation in Computer Science, Harvey Mudd College offers different introductory classes for those with different levels of experience.
It’s okay to ask for help.
I had (and still have, to a lesser extent) a strong aversion to asking for help on an assignment. I’ve been through several occasions where I would struggle with something for 4+ hours, only for a TA to figure it out, and explain it to me, in 15 minutes. My rule, now, is to ask for help if I’m having trouble with the same issue for more than 2 hours.
In the “real world” of working, people ask each other for help from time to time—and it’s expected that interns and new workers will have a lot of questions. It’s certainly fine to ask for help while you’re a student.
Computer Science is very social.
When I was first learning about computer science, the stereotype of the lone person coding in a cubicle appealed to me. However, it’s not accurate. While you will spend some time on your own, working on your laptop, you’ll also spend time in meetings, discussing what you’re working on, and with other programmers, dividing up work and helping each other when you run into issues with your code. About a fifth of my projects in college have been team-based, and in a class I’m taking this semester, every project is team-based. You’ll likely be working with other programmers throughout your career—so, remember to work on improving your communication skills!
You can try research.
Undergraduate research has been an incredibly rewarding experience for me. While the work in my classes hasn’t always been exciting, my research work has been consistently interesting—in part because the work is motivated by trying to solve a current problem (as opposed to class assignments, where the motivation is “because this is an assignment.”) Through research I’ve not only improved my coding ability, but also my public speaking and social skills. I’ve been able to travel to other states to present my work and hear about the new and exciting work of others. I’ve also had invaluable mentoring and guidance, and met amazing people. I highly recommend trying research!
When I approached my adviser about doing research with her, I was very nervous because I didn’t have previous work experience. However, a surprising number of professors are willing to take on undergraduates without any. To get started, find a professor at your university whose work sounds interesting to you, read over a paper of theirs, and ask to meet with them. This meeting may lead to a research opportunity, or at least help you to learn more about the process of research. You don’t have to worry about bothering your professors, either—every professor I’ve met with has been happy to talk to me about their work.
It’s okay to be frustrated.
I don’t hear this mentioned often, but frustration and programming are inextricable. Your code can be completely correct but fail to run properly because you were using an older or newer version of some technology, or because an installation didn’t work correctly—or you could just be confused about how something works. Sometimes you figure out your program’s problem, and it’s a fantastic feeling. Other times, you can’t, and that’s when you should seek help (see my “2 hour rule” mentioned above.)
If you’re fairly sure that your issue is a bug, and you’re not sure how to approach figuring it out, there are some things you can do. Often the thing that helps me the most when I’m feeling stuck is making something with pencil and paper: sometimes it’s a flowchart, sometimes it’s a drawing of part of an array, and sometimes it’s annotated pseudo-code.
Another thing that can help is to describe your problem out loud to yourself or someone else. In doing so, you’ll most likely find yourself thinking about your code in a different sort of way. This may be enough to solve your problem. If you do end up needing to ask for help (be it from a TA or coworker), having practice describing or diagramming your issue will be useful. The reality of coding, and of majoring in Computer Science, is very different from what I had imagined it to be: it’s far more difficult and far more rewarding than I had thought. Hopefully, these things I wish I knew when starting out will prove useful to you!
-Hannah Morrison, 2018 RTC Fellow
Rewriting the Code—Empowering College Women in Tech