Files
cv-site/doc/_go-learning/README.md
T
juanatsap d95c62bad4 refactor: remove outdated server design documentation
Remove 557-line server-design.md from _go-learning/architecture - content is now covered in updated architecture documentation with real implementation examples and test coverage.
2025-12-02 20:25:05 +00:00

130 lines
4.9 KiB
Markdown

# 🎓 Personal Go Backend Learning Knowledge Base
> **PRIVATE DOCUMENTATION** - This directory is gitignored and contains personal learning notes about Go backend development using this CV project as a practical learning ground.
## 📚 Purpose
This knowledge base exists to document **WHY** we make specific architectural and implementation decisions in Go backend development. While building this CV application, I'm using it as an opportunity to deeply understand:
- Go backend architecture patterns
- Package organization and dependency management
- Concurrency patterns (goroutines, channels)
- HTTP server best practices
- Code organization and maintainability
- Refactoring strategies
- Testing approaches
## 🗂️ Structure
```
_go-learning/
├── README.md # This file
├── architecture/ # System architecture explanations
│ ├── server-design.md # Why goroutines, server lifecycle
│ ├── package-structure.md # Package organization philosophy
│ └── dependency-graph.md # How components interact
├── refactorings/ # Detailed refactoring documentation
│ ├── 001-cv-model-separation.md # CV/UI model separation
│ └── ... # Future refactorings
├── patterns/ # Go patterns and idioms
│ ├── error-handling.md # Error wrapping, custom errors
│ ├── interfaces.md # When and how to use interfaces
│ └── constructors.md # Builder patterns, factory functions
├── best-practices/ # Go best practices with examples
│ ├── naming-conventions.md # Package, func, var naming
│ ├── testing.md # Table-driven tests, mocks
│ └── performance.md # Profiling, optimization
└── diagrams/ # Visual architecture diagrams
├── current-state/ # Before refactorings
└── target-state/ # After refactorings
```
## 🎯 Learning Goals
### Short-term (During CV Project)
- [ ] Understand Go package organization best practices
- [ ] Master goroutine usage and server lifecycle
- [ ] Learn proper error handling patterns
- [ ] Understand interface design principles
- [ ] Practice test-driven development
### Medium-term (Job Interview Preparation)
- [ ] Explain architectural decisions confidently
- [ ] Discuss trade-offs between different approaches
- [ ] Demonstrate deep understanding of Go idioms
- [ ] Show practical experience with production patterns
### Long-term (Professional Growth)
- [ ] Build intuition for clean architecture
- [ ] Develop systematic refactoring skills
- [ ] Master concurrent programming patterns
- [ ] Create reusable knowledge base for future projects
## 📖 How to Use This
### When Learning:
1. Read the relevant document before making changes
2. Understand the **WHY** behind the pattern
3. Implement the change
4. Document any new insights or questions
### When Interviewing:
1. Review architecture documents
2. Practice explaining decisions
3. Prepare to discuss trade-offs
4. Reference specific examples from this project
### When Stuck:
1. Check if there's a relevant pattern documented
2. Look at similar refactorings
3. Review best practices
4. Add new learnings to prevent future confusion
## 🔄 Living Document Philosophy
This knowledge base is **constantly evolving**. Every time we:
- Make an architectural decision → Document WHY
- Refactor code → Capture lessons learned
- Discover a better pattern → Update best practices
- Face a challenge → Record solution and reasoning
## 🚀 Current Focus: CV Model Refactoring
**Active Learning**: Separating CV domain models from UI presentation models
**Key Questions Being Answered**:
- Why separate concerns in Go packages?
- How does package structure affect testability?
- What are the trade-offs of package organization?
- When to use interfaces vs. concrete types?
- How to manage dependencies between packages?
See: `refactorings/001-cv-model-separation.md` for detailed analysis.
## 💡 Philosophy
> "The best way to learn is to teach. The best way to understand is to document WHY, not just WHAT."
This knowledge base forces me to:
1. **Question everything**: Why this approach over alternatives?
2. **Document reasoning**: Capture decision-making process
3. **Learn from mistakes**: Update when discovering better patterns
4. **Build intuition**: Develop mental models of good design
## 📊 Progress Tracking
- **Start Date**: 2025-11-20
- **Documents Created**: 0
- **Refactorings Documented**: 0
- **Patterns Catalogued**: 0
---
**Remember**: This is a safe space for learning. It's okay to:
- Document wrong assumptions (then correct them)
- Ask "stupid" questions
- Explore multiple approaches
- Change your mind with new information
The goal is **deep understanding**, not perfection.