February 21, 2020
Computer Science Resources
In this post, I will list some of the resources I wish I knew when I started college. These resources, while all of them are very useful for all computer science students, you don't have to read through all of them. Remember, this is a cummulative resources over my 4-5 years of college, if you can read all of them, that's awesome, but if you can't, please don't feel bad. So here we go,
Programming
To be honest, I don't recommend books to learn how to write code, if you want to learn coding, it's best that you create something cool for yourself and your portfolio. I do recommend videos however, I think that's how I learned coding anyway.
The order of learning that I found work best for me is Python, Java, C, C++, and so on.
- Coursera has some really awesome and free programming tutorials. They also give you project ideas to implement, pretty neat.
- YouTube, you just can't deny it, YouTube is not only a place for your entertainment videos, but also a place for learning.
- Google, say what?
- Stackoverflow, this is a website where you can find answers to almost any question about programming or algorithms you have in general.
- Maybe more...
Version Control
It is very beneficial to know version control (git
), because you will be able to collaborate,
store your code remotely on services like Github and Gitlab.
I know, this website is massive, but luckily, you don't have to know all of it. In fact, I
don't even know what git stash
or git fetch
are (but you should). For starters, you
should know git add
, git push
, git commit
and git pull
.
Data Structures and Algorithms
Now this is what Computer Science is all about, you will learn to design algorithms and efficient data structures to solve problems. The only book that I recommend is Introduction to Algorithms, 3rd Edition by Corman.
This book is massive, so make sure you take notes while reading it, and also, try to implement the algorithms and data structures described in the book, some of the most important ones are:
- Arrays
- Linked List
- Stack
- Queue
- Tree
- Graph
- HashMap
- Heap
Important concepts:
- Master Theorem
- Loop Invariant
Discrete Mathematics
You will, at some point during college, found yourself in one of these classes and you just can't figure out why is this class would help you during your CS careers. But trust me, it is important, and getting a head start on the materials will be highly beneficial for you. The book that I recommend on this topic is Discrete Mathematics and Its Applications Seventh Edition by Rosen. This was the textbook back when I took this class.
This book primarily focuses on Math-related topics such as Big-O (very very important) or probabilities and statistics, combinations and permutations, Bayes Theorem, etc...
Machine Architectures and Organizations
I'm currently a Teaching Assistant (TA) for this class so I will feed very bad not talking about it. This class teaches you 2 programming languages, C and x86-64 Assembly. It will teach you the basic of cache memory, memory management in C, etc. If you come from a different university, your university will probably have an equivalent course as a requirement. Resources:
- Book: Computer Systems: A Programmer's Perspective, Third Edition by R. Bryant, D. O'Hallaron, Pearson, 2016
- Course Website.
The course website is from my university, but anyone should be able to access it, it lists slides from previous lectures, as well as real projects that we have to turn in.
Functional Programming
Honestly, I don't know how useful this would be in a real life setting except if you work with function languages but since it was a requirement for my degree, I will just list it here. Languages that you want to learn is OCaml.
Artificial Intelligence
Check back later on this.
Computer Graphics
Check back later on this.