In 2016 I wrote "Programming Beyond Practices" for O'Reilly.

It deliberately includes *no code samples* -- only discussions, design decisions, analysis, etc in story form.

Many of its ideas are still relevant. You can find the PDF here (free, no signup needed):

https://notes.skillstopractice.com/pbp.pdf

@skillstopractice This is brilliant! Thanks for writing and sharing it!

@simeon A decade later my focus is now on trying to teach code reading to a level of proficiency that people can hold a very clear mental model in their head of how systems work.

Two (very different) sides of the same coin, and it was fun to go deep on the opposite end back then.

@skillstopractice I’m almost finished with your book and I love it because it shows that developing software is much, much more than producing code. It’s a shining light amidst all the “genAI will replace you pesky developer” doom and gloom.

As for the other side of the coin: I feel we’ll be needing these skills a lot in the not too distant future.

@simeon If you haven't read the last chapter yet I don't want to spoil it for you but I had a spot-on prediction of the development trends a decade ago but I can tell you my reaction has been... "No! No! Not like that!"

Because what has happened, has only similarities at the surface level to what I was trying to express. And fundamental incompatibilities with what I think will make things genuinely human-centric.

(That said, I still believe we can get there)

@skillstopractice Done, read it! Now I’m curious to hear your misgivings with the trajectory we’ve taken. I can imagine it’s still too tech/efficiency-focused i.e. the time savings unlocked by genAI are going towards faster delivery instead of deeper problem understanding and/or higher quality?

@simeon Will attempt to collect my thoughts in a more complete way and send a link when I do, but the short story is I thought the only probabilistic element of that kind of workflow would have been matching natural language to corresponding APIs, and I had hoped we would have built high level enough tools in all other ways that stacked like Lego bricks all the way up to the surface.

By contrast, GenAI drags us deep down into the Turing tarpit, especially for those who don't know how to code.

@skillstopractice On that note: are you aware of an interface/system that (visually) deals with higher order software artifacts? For instance, instead of typing programming language constructs we’re (visually) manipulating e.g. architecture layers, entities, relationships, events, etc.

Ideally I’d like to navigate application components instead of files on disk when working with larger code bases.

@skillstopractice I can imagine a Figma-like interface that shows application layers, components, entities and their relationships (also with the outside world), and allows you to quickly navigate between and manipulate all of them at different levels of detail (including the pure code level).

I guess something like https://github.com/samuelmtimbo/unit but for manipulating higher-order concepts.

GitHub - samuelmtimbo/unit: Next Generation Visual Programming System

Next Generation Visual Programming System. Contribute to samuelmtimbo/unit development by creating an account on GitHub.

GitHub

@simeon I will need to look at Unit closer because the idea of representing a program as a graph feels right to me.

As I teach code reading I emphasize that aspect of things, but you really need to squint when organizing code around source files.

@skillstopractice Squint till it starts hurting, haha.

BTW look what just landed in my RSS reader: https://www.chrbutler.com/the-best-interfaces-we-never-built

The Best Interfaces We Never Built - Christopher Butler

Every piece of technology is an interface. Though the word has come to be a shorthand for what we see and use on a screen, an interface is anything