Coding is a kind of skill like other skill, such as playing guitar, hence it requires dedicated exercises to be at coding. This project is for me to plan and keep track my coding practice.
So the idea is, Do Repeat Yourself
, aka, DRY!! (Yeah, not that DRY)
But practice and learning also produce pleasure as long as doing it with a plan, so you see the structure and progress.
- Do subject(s) by coding
- Data structures and Algorithms
- Topcoder
- Leetcode
- Music....
- Re-invent wheels
- Create flashcards to repeat yourself, DRY!
Main subjects to practise:
- Tools
- Vim
- Linux
- Languages
- Python
- Ocaml
- Clojure
- Erlang
- C
- Java
- C++
- Haskell
- Data Structure and Algorithms
- Data Structures and Algorithms in Python
- Having Fun
- FoxDot
- Tidal Cycle :-)
- Re-invent the Wheels
- Word Problems
- Software Engineering
- "Low-level" Stuff of Computers
I need to pick a main language to express any coding ideas. Python is the one for me. As a main language I need to make sure when I solve a problem, I don't need to think about any syntax or ideal way doing things. The language should be natural to me.
Again, master a language needs dedicated practice as well.
I also list other languages here because I used them time to time to finish my master course. And they are so unique and fun to cope with. They provided different views of coding.
- Haskell: Functional Programming Course
- Ocaml: CS3110 Data Structure and Functional Programming
- Erlang: Concurrent Programming Course
- C: Embedded System Course, Operating Systems Engineering
First thing first, coding is about typing text! So master a text editor. But in the end, what matters is not which editor you are using, it is the editing logic you are using. To me there are only two logics: VIM and Others. Why? Vim is about combing editing commands while others are about combing key combos. I tried several of them, Emacs, VS code, Vim, and I ended up with Vim. The reason is simple: Vim logic is universal. Once you familiar with it, the logic can adapt to other editors/IDEs, while other editors key combos vary quite a lot, and some of them not making to much sense. Some of them are too many keys to press.. Your hands stretch.
Vim's way of editing looks very strange or canter intuitive at beginning. But please do check and learn it a bit. Once getting used to it, it make typing and editing so fluent with less effort.
Again, using Vim well also need practice. But this one is kind of done in my daily coding exercises. It also requires some dedicated learning time to be more effective. ( and pretentiously more fun.)
This need a daily exercise in code.
- Before and after finish a algorithm, make sure I understand its complexity.
- Try in different language as part of language practice
- Implement common data structures
- Implement common algorithm (this is some times tie to data structures)
I started with this book Data Structures and Algorithms in Python
.
Practicing data structure and algorithm is part of re-invent wheels, as I am building something that already exist. However, just like practicing music, you start by playing famous and good music, then you can create even better ones. Here we talk about the same thing.
But re-invent wheel can involve more, such as building as small web server, building a database, building a compiler, building a graph processing library, or any library you are using on daily work.
Here is a list of wheels:
- Computation Graph
- A compiler
- A database
This is larger problem solving exercises.
This about good coding practices to build larger and maintainable software.
TODO:
- Service-oriental
- Distributed system
This is about understanding how computer works in a details way. Coding in general is about high level abstractions.
- Hardware/Software Interface
- Operating Systems
- Compiler
- Networking
- Databases
Here are some open courses:
Hardware/Software Interface
Operating System
- Operating System Engineering
- 操作系统导论(Operating Systems: Three Easy Pieces)
- HMC CS 134 2019 Operating System
Compiler
Networking
Databases