| ▲ | msteffen 3 hours ago | ||||||||||||||||||||||
I liked this article, and I see a lot of other commenters didn't, so I'll give my take: When starting on a new codebase, how do you make yourself into a helpful contributor as quickly as possible? I go straight for the humans and their human docs. What problem was the system originally built to solve? What was the original design, and what were its biggest problems? Who is currently using it? If you know these, reading the code is much easier because you can guess why things were done the way they are. Also, this blog post has gotten popular: https://blog.gpkb.org/posts/just-send-me-the-prompt/ I think Charity is observing a very old problem and expecting the new technology to lead to a new solution of some kind. I doubt she thinks even the current generation of tools are the end of the AI software development story. She's not saying we'll drop design docs right into Claude code and walk away (design docs aren't complete either, that's why when you're ramping up you also have to talk to people, read old tickets and postmortems, etc.) What she's observing is that, in prod, people don't like infra where it's hard to tell how it got into is current state, and so infra-as-code is what we do now. She's also observing that, "it's hard to tell how it got into its current state" is the status quo with codebases, which other people have observed going back to "Programming as Theory Building" and earlier. And she's expecting that, analogous to infra, software development will somehow be done with tools focused on making "how the code got into its current state" clearer. | |||||||||||||||||||||||
| ▲ | molsongolden 3 hours ago | parent | next [-] | ||||||||||||||||||||||
I wonder if the reception is so variable due to differing exposure to 1) infra as code and 2) engineering teams that don't produce any artifacts outside of their code. > When starting on a new codebase, how do you make yourself into a helpful contributor as quickly as possible? I go straight for the humans and their human docs. What problem was the system originally built to solve? What was the original design, and what were its biggest problems? Who is currently using it? If you know these, reading the code is much easier because you can guess why things were done the way they are. This is the way but plenty of engineering teams don't have any human docs at all. Decisions are made in one engineer's head or in a chat that isn't saved. The spec was just a few notes in a ticket that was deleted during cleanup or lost when the team changed trackers. There's no map of the codebase or features, no ADRs, minimal observability. All you have is the code. You read the code to try and figure out what is going on then ping an engineer who made a recent commit to a specific area to ask if they remember why something was done the way it was. Someone makes a change and it breaks something on the other side of the codebase that they thought was totally unrelated, etc. | |||||||||||||||||||||||
| |||||||||||||||||||||||
| ▲ | 2 hours ago | parent | prev | next [-] | ||||||||||||||||||||||
| [deleted] | |||||||||||||||||||||||
| ▲ | onlyrealcuzzo an hour ago | parent | prev [-] | ||||||||||||||||||||||
I liked the article. It was a long (and entertaining) build up to the conclusion, but I'm scratching my head how the author got there. AI needs more discipline, yes. But theoretically that discipline can be learned much easier than becoming a good engineer. Think of it this way... 20 years ago, to write good, scalable C code - you needed to 1) either be a genius, or 2) dedicated to the craft. You need to learn dozens of tools like the back of your hand. * ASan * LSan * UBSan * TSan * GDB etc... God forbid if you needed to manually read DWARF files. Unless you're a pure genius, this is not feasible to master in a short amount of time. And in parallel, you need to learn how to design systems, too, otherwise, you're still not very good, and that's an almost completely orthogonal skillset. Now, you simply need to be aware of the hazards in your language/framework, tell your LLM to test for them, have the infrastructure set up to see if they've adequately tested for those hazards, and maybe read the actual tests and implementation. It is pretty easy to be able to read and understand Rust compared to debugging all the sorcery-like errors that come during Rust development... It is easy to see that you need a Loom test for certain scenarios, and to write a tool to detect if you did it. Even if you're still working in C or Zig, it far easier to know and detect when you need to use those tools then to learn to use them all individually. It is not hard to learn to read SQL. Almost ~50% of business professionals can. Python is barely harder. Rust can look like sorcery if you don't read a 50 page guide to understand to read it, but that's a VERY small price to pay compared to spending ~10 years learning the craft painfully by trial and error. I'm not sure how you get from "LLMs work in mysterious ways" to "So we need more discipline" to "everything is fine." I agree that everything is fine. I just don't think this is the clear path and thought process. Anyone who has the determination to get things to actually work, and takes a little bit of time to understand what makes them not, should be able to leverage LLMs to work wonders. In my opinion, LLMs are going to make things far more complicated, because the cost of building something complicated is becoming almost free. Engineering was always about discipline and getting things to work. But you needed a set of prerequisite skills to have much value. Most of those are gone now. It is simply far easier than before. It does require discipline, yes. But discipline is cheap compared to ~10 years of trial by fire. | |||||||||||||||||||||||