Skip to content

wangzhe3224/DRY

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Do Repeat Yourself, DRY

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.

Daily

  • Do subject(s) by coding
    • Data structures and Algorithms
    • Topcoder
    • Leetcode
    • Music....
    • Re-invent wheels
  • Create flashcards to repeat yourself, DRY!

Subjects

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

Languages

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.

Tools

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.)

Data Structure and Algorithms

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.

Re-invent the Wheels

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

Word Problems

This is larger problem solving exercises.

Software Engineering

This about good coding practices to build larger and maintainable software.

TODO:

  • Service-oriental
  • Distributed system

"Low-level" Stuff of Computers

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

Compiler

Networking

Databases

References

About

Do Repeat Yourself, DRY, code as a skill

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published