- Markdown (its becoming ubiquitous)
- Basic system concepts
- What is an Operating System and what does it provide?
- Kernel vs user-land
- Basic networking concepts
- Stack (TCP/IP)
- Layers
- TCP ports
- IP Routing
- IP Subnetting
- DNS
- Stack (TCP/IP)
- Regular expressions
- SSH
- Learn a text editor - preferably vi(m)
- User/group management
- Managing user/groups
- File ownership/permissions
- Commands
- grep, find, du, sed, etc
- Everything is a file
- stdin, stderr, stdout
- pipes
- /proc
- Bash
- Package management
- Filesystem structure
- Advanced SSH
- SSH keys
- Remote execution
- Port forwarding
- init process
- Differences between various Nixs
- Unix vs Linux (FreeBSD vs RHEL)
- RHEL derivatives vs Debian derivatives
- Different paradigms: OO vs functional vs imperative
- Teach a few languages
- Python, JS, Bash
- Version control
- Concepts
- Teach them git
- Testing
- Automated tests (unit tests, integration tests, end to end tests)
- TDD
- SQL
- SQL language
- Maybe diverge a bit and explain DSLs and the trade-offs (thinking specifically about turning the SQL into a execution plan)
- SQL & NoSQL
- Schema vs schemaless
- Separating application configuration from the application code
- Standarizing as the universal protocol
- Explain the protocol
- Application side
- HTML, CSS, JS, DOM
- Frameworks
- REST
- Server-side (MVC)
- Client-side (MVVM)
- Operations side
- Web server
- Load-balancer
- System Administration
- Network concentration
- Interface configurations
- Firewall configuration (iptables)
- Netstat & routes
- System concentration
- Cron
- MTA (preferably postfix)
- File limits
- Syslog
- Monitoring
- Backups
- Network concentration
- Common stacks
- Apache, PHP, MySQL
- Nginx, Python, Postgresql
- Apache, Passenger, Ruby
- Configuration management
- Puppet, Chef, Ansible
- Application deployment
- Continuous Integration/Deployment
- Frameworks
- git push w/ deploy via deploy key
- Fabric or Ansible
- Challenges & techniques for dealing with them
- Keeping your app up (Spin up/spin down, removing and adding node back to a load-balancer, etc)
- Schema updates (using views to mask schema updates)
- Handling errors and rollbacks
- Troubleshooting errors and performance bottlenecks
- iostat, sar (RHEL), etc
- strace, gdb (maybe)
- Monolith
- Three-tier
- SOA & microservices
- Basics of distributed systems
- Vertical vs horizontal scaling
- Techniques for scaling application services and datastores
- Challenges (latency, service discovery, etc)