Table of Contents
- Professional Programming - about this list
- Principles
- Contributing to this list
- Must-read books
- Must-read articles
- Other general material and list of resources
- Topics
- Accounting
- Agentic coding
- Algorithm and data structures
- API design & development
- Attitude, habits, mindset
- Procrastination
- Authentication/authorization
- Automation
- Best practices
- Beyond software engineering & random
- Biases
- Business
- Buy vs. Build
- Cache
- Career growth
- Choosing your next/first opportunity
- Getting to Staff Eng
- Characters sets
- Chess
- Clouds
- Code reviews
- Coding & code quality
- Communication
- Compilers
- Configuration
- Continuous Integration (CI)
- Data analysis & data science
- Databases
- Internals
- NoSQL
- Postgres
- Data formats
- Data science/data engineering
- Debugging
- Design (visual, UX, UI, typography)
- Design (OO modeling, architecture, patterns, anti-patterns, etc.)
- Design: database schema
- Design: patterns
- Design: simplicity
- Dev environment & tools
- Docker
- Documentation
- Dotfiles
- Editors & IDE
- Vim
- Email
- Engineering management
- Exercises
- Experimentation
- Fonts
- Functional programming (FP)
- Games development
- Generative AI
- Graphics
- Hardware
- HTTP
- Humor
- Incident response (oncall, alerting, outages, firefighting, postmortem)
- Postmortem
- Internet
- Interviewing
- Kubernetes
- Large Language Model (LLM)
- Learning & memorizing
- Licenses (legal)
- Linux (system management)
- Low-code/no-code
- Low-level, assembly
- Machine learning/AI
- Math
- Marketing
- Network
- Observability (monitoring, logging, exception handling)
- Logging
- Error/exception handling
- Metrics
- Monitoring
- Open source
- Operating system (OS)
- Over-engineering
- Performance
- Personal knowledge management (PKM)
- Personal productivity
- Perspective
- Privacy
- Problem solving
- Product management for software engineers
- Project management
- Programming languages
- Python
- JavaScript
- Garbage collection
- Programming paradigm
- Public speaking (presenting)
- Reading
- Refactoring
- Regex
- Releasing & deploying
- Versioning
- Checklists
- Feature flags
- Testing in production
- Reliability
- Integration patterns (dependency management)
- Resiliency
- Search
- Security
- Research papers
- Shell (command line)
- SQL
- State
- System administration
- System architecture
- Architecture patterns
- Microservices/splitting a monolith
- Scalability
- Site Reliability Engineering (SRE)
- Technical debt
- Testing
- Tools
- Type system
- Typography
- Version control (Git)
- Work ethics, productivity & work/life balance
- Web development
- Writing (communication, blogging)
- Resources & inspiration for presentations
- Keeping up-to-date
- Concepts
- My other lists
Professional Programming - about this list
Give me six hours to chop down a tree and I will spend the first four sharpening the axe. (Abraham Lincoln)
A collection of full-stack resources for programmers.
The goal of this page is to make you a more proficient developer. You'll find only resources that I've found truly inspiring, or that have become timeless classics.
Principles
- This page is not meant to be comprehensive. I am trying to keep it light and not too overwhelming.
- The selection of articles is opinionated.
- I don't necessarily agree with or endorse every single line that is written in every single one of those resources. The same applies to their authors: I don't endorse everything each of those authors has said and will ever say.
Items:
- 🧰 : list of resources
- 📖 : book
- 🎞 : video/movie extract/movie/talk
- 🏙 : slides/presentation
- ⭐️ : must-read
- 📃 : paper
Contributing to this list
Feel free to open a PR to contribute!
I will not be adding everything: as stated above, I am trying to keep the list concise.
Must-read books
I've found these books incredibly inspiring:
There are some free books available, including:
Must-read articles
- Practical Advice for New Software Engineers
- On Being A Senior Engineer
- Lessons Learned in Software Development: one of those articles that give you years of hard-earned lessons, all in one short article. Must read.
- Things I Learnt The Hard Way
- Spec first, then code
- Tests make better APIs
- Future thinking is future trashing
- Documentation is a love letter to your future self
- Sometimes, it's better to let the application crash than do nothing
- Understand and stay away of cargo cult
- "Right tool for the job" is just to push an agenda
- Learn the basics functional programming
- ALWAYS use timezones with your dates
- ALWAYS use UTF-8
- Create libraries
- Learn to monitor
- Explicit is better than implicit
- Companies look for specialists but keep generalists longer
- The best secure way to deal with user data is not to capture it
- When it's time to stop, it's time to stop
- You're responsible for the use of your code
- Don't tell "It's done" when it's not
- Pay attention on how people react to you
- Beware of micro-aggressions
- Keep a list of "Things I Don't Know"
- Signs that you're a good programmer (not everything in here is great - some of the points are counterproductive)
- The instinct to experiment first
- Emotional detachment from code and design
- Eager to fix what isn't broken
- Fascinated by the incomprehensible
- Compelled to teach
- Incorruptible patience
- A destructive pursuit of perfection
- Encyclopedic grasp of the platform
- Thinks In Code
- When In Rome, Does As Romans Do
- Creates their own tools
- Indifferent to Hierarchy
- Excited by failure
- Indifferent to circumstances
- Substitutes impulse for commitment
- Driven by experiences
- 7 absolute truths I unlearned as junior developer
- Early in your career, you can learn 10x more in a supportive team in 1 year, than coding on your own
- Every company has problems, every company has technical debt.
- Being overly opinionated on topics you lack real-world experience with is pretty arrogant.
- Many conference talks cover proof of concepts rather than real-world scenarios.
- Dealing with legacy is completely normal.
- Architecture is more important than nitpicking.
- Focus on automation over documentation where appropriate.
- Having some technical debt is healthy.
- Senior engineers must develop many skills besides programming.
- We’re all still junior in some areas.
- How to Build Good Software
- A good high-level summary of fundamental engineering practices.
- The root cause of bad software has less to do with specific engineering choices, and more to do with how development projects are managed.
- There is no such thing as platonically good engineering: it depends on your needs and the practical problems you encounter.
- Software should be treated not as a static product, but as a living manifestation of the development team’s collective understanding.
- Software projects rarely fail because they are too small; they fail because they get too big.
- Beware of bureaucratic goals masquerading as problem statements. If our end goal is to make citizens’ lives better, we need to explicitly acknowledge the things that are making their lives worse.
- Building software is not about avoiding failure; it is about strategically failing as fast as possible to get the information you need to build something good.
- How to be a -10x Engineer
- Nullify the output o