Giới thiệu
Introduction to Computer Science and Programming using Python
Core CS
| Courses | Duration | Effort | Prerequisites | Discussion |
|---|---|---|---|---|
| Systematic Program Design | 13 weeks | 8-10 hours/week | none | chat: part 1 / part 2 |
| Class-based Program Design | 13 weeks | 5-10 hours/week | Systematic Program Design, High School Math | chat |
| Programming Languages | 11 weeks | 4-8 hours/week | Systematic Program Design | chat |
| Object-Oriented Design | 13 weeks | 5-10 hours/week | Class Based Program Design | chat |
| Software Architecture | 4 weeks | 2-5 hours/week | Object Oriented Design | chat |
Core Math
Discrete math (Math for CS) is a prerequisite and closely related to the study of algorithms and data structures. Calculus both prepares students for discrete math and helps students develop mathematical maturity.
Topics covered: discrete mathematics mathematical proofs basic statistics O-notation discrete probability and more
| Courses | Duration | Effort | Notes | Prerequisites | Discussion |
|---|---|---|---|---|---|
| Calculus 1A: Differentiation (alternative) | 13 weeks | 6-10 hours/week | The alternate covers this and the following 2 courses | high school math | chat |
| Calculus 1B: Integration | 13 weeks | 5-10 hours/week | - | Calculus 1A | chat |
| Calculus 1C: Coordinate Systems & Infinite Series | 6 weeks | 5-10 hours/week | - | Calculus 1B | chat |
| Mathematics for Computer Science (alternative) | 13 weeks | 5 hours/week | 2015/2019 solutions 2010 solutions 2005 solutions. | Calculus 1C | chat |
CS Tools
Understanding theory is important, but you will also be expected to create programs. There are a number of tools that are widely used to make that process easier. Learn them now to ease your future work writing programs.
Topics covered: terminals and shell scripting vim command line environments version control and more
| Courses | Duration | Effort | Prerequisites | Discussion |
|---|---|---|---|---|
| The Missing Semester of Your CS Education | 2 weeks | 12 hours/week | - | chat |
Core systems
Topics covered: procedural programming manual memory management boolean algebra gate logic memory computer architecture assembly machine language virtual machines high-level languages compilers operating systems network protocols and more
| Courses | Duration | Effort | Additional Text / Assignments | Prerequisites | Discussion |
|---|---|---|---|---|---|
| Build a Modern Computer from First Principles: From Nand to Tetris (alternative) | 6 weeks | 7-13 hours/week | - | C-like programming language | chat |
| Build a Modern Computer from First Principles: Nand to Tetris Part II | 6 weeks | 12-18 hours/week | - | one of these programming languages, From Nand to Tetris Part I | chat |
| Operating Systems: Three Easy Pieces | 10-12 weeks | 6-10 hours/week | - | Nand to Tetris Part II | chat |
| Computer Networking: a Top-Down Approach | 8 weeks | 4–12 hours/week | Wireshark Labs | algebra, probability, basic CS | chat |
Core theory
Topics covered: divide and conquer sorting and searching randomized algorithms graph search shortest paths data structures greedy algorithms minimum spanning trees dynamic programming NP-completeness and more
| Courses | Duration | Effort | Prerequisites | Discussion |
|---|---|---|---|---|
| Divide and Conquer, Sorting and Searching, and Randomized Algorithms | 4 weeks | 4-8 hours/week | any programming language, Mathematics for Computer Science | chat |
| Graph Search, Shortest Paths, and Data Structures | 4 weeks | 4-8 hours/week | Divide and Conquer, Sorting and Searching, and Randomized Algorithms | chat |
| Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming | 4 weeks | 4-8 hours/week | Graph Search, Shortest Paths, and Data Structures | chat |
| Shortest Paths Revisited, NP-Complete Problems and What To Do About Them | 4 weeks | 4-8 hours/week | Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming | chat |
Core security
Topics covered Confidentiality, Integrity, Availability Secure Design Defensive Programming Threats and Attacks Network Security Cryptography and more
| Courses | Duration | Effort | Prerequisites | Discussion |
|---|---|---|---|---|
| Cybersecurity Fundamentals | 8 weeks | 10-12 hours/week | - | chat |
| Principles of Secure Coding | 4 weeks | 4 hours/week | - | chat |
| Identifying Security Vulnerabilities | 4 weeks | 4 hours/week | - | chat |
Choose one of the following:
| Courses | Duration | Effort | Prerequisites | Discussion |
|---|---|---|---|---|
| Identifying Security Vulnerabilities in C/C++Programming | 4 weeks | 5 hours/week | - | chat |
| Exploiting and Securing Vulnerabilities in Java Applications | 4 weeks | 5 hours/week | - | chat |
Core applications
Topics covered: Agile methodology REST software specifications refactoring relational databases transaction processing data modeling neural networks supervised learning unsupervised learning OpenGL ray tracing and more
| Courses | Duration | Effort | Prerequisites | Discussion |
|---|---|---|---|---|
| Databases: Modeling and Theory | 2 weeks | 10 hours/week | core programming | chat |
| Databases: Relational Databases and SQL | 2 weeks | 10 hours/week | core programming | chat |
| Databases: Semistructured Data | 2 weeks | 10 hours/week | core programming | chat |
| Machine Learning | 11 weeks | 9 hours/week | Basic coding | chat |
| Computer Graphics (alternative) | 6 weeks | 12 hours/week | C++ or Java, Basic Linear Algebra | chat |
| Software Engineering: Introduction (alternative) | 6 weeks | 8-10 hours/week | Core Programming, and a sizable project | chat |
Core ethics
Topics covered: Social Context Analytical Tools Professional Ethics Intellectual Property Privacy and Civil Liberties and more
| Courses | Duration | Effort | Prerequisites | Discussion |
|---|---|---|---|---|
| Ethics, Technology and Engineering | 9 weeks | 2 hours/week | none | chat |
| Introduction to Intellectual Property | 4 weeks | 2 hours/week | none | chat |
| Data Privacy Fundamentals | 3 weeks | 3 hours/week | none | chat |
Advanced CS
After completing every required course in Core CS, students should choose a subset of courses from Advanced CS based on interest. Not every course from a subcategory needs to be taken. But students should take every course that is relevant to the field they intend to go into.
Advanced programming
Topics covered: debugging theory and practice goal-oriented programming parallel computing object-oriented analysis and design UML large-scale software architecture and design and more
| Courses | Duration | Effort | Prerequisites |
|---|---|---|---|
| Parallel Programming | 4 weeks | 6-8 hours/week | Scala programming |
| Compilers | 9 weeks | 6-8 hours/week | none |
| Introduction to Haskell | 14 weeks | - | - |
| Learn Prolog Now! (alternative)* | 12 weeks | - | - |
| Software Debugging | 8 weeks | 6 hours/week | Python, object-oriented programming |
| Software Testing | 4 weeks | 6 hours/week | Python, programming experience |
(*) book by Blackburn, Bos, Striegnitz (compiled from source, redistributed under CC license)
Advanced systems
Topics covered: digital signaling combinational logic CMOS technologies sequential logic finite state machines processor instruction sets caches pipelining virtualization parallel processing virtual memory synchronization primitives system call interface and more
| Courses | Duration | Effort | Prerequisites | Notes |
|---|---|---|---|---|
| Computation Structures 1: Digital Circuits alternative 1 alternative 2 | 10 weeks | 6 hours/week | Nand2Tetris II | Alternate links contain all 3 courses. |
| Computation Structures 2: Computer Architecture | 10 weeks | 6 hours/week | Computation Structures 1 | - |
| Computation Structures 3: Computer Organization | 10 weeks | 6 hours/week | Computation Structures 2 | - |
Advanced theory
Topics covered: formal languages Turing machines computability event-driven concurrency automata distributed shared memory consensus algorithms state machine replication computational geometry theory propositional logic relational logic Herbrand logic game trees and more
| Courses | Duration | Effort | Prerequisites |
|---|---|---|---|
| Theory of Computation (alternative) | 13 weeks | 10 hours/week | Mathematics for Computer Science, logic, algorithms |
| Computational Geometry | 16 weeks | 8 hours/week | algorithms, C++ |
| Game Theory | 8 weeks | 3 hours/week | mathematical thinking, probability, calculus |
Advanced Information Security
| Courses | Duration | Effort | Prerequisites |
|---|---|---|---|
| Web Security Fundamentals | 5 weeks | 4-6 hours/week | understanding basic web technologies |
| Security Governance & Compliance | 3 weeks | 3 hours/week | - |
| Digital Forensics Concepts | 3 weeks | 2-3 hours/week | Core Security |
| Secure Software Development: Requirements, Design, and Reuse | 7 weeks | 1-2 hours/week | Core Programming and Core Security |
| Secure Software Development: Implementation | 7 weeks | 1-2 hours/week | Secure Software Development: Requirements, Design, and Reuse |
| Secure Software Development: Verification and More Specialized Topics | 7 weeks | 1-2 hours/week | Secure Software Development: Implementation |
Advanced math
| Courses | Duration | Effort | Prerequisites | Discussion |
|---|---|---|---|---|
| Essence of Linear Algebra | - | - | high school math | chat |
| Linear Algebra | 14 weeks | 12 hours/week | corequisite: Essence of Linear Algebra | chat |
| Introduction to Numerical Methods | 14 weeks | 12 hours/week | Linear Algebra | chat |
| Introduction to Formal Logic | 10 weeks | 4-8 hours/week | Set Theory | chat |
| Probability | 15 weeks | 5-10 hours/week | Differentiation and Integration | chat |
Final project
Part of learning is doing. The assignments and exams for each course are to prepare you to use your knowledge to solve real-world problems.
After you’ve completed Core CS and the parts of Advanced CS relevant to you, you should identify a problem that you can solve using the knowledge you’ve acquired. You can create something entirely new, or you can improve some tool/program that you use and wish were better.
Students who would like more guidance in creating a project may choose to use a series of project oriented courses. Here is a sample of options (many more are available, at this point you should be capable of identifying a series that is interesting and relevant to you):
| Courses | Duration | Effort | Prerequisites |
|---|---|---|---|
| Fullstack Open | 12 weeks | 15 hours/week | programming |
| Modern Robotics (Specialization) | 26 weeks | 2-5 hours/week | freshman-level physics, linear algebra, calculus, linear ordinary differential equations |
| Data Mining (Specialization) | 30 weeks | 2-5 hours/week | machine learning |
| Big Data (Specialization) | 30 weeks | 3-5 hours/week | none |
| Internet of Things (Specialization) | 30 weeks | 1-5 hours/week | strong programming |
| Cloud Computing (Specialization) | 30 weeks | 2-6 hours/week | C++ programming |
| Data Science (Specialization) | 43 weeks | 1-6 hours/week | none |
| Functional Programming in Scala (Specialization) | 29 weeks | 4-5 hours/week | One year programming experience |
| Game Design and Development with Unity 2020 (Specialization) | 6 months | 5 hours/week | programming, interactive design |
Congratulations
After completing the requirements of the curriculum above, you will have completed the equivalent of a full bachelor’s degree in Computer Science. Congratulations!
What is next for you? The possibilities are boundless and overlapping:
-
Look for a job as a developer!
-
Check out the readings for classic books you can read that will sharpen your skills and expand your knowledge.
-
Join a local developer meetup (e.g. via meetup.com).
-
Pay attention to emerging technologies in the world of software development:
-
Explore the actor model through Elixir, a new functional programming language for the web based on the battle-tested Erlang Virtual Machine!
-
Explore borrowing and lifetimes through Rust, a systems language which achieves memory- and thread-safety without a garbage collector!
-
Explore dependent type systems through Idris, a new Haskell-inspired language with unprecedented support for type-driven development.
-
