Q and A: Studying Computer Science
The following questions are topics that I have been asked or have confronted in the past four years. Share it with your local high school or college student if you find it useful.
Do I need to be good at math to be good at Computer Science or Software Engineering?
As an undergrad, you have to take finite math, a calculus sequence, and linear algebra. In that sense, you have to be good enough to pass the classes. This just takes focus and effort to learn the material. If you do not get an A+ in those classes, you should not worry. Do not feel like your success in math will predict your success in CS. If you go on to machine learning or data science in graduate school, math will definitely be important. Overall you do not have to be a math expert, but I emphasize a few skills that come from math that I use every day.
- Symbolic representation: Being able to interpret, manipulate, and predict how symbols transform over time.
- Using abstraction to create models: Throwing away un-needed information to focus on things that matter in pursuit of a problem. Being able to use a model to interpret the interdependent aspects of a system.
- Control flow: An ability to understand how a variable can change over time and be manipulated by functions. This is a particularly important aspect of both writing algorithms, writing programs, and debugging.
- Finite-state systems: Having a grasp of state as a means of understanding past, present, and future of a system.
- Algorithmic formulation and optimization: Comparing two algorithms. How can you improve the way we currently do this?
What classes are most useful?
- A good algorithms or Artificial Intelligence class: Learning to come up with an algorithm quickly to solve a problem. Having a good sense of a path to the solution of a goal. This also helps you to understand cost-benefit of two different algorithms or methodologies.
- Discrete math: Can inform your knowledge of math in relation to computer science. Computation really started with philosophy and finite math.
- Principles of programming languages: Being able to understand languages under the hood. Improves your ability to work across paradigms.
- A foreign language class: Helps you understand symbols, their relations, and how to interpret difficult concepts. Starting a new language helps you break down symbols into things you can relate to.
- A linguistics class: After taking a programming languages course, I realized how important it is to understand how language works.
- Writing: This is obvious. Improving your writing, especially technical writing, is very useful later on.
Should I go to graduate school?
Every individual should think about their specific goals. There is no one size fits all solution for continuing on to graduate school. From my own research, graduate school is usually treated similarly to work experience. Here are some good reasons for choosing to go to graduate school for Computer Science.
I am comfortable with the cost-benefit of money and time. A graduate school can be expensive. If you choose to go, you are likely passing up two years of career growth, two years of salary, and two years of production experience. It is important to think about your goals in relation to this.
I would like to be in academia one day. Do you see yourself as a researcher or professor at a university?
I want to be more than just an engineer. You want to work on a specific, cutting-edge technology that requires advanced expertise.
If you do choose a graduate school and if you do not plan on being in academia forever, I would highly recommend doing research internships during school summers. This leverages the things you learn in school with practical direction once you leave.
Should I go to an expensive school?
Going to a university with a well-recognized and rigorous Computer Science program is helpful in a number of ways. You will have more resources, more connections, more recognition from companies. Note that I did not use the term expensive. You do not need to go to an Ivy League school to achieve this. Paying more tuition will not get you a more valuable degree. While my university is well-recognized, I would not say that it is not well-known for Computer Science. In that sense, I would have chosen a different school at a lower cost. Being a successful student in any Computer Science program will get people’s attention. Going to an expensive school is not a requirement. In many cases, it should be avoided.
Should I explore passions in college?
Everyone has side-passions to their career – English literature, sociology, philosophy, or medicine. In my opinion, college is not a good place to explore and find your passion. College is way too expensive for this. You should enter college with an idea of what direction you’re headed. You should come with a general direction and use feedback to guide the process. Internships and experiences will help you tailor decisions about what to study. Right out of the gate, you can have a skill that others need. You will have plenty of time for your other passions after college.