You — voice note 1
Okay. Here's what I need to do. I have, uh, kind of a a workflow, a style of programming that I need to write two different, um, blog posts explaining. Um, I need to do this because there's a couple of people I work with and some interns that I think would benefit from this. So the first is kind of a general style of programming, um, without large language models, which specifically takes advantage of the fact that we don't know what we're doing all of the time. Um, the approach is extremely simple. Uh, I think in order to write this paper, I maybe just need to provide some context. What is the problem? Uh, what is my approach, and how my approach kinda solves the problem. And the general approach is just, like, write write programs procedurally when you don't know what you're doing. And when something starts to get complicated, you can hand wave a lot by just writing a call to a function that doesn't exist yet. And your compiler, at that point, will basically act as a to do list for you. Um, and if you want code to run, like, if you wanna skip over one of these procedural functions you've written, you could have it return, you know, a canned response or or whatever. Um, and this is an approach that we used back in college, um, specifically to build compilers, shells, all sorts of complicated C code, um, that we also had to write by hand on paper for our exams. Uh, and so this was a very effective technique of breaking down work, um, as you needed so that you could accomplish your goals in a timely manner without having to know how to solve all of your problems upfront. The second topic that I need to write about, uh, is about using large language models to write and solve large problems. So kind of in a a similar fashion, the main idea here is that we want to avoid this false assumption that we can just come up with the perfect architecture or the perfect way to solve a problem on our own, because it's just not realistic. Uh, so instead, um, instead of looking towards solutions like lane graph or, uh, complicated harnesses or stacked loops or all of these other this, like, crazy automation bullshit. Um, the best place to start is just with a casual chat. Come up with a couple tools that you know you will absolutely need to have, such as, um, a connection to a database that has all of the access and authorization already provided. And then just work with your your agent, like Claude, in a conversational setting to try to solve one particular problem or example problem, that you that you are trying to automate. work through the problem, interrupt the agent as frequently as you need if you see it doing something you don't want it to do, interrupt it, and teach it what to do in this session. Don't worry about writing other files. Just worry about getting the one instance of the task complete. Um, ask Claude questions. Make sure that Claude asks you questions, and treat this as a collaborative pair programming exercise and exploration. Once you've completed that goal, you can summarize that session into, uh, a handful of, uh, like, pseudocode lines. The idea would be figure out what all of the kind of starting input variables were, all of the questions that were asked related to the problem, uh, all of the nitpicks, um, and and separate and organize these elements so that what you're left with is some ground rules, kind of like what you would put in a Claude MD, like use UV, uh, over conda. Um, and then you have, uh, like, a playbook. And this playbook or pseudocode is basically a program written in English. Step one, do this. Step two, do this. If this, then that. Um, and then take the pseudocode to a new session and try to solve the same problem. Again, follow Claude along the way, correct mistakes. And through this process, revise the program that you've been making in English. There are some concrete reasons why this is more effective than writing a program. For one, the interpreter is the large language model. The interpreter is the agent. Just as the... just as on paper, uh, you are the interpreter, now Claude is the interpreter. Claude can read in an instruction and assume what the correct intent is. And the nice thing is is that if Claude assumes the correct intention, then you don't need to overexplain yourself. You don't need to provide any more context. If Claude reads an intention and gets it wrong and you catch that, you have the opportunity to fix that assumption, fix that intent, and build the correct program live. You don't have to exit or reload anything. And what's nice is that you don't have to worry about, uh, type inferencing getting in your way. You don't have to worry about the compiler throwing errors that you maybe don't necessarily care about yet. you can work purely in the abstract even though it is probabilistic and nondeterministic and more expensive, you're able to do the work of exploration, uh, a lot more freely. So finally, once you've gone through this, uh, systematic approach of working out a pseudocode program with your agent, and you can start using that pseudocode program on more examples from your domain, more questions, for instance, then you can take that pseudocode, which is robust enough English, and you can treat that as specifications for a real program. At that point, you can have a new session, try to translate that pseudocode into a coding target of your choice, like Python or Rust. Once you have that code translated to Python or Rust, again, you wanna do the same tests. You wanna run through one, two, possibly a hundred example inputs and then verify them altogether. And you could have another coding agent, uh, walk through and evaluate, did the program execute to match the specifications of the pseudocode. Um, at this point, trying to figure out how you verify you've built the right thing is is and becomes the hardest part of this job. And I would I would add that this was always the hard part of the job. But now instead of getting to this hard part a month into development, you're working on it on day one. If possible, for the purpose of these two writings, uh, it would be helpful if you could just take this exact text that is coming out of the voice transcribe and basically just fill out the outline of, like, what's the what's the setup, what's the approach, um, mark something as an aside if you can, because I know I have a couple of sides in there. Just write this as HTML. We don't need any super fancy formatting. It can be one document. Just make sure that the two posts are separated in different, like, article tags or something so that I can separate them out manually afterwards. And if you can think of any questions or concepts that I maybe should add, those would be helpful to include, um, as well at the end.