2. If you are interested in pursuing a career in computer science research or advanced software development, I’d highly consider minoring in mathematics. Machine learning, which is the rage right now, leans heavily on linear algebra, as well as probability and calculus. Some extra linear algebra, real analysis, and measure theory would be helpful for doing research in ML. In more traditional CS topics, combinatorics, abstract algebra, and category theory will go a long way, especially if you fall in love with programming languages and get deep into the woods of theory. The nice thing about studying mathematics in university is that you’ll have a structured environment for learning. It’s much harder trying to pick up abstract algebra, for example, when you’re working a 9-5 job and when you’re limited to nights and weekends for extra studying. Not minoring in math is the biggest regret that I have.
3. Take advantage of your youth and the resources that your university provides. You never know where life will take you, and you may discover something fascinating that you never considered.
Research/talk to professors with research areas of interest / look at ideas for independent study / internships for senior year. aka elective courses / skills that would be helpful.
Inbetween semesters, look at things to further skills learned in prior semesters; make connections with others in field/area of interest; find something of interest. aka google summer of code, things the cs related club does inbetween semesters, open source coding projects, etc.
Consider CS professional organizations with student memberships. aka ieee, acm, aitp, etc.
it will give you a challenging context to apply everything you are learning.
bonus points for linux and wickedengine.