-
Write ASSERTION as much as possible
- every non-admissible cases should be blocked with assertion
- 경험 - OS 구현할 때, project 3을 하던 도중 assertion 에러가 발생함. 확인해보니 project 1(정말 옛날에 진행한) 코드에서 걸어놓은 assertion이 발생함. 우선 이 assertion이 없었다면 test가 무한 waiting하고, project 1의 코드에서 에러가 날 것이라고는 상상하지 못했을 것이기 때문에 원인을 아마 못 찾았을 것 같음. 찾더라도 최소 세 시간은 걸렸을 것인데, assertion 을 평소 잘 걸어 놓으니 바로 원인을 파악할 수 있었음.
- every non-admissible cases should be blocked with assertion
-
Write multiple levels of tests
- unit tests (functionality of a function)
- integration test (between modules or functions)
- system test
-
Consider the resources
- Disk IO : data-related
- Main memory occupation
- 단순히 양이 다가 아님. GC도 고려해야 함
- 순간 엄청난 메모리를 넣게 되면 GC overhead가 너무 커진다.
- 각 언어의 memory model에 대해 정확히 알아야 함
- Java memory model / heap allocation / memory-related parameters가
- implicit deallocation in JAVA : value = null ; System.gc
- 단순히 양이 다가 아님. GC도 고려해야 함
- Network latency
-
Always consider concurrency
- concurrency control이 필요한 시점에서 고려하지 않으면 디버깅 시간이 두배씩 늘어남( literally!)
- always unlock!
- lock; try {} catch {} finally { unlock }
-
A Good systems developer documentation example: https://github.com/cmu-db/noisepage/tree/master/docs
-
My own summary of the core programming principles books: https://github.com/jinhoko/programming-docs
/
The Blog of Jinho Ko
/
Computer science
/
Programming
/
Systems
·
1 min read
System Design Tips