I've been working almost exclusively with coding agents since January of this year, and over the past few months I began to feel utterly exhausted by them. They're great, but I'm finding it more and more tedious to write full sentences for every change I want. Not only that, but it seems there's a complexity limit for codebases - beyond a certain point the agent begins confusing itself.
I'd like to go back to writing code, but I don't want to go all the way back to fully manual coding. So I've come up with this interaction paradigm where you:
1. write pseudocode in whatever way makes the most sense to you
2. on save, the editor synchronizes your work to real source code
3. the pseudocode is persisted alongside the generated code, making your prompt effectively a stored record of intent.
It may not work for every use case, but in my initial playthroughs I've found it very enjoyable.Right now it's just a proof of concept - installation instructions are here in the readme: https://github.com/danielvaughn/hz
You can also watch a video of it in action here: https://x.com/danielvaughn/status/2090456808431165715
Cheers!
For businesses it makes sense to abandon programming in favor of delegating to agents that can do more in less time, but for programmers, it is a loss. Either be a programmer and code, or be a delegator and delegate, you aren’t going to make the life of a delegator suck any less by trying to trick yourself into thinking you’re programming.
I’m not a full time dev, but I code quite a bit doing Systems and OPs stuff, but AI has opened up an entirely new world to me and it has expanded my ability to think through a problem. It’s the ultimate rubber ducky. I love to watch the reasoning process while I’m in opencode so I can interrupt if I see it going down a path that doesn’t make sense.
It’s opened another world to me that allows me to implement ideas I’ve had for years without the time to invest in the skills needed to even try the idea.
I think it’s just how you use the tool.
My broader philosophical take is that we, programmers, lived through a golden age where our skills used on our terms were some of the most valuable skills. The golden age is over, our skills aren’t useless, they can still be applied to making things with modern tools, but it is no longer on our terms, no longer programming, no longer the meditative thinking process it once was.
For non-programmers, this is their golden age, the reign of programmer tyranny is over.
But it doesn't require some skills. People have posted showing their 7 year old turning out some game using AI; if your software requires the literacy of the average 7 year old to produce some target, trust me - it doesn't require skills.
Exactly, it is a skill, and it is different from programming, but in the age of cars why train to outrun them on foot? train to drive the car.
Using AI for hours and hours every day has got to leave a new skill set in the human users. It's hard to sit there and steer every minute, just the volume of verbiage and speed of change is amazing. That time and effort spent into AI steering is your new training.
I always believed that programming was solving problems and building things. With AI, you can still solve problems - the better your questions/ prompts the faster you get to your answer. To ask those questions you need to probably have that meditative thinking to grasp the crux of what you’re trying to solve.
On the business side, paying a programmer for their meditative time would be the first line item to cut, when you can bark orders at an idiot savant instead.
The coding really is such a small part of that process.
The current biggest problem is reputation and QA. Ie I see hundreds of same kind of apps when I search for open source stuff on F-Droid, but I can't really say whether it was properly audited with current influx of vibe-coded stuff, whether it contains malware, is it fully vibe-coded or human evaluated the result, etc. which one of those hundreds is actually good?
When we solve the slop recognition problem, we can actually see a positive turn from enshittification, because copying products overnight without spyware became almost trivial.
The old equation was several expensive programmers per project. The new equation is a clown with a token budget plus an expensive rescue operation. In either case, the project will still be late, and it'll cost roughly the same.
"but AI has opened up an entirely new world" - i hear this all the time exactly from "not a full time dev's". This is FOR SURE opened whole new world to people who didn't code and collapsed whole old world for people who loved to code.
Maybe it is just me, but creating simple CRUD application pre-llm required more cognitive ability from me than to "implement" whole CRM system with UI and multiple integrations right now. It is not hard, just tiring in a boring sense, like finding needle in a haystack
I don't think this is true any more; you need to ask the agent to inspect the system, draw up plans with the system's current shape in mind, then after it's done writing the code, ask for it to review the code, and make sure it's as minimal and high quality as possible a couple of times.
Creating programs really doesn't need deep understanding of the fundamentals any more. It needs a shallow understanding, and a willingness to manually test a lot.
It's not that much work.
Whose manager is making these decisions? My managers have always been concerned with how much workload everyone has, delegating tasks at an extremely high level that they barely understand, and handling the messy human interface between their reports and senior leadership so that everyone on their team is kept happy and properly compensated.
I have been in this industry for almost twenty years and I have NEVER had an engineering manager making architecture decisions (that's either my job or the lead engineer's job, depending) or UX interface decisions (that's the realm of Product).
If my LLM agents start taking sick leaves and pager duty rotations then I'll start entertaining this bullshit line about being a manager
just because someone doesn't have the "manager" in their job title they might still do a lot of supervision
You have to ask it to consider the architecture, or it'll cut the shortest path to any solution, but if you ask it, it'll come up with likely a better approach than you would have invented.
Your job is mostly to ask it to think about all the aspects, and then do manual testing on the output. The agent can take care of the rest.
I tend to work like this:
1. Write a very vague spec of what I want
2. Iterate on that with claude until there's no major open questions.
3. Depending on the size either turn that into a requirements file (large things), a design (medium things) or an implementation plan (small things). Implementation plans for large / medium tasks are split into phases.
4. Once all the plans are iterated on and approved I send claude off to implement with subagents, but not commit. I usually find some weird stuff when reviewing the code to fix before commit. Any time I've let claude commit I've ended up with weird stuff.
„Checking the work is not the same as doing the work.“
It‘s different. There are people who love coding but don‘t like checking written code. Or the other way around.
Also there’s difference in mental load: checking a finished program or algorithm can be harder than working through it while producing it.
Even if you just enjoy programming for the sake of programming, you can use it to review your code and then hand verify its findings, or prototype and explore feasibility of something you will in the end fully code yourself. For most people that enjoy programming there are still tasks they don't enjoy, like making a bunch of cross-language bindings for something that doesn't have an automatic way to generate them.
But everything I read about the rise and fall of UML is: it's great to start, but never keeps pace with day to day code changes and becomes almost useless out of the gate as real edges force different paradigms.
Now, if you could wake my AI up in the middle of the night and by morning my UML is is perfectly aligned, or the reverse, my UML realigns the code, that'd probably be a sweet deal.
but complexity is hidden in there either way.
> there is no thinking, no meditation, you’re delegating the thinking to a machine, you’re just barking what you want at it, incessantly, endlessly.
why do you think software teams exist? it was exactly for that purpose for non developers to do what you described but perhaps varying degree of politeness and professionalism.
> For businesses it makes sense to abandon programming in favor of delegating to agents that can do more in less time,
business operators were never in the business of coding. code never had any value to them. code isn't what they interact with.
I think a lot of software engineers confuse intrinsic value of the thing they produce with the interface that ultimately drives them. It was never code.
And now AI agents replace a large portion of what software engineers used to do. I've already seen many shops with 20~30 full stack teams downsize by 80% . You just don't need that many people anymore. A competent engineer, AI budget can absolutely replace large teams because the size of the thing never really mattered beyond what they can intake in terms of natural language demands.
They pretty clearly say they enjoyed the intrinsic value of writing code and do not enjoy the act of piloting AI minions.
That's the way software engineers working on large projects work anyway: you first gather context on the state of the system and read it at a level you can understand. Then you propose a change on the simplified representation, and then holistically update the machine-runnable format ("implementation").
I'd be interested in tools that formalize/automate this process more.
The results were disgusting: the spec would encode all sorts of irrelevant implementation details, and then the new version would reimplement them faithfully, and be 3x more bloated than the original. The exact opposite of what I was going for!
I didn't put much effort into it, maybe it was solvable with prompting (or more likely, more human effort on the spec phase), but it looks like the LLM has the same problem as the human, it can't know what the intention was, and it can't know what's relevant, what's essential and incidental.
But basically, what I needed wasn't a spec but user stories. (And probably multiple prototype outputs to choose from...)
I should definitely give it another crack though...
---
P.S., Spoiler for next ten years: software as biology (esp. crossbreeding, mutation, selection pressure...)
I came to the conclusion that something in the codebase needs a hard boundary, where the team agrees that only human hands touch it. Otherwise the entire repo becomes untrustworthy as far as discovering intent goes.
Difficult! :(
The biggest issue is you end up leaning heavily on the quality of the model. Lower fidelity models tend to make a mess and add tech debt that you must frequently repay with intentional cleanup passes from a higher quality model, or else the rate of useful progress will fall off a cliff. At least that's my experience.
The fact that you don’t think this is particularly difficult makes me questions everything after that statement.
We all know how badly that failed once we started coming up with AI, and could outsource dealing with all that bullshit. Nobody wants this -- they ran screaming as soon as it was viable.
After the last year, I feel like this sentence could replace half my outbound emails.
You might think, well code is perfect. But code is syntactically perfect, because it has to be. Because compilers can handle very little ambiguity. But that doesn't mean it's a perfect representation of your thoughts. A huge part of language design is for the compiler, not for the author.
And I'm not 100% sure of this, but I'm fairly confident that this approach would be far more token efficient than the way we currently use AI for programming.
Helps me think about the problem, like your post mentioned, but I don't have to pay a tax on converting a prototyping language to a different language.
Fully manual coding is the most reliable but extremely slow and costly.
Fully LLM driven coding is extremely fast, but for serious work is too unreliable.
Spec-driven development might be viable, but too often the specs end up being LLM maintained, which defeats the purpose.
You need some hard boundary in the codebase where only human hands touch the files. And you want to enable the velocity that AI allows. So yes, semi-formal programming does seem like a promising solution.
The challenge I see more broadly is we (as engineers now empowered by LLMs) are trying to find the right level of abstraction to operate in. Writing long form sentences and (sometime) reviewing the output feels too far away. But having an LLM work directly with you in an IDE feels too close to “the old way”.
Personally for me the approach here still feels a little too close to the lower level old way, but it’s better than the two approaches above.
Excited to see where you take it!
At what point will you need formal rigid syntax? Or is not having rigid syntax the point? If the latter, how much "informational noise" or ambiguity can you inject before the "DSL compiler" gets confused?
Scaling is another bit. Convertible Psuedocode a great pattern for writing functions, but is it useful for writing modules? If you're writing a paragraph to change behavior of a function, you're underutilizing LLMs. Paragraphs are best for spec'ing modules, and the LLMs already fill in the blanks. Not sure if it would be faster to psuedocode the entire module (although maybe just the interface would be a sweet spot...)
My guess is that if you simply write `use some_fn from $repo/some/path`, the LLM _should_ be smart enough to infer in most cases. But we'll have to see how reliable that is.
I use voice input, when I get tired of typing, it is helping me really well. yes agree that, typing long form of English is very tiresome
Pseudocode -
- My question would be can it scale for all types of logic, and do we endup creating syntax similar to python.
Behaviour -
In the vibe coding , most of the time we also give behavior. I feel Gherkin syntax is best form to describe the behavior.
https://cucumber.io/docs/gherkin/referenceWhy not just put an instruction into your favorite harness’ system prompt: “If I give you pseudo code, spell out my intent, and then write and test it in real code.”
The issue is that with very large or complex codebases, you tend to forget what was AI generated and what was written by a human. And it's also extremely tedious and difficult to read AI generated code. So if you want to _understand_ a complex bit of code, the natural tendency is to ask an agent to summarize it for you. This can work but also has lots of problems.
What you really want is a system that persists both your written intent, and the actual source code. And you want to provide a source map between them, so that you can understand which bits of human pseudocode are responsible for which bits of generated code.
The real value is in persisting your expressed intent.
I think it will be interesting to see how this plays out when it comes time to debug.
At that time, someone else may be reading my pseudo code and implicitly assuming that the code was translated correctly. If the code wasn't translated correctly, wouldn't the human who naturally assumes it was miss the bug every time?
Huzzah would benefit from having a guard identify pseudo code with two potential interpretations and ask the human to clarify so the reliability of the interpretation does not suffer.
I think having to open a web interface is a big entry barrier.
Imagine if those pseudocode files could live in your codebase, and the CLI tool would just “build” the actual code, with sourcemaps. You could edit the code in your favorite editor and run “build” commands in your favorite shell.
(TBH, I haven't looked deeply inside the repo and maybe it's exactly how it works. I just saw that demo and readme tell you to open a http://localhost:5173 as if you can use it only via custom UI.)
I'm not sure how to do syntax highlighting for this pseudocode in any IDE, but you could start with supporting something like Alabaster theme, the whole point of which is to highlight as little as possible.
I say this because I really think that if the setup was simpler lots of people would use it. It's a kind of concept that when you read about it, you think “Wait, how did I not came up with this”. Finally some interesting concept in this endless stream of skills, MCPs, loops etc.
As for why it needs a dedicated UI, there's a few reasons. First, the syntax highlighting as you mentioned is a wickedly difficult problem. I'm super stoked that it even works at all, tbh. Another reason (which I didn't showcase) is that the editor builds source maps from your pseudocode to the real code. So you'll be able to uniquely trace each part of your prompt to the line it generated.
That kind of thing might be able to be implemented in a plugin, but at the moment it's way easier if I just control the entire environment. I'm not opposed to it, though - this could go in lots of different directions and I'm open minded.
https://github.com/spekk-ai/spekk-cli
Rather than writing exhaustive specs, I preserve only the intent and what must be true as discrete assertions. This preserves the leverage you get from LLMs - anything it can reliably infer does not need to be specified. It also (mostly) separates intent from code or architecture decisions, which keeps specs flexible.
Though catching back up on that project- it seems it's evolved pretty substantially, becoming much higher level than the initial pseudocode driven version I remember
I'm not totally convinced this is a useful way to express something like "Change the data flow so that we bulk query from the DB upfront and pass it down to all callsites"
For example, with frontend, I can get an LLM to design half a page 80% to my satisfaction with two paragraphs worth of a prompt. "It should look like so, and have a text box here, and room for a demo there".
With ML training or backend or user-facing code, I might instead spend a paragraph thinking out my design intentions for a single function or even a single line, more for myself than the LLM. A harness generates a plan based on that paragraph, which one can then comment on and review the pseudocode it provided, ensuring it aligns with expectations.
Lastly have the LLM output some sort of documentation and "here's what I did" after each change. Your final step is to handwrite (paraphrasing what it gave) into any docs or commit messages, and ensure your commits are small enough to keep this maintainable. Paraphrasing the LLM, rather than the LLM paraphrasing you, is helpful to ensure the commit messages make sense to you three months from now.
Another interesting thought about this: it’s almost like a quick and dirty transpiler for your own programming language design ideas. I’ve toyed with writing my own ”perfect language” and this seems like a quick and dirty way to test out the ergonomics of various syntaxes and concepts via pseudocode.
I love that you are trying something and you shared it, I relate very much to some parts of the post minus the fatigue part maybe I am it's because I am a very chatty person in general so prompting is not a problem who knows!
I had my own attempts to improve working with AI but to my fault I rarely commit to a project no matter if I wrote it or AI wrote it for me!
I tried this over a year ago https://github.com/ramigb/promachos (before I found out about spec kit and similar solutions) Then I tried this https://github.com/ramigb/groundcheck recently which is to actually help me in the review process specially if there is intent documentation like ADRs or similar.
Your post inspired me to try from a different angle. Thank you.
My project is a rich text editor SDK, with a considerable amount of code. AI tools are indeed very useful for writing glue code and generating boilerplate code. However, when faced with complex cross-browser compatibility issues (such as parsing mso-* CSS pasted from Word), AI is basically useless; I still have to understand the problem domain and write the code manually.
The idea of converting pseudocode to source code is interesting. The key is whether the pseudocode can clearly express the intent—if the intent itself is complex, the pseudocode may not be much shorter than the actual code.
It makes sense if you want to sell a dream that now everyone can become developer and it is cool that non-tech people can now generate todo apps tailored for they own use. But when working on complex project, that is used by real paying customers you need to be responsible for the code you are producing no matter if it was written by AI or by hand.
Thats why i think we would be better with deep integration with IDEs instead of having separate window I need to alt-tab to to do something. I really liked first approaches (IIRC first release of Copilot worked like that) where you put comment inside code describing what function you need and AI would just fill it in. That way developer is still in charge of what is happening. For bigger tasks create new file and describe what should be happening and let AI go wild with it, splitting work into more files as needed.
Currently Jetbrains kinda supports that flow but it is clear that it is not their main focus, so I find it kinda lacking.
There are good reasons for doing this: I might want to write something in Ruby (the way I think about problems might fit that language best), but might want the artefact I check in to be Python (my colleagues might prefer it), and my build pipeline might want to transpile it into C, and then throw it through a compiler with a pile of optimisations to make it all scream at 100x the performance my original code could run in, in Ruby.
Hell, why not make the Ruby interpreter just a call out to an LLM to get it turned into byte code?
Of course this is all starting to sound a little absurd because it is. We're reinventing a domain that has had decades of research into it using an expensive, slow, stochastic black box.
Where there's some utility is in a language where I can be a little vague, but that doesn't have all the semantic confusion of natural language. But without defining that as a formal grammar (and therefore implementable in LLVM, JVM, whatever), you may end up with the worst of both Worlds.
Personally, I’d feel much more confident to use a vibe-coded library where I can read the human-written intentions than one where I just see a lot of AI-written code. Maybe it feels more like there is still a programmer/engineer/architect behind it who knows what they’re doing and what exactly they want to achieve.
To me, vibe-coding always feels a bit like this weird transition into something else that is more precise and reliable. It feels backwards to give up on our achievements in formal language for the comfortable vagueness of everyday speech.
Lately I've been dreaming about a way of using LLMs that never (or in majority of the cases) results in chatting with an agent or checking its traces. Instead, you provide prompts in natural language, e.g. refactor these modules in this way ..., and the result is shown as a visual proposal (some kind of diff on a graph). Then you can select a region and provide another prompt like "this goes there instead". The raw prompt + visual markup is compiled to LLM insructions which results in another set of visual changes.
These changes can all be virtual (i.e. "plan mode"), until you are happy with them, at which point you press a button, which compiles the change to a fresh prompt which runs the implementation. And so on.
I.e. forget the idea that you have a "copilot" whose output tokens represent reasoning you can discuss, instead you have a black box which compiles your instructions to a visual markup on which you can iterate. Zoom into the nitty-gritty as required, and so on.
It always seemed to require extra effort to "program myself", maybe because it requires questioning whether I'm doing it the right way and what would be some alternative ways of doing it. It's almost like "out-of-box thinking".
Whereas basic coding is often as easy as writing this note here, just write what comes to my mind. Coding tasks are often trivial, but they must be done. But they don't really burden our mind too much, not too often.
But with AI, it's all about "programming the programmer".
And that requires more thinking, asking more questions like is this really what we need to accomplish, or would some alternative way be better? What alternative way?
Asking questions like that was always part of the work but with AI it seems to be the only type of work. And it is more difficult, more exhausting, than basic coding.
- a whole generation of you guys are going to regret this decision very seriously 5 years down the line
- mark my words
- just like how studies are being published currently on how meta algorithms are designed to have you hooked and causes brainfart, 5 yrs down the line , studies ll come out showing how LLMs have caused degradation in critical thinking and coding for programmers
- A whole batch of people ll be forced to go back to the basics is how this ll end
- the argument these guys come up with all the time is "I dont need to"
- Big assumption there buddy, big assumption. Lets play both cases shall we.
- Case 1: LLMs infinitely improve and nobody has to code anymore. Yea well, writing a paragraph spec isnt that hard for me bro, I already do it for every project while not using an LLM
- Case 2: LLMS go bust completely for whatever reason. We have a whole generation of mass programmers and 99% of them cant add 2 numbers in c++. Guess what? I am now one of the most sought after programmers in the entire world and part of an absolute minority
Although I like your direction, i would hate to see this become yet another programming language.
Also if your pseudocode has a definitive structure, why not write an interpreter or compiler ? And not waste AI cost? Like how traditional BDD stack works gherkin and cucumber and the likes?
Direction, I love. Approach, we can always change. Peace
What about multi-file / larger changes? How would you express files being connected, imports, and exports? Or are you thinking the hz files are disposable per change?
I'll be looking into multi-file stuff soon - it's an interesting can of worms to think through.
Also it creates a uniform level of granularity. The great thing about AI coding is that you can go deep and detailed in hard sections and just plain ignore the simple stuff.
Sometimes you might also want examples and then BDD testing software (like Yadda) might make sense?
You install a fancy chrome extension or custom browser.
You go through the app on this browser. You notice something you want to change. You can then submit a prompt via this extension saying the change you want.
The trick is, the chrome extension has been following your movements through the app. This way the chrome extension can generate a lot of data the AI can use for a good prompt. I.e. The extension can get a screenshot of where you are in the app and all the pages you went through to get there. The extension can get the console logs and traces and stuff.
So with all this, the AI system gets all the material needed for a good prompt to make a good change.
In an ideal world, the AI system could then save all these details and when the change is made, guide you through the UX again. And you can check if the change was made as you wanted.
So kinda like AI flavored manual UX testing where you click around and record your findings.
Let's look at your fizzbuzz example. Unfortunately, if you wanted to have the agent implement fizzbuzz for you, it looks like, in your example, you would have to already know how to effectively write fizzbuzz. Specifically, you call out the use of the modulo.
In your prompt, for the traditional agentic development path, you already declared the intent. There is some imperative language in there, sure, "Create a function that ...", but also there is the declarative state, that doesn't require knowledge of specific programming syntax or semantics.
What I've relied on is a more formal location/syntax for acceptance criteria are in code. These are then used to generate tests, and implementations. It isn't perfect, and more investment is needed, but it starts getting at the root of the problem.
What if the "pseudocode" were real code, but in a higher level language than we have today that can actually be compiled deterministically?
None of the existing ones (that I've used at least) are good editors designed to work with agents.
https://en.wikipedia.org/wiki/Program_Design_Language
https://codecourse.sourceforge.net/materials/Code-Complete-A...
I had this issue before AI too. Staring at code I wrote, wondering what the hell I was thinking...
I'd often start a project or file with a big pseudocode comment block at the top. But I'd rarely keep it! After reading your post, I'm thinking that may have been a mistake...
Very cool project.
I guess you still need the chat to discuss with the AI? For example, ask it to compare solution A and B, or to explain how to do X. A bit like you can use plan mode today. Then given the result, you can write the hz file (or even have an agent write it).
But I wonder how it works on a more complicated project than fizzbuzz. Can I suggest you use Huzzah to develop itself, and then share the hz file(s)? That will show both how it works on a more complicated project, and something that is developing over time.
I agree, but I just log all user messages in a chat_log.md and review them regularly with an agent to detect deviation from user intent.
I find it bonkers most coding harnesses simply discard one of the most valuable streams of information, those user messages can also identify harness weaknesses and project issues by reflection.
Just a few days ago someone was talking about a machine - human patois.
This (your project) sits somewhere between Lean and BDD cucumber syntax.
At the same time Claude spits out phrases like “a container paying the price of -42px”.
Recently I was listening to a lecture about metaphor in poetry, the misconception that poems are riddles whereas we use metaphors all the time in our language because they convey the meaning more precisely.
Also love the BDD reference - this is in fact an evolution of an earlier approach where I was trying to combine DDD event storming with Gherkin Rules. Very keen observation.
EDIT: same on Firefox on my Mac (macOS Ventura).
edit: fixed
With scale problems arise.
It's cool that with a tool like this you don't NEED to get all aspects of your code finalized and ready. It's possible to be vague when you want to and specific when you need to.
I'm not sure if that itself would work well in practice, but the project is still quite cool nonetheless.
the hardest part of programming is the logic errors, as a result i tried a few times to use a formal verifier to write the pseudo code and have the llm translate it into the language i wanted. the problem with this however is that llms do not necessarily know the best techniques for speed and like to overcomplicate the problem/solution.
how does this language help with prevention of overcomplication?
what you did is spec-driven development, instead of use-cases and requirements you have pseudo-code.
spec-driven did not work in my case, likely yours suffer the same "issue of walls of text no one wants to read".
This project maintains a mapping of each line of pseudocode to every line of real code it generates. It's also terse, because it's code, and in my initial tests I've found it dramatically easier to read than a big list of longform specs.
Then probably do some fuzzing or SAT solving to formally enumerate the known-good cases and possible edge case exceptions. That was before I knew about ranged variables, category theory, etc.
Unfortunately the real world got in the way, and I spent a quarter century treading water to survive, which was exacerbated by CPTSD amplifying ADHD and OCD symptoms many fold before I knew what they were. So now any great ideas I might have had are rendered obsolete because an LLM can synthesize them in a matter of minutes. It may be time to let go and hand things over to the next generation.
-
I think maybe the goal now is to keep building on these ideas until we achieve creating digital assistants that can manage all of the aspects of our lives that interfere with our goals. That's a controversial statement because the political right doesn't distinguish between setbacks and goals (it's all discipline) while the political left embraces a kind of learned helplessness as controlled opposition. Change comes glacially or not at all. In other words, help isn't coming from above - we have to pick ourselves up by our bootstraps like we always do.
A few things that AI might help solve by rendering the conditions of their existence obsolete:
- Money
- Hunger
- Illness
- Exploitation
- Pollution
The list goes on. Unless we're actively working to solve these things, then whatever we come up with is frankly a distraction. I consider just about all tech innovation since the 1990s to be a waste of time for that reason. It all just made some guy rich. Yawn.
Huzzah however, is great. I hope it leads to something wonderful.
For a while people were talking about the necessity of UBI in response to the potential elimination of jobs. I tend to take your view (I think it's your view) that it's more worthwhile to automate our basic necessities. Food, water, shelter - use technology to drive those costs down to zero or near zero so that an economically risky solution like UBI doesn't even need to be proposed.
i have Reviewer bot, Developer bot and DevOps bot that listen to any @mention and each of them is just wrapper around pi harness with capability to read/write through Gitlab issues, MR and comments.
So i can choose whenever i want to vibe code the whole feature or when i want to co-develop or review the code line by line through Gitlab issues or MR.
It feels more natural to me to navigate through my past 'prompt' just like another Gitlab comment.
It has two problems though: if my approach has flaws the agent would implement it as-is even if could instead suggest an improvement. Also, an advantage of agents in huge codebases is that they can find where to make the change and draft it, which wouldn't work with this system.
I think you could go meta here and ask the agent in English to modify your pseudocode for larger changes.
Am i missing anything?
Nice work.
Every engineer I have ever mentored got a lesson on how to write a good commit message that included this. This is exactly that.
Further Huzzah from skimming it over seems to be re-inventing documenting your code.
Together I can only surmise that the author is new out of school or has simply not yet worked on a team with good coding practices.
But before AI arrived on the scene, source code was a single artifact that directly expressed the intended behavior of a piece of software as it currently exists. After AI, the artifact is still there, but it's no longer the true record of human intent.
What the author is proposing has a long history of similar ideas: Literate Programming, UML modeling, DSL crazes, and now to LLM-generated abstractions. AI isn't special. They always fail in the same ways as basic "commenting your code". One can even argue that unit tests are a close cousin to this same problem. Taken one step further how is Huzzah better than just using property tests?
> Welcome to my Github! I'm a web engineer who's been building front-ends since 2009. Most of my work is either closed source or behind paywalls, but here is where I tinker on side projects in my spare time.
No need to dismiss the person - you can just say you don't like the approach
I think you should work on your differentiation. The session management stuff is the greater concern, in my opinion; pseudo code is not a novelty.
You can already retrieve the session associated with a given line of code.
What I'm after is a condensed distillation of human intent using semi-formal symbolic language, which should be vastly easier to read and understand for engineers and teams.
Coding Encoding Think about the terms
As in micromanagement.
I could also use a Cucumber (or your favorite BDD) approach, writing out user stories and then have Claude build the code that satisfies them
But this primarily works for smaller self-contained pieces. If you're working on a larger code base with knock-on effects, you can't express it in pseudocode -- unless you maintain a whole "pseudocode twin" of your codebase, which seems like a lot of extra work.
You can get close, but things will be missed. So you'll edit, or provide more info to the AI outside your pseudocode, and maybe get to what you want. But another change will undo the fix you made, because whatever hidden AI context was needed for that first fix is gone now.
The pseudocode isn't a bad idea in terms of trying to visualize a complex idea. But just like writing code, humans suck at truly groking all the implications of their complex ideas, and make mistakes. We need formal methods to double-check those complex ideas to avoid the mistakes. Some kind of formal representation of your idea, in something like a cyclical graph, could have checks on it, to make editing it less error-prone. But you need to get the human out of the loop, or you'll be trapped in the same world we've always been in.
A good example of a finite task is like something we're working on at my company. We're building a multi-agent orchestration engine for large scale offensive network ops. Think like an Active Directory attack. This kind of thing is extremely complex, and involves lots of ambiguity and cross-referencing. You couldn't deterministically program a machine to do this attack, but you could definitely coordinate a bunch of agents to work together to do it. And you don't need a human in the loop outside of some lightweight scoping and gating procedures.
My concern, however, is that all of these options might ultimately be slower than just prompting.
I mean, at this point, another option would be to just go back to actually writing the code ourselves, like we did back then in 2024 ??
My solution? I'm waiting for someone to make it, since I'm lazy... until then that's my secret.
Also, it seems one could get Claude to do this in 2 mins without making a whole IDE specifically for it?
Now days I use the LLM wiki idea to build a detailed spec up front before getting the agent to build the system. Keeps a record of the intent and you can get the agent to keep this updated with every change request.
I wrote this but as a compiler. It was ~2 years ago and local models have gotten WAY better; I was having too many issues with adherence (syntax errors, etc) and dropped it.
The compiler comes with a model embedded or can use an external model. It uses Cosmopolitan Libc and can zip things together into one binary. I will take some time to dust it off and share it.
But the idea was basically, you have your natural language source files or a one-shot prompt and it "compiles" them into a single, shareable fat binary that works across all popular platforms and architectures.
It was pretty fun to use with remote frontier models but the local model story simply wasn't good enough at the time for me to feel proud releasing it. I think that's probably changed now and passable results can be had even with small modern 7B/14B models.
Keep your toolchain as simple as possible.
A really nice rig, which you can use in an existing repo, is to have ollama and aider simply log everything that happens in the session, through tee, into a log directory which you do - indeed - check into the repo.
> almost exclusively with coding agents
Do your own commits too (don't just let the ML do them), and in those commits, keep your prompts.
Learn to use your AI skills with succinct and calculated, forthright projection.
Which is to say, it is your own personal set of words now which define your control over your computer.
The words are tools. But what are your methods?
> .. tedious to write full sentences for every change I want .. interaction paradigm ..
Your own command of your speaking/thinking language can be extended as far and as wide, now, as you can possibly imagine. In fact, you must control AI/ML with imagination now, in multiple ways.
One of those ways is to iterate on expansion of your own ontology. There has to be an input from the AI before an adequate human output can send the AI directly at the heart of it. This improvement loop is on you. Get smarter with the loop.
> pseudo-code -> sync -> record of intent
[1] "Idea -> Description -> Result -> Build -> [human] (use)"
Well, I get this by checking all my aider logs into a submodule of my main source tree. All my prompts, all the happy little mistakes and bright, shiny things, commit by commit. Sure, the logs grow and grow, but you know what .. I learn a hell of a lot by reading them.
Time-stamped. So, nice graphs if I wanted them, one of these days we'll do it, me and the AI.
The commit point for where I cut the exhaustion between me and the immense power of the AI/ML tooling, is when there is a new build, and I have tested it, personally.
I get exhausted if there is no delivery factor, to me personally, from whatever method I'm wrangling the tools with. Like if I really push too hard on the prompt, things get gnarly.
But, I've been here before over the decades, there are methods.
Even in the AI/ML age .. tooling and methodology requires a discipline - what is true now more than ever is that if a method fails, the usual approach of building another tool is not necessarily the best approach.
Methods can be sharpened just like tools. But every tool carries a cognitive load.
The methods are there to make that load useful. Are you a user?
So then just do a build and run it. See if is worth it.
Goto [1].