All software is built on a sea of shifting electrons situated in static sand. How do you conjure something with the resiliency to be useful in such an environment? Understanding the practical fundamentals of software engineering is just as important as scientific and mathematical theory for AI practitioners.
![[DALLE3_SoftwareEngineeringPractices.png]]
## Concept Tree
### Basics
1. **Software Development Lifecycle (SDLC)**
- Introduction to SDLC
- Phases of SDLC
- Requirements Gathering
- System Design
- Implementation
- Testing
- Deployment
- Maintenance
- Waterfall Model
2. **Version Control Systems**
- Introduction to Version Control
- Git Basics
- Cloning Repositories
- Committing Changes
- Branching and Merging
- Pull Requests
### More Advanced
1. **Agile Methodologies**
- Introduction to Agile
- Scrum Framework
- Kanban Method
- Sprint Planning
- User Stories
2. **Test-Driven Development**
- Writing Tests First
- Refactoring Code
- Unit Testing
- Integration Testing
3. **Debugging**
- Debugging Techniques
- Common Debugging Tools
4. **Code Review Practices**
- Code Review Process
- Best Practices for Code Reviews
- Automated Code Review Tools
### Mastery
1. **Software Design Patterns**
- Introduction to Design Patterns
- Creational Patterns
- Structural Patterns
- Behavioral Patterns
- Anti-patterns
2. **Continuous Integration/Continuous Delivery (CI/CD)**
- Introduction to CI/CD
- CI/CD Tools
- Building Pipelines
- Automated Testing
3. **Secure Coding Practices**
- Introduction to Secure Coding
- Common Security Vulnerabilities
- Secure Code Review
- Secure Coding Guidelines and Standards