- https://www.edx.org/course/how-code-simple-data-ubcx-htc1x
- https://www.edx.org/course/how-code-complex-data-ubcx-htc2x
Might be good to alternate topics with practical programming topics, or try to practice what you learn with code.
- https://online.stanford.edu/courses/soe-ycsalgorithms1-algorithms-design-and-analysis-part-1
- https://online.stanford.edu/courses/soe-ycs0001-algorithms-design-and-analysis-part-2
or
https://online.stanford.edu/courses/soe-ycsautomata-automata-theory
Choose a topic you are interested in and deep dive into it, build applications related to that domain. You might want to learn a programming language related to that domain as well.
- Web - JavaScript
- Systems - C or Rust
- Mobile - Java or Kotlin
- Databases - SQL (Postgres)
- Dev tools
- Networking - C
- Concurrency - Erlang or Go
- GPU - Cuda or OpenCL
- Compilers - Haskell or OCaml
- Working with git
- Specification
- Simplification
- Tasks breakdown
- Incremental development
- Agile/Scrum
- Interation
- Contracts
- https://www.edx.org/course/software-construction-data-abstraction-ubcx-softconst1x
- https://www.edx.org/course/software-construction-object-oriented-ubcx-softconst2x
- Efficient Debugging
- Testing
- Productivity
- Performance
https://www.coursera.org/learn/build-a-computer
https://www.coursera.org/learn/programming-languages
- C: gives some understanding on low level programming and memory
- Java / C# (they are practically the same) - overview of OO which is fairly dominant
- JavaScript - Most used programming language, super useful to understand the web