Nov 10, 2020 ▪ 18 min read (~2 pages) ▪ Updated on Oct 05, 2022
This is an evolving list with learning material and recommended programming languages for computer science students. It works well on its own (for self-learners) or in addition to an undergraduate degree in computer science (or related field). The goal is to provide a solid foundation to build upon, degree or no degree. It will be updated to fix broken links and to keep learning material up to date. If you are interested in computer science and engineering (and have plenty of time to spare), see github.com/michaelsjoeberg/the-ultimate-computer-science-and-engineering-curriculum.
Programming is the most important skill in computer science and computational problem solving and should be the primary focus of any computer science curriculum (with use cases in computer systems, application software development, theorem proving, and so on). If you prefer to work on projects while learning, see github.com/tuvtran/project-based-learning.
The goal is to get comfortable with programming and to understand the software abstraction model (via Python, C, and Assembly; high-level to low-level, with Python representing the highest-level of abstraction). You most likely don't need to be fluent in any Assembly language (they are mostly compilation targets), but to be able to read and find errors in assembly generated by smaller programs is probably a good idea.
Recommended learning material:
The goal is to get familiar with a range of programming paradigms, understand parts of the hardware abstraction model (via Verilog), and become a more confident computer programmer in general. A few notes on programming languages: Python and C (and C++) are considered multi-paradigm (as in supporting more than one style), and more specifically: imperative and structured.
Recommended learning material:
The goal is to get exposed to machine learning and the idea that output is based on data instead of design, watch this talk by Andrej Karpathy (former director of AI at Tesla): Building the Software 2.0 Stack.
Recommended learning material:
The above topics provides familiarity with different paradigms and modern developments (such as ML). Below are few more programming languages to consider, somewhat based on the "most loved" programming languages: Stack Overflow Developer Survey 2020.
Mathematics has a central role in any computer science curriculum and a solid foundation in selected mathematical topics can be highly valuable, especially in more advanced computing tasks (not to mention ML).
The Goal is to get familiar with data structures and theory of computation, these topics could also be covered in recommended learning material for some programming languages.
Recommended learning material:
The goal is to build a strong general background in mathematics, such as typically taught in undergraduate science-related degrees. Many topics are useful in several tasks related to computer science, ML, computer vision, and scientific computing.
Recommended learning material:
This section contains additional topics and commonly used tools, somewhat based on the "missing semester" at MIT, see The Missing Semester of Your CS Education.
The goal is to get comfortable with version control and working with computer systems (in the context of programming).
It is also a good idea to get familiar with virtual machines, such as Vagrant or Docker, build systems, such as Make, and parallel computing (if appropriate), such as CUDA or OpenCL.
The goal is to get familiar with web technologies and to develop a basic website.
Finally, it is probably a good idea to get used to working with cloud platforms, such as AWS or Google Cloud, and notebooks, such as Jupyter (Python), which is a very popular web-based development environment for ML and deep learning.