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.
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:
List of axioms:
Other resources:
Let's be honest: algorithms can be a pretty dry topic. This quora question lists some funnier learning alternative, including:
Example implementations:
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.
isEachUserLoggedIn
is better than areUsersLoggedIn
or isUsersLoggedIn
)isPaidFor
is better than wasPaidFor
)isEnabled
is better than isDisabled
)See also the SQL section.
Exercises:
NoSQL:
libphonenumber
.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 :
Resources:
Here's a list of good books:
One of the absolute references on architecture is Martin Fowler: checkout his Software Architecture Guide.
Articles:
You can use an eraser on the drafting table or a sledge hammer on the construction site. (Frank Lloyd Wright)
Resources:
Tools
Makefile
Article about tools:
Check out my list of management resources.
See also the Python-specific section in charlax/python-education.
HEALTHCHECK
in Docker Compose not your DockerfileRUN
, COPY
, ADD
)COPY
over ADD
ENTRYPOINT
and CMD
HEALTHCHECK
instructionlatest
tag..dockerignore
file (include **/.git
, etc.)hadolint
)The palest ink is more reliable than the most powerful memory. -- Chinese proverb
Articles
About Vim specifically:
Feel free to check my vim configuration and my vim cheatsheet.
Checkout my list of management resources.
The best way to learn is to learn by doing.
Practice:
O(1/N)
algorithm."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.
See also the exercises section in this document.
Learn how to learn!
About Zettelkasten and PKM (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
<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
“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 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)
For Python feel free to checkout my professional Python education repository.
JavaScript is such a pervasive language that it's almost required learning.
Versioning:
Checklists:
Feature flags:
Testing in production:
Training for developers:
List of resources:
Reading lists:
Blogs:
Books:
Articles:
Microservices/splitting a monolith:
Note: this section is only about SRE as a role. Checkout the System Architecture for more content related to reliability.
Books:
Articles:
Reliability is the one feature every customer users. -- An auth0 SRE.
Resources:
Why test:
How to test:
Test pyramid:
End-to-end tests:
Learning Git, courses and books:
Cheat sheets:
More specific topics:
"Do what you love until you love to Do" I often think about the “Read what you love until you love to read” comment from @naval, and this is a good generalization. My experience has been that it is easier to educate a Do-er than to motivate the educated; you have to believe you can Do before you embark on an effort. – John Carmack
➡️ 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: