Home

Awesome

<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->

Table of Contents

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

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

Items:

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

Other lists

Books

Articles

Axioms

Courses

Topics

Algorithm and data structures

Other resources:

Let's be honest: algorithms can be a pretty dry topic. This quora question lists some funnier learning alternative, including:

Example implementations:

Algorithms in distributed systems:

API design & development

General REST content:

Example guidelines:

More specific topics:

Attitude, habits, mindset

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.

Procrastination

Authentication/authorization

Automation

Best practices

Beyond software engineering & random

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.

Business

Cache

Career growth

About senior engineers:

Choosing your next/first opportunity

Getting to Staff Eng

Characters sets

Chess

(yes - chess gets its own section :)

Clouds

Code reviews

Coding & code quality

Communication

See also the Writing section

Compilers

Configuration

Continuous Integration (CI)

Databases

See also the SQL section.

NoSQL

Postgres

Data formats

Data science/data engineering

Debugging

Also see the Incident Response section in this doc

Design (visual, UX, UI, typography)

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:

Design (OO modeling, architecture, patterns, anti-patterns, etc.)

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:

Design: database schema

Design: patterns

Design: simplicity

Dev environment & tools

Tools

Article about tools:

Docker

See also the Python-specific section in charlax/python-education.

Documentation

The palest ink is more reliable than the most powerful memory. -- Chinese proverb

Dotfiles

Articles

Editors & IDE

Vim

Feel free to check my vim configuration and my vim cheatsheet.

Other editors:

Email

Engineering management

Checkout my list of management resources.

Exercises

The best way to learn is to learn by doing.

Practice:

Experimentation

Functional programming (FP)

Games development

Graphics

Hardware

HTTP

Humor

Incident response (oncall, alerting, outages, firefighting, postmortem)

Also see this section on my list of management resources, "Incident response".

Also see the Debugging section in this doc.

Alerting:

Postmortem

"Let’s plan for a future where we’re all as stupid as we are today."

– Dan Milstein

Example outline for a postmortem:

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.

Questions you should ask:

Résumé:

See also the exercises section in this document.

Kubernetes

Large Language Model (LLM)

Learning & memorizing

Learn how to learn!

About flashcards:

About Zettelkasten and PKM (personal knowledge management): see Personal knowledge management

Richard Feynman's Learning Strategy:

  1. Step 1: Continually ask "Why?”
  2. Step 2: When you learn something, learn it to where you can explain it to a child.
  3. Step 3: Instead of arbitrarily memorizing things, look for the explanation that makes it obvious.

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

Licenses (legal)

Linux (system management)

Low-code/no-code

Low-level, assembly

Machine learning/AI

Math

Marketing

Network

Observability (monitoring, logging, exception handling)

See also: Site Reliability Engineering (SRE)

Logging

Error/exception handling

Metrics

Monitoring

Open source

Operating system (OS)

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

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

Performance

Personal knowledge management (PKM)

Personal productivity

Check out this section on my list of management resources, "Personal productivity".

Perspective

Privacy

Problem solving

Product management for software engineers

See the Product management section on my entrepreneurship-resources list of resources.

Project management

See the Project management section on my engineering-management list of resources.

Programming languages

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:

Python

For Python check out my professional Python education repository.

JavaScript

In this repository: check ./training/front-end/

JavaScript is such a pervasive language that it's almost required learning.

Garbage collection

Programming paradigm

Public speaking (presenting)

Reading

Refactoring

Regex

Releasing & deploying

Versioning

Checklists

Feature flags

Testing in production

Reliability

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:

Resiliency

Search

Security

Training for developers:

List of resources:

Shell (command line)

SQL

System administration

System architecture

See also Reliability, Scalability

Reading lists:

Blogs:

Books:

Articles:

Architecture patterns

Microservices/splitting a monolith

Scalability

See also: Reliability, System architecture

Site Reliability Engineering (SRE)

See: Reliability

Technical debt

Testing

Why test:

How to test:

Test pyramid:

End-to-end tests:

Tools

The future life expectancy of some non-perishable things, like a technology or an idea, is proportional to their current age — Lindy’s Law

Type system

Typography

Version control (Git)

Learning Git, courses and books:

Cheat sheets:

More specific topics:

Work ethics, productivity & work/life balance

Check out this section on my list of engineering-management resources, "Personal productivity".

Web development

In this repository: check training/web-dev/ and ./training/front-end/

Learning guide and resources:

Topics:

Writing (communication, blogging)

➡️ See also my engineering-management list

Guides & classes about technical writing:

Write like an Amazonian

If you’re overthinking, write. If you’re underthinking, read. – @AlexAndBooks_

Resources & inspiration for presentations

Keeping up-to-date

Website and RSS feeds (I use Feedly):

Security:

Newsletters:

Blogs:

Concepts

Glossary

My other lists