I am going from an IT minor to a Computer Science major. I made this decision because I love computers, I love the science behind them and I love learning most of all. My graduate research thesis is related to Artificial Intellligence.
However, I feel slightly overwhelmed. Although I did have some math in my IT minor, I forgot about 50% of it and the Computer Science undergrads had a lot more math than I did. I also didn't have any physics courses. My programming abilities, are, I'd say, average at best - I can implement a linked list or some sorting algorithm, but I tend to have more bugs with algorithms like quicksort or mergesort. Also, if I have to do a backtracking algorithm or something with graphs on a complex graph data structure, I get a bit lost (that is, I need some time to figure it out). While I know that an average computer science student probably forgot most of what he had learned (if he didn't review periodically) and he didn't learn as comprehensively as the curriculum planed for him to learn, he probably heard more concepts than me and has that moment of recollection when someone mentions something he heard on a lecture or read about in a book.
So I decided to use this summer time to prepare. I see two possible strategies:
- prepare in advance for the upcoming classes by reading the literature related to those classes (classes like Machine Learning, Pattern Recognition etc.)
- focus on filling in the gaps in my existing knowledge as much as possible
I decided for the option 2 (that is, "focus on filling in the gaps in my existing knowledge as much as possible"). I decided to focus on math and programming, alongside getting used to Linux and reviewing computer networks, operating systems and computer architecture and putting all of the aforementioned topics in my Spaced Repetition System (Anki). My summer curricula is below. It is based on books, since I will be self-studying. I calculated that for each category I need about 16 hours per week (approximately), since this is usually the time "burden" courses require from students.
- read and solve exercises from Calculus: Early Transcedentals by Stewart; if I need to, brush up on some precalculus concepts (but there's no need to read the whole precalculus book if I only don't know how to complete the square, for example)
- read and solve exercises from The Algorithm Design Manual by Skiena; if that is too complicated, then read the same algorithm explanation in Grokking Algorithms
Other computer science related things:
- install and learn how to use Linux
- review computer networks
- review operating systems
I plan to work 7 hours on workdays (1 hour is my lunch hour) + some small amount of hours each weekend (3-4 hours). It would all amount to 40-45 hours a week. So that's a minimum which will constantly be exectuded. I know that hours don't gurantee success, but I want to make sure I am investing the required time.
As I'm writing this now, a part of me wants to maniacally study everything under the sun I'm interested in - calculus, linear algebra, probability, physics, biology, statistics, algortihms etc. But I know that if you try to do too many things at once you don't do any of them well. And besides, I'd also like to have some days where I spend time with family, physically exercise or go out. I could structure my summer routine so that I encompass everything I'm interested in, but I believe that this tactic (of selecting only a few items) is better. In the best-case scenario, if I do indeed finish with studying these topics before the start of my new semester, I can just add in a new topic I'm interested in in place of the old one.
Some questions for you:
- do you think it is better to spend this summer reviewing and learning the fundamentals or is it better to read the literature I'll have in the upcoming courses in advance?
- do you think I choose the most important topics as the "fundamentals"? (if you think that 2nd approach is the better approach)
- do you think that this approach (focusing on a few things, then if I learn them substituting them with new things) is better than trying to learn all the things I'm interested in at once (and then devoting smaller time chunks to those things)?
- any other tips you'd have?
I think that a good plan is important to have, but it is worth nothing if it is not executed upon. So leave your remarks so I can start executing as fast as possible!
Thanks in advance!