I figured it’d be a good idea to outline my academic plan here on my blog as an accountability tool, as well as to help me plan sensibly. What I mean by my academic plan is a list of which courses I will take in the remaining two years of university, and other personal projects that will help me gain practical programming skills. I’ve also linked to textbooks or resources that I’m using where applicable.

Summer 2020

  1. Introduction to Probability is a prerequisite course for all engineering majors. It covers Bayes’ rule, Gaussian distribution, Poisson distribution, and other related topics. I am currently on track to get an A and my goal is to finish strong.
  2. Data Structures and Algorithms is a foundational undergraduate course for CS majors. It is a follow-up course to Introduction to Computer Science in Java. As some of these topics are familiar to me through self-studying, I hope to do well with an A.
  3. In preparation for next semester’s courses, I am reading textbooks for computer organization and theory of computation in my spare time. I aim to get myself familiarized with the important concepts through reading and to leave refining and practice to next semester.
  4. Summer is a great time to work on programming projects to develop more down-to-earth and gritty skills. My current focus is on learning the Godot engine to be able to create indie games. As there are unique challenges to game development, I think it’ll be a great creative way to broaden my horizons. I am following courses on Udemy and will move onto personal projects afterward.
  5. If I have some time left this summer, I also want to start learning React Native, the industry-standard cross-platform mobile app development framework. Having mobile app development skills under my belt is not only immediately applicable, but it is also useful for Human-Computer Interaction (HCI) courses. (Besides, brushing up on my Javascript is never a bad idea in the age of web-apps and Electron.)
  6. While the aforementioned subjects take up most of my time, I am also using my abundant free time to do a bit of IB tutoring, learn GRE-level vocabulary, and go on frequent hikes to a nearby hill mountain.

Fall 2020

  1. Computation & Formal Systems, a.k.a. Computational Theory is the follow-up course to Data Structures & Algorithms.
  2. Computer Organization is the study of the grey area between hardware and software. An introductory course covers materials from computer architecture to assembly language programming and operating systems. I’m hoping that my prior experience in logic design will be useful here.
  3. Since I am behind other CS majors due to fumbling around in the first year, there is a restricted selection of upperclassmen CS courses and electives that I can take. Of the available courses, my current interest lies in either Computer Models of Perception & Cognition, a useful elective for those interested in HCI or AI, Introduction to HCI, or Data Mining.

Spring 2021

  1. Introduction to Artificial Intelligence is not only a major requirement but also a prerequisite for a host of interesting electives such as Computer Vision and Natural Language Processing. It’ll be useful to take it as soon as possible.
  2. Programming Language Design is available once I complete Computer Organization next semester.
  3. Computer Models & Limitations is available once I complete Computational Theory next semester. It’s also a prerequisite to Parallel and Distributed Computing, a senior-level course I’m interested in.
  4. A history elective to complete my social science elective requirements.
  5. I also plan to take the GRE before my senior year.

2021-2022 School Year

  1. Design of Efficient Algorithms, the classic obsession of a CS major.
  2. One course that satisfies upper-level writing requirements, such as Senior Research.
  3. Four other upperclassmen CS electives. Courses that spark my interest from their course description are Parallel and Distributed Computing, Natural Language Processing, Data Management Systems, Computer Networks, and Computer Security. It’s a shame that I won’t have enough time to take as many electives as I want, and need to prioritize.
  4. Two advanced Mandarin courses to complete my humanities elective requirements.

Other Topics That I’d Like to Get Familiar With

In no particular order:

  • Bash scripting
  • Linux kernel development
  • LaTeX
  • Formal methods (proof of correctness)
  • Computer graphics (3D programming)
  • Languages: C, C++, Haskell, Javascript