README.md
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.
Items:
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.
I've found these books incredibly inspiring:
There are some free books available, including:
Other resources:
Here are some useful & interesting algo & DS visualizations:
Example implementations:
Algorithms in distributed systems:
General REST content:
Example guidelines:
More specific topics:
Imposter syndrome is underrated: a lot of talk goes into overcoming imposter syndrome. I say embrace self-skepticism and doubt yourself every day. In a fast-moving industry where lots of your knowledge expires every year, even the most junior people around you constantly cook up skills you don't have; you stay competitive by applying with the determination (and even fear) of the novice. The upside of this treadmill is that every engineer is on it: just because you're an imposter doesn't mean that other people are more deserving than you, because they're imposters too. You should advocate for yourself, take risks, pat yourself on the back when things go well, and, as you start to build a track record of solving problems, trust your skills and adaptability. Just make no mistake: you're only as good as the last problem you solve.
Dan Heller, Building a Career in Software
I had learned already never to empty the well of my writing, but always to stop when there was still something there in the deep part of the well, and let it refill at night from the springs that fed it. -- Ernest Hemingway
Good judgment comes from experience. Experience comes from bad judgment.
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.
About senior engineers:
(yes - chess gets its own section :)
isEachUserLoggedIn is better than areUsersLoggedIn or isUsersLoggedIn)isPaidFor is better than wasPaidFor)isEnabled is better than isDisabled)See also the Writing section
See also the SQL section.
Scaling databases:
"Just use postgres":
libphonenumber.Also see the Incident Response section in this doc
strace, tcpdump)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.
Articles :
Typograhy: see "Typography" section
Resources:
Here's a list of good books:
One of the absolute references on architecture is Martin Fowler: checkout his Software Architecture Guide.
Articles:
“Simplicity is a great virtue, but it requires hard work to achieve and education to appreciate. And to make matters worse, complexity sells better.” — Edsger Dijkstra
You can use an eraser on the drafting table or a sledge hammer on the construction site. (Frank Lloyd Wright)
Resources:
created_at, created_by etc.Tools
MakefileArticle about tools:
See also the Python-specific section in charlax/python-education.
HEALTHCHECK in Docker Compose not your DockerfileRUN, COPY, ADD)COPY over ADDENTRYPOINT and CMDHEALTHCHECK instructionlatest tag..dockerignore file (include **/.git, etc.)hadolint)The palest ink is more reliable than the most powerful memory. -- Chinese proverb
Articles
Feel free to check my vim configuration and my vim cheatsheet.
Other editors:
Checkout my list of management resources.
The best way to learn is to learn by doing.
Practice:
O(1/N) algorithm.Also see this section on my list of management resources, "Incident response".
Also see the Debugging section in this doc.
Alerting:
"Let’s plan for a future where we’re all as stupid as we are today."
– Dan Milstein
Example outline for a postmortem:
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.
Questions you should ask:
Résumé:
See also the exercises section in this document.
Learn how to learn!
About flashcards:
About Zettelkasten and PKM (personal knowledge management): see Personal knowledge management
Richard Feynman's Learning Strategy:
Most people overestimate what they can do in 1 year and underestimate what they can do in a decade. – Bill Gates
Frankly, though, I think most people can learn a lot more than they think they can. They sell themselves short without trying. One bit of advice: it is important to view knowledge as sort of a semantic tree — make sure you understand the fundamental principles, ie the trunk and big branches, before you get into the details/leaves or there is nothing for them to hang on to. — Elon Musk
"Experience is something you don't get until just after you need it." ― Steven Wright
Tell me and I forget. Teach me and I remember. Involve me and I learn. – Benjamin Franklin
Education is the kindling of a flame, not the filling of a vessel. – Socrates
That which we persist in doing becomes easier for us to do; not that the nature of the thing itself is changed, but that our power to do is increased. – Ralph Waldo Emerson
A wise man can learn more from a foolish question than a fool can learn from a wise answer. – Bruce Lee
A lecture has been well described as the process whereby the notes of the teacher become the notes of the student without passing through the mind of either. — Mortimer Adler
Fools learn from experience. I prefer to learn from the experience of others. — Bismark
See also: Site Reliability Engineering (SRE)
“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
You can’t connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future. You have to trust in something — your gut, destiny, life, karma, whatever. This approach has never let me down, and it has made all the difference in my life.
— Steve Jobs
Check out this section on my list of management resources, "Personal productivity".
See the Product management section on my entrepreneurship-resources list of resources.
See the Project management section on my engineering-management list of resources.
I would recommend learning:
A bit more reading:
There are only two kinds of languages: the ones people complain about and the ones nobody uses.
-- Bjarne Stroustrup (C++ creator)
List of resources:
For Python check out my professional Python education repository.
In this repository: check ./training/front-end/
JavaScript is such a pervasive language that it's almost required learning.
See also System architecture
Books:
Quotes:
Quality is a snapshot at the start of life and reliability is a motion picture of the day-by-day operation. – NIST Reliability is the one feature every customer users. -- An auth0 SRE.
Articles:
Resources:
Training for developers:
List of resources:
See also Reliability, Scalability
Reading lists:
Blogs:
Books:
Articles:
See also: Reliability, System architecture
See: Reliability
Why test:
How to test:
Test pyramid:
End-to-end tests:
The future life expectancy of some non-perishable things, like a technology or an idea, is proportional to their current age — Lindy’s Law
Learning Git, courses and books:
Cheat sheets:
More specific topics:
Check out this section on my list of engineering-management resources, "Personal productivity".
In this repository: check training/web-dev/ and ./training/front-end/
Learning guide and resources:
Topics:
URLs:
<scheme>:<authority><path>?<query>#<fragment>, where only <scheme> and <path> are mandatory. URL and URN are URIs.mailto:[email protected].urn:<namespace identifier>:<namespace specific string>. E.g. urn:isbn:9780062301239➡️ See also my engineering-management list
Guides & classes about technical writing:
If you’re overthinking, write. If you’re underthinking, read. – @AlexAndBooks_
Website and RSS feeds (I use Feedly):
Security:
Newsletters:
Blogs: