Learning in public?
Everybody starts out knowing nothing. We all go from no knowledge to some knowledge somehow. The process can be daunting, though. Especially if you don’t have a comprehensive curriculum to follow.
I’ve worked with some really amazing people whose knowledge seems unattainable for me, but they were at my level once. It just takes time and a commitment to learning to get there.
Right?
Well, mostly. A solid learning plan helps speed things along, though. This is my attempt to demystify how I create my own learning roadmap. If you’re struggling with a shotgun approach to self-directed study, I hope my example helps.
The plan
I’m a software engineer. For the past seven or eight years, I’ve been primarily a front end engineer, but I’ve learned a fair bit of back end and devops along the way. I’m not nearly as confident in either discipline as I’d like to be, though, so this learning plan is to shore up the gaps in my knowledge and make informed enough to be dangerous.
The cheater’s friend
Fortunately for me, https://roadmap.sh is a thing. Perusing the list of roadmaps available there, I see a few that fit what I’m looking for:
For now, I’m avoiding roadmaps on specific technologies like Go, SQL, or Kubernetes. I’ll probably get there eventually, but for now, I want a broad look at the landscape. Once I know where the all the landmarks are, I expect I’ll understand how the various technologies fit in better. (I think I have a pretty good idea right now, but I’m gonna verify my assumptions before diving in.) From there, I’ll have a better idea which it makes sense to learn in depth first.
Constructing my personal roadmap
I’ve gone through the roadmaps and pulled out a list of topics for me to study. There’s a lot in here that I’m comfortable skipping, so I’m cherry-picking the things I’m less familiar with.
Backend
- PostgreSQL
- REST APIs
- Just to make sure I remember everything correctly 🤷♂
- JSON APIs
- gRPC
- JWT
- Integration / unit / functional testing
- What do these tests look like for backend code?
- Database Indexes
- Data Replication
- Sharding Strategies
- CAP Theorem
- ACID
- Transactions
- Normalization
- (Database) Failure Modes
- Profiling (Database) Performance
- CQRS (Command Query Responsibility Segregation) Pattern
- Event Sourcing
- SOA (Service-Oriented Architecture)
- Service Mesh
- Twelve-Factor Apps
- Brushing up on it quickly
- Message Brokers
- Server Sent Events
- Building For Scale
- To be fleshed out when I get here
DevOps
- Performance Monitoring
- Load Balancer
- The System Design roadmap has more detail
- Caching Server
- Forward Proxy
- Reverse Proxy
- Firewall
- Cloud Design Patterns
There are others in here that would be useful (all kinds of different monitoring), but they’re mostly focused on specific technologies, so I’m deferring for now.
System Design
- Consistency Patterns
- Availability Patterns
It's starting to feel like a lot
At this point, I’m starting to get information overload. It’s starting to feel overwhelming, so I’m taking a break from planning. I know that if I keep pushing on ahead and make a huge list, I’ll never get through it all because it’ll feel impossible. (Or at least impractical.)
I’ll get back to the growing list, but I need to start knocking out some of these topics.