claudeers.

🔓 unclaimed — this page was auto-generated from GitHub. Are you the creator?

Claim this page →
// Education & Learning

professional-programming

A collection of learning resources for curious software engineers

Actively maintained
99/100
last commit 9 days ago
last release none
releases 0
open issues 1
// install
git clone https://github.com/charlax/professional-programming

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 of 10 engineers.
    • Hold 10 engineers hostage in a technical discussion.
    • Waste 10 weeks of wages on cloud costs.
    • Waste 400 hours of engineering on bad architecture.
    • Incur 400 hours of bug triage.
  • A Bunch of Programming Advice I'd Give To Myself 15 Years Ago
    • If you (or your team) are shooting yourselves in the foot constantly, fix the gun
    • Assess the trade-off you’re making between quality and pace, make sure it’s appropriate for your context
    • Spending time sharpening the axe is almost always worth it
    • If you can’t easily explain why something is difficult, then it’s incidental complexity, which is probably worth addressing
    • Try to solve bugs one layer deeper
    • Don’t underestimate the value of digging into history to investigate some bugs
    • Bad code gives you feedback, perfect code doesn’t. Err on the side of writing bad code
    • Make debugging easier
    • When working on a team, you should usually ask the question
    • Shipping cadence matters a lot. Think hard about what will get you shipping quickly and often
  • Expert Generalists, martinfowler.com, proposes an interesting take on the "T-shaped engineer"
    • The Characteristics of an Expert Generalist: Curiosity, Collaborativeness, Customer Focus, Favor Fundamental Knowledge, Blend of Generalist and Specialist Skills, Sympathy for Related Domains
    • Assessing Expert Generalists: hiring and career progression
    • Growing Expert Generalists: From Tools to Fundamentals
      • "Why does our attention keep drifting toward tool expertise? It isn't because people are shortsighted or lazy; it's because the fundamentals are hard to see amid the noise."
    • Expert Generalists still need Specialists
    • Expert Generalists in the Age of LLMs
      • "Similarly to a specialist, an LLM can rapidly answer questions that an Expert Generalist will have when working in a new domain."
      • "Rather than looking for “the answer”, they prompt them to generate questions, explaining mechanisms, and providing examples and even tools that help explore the underlying mechanisms of an idea."

Other general material and list of resources

Other lists

Books

Articles

Axioms

  • Precepts - Urbit
    • Data is better than code.
    • Correctness is more important than performance.
    • Deterministic beats heuristic.
    • One hundred lines of simplicity is better than twenty lines of complexity.
    • If your abstractions are leaking, it's not due to some law of the universe; you just suck at abstracting. Usually, you didn't specify the abstraction narrowly enough.
    • If you avoid changing a section of code for fear of awakening the demons therein, you are living in fear. If you stay in the comfortable confines of the small section of the code you wrote or know well, you will never write legendary code. All code was written by humans and can be mastered by humans.
    • If there's clearly a right way to do something and a wrong way, do it the right way. Coding requires incredible discipline.
    • The best way to get the right answer is to try it the wrong way.
    • Practice tells you that things are good or bad; theory tells you why.
    • Not being qualified to solve a problem is no reason not to solve it.
    • If you don't understand a system you're using, you don't control it. If nobody understands the system, the system is in control.
  • Embedded Rules of Thumb
  • 50 Ideas That Changed My Life
  • Reflections on 10,000 Hours of Programming
  • 20 Things I've Learned in my 20 Years as a Software Engineer

Courses

Topics

Accounting

Agentic coding

Algorithm and data structures

Other resources:

Here are some useful & interesting algo & DS visualizations:

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

Buy vs. Build

  • Choose Boring Technology
  • Build vs. Buy
    • The reason we want to buy as much as possible is that an organisation has a limited capacity for expertise, so we don’t want to have to become experts on things that don’t make up a competitive advantage.
  • Platform Engineering: Build vs Buy
    • If someone tells me they can build something cheaper than a vendor, I’m immediately skeptical because I don’t think most people can accurately forecast the actual cost of maintenance in the long term.

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

  • The downsides of JSON for config files, Martin Tournoij.
    • Can't add comments
    • Excessive quotation and syntax noise
    • Using DC (declarative configuration) to control logic is often not a good idea.
  • Your configs suck? Try a real programming language
    • Most modern config formats suck
    • Use a real programming language
  • Code rant: The Configuration Complexity Clock
    • I’m not saying that it’s never appropriate to implement complex configuration, a rules-engine or a DSL, Indeed I would jump at the chance of building a DSL given the right requirements, but I am saying that you should understand the implications and recognise where you are on the clock before you go down that route.
    • Initially there was hope that non-technical business users would be able to use the GUI to configure the application, but that turned out to be a false hope; the mapping of business rules into the engine requires a level of expertise that only some members of the development team possess.

Continuous Integration (CI)

Data analysis & data science

Databases

See also the SQL section.

Scaling databases:

Internals

NoSQL

Postgres

"Just use postgres":

Data formats

Data science/data engineering

view the full README on GitHub.

// compatibility

Platformscli, api, web, mobile
Operating systems
AI compatibilityclaude
LicenseMIT
Pricingopen-source
LanguagePython

// faq

What is professional-programming?

A collection of learning resources for curious software engineers. It is open-source on GitHub.

Is professional-programming free to use?

professional-programming is open-source under the MIT license, so it is free to use.

What category does professional-programming belong to?

professional-programming is listed under education in the Claudeers registry of Claude-compatible tools.

1 views
51,218 stars
unclaimed
updated 15 days ago

// embed badge

professional-programming on Claudeers
[![Claudeers](https://claudeers.com/api/badge/professional-programming.svg)](https://claudeers.com/professional-programming)

// retro hit counter

professional-programming hit counter
[![Hits](https://claudeers.com/api/counter/professional-programming.svg)](https://claudeers.com/professional-programming)

// reviews

// guestbook

0/500

// related in Education & Learning

🔓

Skills for Real Engineers. Straight from my .claude directory.

// educationmattpocock/Shell155,576MIT[ claude ]
🔓

Course to get into Large Language Models (LLMs) with roadmaps and Colab notebooks.

// educationmlabonne/80,658Apache-2.0[ claude ]
🔓

Powerful AI Client

// educationchatboxai/TypeScript40,855GPL-3.0[ claude ]
🔓

Phaser is a fun, free and fast 2D game framework for making HTML5 games for desktop and mobile web browsers, supporting Canvas and WebGL rendering.

// educationphaserjs/JavaScript39,902MIT[ claude ]

// built by

→ see how professional-programming connects across the ecosystem