/ The Blog of Jinho Ko / Computer science / Programming / Systems

·

1 min read

System Design Tips

By Jinho Ko
  1. 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 을 평소 잘 걸어 놓으니 바로 원인을 파악할 수 있었음.
  2. Write multiple levels of tests

    • unit tests (functionality of a function)
    • integration test (between modules or functions)
    • system test
  3. 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
    • Network latency
  4. Always consider concurrency

    • concurrency control이 필요한 시점에서 고려하지 않으면 디버깅 시간이 두배씩 늘어남( literally!)
    • always unlock!
      • lock; try {} catch {} finally { unlock }
  5. A Good systems developer documentation example: https://github.com/cmu-db/noisepage/tree/master/docs

  6. My own summary of the core programming principles books: https://github.com/jinhoko/programming-docs

last modified June 2, 2024
comments powered by Disqus

© Copyright 2024. Jinho Ko. All rights reserved. Last updated: June 02, 2024.