|
Size: 6298
Comment:
|
Size: 20648
Comment:
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 5: | Line 5: |
| 주니어 개발자들을 위한 프로그래밍 지혜를 Christopher Alexander의 패턴 언어로 변환하는 프로젝트. | 주니어 개발자들을 위한 프로그래밍 피드백을 Christopher Alexander의 패턴 언어로 변환하는 프로젝트. |
| Line 11: | Line 11: |
| [[기술문서모음/ToJuniors]] 페이지의 27개 핵심 격언들을 개별 패턴으로 확장하여, 반격자(semi-lattice) 구조의 상호 연결된 지식 네트워크를 구축한다. 각 패턴은 이솝우화 스타일의 스토리텔링으로 작성되어 초보자들이 쉽게 이해하고 기억할 수 있도록 한다. == Pattern Language Structure == === Foundation Patterns (가장 기본적) === '''[[TinyExperiment]]''' (완성) - 작은 실험 환경을 통한 점진적 학습과 개발 ↳ enables → BabyStep, UseAbduction, HereAndNowDebugging ↳ used by → TddIsDesignActivity, PiecemealGrowthCenterFirst '''UseDataToMakeLogicSimple''' - 관심사 분리의 기본 원칙 ↳ supports → MakeDSL, DoNotMixLogicAndDataConstruction ↳ enables → FindCommonalityAndVariability '''ProblemSpaceSolutionSpace''' - 근본적 사고 체계 ↳ guides → NamingIsDesignPractice, MakeItWorkThenMakeBetter ↳ supports → TddIsDesignActivity === Intermediate Patterns (기초 위에 구축) === '''BabyStep''' - 핵심적 진화적 접근법 ↳ connected to → MicroCommit, ShortFeedbackCycle ↳ enables → PiecemealGrowthCenterFirst ↳ requires → DoNotGuessValidateIt '''NamingIsDesignPractice''' - 추상화 생성 ↳ uses → ProblemSpaceSolutionSpace ↳ supports → MakeDSL ↳ enables → FindCommonalityAndVariability '''TddIsDesignActivity''' - 피드백을 통한 설계 ↳ uses → ProblemSpaceSolutionSpace, BabyStep ↳ requires → ShortFeedbackCycle, UseAbduction ↳ produces → RegressionTest === Application Patterns (구체적 실천) === '''MicroCommit''' - 버전 제어 원칙 ↳ implements → BabyStep ↳ enables → PiecemealGrowthCenterFirst '''UseAbduction''' - 탐구 방법 ↳ supports → TddIsDesignActivity, HereAndNowDebugging ↳ opposite of → DoNotGuessValidateIt '''HereAndNowDebugging''' - 디버깅 접근법 ↳ uses → UseAbduction, EliminateIntermediateLayers ↳ implements → DoNotGuessValidateIt === Meta-Patterns (과정 자체에 대한) === '''CraftNotScience''' - 개발 철학 ↳ manifests through → BabyStep, LastFivePercentAutomation ↳ guides → LearnFromExperts '''LastFivePercentAutomation''' - 자동화의 한계 ↳ reflects → CraftNotScience ↳ requires → PairProgrammingWithJuniors === Social Patterns (팀 역학) === '''PairProgrammingWithJuniors''' - 지식 전수 ↳ enables → LearnFromExperts ↳ uses → YesButYesAnd ↳ supports → LastFivePercentAutomation == Pattern Template == 각 패턴은 Alexander의 형식을 따르되, 이솝우화 스타일로 작성된다: {{{ #acl +All:read = PatternName = == Context == 언제 이 패턴이 적용되는가 == Problem == 스토리나 우화로 문제 상황 묘사 == Solution == 구체적이고 실행 가능한 해결책 문단 형태로 자연스럽게 서술 == Examples == 실제 개발 상황의 구체적 예시들 캐릭터와 스토리가 있는 경험담 == Resulting Context == 이 패턴 적용 후의 상황 == Related Patterns == * '''Uses:''' 이 패턴이 사용하는 다른 패턴들 * '''Used by:''' 이 패턴을 사용하는 패턴들 * '''Enables:''' 이 패턴이 가능하게 하는 패턴들 * '''Complements:''' 보완하는 패턴들 |
[[기술문서모음/ToJuniors]] 문서의 패턴들을 Alexander의 패턴 언어 형식으로 변환하여 구조적이고 교육적인 자료로 발전시키는 것이 목표입니다. === Core Principles === * '''Structure-Preserving Baby Steps''' - 기존 구조를 보존하며 점진적 발전 * '''Story-First Approach''' - 스토리로 시작해서 패턴으로 추상화 * '''Educational Focus''' - 학습자 중심의 명확한 설명 * '''Pattern Language Structure''' - Alexander 방식의 체계적 연결 == Pattern Inventory == === Foundation Patterns === '''Core Programming Principles''' * '''[[DataAsFoundation]]''' ✓ - 비즈니스 로직에서 데이터 구성을 분리하여 단순함을 달성하고, 데이터 구조가 복잡해지면 도메인 특화 언어를 만들어라. 모든 깨끗한 코드의 기반은 잘 정리된 데이터에서 시작된다. * ''연관: [[LanguageBuilding]], [[ComplexityTaming]], [[TwoWorlds]], [[WorkingFirst]], [[NamesAsDesign]], [[DetectiveWork]], [[CognitiveMicroscope]], [[MetaphorThinking]]'' * '''[[TwoWorlds]]''' ✓ - 문제 공간(무엇을 해결할 것인가)과 해결 공간(어떻게 구현할 것인가)을 명확히 구분하라. 많은 프로그래밍 오류는 사고 과정에서 이 두 관심사를 너무 일찍 섞는 데서 비롯된다. * ''연관: [[StrongCenter]], [[PatternHunting]], [[MetaphorThinking]], [[WorkingFirst]], [[DataAsFoundation]], [[DetectiveWork]], [[TinyExperiment]], [[CognitiveMicroscope]], [[The95PercentRule]]'' * '''[[WorkingFirst]]''' ✓ - 우아하거나 효율적으로 만들기 전에 먼저 작동하게 만들어라. 작동하는 해결책은 문제의 진정한 본질을 드러내고 더 나은 설계 결정을 안내한다. 주니어는 실행 없이 완벽한 설계를, 시니어는 작은 작동에서 snowball을 만든다. * ''연관: [[TinyExperiment]], [[BabySteps]], [[OrganicGrowth]], [[TwoWorlds]], [[GreenRefuge]], [[DetectiveWork]], [[DesignThroughTest]], [[TightLoop]], [[ArtisanMind]], [[The95PercentRule]]'' * '''[[ArtisanMind]]''' ✓ - 프로그래밍을 순수한 체계적 방법론이 아닌 직관, 경험, 감각이 필요한 기예로 접근하라. 최고의 프로그래머는 기술적 지식과 예술적 감성을 결 합한다. * ''연관: [[MasterApprentice]], [[NamesAsDesign]], [[TinyExperiment]], [[WorkingFirst]], [[InstinctiveChoice]], [[PatternHunting]], [[The95PercentRule]], [[TinyResearch]]'' * '''[[The95PercentRule]]''' ✓ - 모든 과정의 마지막 5%를 자동화하려는 유혹에 저항하라. 그 남은 복잡성은 종종 절약할 수 있는 수작업 노력보다 더 많은 비용이 든다. * ''연관: [[WorkingFirst]], [[ArtisanMind]], [[TinyExperiment]], [[TwoWorlds]], [[ComplexityTaming]]'' === TDD & Evolutionary Design Patterns === * '''[[TinyExperiment]]''' ✓ - 문제에 대해 의미 있는 것을 가르쳐줄 수 있는 가장 작은 실험부터 시작하라. 각 실험은 실패 비용이 거의 없을 정도로 작아야 한다. * ''연관: [[BabySteps]], [[GreenRefuge]], [[DesignThroughTest]], [[DetectiveWork]], [[TightLoop]], [[AtomicCommit]], [[CognitiveMicroscope]], [[WorkingFirst]], [[ArtisanMind]]'' * '''[[BabySteps]]''' ✓ - 시스템 무결성을 유지하면서 목표를 향해 나아가는 가장 작은 단계를 취하라. 큰 단계는 복잡성을 숨기고 디버깅을 기하급수적으로 어렵게 만든다. * ''연관: [[TinyExperiment]], [[AtomicCommit]]'' * '''[[GreenRefuge]]''' ✓ - 테스트가 실패하면 앞으로 고치려 하지 말고 즉시 마지막으로 알려진 작동 상태로 돌아가라. 초록 막대는 복잡성의 폭풍 속 안전한 피난처다. * ''연관: [[SafetyNet]], [[PresentMoment]]'' * '''[[DesignThroughTest]]''' ✓ - 테스트 주도 개발을 단순한 검증 도구가 아닌 설계 활동으로 사용하라. 테스트를 먼저 작성하는 행위는 더 나은 API 설계와 깔끔한 인터페이스를 드러낸다. * ''연관: [[CleanIsolation]], [[TightLoop]]'' * '''[[TightLoop]]''' ✓ - 변경을 만들고 그 효과를 보는 사이의 시간을 최소화하라. 긴 피드백 주기는 오류가 복합되고 근본 원인을 찾기 어렵게 만든다. * ''연관: [[AtomicCommit]], [[PresentMoment]]'' * '''[[AtomicCommit]]''' ✓ - 각 커밋이 독립적으로 존재할 수 있는 하나의 완전하고 일관된 변경을 나타내도록 하라. 원자적 커밋은 변경 사항을 이해하고, 검토하고, 되돌리기 쉽게 만든다. * ''연관: [[BabySteps]], [[TightLoop]]'' * '''[[CleanIsolation]]''' ✓ - 테스트와 모듈을 숨겨진 의존성 없이 독립적으로 실행할 수 있도록 설계하라. 격리는 시스템을 이해하고, 테스트하고, 수정하기 쉽게 만든다. * ''연관: [[DesignThroughTest]], [[DirectPath]]'' * '''DetectiveWork''' - 관찰된 행동의 원인에 대한 가설을 형성하기 위해 추론적 사고를 사용하라. 좋은 프로그래머는 결론을 내리기 전에 증거를 수집하는 탐정이다. * ''연관: [[RootHunting]], [[PresentMoment]]'' * '''[[OrganicGrowth]]''' ✓ - 모든 부분을 동시에 구축하기보다는 작동하는 핵심에서 시스템을 점진적으로 성장시켜라. 생물학적 성장처럼, 소프트웨어는 각 단계에서 전체성을 유지할 때 가장 건강하게 성장한다. * ''연관: [[StrongCenter]], [[WorkingFirst]]'' * '''[[StrongCenter]]''' ✓ - 가장 필수적인 핵심 기능부터 구축을 시작하고 바깥쪽으로 성장시켜라. 강한 중심은 시스템이 확장될 때 안정성과 일관성을 제공한다. * ''연관: [[OrganicGrowth]], [[TwoWorlds]]'' === Testing & Debugging Patterns === * '''DirectPath''' - 입력에서 출력으로의 흐름을 가리는 불필요한 레이어와 간접성을 제거하라. 문제와 해결책 사이의 가장 짧은 경로가 보통 가장 명확하다. * ''연관: [[CleanIsolation]], [[SingleFocus]]'' * '''SingleFocus''' - 한 번에 정확히 한 가지 일만 하고, 다음으로 넘어가기 전에 완전히 완료하라. 디버깅에서 멀티태스킹은 혼란과 놓친 연결로 이어진다. * ''연관: [[AtomicCommit]], [[PresentMoment]]'' * '''ShortLeash''' - 버그나 행동에 대한 가설을 형성할 때, 너무 멀리 추론하지 말고 빠르게 테스트하라. 긴 추론 사슬은 불확실성을 곱하고 시간을 낭비한다. * ''연관: [[DetectiveWork]], [[TinyExperiment]]'' * '''SafetyNet''' - 이전에 고쳐진 버그가 다시 발생하면 잡아내는 회귀 테스트를 구축하라. 좋은 안전망은 자신감을 가지고 리팩토링하고 개선할 수 있게 해준다. * ''연관: [[GreenRefuge]], [[CleanIsolation]]'' * '''PresentMoment''' - 일어나야 한다고 생각하는 일보다는 지금 실제로 일어나고 있는 일을 이해하는 데 집중하라. 현재 순간은 대부분의 문제를 해결하는 데 필요한 모든 정보를 담고 있다. * ''연관: [[DetectiveWork]], [[RootHunting]]'' * '''RootHunting''' - 표면적인 수정을 적용하거나 무작정 찾지 말고 체계적으로 파서 실제 원인을 찾아라. 진정한 근본 원인은 일단 발견되면 종종 간단한 해결책을 드러낸 다. * ''연관: [[PresentMoment]], [[DetectiveWork]]'' === Programming Fundamentals & Language === * '''[[PatternHunting]]''' ✓ - 자신의 코드와 다른 사람의 코드에서 반복되는 구조와 해결책을 적극적으로 찾아라. 패턴 인식은 모든 프로그래밍 전문성의 기초다. * ''연관: [[LanguageBuilding]], [[MasterApprentice]], [[MetaphorThinking]], [[ArtisanMind]], [[ComplexityTaming]], [[CognitiveMicroscope]]'' * '''ComplexityTaming''' - 복잡성을 관리하는 기법들의 도구상자를 개발하라: 추상화, 분해, 네이밍, 관심사 분리. 복잡성은 유지보수성의 적이다. * ''연관: [[DataAsFoundation]], [[DirectPath]]'' * '''[[NamesAsDesign]]''' ✓ - 네이밍을 설계 활동으로 다뤄라. 이름은 문맥에 embedding되어 평가되며, 형제/부모/자식과 조화롭게 "잘 어울려야" 한다. 이름은 개념 그 자 체이고, 좋은 이름은 문서보다 가치있다. * ''연관: [[LanguageBuilding]], [[MetaphorThinking]], [[LivingVocabulary]], [[ArtisanMind]], [[TwoWorlds]], [[DataAsFoundation]], [[WorkingFirst]], [[PatternHunting]]'' * '''[[LanguageBuilding]]''' ✓ - 프로그래밍을 문제 영역을 완벽하게 표현하는 도메인 특화 언어를 구축하는 것으로 접근하라. Lisp 전통의 bottom-up 프로그래밍과 Peter Naur의 theory building을 통합하여, 최고의 프로그램은 전문화된 어휘로 잘 쓰인 산문처럼 읽힌다. * ''연관: [[DataAsFoundation]], [[LivingVocabulary]], [[NamesAsDesign]], [[MetaphorThinking]], [[TwoWorlds]], [[PatternHunting]], [[WorkingFirst]], [[OrganicGrowth]], [[ComplexityTaming]], [[TechnicalCommunity]]'' * '''[[MetaphorThinking]]''' ✓ - 적절한 은유와 비유를 찾아 문제를 정의하고 해결하라. 은유(Metaphor), 유추(Analogy), 가추(Abduction)의 인지적 삼위일체를 통해 복잡한 추상 개념을 구체적이고 이해 가능하게 만든다. 좋은 은유는 사고를 확장하고 기존 개념을 활용하게 한다. * ''연관: [[LanguageBuilding]], [[TwoWorlds]], [[PatternHunting]], [[TechnicalCommunity]], [[DataAsFoundation]], [[NamesAsDesign]], [[StrongCenter]], [[CognitiveMicroscope]], [[TinyResearch]]'' * '''LivingVocabulary''' - 이해가 깊어짐에 따라 코드베이스에서 사용되는 어휘를 지속적으로 발전시키고 정제하라. 좋은 어휘는 유기적으로 성장하고 새로운 통찰에 적응한다. * ''연관: [[NamesAsDesign]], [[OrganicGrowth]], [[LanguageBuilding]]'' === Collaboration Patterns === * '''TechnicalCommunity''' - 프로세스 준수보다는 기술적 우수성과 지속적 학습을 강조하는 개발 관행을 선택하라. 강한 기술적 관행은 경직된 프로세스보다 더 나은 협업을 만든다. * ''연관: [[SharedMind]], [[MasterApprentice]]'' * '''SharedMind''' - 지식을 결합하고 서로의 사각지대를 잡아내기 위해 다른 개발자들과 긴밀히 작업하라. 함께 일하는 두 마음은 종종 어느 한쪽도 혼자서는 도달할 수 없 는 통찰을 만들어낸다. * ''연관: [[TechnicalCommunity]], [[BuildingBridge]]'' * '''FlowingFeedback''' - 병목을 만들기보다는 개발 흐름을 유지하도록 코드 리뷰와 피드백을 구조화하라. 피드백은 진행을 느추는 것이 아니라 학습을 가속화해야 한다. * ''연관: [[BuildingBridge]], [[TightLoop]]'' * '''BuildingBridge''' - 다른 사람의 기여에 "네, 하지만..."보다는 "네, 그리고..."로 응답하라. 건설적인 대화는 방어적인 반응보다 더 나은 해결책을 만든다. * ''연관: [[SharedMind]], [[FlowingFeedback]]'' === Learning & Expertise Patterns === * '''MasterApprentice''' - 관찰, 모방, 안내된 실습을 통해 전문가로부터 직접 배워라. 스승-제자 관계는 책으로는 전달할 수 없는 암묵적 지식을 전수한다. * ''연관: [[CraftPath]], [[ArtisanMind]]'' * '''CraftPath''' - 고급 기법보다는 기초에 집중하면서 초보자에서 전문가로의 의도적인 진행을 따라라. 숙련은 핵심 기술의 인내심 있는 개발을 요구한다. * ''연관: [[MasterApprentice]], [[ThinkingMirror]]'' * '''[[CognitiveMicroscope]]''' ✓ - 자신의 인지 과정을 세밀하게 관찰하여 전문성을 빠르게 구축하라. 평소에는 너무 빨라서 보이지 않는 사고의 단계들을 확대해서 보면, 생각의 해상도와 밀도가 높아진다. * ''연관: [[ThinkingMirror]], [[ActiveReflection]], [[DetectiveWork]], [[PresentMoment]], [[MasterApprentice]], [[InstinctiveChoice]], [[TinyExperiment]], [[BabySteps]], [[TinyResearch]]'' * '''ThinkingMirror''' - 자신의 사고 과정과 의사결정 패턴을 정기적으로 성찰하라. 자신이 어떻게 생각하는지에 대한 자각은 학습과 문제 해결을 모두 향상시킨다. * ''연관: [[CognitiveMicroscope]], [[ActiveReflection]], [[InstinctiveChoice]]'' * '''ActiveReflection''' - 나중이 아니라 수행하면서 자신의 행동과 결정에 대해 의식적으로 생각하라. 실시간 성찰은 성능을 향상시키고 전문성을 더 빠르게 구축한다. * ''연관: [[CognitiveMicroscope]], [[ThinkingMirror]], [[PresentMoment]]'' * '''InstinctiveChoice''' - 경험적 직관에 기반한 빠른 의사결정을 가능하게 하는 패턴 인식을 개발하라. 전문 프로그래머는 왜 그런지 설명하기 전에 종종 올바른 답을 안 다. * ''연관: [[PatternHunting]], [[ArtisanMind]]'' * '''[[TinyResearch]]''' ✓ - 일하면서 5분 연구를 습관화하라. 셜록 홈즈의 방대한 잡학다식처럼, 작은 호기심을 즉시 해결하는 것이 누적되면 전문성이 된다. 중용(中庸)의 길 - 하루 5분이 10년 후 500시간, 호기심이 호기심을 낳는 선순환. * ''연관: [[DetectiveWork]], [[CognitiveMicroscope]], [[PatternHunting]], [[InstinctiveChoice]], [[MasterApprentice]], [[ActiveReflection]], [[TinyExperiment]], [[WorkingFirst]], [[MetaphorThinking]]'' == Current Status == === Phase 1: Foundation Patterns (Completed) === '''Completed:''' * [[TinyExperiment]] ✓ - 패턴 언어 형식으로 완성, 검증됨 * [[CognitiveMicroscope]] ✓ - 인지 과정 관찰 패턴 완성 * [[DataAsFoundation]] ✓ - 데이터 중심 사고와 LLM 시대의 표현 언어 완성 * [[TwoWorlds]] ✓ - 문제 공간과 해결 공간 분리, Polya와 Weinberg의 지혜 통합 * [[LanguageBuilding]] ✓ - Lisp 전통의 언어 구축과 Peter Naur의 theory building 통합 * [[MetaphorThinking]] ✓ - 은유, 유추, 가추의 인지적 삼위일체로 문제 해결 * [[WorkingFirst]] ✓ - Kent Beck의 "Work→Right→Fast", 주니어의 완벽주의 vs 시니어의 snowballing * [[NamesAsDesign]] ✓ - 이름은 문맥에 embedding, 관계 속에서 "잘 어울림", 개념화와 설계 활동 * [[TinyResearch]] ✓ - 5분 연구의 습관, 셜록 홈즈의 잡학다식, 중용의 일일신(日日신), 지식의 복리 효과 * [[ArtisanMind]] ✓ - 프로그래밍은 과학(Why)보다 기예(How), 유리 장인의 비유, 해커 마인드, 불완전한 지식으로 시작하는 베이지안 접근 * [[The95PercentRule]] ✓ - 마지막 5%의 자동화 비용, 수동 개입의 가치, Unattended System과의 구분 === Phase 2: TDD & Evolutionary Design Patterns (In Progress) === '''Completed:''' * [[BabySteps]] ✓ - 시스템의 생명력(Wholeness)을 유지하며 복잡한 변경을 수행, Structure-Preserving Transformation * [[GreenRefuge]] ✓ - 테스트가 실패하면 앞으로 고치려 하지 말고 즉시 마지막으로 알려진 작동 상태로 돌아감, 5분 규칙과 되돌리기의 용기 * [[DesignThroughTest]] ✓ - 테스트를 검증 도구가 아닌 설계 도구로 사용, Wishful Thinking과 의존성 드러내기 * [[TightLoop]] ✓ - 변경과 피드백 사이의 간격을 최소화하여 몰입(Flow)을 유지하는 법 * [[AtomicCommit]] ✓ - 각 커밋이 독립적으로 존재할 수 있는 하나의 완전하고 일관된 변경을 나타내도록 함 * [[CleanIsolation]] ✓ - 의존성을 끊어내어 자유롭게 테스트하고 변경하는 법, Seam, Stub/Mock 활용 * [[OrganicGrowth]] ✓ - 기계적 조립이 아닌 유기적 성장으로 시스템을 구축, Walking Skeleton * [[StrongCenter]] ✓ - 시스템의 핵심 가치를 담은 중심을 먼저 구축하여 통일성과 안정성 확보 '''Remaining Foundation:''' * None (All 11 Patterns Completed) === Validation Results === 첫 번째 패턴 [[TinyExperiment]]의 스토리 구조가 검증되어 패턴 언어로서의 가능성을 확인했습니다. Foundation 레벨의 11개 패턴이 모두 완성되어, 주니어 개발자의 마인드 셋과 기본 원칙을 포괄하는 체계가 갖췄습니다. == Implementation Strategy == === Phase 1: Core Foundation (Completed) === 가장 기본이 되는 11개 패턴을 완성하여 전체 구조의 기반을 마련함. === Phase 2: TDD & Design Patterns (In Progress) === TDD와 설계 관련 패턴들을 체계화 (10-12개 패턴) * Candidates: SafetyNet, DetectiveWork, RootHunting... === Phase 3: Collaboration & Learning === 협업과 학습 관련 패턴들을 완성 (8-10개 패턴) == Next Actions == === Immediate (This Week) === * Phase 1 완료 리뷰 및 패턴 간 연결성 강화 * Phase 2 (TDD & Design) 패턴 계속 진행 ([[SafetyNet]]?) === Short Term (This Month) === * Phase 2 패턴 작성 (TinyExperiment 확장) == Pattern Structure Template == 각 패턴은 Alexander 방식을 따릅니다: * '''Context''' - 상황과 배경 * '''Problem''' - 구체적인 문제와 갈등 * '''Solution''' - 해결 방법과 원리 * '''Examples''' - 실제 적용 사례 * '''Related Patterns''' - 연결된 다른 패턴들 == Progress Log == === Recent Achievements === * [[StrongCenter]] 패턴 완성 - 시스템의 핵심 가치를 먼저 세워 주변부를 정렬 * [[OrganicGrowth]] 패턴 완성 - 기계적 조립이 아닌 유기적 성장, Walking Skeleton, Gall's Law * [[CleanIsolation]] 패턴 완성 - 의존성을 격리하여 테스트 가능성과 유연성 확보 * [[AtomicCommit]] 패턴 완성 - 변경의 역사를 원자적이고 일관된 단위로 기록 * [[TightLoop]] 패턴 완성 - 변경과 피드백 사이의 시간을 최소화하여 몰입 유지 * [[DesignThroughTest]] 패턴 완성 - 테스트를 통한 인터페이스 발견, 의존성 주입의 자연스러운 유도 * [[GreenRefuge]] 패턴 완성 - 혼란 속에서 안전한 베이스캠프로 돌아가는 기술, 5분 규칙 * [[BabySteps]] 패턴 완성 - 시스템의 생명력을 유지하며 이동하는 방법, Structure-Preserving Transformation * 원본 문서에서 27+개 패턴 목록 정리 완료 * [[TinyExperiment]] 패턴 완성 및 검증 * [[CognitiveMicroscope]] 패턴 완성 - SatirInteractionModel, CTA, 실제 멘토링 사례 통합 * [[DataAsFoundation]] 패턴 완성 - 데이터 중심 사고, LLM 시대 표현 언어, XML/DSL 통합 * [[TwoWorlds]] 패턴 완성 - Polya, Weinberg, Agile 원칙 통합, 문제/해결 공간 분리 * [[LanguageBuilding]] 패턴 완성 - Lisp 전통(Paul Graham, Peter Seibel, Peter Norvig)과 Peter Naur의 Programming as Theory Building 통합 * [[MetaphorThinking]] 패턴 완성 - Lakoff & Johnson의 은유, Hofstadter & Sander의 유추, Peirce의 가추를 통합한 인지적 삼위일체 * [[WorkingFirst]] 패턴 완성 - Kent Beck, Fred Brooks, Chris Argyris, Michael Polanyi 통합, 주니어의 완벽주의 vs 시니어의 탐색적 접근, epistemology of making * [[NamesAsDesign]] 패턴 완성 - Phil Karlton, Martin Fowler, Ward Cunningham, Eric Evans의 Ubiquitous Language 통합, 문맥에 embedding된 이름의 관계적 품질 * [[TinyResearch]] 패턴 완성 - 셜록 홈즈의 탐정적 지식 수집, 중용의 일일신, 호기심의 선순환, 지식의 복리 효과 통합 * [[ArtisanMind]] 패턴 완성 - 과학(Why) vs 기예(How), 유리 장인의 비유, 베이지안 접근, 해커 마인드 통합 * 3단계 구현 전략 수립 * Foundation 레벨 우선순위 확정 * '''Phase 1 Foundation 패턴 10개 완성''' (목표: 5-6개) === Lessons Learned === * 전체 패턴 목록을 먼저 정리하는 것이 중요 * 스토리 우선 접근법의 효과 확인 * 패턴 간 연결 관계의 복잡성 인식 * 실제 경험과 일기의 통찰을 패턴에 통합하는 것의 가치 * 인지과학과 철학의 통찰을 프로그래밍 패턴에 연결하는 것의 깊이 |
| Line 105: | Line 239: |
| CategoryPattern }}} == Complete Proverb List == '''Data & Logic Design:''' 1. "use data to make logic simple" 2. "make DSL" 3. "do not mix logic and data construction" '''Programming Philosophy:''' 4. "last 5% automation" 5. "craft, not science" 6. "Make it work, then make it better" 7. "problem space, solution space" 8. "naming itself is a design practice" 9. "programming is to make a language system" '''Programming Fundamentals:''' 10. "공통점과 차이점 찾기" (Find commonality and variability) '''TDD & Evolutionary Design:''' 11. "Baby Step" 12. "quickly step back to closest green-bar" 13. "TDD is a design activity" 14. "short feedback cycle" 15. "micro commit, one at a time" 16. "isolation" 17. "use abduction" 18. "piecemeal growth, center first" '''Testing & Debugging:''' 19. "eliminate/reduce intermediate layers" 20. "넘겨짚지 말고, 마술의 동작과 동작 사이를 잘 들여다보기" 21. "do not guess far. when you guess, validate it" 22. "regression test" 23. "Here and now debugging" '''Collaboration & Team:''' 24. "XP over Scrum for developers" 25. "pair programming with juniors" 26. "Yes, but / Yes, and" '''Learning & Expertise:''' 27. "Learn from experts (CTA, CDE)" == Implementation Strategy == '''Phase 1: Foundation (현재)''' - [x] [[TinyExperiment]] (완성) - [ ] UseDataToMakeLogicSimple - [ ] ProblemSpaceSolutionSpace '''Phase 2: Intermediate Layer''' - [ ] BabyStep - [ ] NamingIsDesignPractice - [ ] TddIsDesignActivity '''Phase 3: Application Patterns''' - [ ] MicroCommit - [ ] UseAbduction - [ ] HereAndNowDebugging '''Phase 4: Meta & Social''' - [ ] CraftNotScience - [ ] LastFivePercentAutomation - [ ] PairProgrammingWithJuniors '''Phase 5: Integration''' - [ ] Update [[기술문서모음/ToJuniors]] with all pattern links - [ ] Create pattern relationship visualization - [ ] Validate semi-lattice structure == Progress Log == '''2024-01:''' Project initiated. First pattern [[TinyExperiment]] created with story-driven approach. Enhanced from bullet-point structure to Aesop's fable style storytelling. Pattern successfully integrates assumption, validation, fail-safe, fast feedback loop, isolation, baby step, and abduction concepts. == References == * Christopher Alexander - "A Pattern Language", "The Timeless Way of Building" * [[기술문서모음/ToJuniors]] - Original proverb collection * [[OrgPatterns]] - Pattern language inspiration and structure * [[가추법]] - Abduction methodology ---- CategoryAiGardenProject CategoryPattern |
CategoryAiGardenProject CategoryPatternLanguage |
AiGarden/ToJuniorsPatternLanguage
주니어 개발자들을 위한 프로그래밍 피드백을 Christopher Alexander의 패턴 언어로 변환하는 프로젝트.
Contents
Project Vision
기술문서모음/ToJuniors 문서의 패턴들을 Alexander의 패턴 언어 형식으로 변환하여 구조적이고 교육적인 자료로 발전시키는 것이 목표입니다.
Core Principles
Structure-Preserving Baby Steps - 기존 구조를 보존하며 점진적 발전
Story-First Approach - 스토리로 시작해서 패턴으로 추상화
Educational Focus - 학습자 중심의 명확한 설명
Pattern Language Structure - Alexander 방식의 체계적 연결
Pattern Inventory
Foundation Patterns
Core Programming Principles
DataAsFoundation ✓ - 비즈니스 로직에서 데이터 구성을 분리하여 단순함을 달성하고, 데이터 구조가 복잡해지면 도메인 특화 언어를 만들어라. 모든 깨끗한 코드의 기반은 잘 정리된 데이터에서 시작된다.
TwoWorlds ✓ - 문제 공간(무엇을 해결할 것인가)과 해결 공간(어떻게 구현할 것인가)을 명확히 구분하라. 많은 프로그래밍 오류는 사고 과정에서 이 두 관심사를 너무 일찍 섞는 데서 비롯된다.
WorkingFirst ✓ - 우아하거나 효율적으로 만들기 전에 먼저 작동하게 만들어라. 작동하는 해결책은 문제의 진정한 본질을 드러내고 더 나은 설계 결정을 안내한다. 주니어는 실행 없이 완벽한 설계를, 시니어는 작은 작동에서 snowball을 만든다.
ArtisanMind ✓ - 프로그래밍을 순수한 체계적 방법론이 아닌 직관, 경험, 감각이 필요한 기예로 접근하라. 최고의 프로그래머는 기술적 지식과 예술적 감성을 결 합한다.
The95PercentRule ✓ - 모든 과정의 마지막 5%를 자동화하려는 유혹에 저항하라. 그 남은 복잡성은 종종 절약할 수 있는 수작업 노력보다 더 많은 비용이 든다.
TDD & Evolutionary Design Patterns
TinyExperiment ✓ - 문제에 대해 의미 있는 것을 가르쳐줄 수 있는 가장 작은 실험부터 시작하라. 각 실험은 실패 비용이 거의 없을 정도로 작아야 한다.
BabySteps ✓ - 시스템 무결성을 유지하면서 목표를 향해 나아가는 가장 작은 단계를 취하라. 큰 단계는 복잡성을 숨기고 디버깅을 기하급수적으로 어렵게 만든다.
GreenRefuge ✓ - 테스트가 실패하면 앞으로 고치려 하지 말고 즉시 마지막으로 알려진 작동 상태로 돌아가라. 초록 막대는 복잡성의 폭풍 속 안전한 피난처다.
연관: SafetyNet, PresentMoment
DesignThroughTest ✓ - 테스트 주도 개발을 단순한 검증 도구가 아닌 설계 활동으로 사용하라. 테스트를 먼저 작성하는 행위는 더 나은 API 설계와 깔끔한 인터페이스를 드러낸다.
연관: CleanIsolation, TightLoop
TightLoop ✓ - 변경을 만들고 그 효과를 보는 사이의 시간을 최소화하라. 긴 피드백 주기는 오류가 복합되고 근본 원인을 찾기 어렵게 만든다.
AtomicCommit ✓ - 각 커밋이 독립적으로 존재할 수 있는 하나의 완전하고 일관된 변경을 나타내도록 하라. 원자적 커밋은 변경 사항을 이해하고, 검토하고, 되돌리기 쉽게 만든다.
CleanIsolation ✓ - 테스트와 모듈을 숨겨진 의존성 없이 독립적으로 실행할 수 있도록 설계하라. 격리는 시스템을 이해하고, 테스트하고, 수정하기 쉽게 만든다.
DetectiveWork - 관찰된 행동의 원인에 대한 가설을 형성하기 위해 추론적 사고를 사용하라. 좋은 프로그래머는 결론을 내리기 전에 증거를 수집하는 탐정이다.
연관: RootHunting, PresentMoment
OrganicGrowth ✓ - 모든 부분을 동시에 구축하기보다는 작동하는 핵심에서 시스템을 점진적으로 성장시켜라. 생물학적 성장처럼, 소프트웨어는 각 단계에서 전체성을 유지할 때 가장 건강하게 성장한다.
연관: StrongCenter, WorkingFirst
StrongCenter ✓ - 가장 필수적인 핵심 기능부터 구축을 시작하고 바깥쪽으로 성장시켜라. 강한 중심은 시스템이 확장될 때 안정성과 일관성을 제공한다.
연관: OrganicGrowth, TwoWorlds
Testing & Debugging Patterns
DirectPath - 입력에서 출력으로의 흐름을 가리는 불필요한 레이어와 간접성을 제거하라. 문제와 해결책 사이의 가장 짧은 경로가 보통 가장 명확하다.
SingleFocus - 한 번에 정확히 한 가지 일만 하고, 다음으로 넘어가기 전에 완전히 완료하라. 디버깅에서 멀티태스킹은 혼란과 놓친 연결로 이어진다.
ShortLeash - 버그나 행동에 대한 가설을 형성할 때, 너무 멀리 추론하지 말고 빠르게 테스트하라. 긴 추론 사슬은 불확실성을 곱하고 시간을 낭비한다.
SafetyNet - 이전에 고쳐진 버그가 다시 발생하면 잡아내는 회귀 테스트를 구축하라. 좋은 안전망은 자신감을 가지고 리팩토링하고 개선할 수 있게 해준다.
PresentMoment - 일어나야 한다고 생각하는 일보다는 지금 실제로 일어나고 있는 일을 이해하는 데 집중하라. 현재 순간은 대부분의 문제를 해결하는 데 필요한 모든 정보를 담고 있다.
연관: DetectiveWork, RootHunting
RootHunting - 표면적인 수정을 적용하거나 무작정 찾지 말고 체계적으로 파서 실제 원인을 찾아라. 진정한 근본 원인은 일단 발견되면 종종 간단한 해결책을 드러낸 다.
Programming Fundamentals & Language
PatternHunting ✓ - 자신의 코드와 다른 사람의 코드에서 반복되는 구조와 해결책을 적극적으로 찾아라. 패턴 인식은 모든 프로그래밍 전문성의 기초다.
ComplexityTaming - 복잡성을 관리하는 기법들의 도구상자를 개발하라: 추상화, 분해, 네이밍, 관심사 분리. 복잡성은 유지보수성의 적이다.
NamesAsDesign ✓ - 네이밍을 설계 활동으로 다뤄라. 이름은 문맥에 embedding되어 평가되며, 형제/부모/자식과 조화롭게 "잘 어울려야" 한다. 이름은 개념 그 자 체이고, 좋은 이름은 문서보다 가치있다.
LanguageBuilding ✓ - 프로그래밍을 문제 영역을 완벽하게 표현하는 도메인 특화 언어를 구축하는 것으로 접근하라. Lisp 전통의 bottom-up 프로그래밍과 Peter Naur의 theory building을 통합하여, 최고의 프로그램은 전문화된 어휘로 잘 쓰인 산문처럼 읽힌다.
MetaphorThinking ✓ - 적절한 은유와 비유를 찾아 문제를 정의하고 해결하라. 은유(Metaphor), 유추(Analogy), 가추(Abduction)의 인지적 삼위일체를 통해 복잡한 추상 개념을 구체적이고 이해 가능하게 만든다. 좋은 은유는 사고를 확장하고 기존 개념을 활용하게 한다.
LivingVocabulary - 이해가 깊어짐에 따라 코드베이스에서 사용되는 어휘를 지속적으로 발전시키고 정제하라. 좋은 어휘는 유기적으로 성장하고 새로운 통찰에 적응한다.
Collaboration Patterns
TechnicalCommunity - 프로세스 준수보다는 기술적 우수성과 지속적 학습을 강조하는 개발 관행을 선택하라. 강한 기술적 관행은 경직된 프로세스보다 더 나은 협업을 만든다.
SharedMind - 지식을 결합하고 서로의 사각지대를 잡아내기 위해 다른 개발자들과 긴밀히 작업하라. 함께 일하는 두 마음은 종종 어느 한쪽도 혼자서는 도달할 수 없 는 통찰을 만들어낸다.
FlowingFeedback - 병목을 만들기보다는 개발 흐름을 유지하도록 코드 리뷰와 피드백을 구조화하라. 피드백은 진행을 느추는 것이 아니라 학습을 가속화해야 한다.
연관: BuildingBridge, TightLoop
BuildingBridge - 다른 사람의 기여에 "네, 하지만..."보다는 "네, 그리고..."로 응답하라. 건설적인 대화는 방어적인 반응보다 더 나은 해결책을 만든다.
Learning & Expertise Patterns
MasterApprentice - 관찰, 모방, 안내된 실습을 통해 전문가로부터 직접 배워라. 스승-제자 관계는 책으로는 전달할 수 없는 암묵적 지식을 전수한다.
연관: CraftPath, ArtisanMind
CraftPath - 고급 기법보다는 기초에 집중하면서 초보자에서 전문가로의 의도적인 진행을 따라라. 숙련은 핵심 기술의 인내심 있는 개발을 요구한다.
CognitiveMicroscope ✓ - 자신의 인지 과정을 세밀하게 관찰하여 전문성을 빠르게 구축하라. 평소에는 너무 빨라서 보이지 않는 사고의 단계들을 확대해서 보면, 생각의 해상도와 밀도가 높아진다.
ThinkingMirror - 자신의 사고 과정과 의사결정 패턴을 정기적으로 성찰하라. 자신이 어떻게 생각하는지에 대한 자각은 학습과 문제 해결을 모두 향상시킨다.
ActiveReflection - 나중이 아니라 수행하면서 자신의 행동과 결정에 대해 의식적으로 생각하라. 실시간 성찰은 성능을 향상시키고 전문성을 더 빠르게 구축한다.
InstinctiveChoice - 경험적 직관에 기반한 빠른 의사결정을 가능하게 하는 패턴 인식을 개발하라. 전문 프로그래머는 왜 그런지 설명하기 전에 종종 올바른 답을 안 다.
TinyResearch ✓ - 일하면서 5분 연구를 습관화하라. 셜록 홈즈의 방대한 잡학다식처럼, 작은 호기심을 즉시 해결하는 것이 누적되면 전문성이 된다. 중용(中庸)의 길 - 하루 5분이 10년 후 500시간, 호기심이 호기심을 낳는 선순환.
Current Status
Phase 1: Foundation Patterns (Completed)
Completed:
TinyExperiment ✓ - 패턴 언어 형식으로 완성, 검증됨
CognitiveMicroscope ✓ - 인지 과정 관찰 패턴 완성
DataAsFoundation ✓ - 데이터 중심 사고와 LLM 시대의 표현 언어 완성
TwoWorlds ✓ - 문제 공간과 해결 공간 분리, Polya와 Weinberg의 지혜 통합
LanguageBuilding ✓ - Lisp 전통의 언어 구축과 Peter Naur의 theory building 통합
MetaphorThinking ✓ - 은유, 유추, 가추의 인지적 삼위일체로 문제 해결
WorkingFirst ✓ - Kent Beck의 "Work→Right→Fast", 주니어의 완벽주의 vs 시니어의 snowballing
NamesAsDesign ✓ - 이름은 문맥에 embedding, 관계 속에서 "잘 어울림", 개념화와 설계 활동
TinyResearch ✓ - 5분 연구의 습관, 셜록 홈즈의 잡학다식, 중용의 일일신(日日신), 지식의 복리 효과
ArtisanMind ✓ - 프로그래밍은 과학(Why)보다 기예(How), 유리 장인의 비유, 해커 마인드, 불완전한 지식으로 시작하는 베이지안 접근
The95PercentRule ✓ - 마지막 5%의 자동화 비용, 수동 개입의 가치, Unattended System과의 구분
Phase 2: TDD & Evolutionary Design Patterns (In Progress)
Completed:
BabySteps ✓ - 시스템의 생명력(Wholeness)을 유지하며 복잡한 변경을 수행, Structure-Preserving Transformation
GreenRefuge ✓ - 테스트가 실패하면 앞으로 고치려 하지 말고 즉시 마지막으로 알려진 작동 상태로 돌아감, 5분 규칙과 되돌리기의 용기
DesignThroughTest ✓ - 테스트를 검증 도구가 아닌 설계 도구로 사용, Wishful Thinking과 의존성 드러내기
TightLoop ✓ - 변경과 피드백 사이의 간격을 최소화하여 몰입(Flow)을 유지하는 법
AtomicCommit ✓ - 각 커밋이 독립적으로 존재할 수 있는 하나의 완전하고 일관된 변경을 나타내도록 함
CleanIsolation ✓ - 의존성을 끊어내어 자유롭게 테스트하고 변경하는 법, Seam, Stub/Mock 활용
OrganicGrowth ✓ - 기계적 조립이 아닌 유기적 성장으로 시스템을 구축, Walking Skeleton
StrongCenter ✓ - 시스템의 핵심 가치를 담은 중심을 먼저 구축하여 통일성과 안정성 확보
Remaining Foundation:
- None (All 11 Patterns Completed)
Validation Results
첫 번째 패턴 TinyExperiment의 스토리 구조가 검증되어 패턴 언어로서의 가능성을 확인했습니다. Foundation 레벨의 11개 패턴이 모두 완성되어, 주니어 개발자의 마인드 셋과 기본 원칙을 포괄하는 체계가 갖췄습니다.
Implementation Strategy
Phase 1: Core Foundation (Completed)
가장 기본이 되는 11개 패턴을 완성하여 전체 구조의 기반을 마련함.
Phase 2: TDD & Design Patterns (In Progress)
TDD와 설계 관련 패턴들을 체계화 (10-12개 패턴)
Candidates: SafetyNet, DetectiveWork, RootHunting...
Phase 3: Collaboration & Learning
협업과 학습 관련 패턴들을 완성 (8-10개 패턴)
Next Actions
Immediate (This Week)
- Phase 1 완료 리뷰 및 패턴 간 연결성 강화
Phase 2 (TDD & Design) 패턴 계속 진행 (SafetyNet?)
Short Term (This Month)
Phase 2 패턴 작성 (TinyExperiment 확장)
Pattern Structure Template
각 패턴은 Alexander 방식을 따릅니다:
Context - 상황과 배경
Problem - 구체적인 문제와 갈등
Solution - 해결 방법과 원리
Examples - 실제 적용 사례
Related Patterns - 연결된 다른 패턴들
Progress Log
Recent Achievements
StrongCenter 패턴 완성 - 시스템의 핵심 가치를 먼저 세워 주변부를 정렬
OrganicGrowth 패턴 완성 - 기계적 조립이 아닌 유기적 성장, Walking Skeleton, Gall's Law
CleanIsolation 패턴 완성 - 의존성을 격리하여 테스트 가능성과 유연성 확보
AtomicCommit 패턴 완성 - 변경의 역사를 원자적이고 일관된 단위로 기록
TightLoop 패턴 완성 - 변경과 피드백 사이의 시간을 최소화하여 몰입 유지
DesignThroughTest 패턴 완성 - 테스트를 통한 인터페이스 발견, 의존성 주입의 자연스러운 유도
GreenRefuge 패턴 완성 - 혼란 속에서 안전한 베이스캠프로 돌아가는 기술, 5분 규칙
BabySteps 패턴 완성 - 시스템의 생명력을 유지하며 이동하는 방법, Structure-Preserving Transformation
- 원본 문서에서 27+개 패턴 목록 정리 완료
TinyExperiment 패턴 완성 및 검증
CognitiveMicroscope 패턴 완성 - SatirInteractionModel, CTA, 실제 멘토링 사례 통합
DataAsFoundation 패턴 완성 - 데이터 중심 사고, LLM 시대 표현 언어, XML/DSL 통합
TwoWorlds 패턴 완성 - Polya, Weinberg, Agile 원칙 통합, 문제/해결 공간 분리
LanguageBuilding 패턴 완성 - Lisp 전통(Paul Graham, Peter Seibel, Peter Norvig)과 Peter Naur의 Programming as Theory Building 통합
MetaphorThinking 패턴 완성 - Lakoff & Johnson의 은유, Hofstadter & Sander의 유추, Peirce의 가추를 통합한 인지적 삼위일체
WorkingFirst 패턴 완성 - Kent Beck, Fred Brooks, Chris Argyris, Michael Polanyi 통합, 주니어의 완벽주의 vs 시니어의 탐색적 접근, epistemology of making
NamesAsDesign 패턴 완성 - Phil Karlton, Martin Fowler, Ward Cunningham, Eric Evans의 Ubiquitous Language 통합, 문맥에 embedding된 이름의 관계적 품질
TinyResearch 패턴 완성 - 셜록 홈즈의 탐정적 지식 수집, 중용의 일일신, 호기심의 선순환, 지식의 복리 효과 통합
ArtisanMind 패턴 완성 - 과학(Why) vs 기예(How), 유리 장인의 비유, 베이지안 접근, 해커 마인드 통합
- 3단계 구현 전략 수립
- Foundation 레벨 우선순위 확정
Phase 1 Foundation 패턴 10개 완성 (목표: 5-6개)
Lessons Learned
- 전체 패턴 목록을 먼저 정리하는 것이 중요
- 스토리 우선 접근법의 효과 확인
- 패턴 간 연결 관계의 복잡성 인식
- 실제 경험과 일기의 통찰을 패턴에 통합하는 것의 가치
- 인지과학과 철학의 통찰을 프로그래밍 패턴에 연결하는 것의 깊이
