Giter VIP home page Giter VIP logo

dry's Introduction

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

dry's People

Contributors

wangzhe3224 avatar

Stargazers

Winston avatar  avatar Yuntao avatar  avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.