stdlib의 Zen
Source: Dev.to
단순함, 모듈성, 일관성, 그리고 장인 정신에 대한 철학.
지난 몇 년 동안 stdlib은 작은 유틸리티 모음에서 JavaScript와 웹에서 과학 계산을 위한 크고 고도로 모듈화된 시스템으로 성장했습니다. API, 명명 규칙, 성능, 패키지 경계, 구현 전략 등에 관한 수천 개의 작은 결정이 프로젝트의 특성을 형성했습니다. 프로젝트가 커짐에 따라 이러한 기본 원칙을 명확히 하는 것이 유지보수자, 기여자, 사용자 모두에게 점점 더 중요해졌습니다.
stdlib의 Zen
이것은 스타일 가이드, 체크리스트, 혹은 교리가 아닙니다. 경험을 농축한 것으로—잘 작동한 것, 그렇지 않은 것, 그리고 코드베이스와 커뮤니티가 성장함에 따라 확장되는 경향이 있는 것.
Zen은 다음과 같은 질문에 답하도록 돕기 위해 만들어졌습니다:
- 이것을 새로운 패키지로 만들지 기존 패키지에 포함시킬지?
- 이 API가 너무 일반적인가?
- 다른 옵션을 추가할지, 기존 기능을 조합할지?
- 이 추상화가 가치가 있는가?
핵심 원칙
- 한 가지 일을 하라. 잘 하라.
- 근본적인 모듈화를 수용하라.
- 구성보다 조합을 선호하라.
- 안정성은 기능이다.
- 명확하고 예측 가능하게 만들라.
- 영리해 보이려 하지 마라.
- 복잡성은 파멸한다 – 복잡성을 스택 위로 올려라.
- 설명하기 어렵다면, 그것은 나쁜 아이디어다.
- 테스트하기 어렵다면, 그것은 나쁜 설계다.
- 실패는 쉽게 진단할 수 있어야 한다.
- 일관성을 최우선으로 평가한다 (정확성, 안전성, 명확성이 달리 요구되지 않는 한).
- C처럼 작성하라: 명시적이고, 기본적으로 다형성을 피하며, 예측 가능한 성능 특성을 선호한다.
- 확장 가능한 곳에서는 자동화하고, 가독성을 해치는 곳에서는 멈추라.
- 코드는 작성보다 훨씬 더 자주 읽힌다 – 미래의 자신에게 친절하라.
- 코드는 장인 정신이다 – 정원을 가꾸듯 관리하라.
- 실수는 전염된다 – 초기에 고쳐라.
- 단순함은 아름답다.
반복되는 주제
작고 독립적인 패키지
무언가가 독립적으로 설 수 있다면 그렇게 해야 합니다. stdlib은 의도적으로 몇 개의 큰 패키지보다 많은 작은 패키지들로 구성됩니다. 이는 재사용을 가능하게 하고, 테스트를 단순화하며, 사용자가 필요한 것만 포함할 수 있게 합니다. 또한 규율을 강요합니다: 각 패키지는 명확한 목적과 경계를 가져야 합니다.
단순한 빌딩 블록
우리는 고도로 설정 가능한 인터페이스보다 단순한 기본 요소를 선호합니다. 더 많은 플래그, 옵션, 모드를 추가하는 대신, 조합할 수 있는 작은 빌딩 블록을 제공합니다. 이는 개별 API를 예측 가능하게 유지하고 조합 복잡성을 방지합니다.
계층화된 복잡성
하위 수준 API는 단순하고 예측 가능하며 이해하기 쉬워야 합니다. 분기 로직, 여러 모드, 오케스트레이션과 같은 더 복잡한 동작은 이러한 기본 요소 위에 구축된 상위 수준 유틸리티에 포함됩니다. 이러한 분리는 성능과 유지 보수성 모두에 중요합니다.
일관된 명명 및 동작
사용자는 API가 무엇을 하는지 추측할 필요가 없어야 합니다. 명명 규칙, 인자 순서, 오류 동작은 프로젝트 전반에 걸쳐 일관되어 인지 부하를 줄이고 시스템을 배우고 사용하기 쉽게 만듭니다.
예측 가능한 성능
“C처럼 작성한다”는 것은 언어 문법보다 사고 방식을 의미합니다. 우리는 단일 형태의 코드 경로, 명시적인 동작, 예측 가능한 성능 특성을 선호합니다. 숨겨진 할당, 과도한 다형성, 암묵적인 작업은 성능 및 디버깅 문제를 초래합니다.
영리함보다 명료함
코드는 작성되는 것보다 읽히는 경우가 훨씬 많기 때문에, Zen은 명료함, 단순함, 그리고 코드가 무엇을 하는지뿐 아니라 왜 그렇게 하는지를 설명하는 문서를 강조합니다.
Zen의 진화
stdlib의 Zen은 고정되어 있지 않습니다. 프로젝트가 발전함에 따라 무엇이 효과적이고 무엇이 그렇지 않은지에 대한 우리의 이해도 변합니다. Zen에 대한 변경은 드물고, 신중하며, 경험에 기반해야 합니다.
stdlib에 기여하고 있다면, API를 설계하거나 코드를 검토할 때 Zen을 참고점으로 활용하세요. 모든 질문에 답을 제공하지는 않지만, 트레이드‑오프를 고민하고 프로젝트의 전반적인 방향과 일치하도록 결정을 내리는 데 도움이 될 것입니다.
의심스러울 때는 단순성, 명료성, 일관성을 우선하십시오.
마무리
stdlib은 강력한 원칙을 기반으로 구축된 JavaScript와 웹을 활용한 과학 컴퓨팅 분야의 진행 중인 실험입니다. Zen은 이러한 원칙을 포착하여 프로젝트가 일관성을 잃지 않고 계속 성장할 수 있게 합니다.
피드백을 환영합니다. 이 글을 즐기셨다면 GitHub에서 별 🌟을 눌러 주시고, 프로젝트 지원을 고려해 주세요. 여러분의 기여와 지속적인 지원이 stdlib의 장기적인 성공을 보장하는 데 도움이 됩니다.