# Software Engineering A self-taught engineer's working reference. I learned how computers work from logic gates up (Nand to Tetris), then taught myself Python, then built a full-stack AI platform in production. These notes are what I reached for along the way — not an academic syllabus, but the things I actually needed to ship software: FastAPI, SvelteKit, PostgreSQL, Docker, CI/CD, and the design principles that kept the codebase from collapsing as it grew. ## Highlights Most referenced resources in this collection: - [[Django]] (26 unique files) - Full-stack Python web framework - [[React.js]] (22 unique files) - JavaScript UI library - [[PostgreSQL and Alembic Setup]] (9 unique files) - Database infrastructure - [[Heroku]] (9 unique files) - Cloud platform deployment - [[Django Models]] (8 unique files) - Database modeling - [[Choosing a Web Framework]] (8 unique files) - Framework selection guide - [[Integrating Django & React.js]] (7 unique files) - Full-stack integration - [[Containerize]] (7 unique files) - Container-based deployment - [[Django's Object-Relational Mapping (ORM)]] (7 unique files) - Database abstraction layer - [[CRUD Operations]] (6 unique files) - Database operations - [[How Host Svelte Server]] (6 unique files) - Svelte deployment - [[HTTP Methods]] (6 unique files) - HTTP verbs and usage - [[Design, Develop, & Deploy a Python Application]] (6 unique files) - Comprehensive development guide - [[API endpoints]] (6 unique files) - Endpoint design - [[Starting Svelte Dev Server]] (6 unique files) - Development environment ## Development Workflow Step-by-step guides for building applications: 1. [[0. Choose a Project Management Methodology]] - Project planning approaches 2. [[1. Understand the Problem]] - Problem definition and scope 3. [[2. Gather App Requirements]] - Requirements gathering 4. [[3. Design the App & Choose a Tech Stack]] - Architecture and tech stack selection 5. [[4. Develop, Test, & Refactor the App]] - Implementation phase 6. [[5. Document the App]] - Documentation practices 7. [[6. Deploy & Maintain the App]] - Deployment and operations 8. [[7. Test & Manage App Releases]] - Release management ## Comprehensive Guides - [[Design, Develop, & Deploy a Python Application]] - End-to-end Python development ## Web Development ### Backend Frameworks - [[Django]] (25 unique files) - Full-stack Python web framework - [[Django Models]] - Database modeling - [[Django's Object-Relational Mapping (ORM)]] - Database abstraction layer - [[Django Rest Framework (DRF)]] - API development toolkit - [[DRF Views]] - DRF view classes - [[DRF ViewSets]] - DRF viewset patterns - [[DRF Serializers]] - Data serialization in DRF - [[DRF Generic Views]] - DRF generic view classes - [[DRF Routers]] - DRF URL routing - [[Class Based Views (CBV)]] - Django class-based views - [[Function Based Views (FBV)]] - Django function-based views - [[Querysets]] - Django querysets - [[Rename Django App]] - App renaming guide - [[Static Files]] - Static file handling - [[Support User Crud Operations]] - User CRUD patterns - [[Flask]] - Lightweight Python web framework - [[Backend]] - Backend development overview - [[Choosing a Web Framework]] - Framework selection guide - [[Web Frameworks]] - Framework comparison and selection - [[Backend Web Frameworks]] - Backend framework overview - [[Full-stack Web Frameworks]] - Full-stack framework overview ### Frontend - [[React.js]] (21 unique files) - JavaScript UI library - [[Integrating Django & React.js]] - Full-stack integration - [[Frontend]] - Frontend development overview - [[Frontend Web Frameworks]] - Frontend framework landscape - [[UI Component Library]] - Component library selection - [[Material-UI]] - Material Design components for React - [[Graphing (Graph Chart) Libraries for Svelte]] - Svelte charting libraries ### APIs & Web Services - [[RESTful]] - REST architecture principles - [[REST]] - REST fundamentals - [[GraphQL]] - GraphQL query language - [[API-First Design]] - API-first development approach - [[API endpoints]] - Endpoint design - [[API requests]] - Making API requests - [[HTTP Methods]] - HTTP verbs and usage - [[HTTP Requests]] - HTTP request fundamentals - [[Web APIs]] - Web API design and patterns - [[Cross-Origin Resource Sharing (CORS)]] - CORS configuration - [[ChatGPT Reasoning and Web Animations]] - Advanced web features ### Server & Hosting - [[How Host Svelte Server]] - Svelte deployment - [[Starting Svelte Dev Server]] - Development environment - [[Development Server]] - Local development server setup - [[Svelte App Notes]] - Svelte application development notes - [[Heroku]] (8 refs) - Cloud platform deployment ## Infrastructure & DevOps ### Databases - [[PostgreSQL and Alembic Setup]] (8 unique files) - Database setup and migrations - [[Python Data Management Workflow with PostgreSQL, SQLAlchemy (ORM Model), and Alembic]] - Complete data workflow - [[CRUD Operations]] - Create, Read, Update, Delete operations - [[Choosing a Database]] - Database selection guide - [[Managed Databases]] - Cloud-managed database services - [[Self-managed Databases]] - Self-hosted database options ### Containers & Orchestration - [[Containerize]] (6 unique files) - Container-based deployment - [[Docker]] - Containerization platform - [[Containerization & Orchestration]] - Container orchestration overview - [[Kubernetes]] - Container orchestration platform - [[VMs vs Containers]] - Virtualization comparison ### Cloud & Hosting - [[Cloud Computing Service Types]] - IaaS, PaaS, SaaS overview - [[IaaS]] - Infrastructure as a Service - [[PaaS]] - Platform as a Service - [[SaaS]] - Software as a Service - [[FaaS]] - Function as a Service - [[BaaS]] - Backend as a Service - [[Serverless Architecture]] - Serverless computing patterns - [[Amazon EC2 (Elastic Compute Cloud)]] - AWS compute - [[AWS Lambda]] - AWS serverless functions - [[Azure Functions]] - Azure serverless functions - [[Google Cloud Functions]] - GCP serverless functions - [[Firebase]] - Google app platform - [[Supabase-io]] - Open-source Firebase alternative - [[Netlify]] - JAMstack hosting - [[Vercel]] - Frontend deployment platform - [[How to Develop for the Cloud]] - Cloud-native development - [[Deployment & Hosting]] - Deployment overview ### CI/CD - [[Continuous Integration and Deployment (CI-CD)]] - CI/CD pipelines - [[Continuous Integration (CI)]] - CI fundamentals - [[Continuous Deployment (CD)]] - CD fundamentals - [[GitHub Actions]] - GitHub automation workflows - [[GitLab CI-CD]] - GitLab CI/CD pipelines - [[Jenkins]] - Jenkins automation server ### Version Control - [[Git Workflow]] - Version control workflows - [[Version Control]] - Version control fundamentals - [[Write Good Commit Messages]] - Commit message best practices - [[Elements of a Good Commit Message]] - Commit message structure ### DevOps & Operations - [[DevOps]] - DevOps culture and practices - [[Disaster Recovery (DR)]] - Recovery planning - [[Environment & Dependency Management]] - Dependency management - [[Pipenv]] - Python dependency management ## Testing - [[Types of Testing]] - Unit, integration, e2e testing overview - [[Unit Testing]] - Unit test fundamentals - [[Integration Testing]] - Integration test patterns - [[System Testing]] - System-level testing - [[User Acceptance Testing (UAT)]] - User acceptance testing - [[User Testing Period Stages]] - Testing methodologies - [[Testing Technologies]] - Testing tools and frameworks - [[Test-Driven Development (TDD)]] - TDD methodology ## Software Design & Architecture - [[Domain-Driven Design (DDD)]] - Strategic software design methodology - [[Architectural Patterns]] - Architecture pattern overview - [[Microservices Architecture]] - Microservices design - [[Monolithic Architecture]] - Monolithic design - [[The Majestic Monolith]] - Monolith advocacy - [[Three-Tier Architecture]] - Three-tier pattern - [[Event Driven Architecture (EDA)]] - Event-driven design - [[Model-View-Controller (MVC)]] - MVC pattern - [[Model-View-ViewModel (MVVM)]] - MVVM pattern - [[Service Types in SOA]] - Service-oriented architecture - [[Loosely Coupled and Highly Cohesive Codebase]] - Coupling and cohesion - [[Software Design Document (SDD)]] - Design documentation - [[Software Requirements Document (SRD)]] - Requirements documentation - [[Problem Statement]] - Problem definition - [[Unified Modeling Language (UML)]] - Visual modeling ## Principles & Best Practices - [[Best Practices]] - General engineering best practices - [[Be Discipline and Resourcful]] - Development mindset - [[Optimize for Performance, Scalability, and Security]] - Production-readiness - [[Function and Class Naming]] - Naming conventions ### SOLID Principles - [[S.O.L.I.D. Design Principles]] - SOLID overview - [[Single Responsibility Principle (SRP)]] - Single responsibility - [[Dependency Inversion Principle (DIP)]] - Dependency inversion - [[Interface Segregation Principle (ISP)]] - Interface segregation - [[Liskov's Substitution Principle (LSP)]] - Liskov substitution ### Object-Oriented Programming - [[Three Fundamental Principles of Object-Oriented Programming (OOP)]] - OOP foundations - [[Object-Oriented Design (OOD)]] - OO design - [[Encapsulation]] - Data hiding - [[Inheritance]] - Class inheritance - [[Polymorphism]] - Runtime polymorphism ### Design Patterns - [[Design Patterns]] - Pattern overview - [[Design Patterns Criticism]] - When patterns hurt - [[GoF Design Patterns]] - Gang of Four patterns - [[GRASP Design Patterns]] - GRASP patterns - [[Design Principles]] - Core design principles - [[Refactoring Techniques]] - Refactoring approaches ### Development Methodologies - [[Development Methodologies]] - Agile, Scrum, Waterfall, etc. - [[Agile]] - Agile methodology - [[Rapid Application Development (RAD)]] - RAD methodology - [[Design Methodologies]] - Design methodology overview - [[Pair Programming]] - Pair programming practice - [[Mob Programming]] - Mob programming practice - [[Post-Mortem]] - Post-mortem process ## Security - [[OWASP Top Ten (2021)]] - OWASP top vulnerabilities - [[Static and Dynamic Security Analysis Tools]] - Security analysis tooling - [[Privacy by Design (PbD)]] - Privacy-first design - [[Embedding Encryption]] - Encryption for embeddings ## Documentation - [[Documenting]] - Documentation fundamentals - [[Documentation Types]] - Types of documentation - [[Documentation Structure]] - How to structure docs - [[Updating and Maintaining Documentation]] - Keeping docs current ## Release Management - [[Release Period Stages]] - Release lifecycle overview - [[Pre-alpha or Development Release or Nightly Build]] - Pre-alpha stage - [[Alpha]] - Alpha stage - [[Beta]] - Beta stage - [[Feature Complete (FC)]] - Feature complete stage - [[Limited Availability (LA)]] - Limited availability - [[Release Candidate (RC) or Gamma or Delta]] - Release candidate - [[Release to Manufacturing or Release to Marketing (RTM)]] - RTM stage - [[General Availability (GA)]] - General availability - [[Live Release (LR)]] - Live release - [[Production Release (PR)]] - Production release - [[End of Life (EOL)]] - End of life ## Development Tools - [[Pycharm not Indexing]] - IDE troubleshooting - [[Claude Code Memory Cleanup Guide]] - Claude Code memory management - [[How to Clear Stale Jobs from Redis (running in terminal not Docker)]] - Redis job cleanup - [[Agent Skills]] - AI agent skill patterns - [[Anvil.works]] - Python web app builder - [[Data Version Control (DVC)]] - ML data versioning - [[Gherkin Language]] - BDD test specification language - [[Python Packing]] - Python packaging - [[Python Style Guide]] - Python style conventions ## Specialized Topics - [[Learn ML]] - Machine learning fundamentals - [[ISO is an Optical Disc File Format]] - File format documentation - [[TILDEV2]] - Development notes and learnings - [[Accessibility and WCAG Compliance]] - Web accessibility - [[Asynchronous Operations]] - Async programming patterns - [[Application Dependency]] - Dependency management concepts - [[Directory Structure]] - Project directory conventions - [[Mixed Directory Structure]] - Hybrid directory approaches - [[SEARCH]] - HTTP SEARCH method - [[TRACE]] - HTTP TRACE method ## External Resources - https://roadmap.sh/ - Developer roadmaps - https://www.ml.school/ - ML education - https://docs.python-guide.org/ - Python best practices ## Philosophy ![[Pasted image 20240905172338.png]] > There is no doubt that the grail of efficiency leads to abuse. Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We _should_ forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. > > Yet we should not pass up our opportunities in that critical 3%. A good programmer will not be lulled into complacency by such reasoning, he will be wise to look carefully at the critical code; but only _after_ that code has been identified. It is often a mistake to make a priori judgements about what parts of a program are really critical, since the universal experience of programmers who have been using measurement tools has been that their intuitive guesses fail. After working with such tools for seven years, I've become convinced that all compilers written from now on should be designed to provide all programmers with feedback indicating what parts of their programs are costing the most; indeed, this feedback should be supplied automatically unless it has been specifically turned off. Donald Knuth, Structured Programming with go to Statements, ACM Journal Computing Surveys, Vol 6, No. 4, Dec. 1974. p.268.