- Professional Programming
- Must read books
- Must-read articles
- Other general material and list of resources
- Topics
- Algorithm and data structures
- Attitude, habits, mindset
- Automation
- Biases
- Career growth
- Characters sets
- Coding & code quality
- Computer science
- Databases
- Data science
- Debugging
- Design (visual, UX, UI)
- Design (OO modeling, architecture, patterns, anti-patterns, etc.)
- Dev environment & tools
- Diversity & inclusion
- Documentation
- Dotfiles
- Editors & IDE
- Engineering management
- Exercises
- Incident response (alerting, outages, firefighting)
- Internet
- Interviewing
- Learning
- Problem solving
- Project management
- Programming languages
- Over-engineering
- Reading
- Releasing & deploying
- Security
- Shell
- System architecture
- Site Reliability Engineering (SRE)
- Testing
- Tools
- Version control (Git)
- Work ethics & work/life balance
- Web development
- Writing for performance
- Concepts
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.
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.
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
Other general material and list of resources
Courses
Topics
Algorithm and data structures
Let’s be honest: algo can be a pretty dry topic. This quora question lists some funnier learning alternative, including:
Attitude, habits, mindset
Automation
Biases
Biases don’t only apply to hiring. For instance, the fundamental attribution bias also applies when criticizing somebody’s code written a long time ago, in a totally different context.
Career growth
Characters sets
Coding & code quality
Computer science
Databases
Data science
Debugging
Design (visual, UX, UI)
I highly recommend reading The Non-Designer’s Design Book. This is a pretty short book that will give you some very actionable design advices.
Design (OO modeling, architecture, patterns, anti-patterns, etc.)
Here’s a list of good books:
Articles:
I maintain a list of antipatterns on another repo. This is a highly recommended read.
Quotes:
- “You can use an eraser on the drafting table or a sledge hammer on the construction site.”, Frank Lloyd Wright
Design: simplicity
- Simple Made Easy ?, Rich Hickey. This is an incredibly inspiring talk redefining simplicity, ease and complexity, and showing that solutions that look easy may actually harm your design.
Dev environment & tools
Tools
Diversity & inclusion
Checkout my list of management resources.
Documentation
Dotfiles
Articles
Editors & IDE
Engineering management
Checkout my list of management resources.
Exercises
The best way to learn is to learn by doing.
Incident response (alerting, outages, firefighting)
Internet
Interviewing
Note: this is about you as an interviewee, not as an interviewer. To check out my list of resources for interviewers, go to my engineering-management repository.
Learning
Learn how to learn!
Richard Feynman’s Learning Strategy:
- Step 1: Continually ask “Why?”
- Step 2: When you learn something, learn it to where you can explain it to a child.
- Step 3: Instead of arbitrarily memorizing things, look for the explanation that makes it obvious.
Problem solving
Project management
See Project management section on my engineering-management list of resources.
Programming languages
I would recommend learning:
- JavaScript and may be one other interpreted language (Python, Ruby, etc.). Interpreted languages are useful for quick one-off automation scripts, and fastest to write for interviews.
- A compiled language (Java, C, C++…).
- A more recent language to see where the industry is going (as of writing, Go, Swift, Rust, Elixir…).
- A language that has first-class support for functional programming (Haskell, Scala, Clojure…).
A bit more reading:
Python
For Python feel free to checkout my professional Python education repository.
JavaScript
JavaScript is such a pervasive language that it’s almost required learning.
FP vs. OOP
Over-engineering
“A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over, beginning with a working simple system.”
John Gall, General systemantics, an essay on how systems work, and especially how they fail…, 1975 (this quote is sometime referred as “Galls’ law”)
“Software engineering is what happens to programming when you add time and other programmers.”
Rob Pike, Go at Google: Language Design in the Service of Software Engineering
Reading
- Papers we love: papers from the computer science community to read and discuss. Can be a good source of inspiration of solving your design problems.
- The morning paper: one CS research paper explained every morning.
Releasing & deploying
Security
Shell
System architecture
Scalability
- I already mentioned the book Scalability rules above, but there’s also a presentation about it.
Stability
- I already mentioned the book Release it! above. There’s also a presentation from the author.