Personal Software Developer Growth Plan
Back
- Introduction
- Resources
- Phase 1: Focus on a simple web stack
- Phase 1.5: Learn the craft of software development
- Phase 2: Computer science fundamentals
- Healthy reminders and inspiration
Introduction
Knowing every framework, tool, language and library is not possible, nor is it the goal of a software developer. This is a (continually improving) personal plan to help me grow to become a strong engineer capable of solving hard problems.
Resources
Roadmap
Career Advice
Mentorship
Problem-solving
Intermediate learning content
Practice
- Build, build, build, then get feedback
- Build independent projects
- Contribute to open source
Phase 1: Focus on a simple web stack
As someone who’s transitioned into tech from a previous career trajectory, I don’t have the bandwidth to go back to university for a 4-year CS degree (even though I would love to).
But to give me the financial margin to be able to self-teach myself fundamental CS, phase 1 is all about building the productive skills to be employable as a working web developer at 80% of companies.
To prevent me from falling into the trap of only mastering frameworks and libraries, this phase is timeboxed to 1 - 2 years. After that, there should be enough momentum for me to continue growing as a strong intermediate developer able to devote time to the core CS fundamentals.
Pick a versatile programming language (ruby)
Base
- Ruby Koans
- Learn Ruby The Hard Way (Book)
- Build Self-Led Ruby Programs
Under the magic
Pick a battle-tested framework (rails)
Base
- Pragmatic Studio: Rails 7 Course
- Build Self-Led Rails Projects
Under the magic
- Owning Rails Course
- Intermediate resources
- Refactoring Rails
- Noah Gibbs - Rebuilding Rails (Book)
- Nate Berkopec - Rails Performance (Book)
Pick a front-end library (react)
Base
Under the magic
Javascript + Typescript
Data storage (relational databases)
Core tools for the working developer
Source control (git)
- Git immersion
- Git Reference Manual
- Freecodecamp - Git and GitHub crash course
- Freecodecamp - Beginner git course
- Freecodecamp - Intermediate git course
- Freecodecamp - Advanced git course
Unix and CLI
- Learning The Bash Shell
- Learn Unix The Hard Way
- Freecodecamp: CLI For Beginners
- ZTM: Bash Scripting (Course)
Text editor
Regexp
According to the Pragmatic Programmer, you should be able to do the following actions with your text editor of choice with only the keyboard:
- Edit text by selecting by character, word, line, paragraph
- Move selected character, word, line, and paragraph
- Find exact/partial matched word, pattern, delimiters, function, etc
- Indent and reindent block of code
- Comment and uncomment blocks of code
- Undo and redo changes
- Split the editor window into multiple rows or columns, and jump between them
- Go to a specific line number
- Sort selected lines by descending and ascending
- Create multiple cursors to select and edit the text in parallel.
- Open new terminal and problem windows in the current project.
- Start service and run all/specific test cases in project
Chrome dev tools
Developer experience tools
- Offline documentation browser:
- API development: Postman or Insomnia
- Database management gui: Table plus
- General productivity: Raycast
Important web concepts
- How The Web Works
- ZTM: Complete Web Developer (Course)
- Freecodecamp: Networking course
- Freecodecamp: REST API
- Production Ready GraphQL (Book)
Phase 1.5: Learn the craft of software development
Writing maintainable code
- David Thomas, Andrew Hunt - The Pragmatic Programmer (Book)
- Clean Code (Courses)
- Steve McConnell - Code Complete (Book)
- Sandi Metz - Practical Object Oriented Design In Ruby (Book)
- Russ Olsen - Design Patterns In Ruby (Book)
- Avdi Grimm: Mastering The Object-Oriented Mindset In Ruby And Rails (Course)
- Martin Fowler - Refactoring (Book)
- Domain Driven Design
Testing software
Setting up production infrastructure
Cloud tools
- Heroku
- AWS
Monitoring and observability
- Logging
- Exceptions monitoring
- Defining and monitoring SLA’s and SLO’s
Deployment
- CI/CD
- Docker
- Build your own docker
Scaling concerns
- Horizontal vs vertical scaling
- Database sharding
- Caching techniques
- Redis
- Monolith vs microservices architecture
- Background workers
Systems design
- Martin Kleppmann - Designing Data-Intensive Applications (Book)
- Roberto Vitillo - Understanding Distributed Systems (Book)
- Software Architecture: The Hard Parts (Book)
- Robert C. Martin - Clean Architecture (Book)
- Neal Ford - The Productive Programmer (Book)
Application security
Phase 2: Computer science fundamentals
After gaining momentum on the skills that guarantee a degree of employability, 80% of learning efforts should be spent diving into the slow-changing CS fundamentals. The other 20% can be spent refining the skills in Phase 1.
General
Specific: low-level programming
Recommendations from co-workers on low-level programming resources.
- Igor Zhirkovlow - Low-level programming (Book)
- Thorsten Ball - Writing An Interpreter In Go (Book)
- Thorsten Ball - Writing A Compiler In Go (Book)
- Zero To Production With Rust
- Rustlings
- Rust For Beginners
- Rust youtuber
- Jon Gjengset - Rust for Rustaceans
- A Gentle Introduction To Rust
Healthy reminders and inspiration
Peak under the magic
- Start to peek underneath the “magic”
- Re-build the tools, read the source code instead of the docs, and contribute to the open source
- Look for courses that teach how to build the tools from scratch in addition to courses that teach how to use them
- Play around with the source code and see what breaks
There is no rush
- It’s a marathon, not a sprint
- Software development is a craft, not an academic study
- The only way to get better is to learn by doing, building, and getting feedback on your work
- No one can learn everything there is to know in software
- Don’t try to memorize things
- It’s okay to take weeks to months-long breaks from learning if it’s becoming too much or the season of life is too full
- Make sure to protect the fun
The place of books
- Books are collections of learnings authors have gained over time by actually doing things and making the mistakes
- Books are not a primary way of learning craft-based skill sets
- Books are there to refine a craft using knowledge, mistakes, and learnings from those that have gone before
- You do not learn to ride a bike by reading about it
- Improve the consumption of books by stopping just before the author implements the solution and first really trying to implement it yourself. Then compare to see how the author did it
The place of courses
- Courses are also not the primary way of learning craft-based skill sets
- Courses are there to get you started or introduce a new concept or tool
- Can improve the consumption of course by building along with the instructor
- The goal is that after the course you then build independently
- Improve the consumption of courses by stopping just before the instructor implements the solution and first really trying to implement it yourself. Then compare to see how the author did it