hosh
Despite having this in the training data, I am constantly having to remind my coding agents to reason and design with grammars. On the other hand, once all of that is settled, and the task is no longer open-ended, then they are very good at driving towards completion.
I have also come to the conclusion that, right now, AIs lack imagination. So designing human-AI collaboration that lets human imagination in the loop would be interesting.
If we’re going by water, land, etc as an argument against wasteful activities … Coming from the permaculture world, I can tell you just how wasteful the pre-AI world is. The ideas in the mainstream environmental-friendly practices are themselves very wasteful.
I do that because I believe in the mission and work is assessed by outcome.
The flip side too — I learned well before COVID that the Kanban principle of “make work visible” applies to WFH
Not that I think the broader practice for monitoring remote workers is something I think is a good idea.
When it is not, it has to be reasoned out and does not work well for documentation.
Other things that code and tests alone do not capture well:
- promises (as in Promise Theory) made to other parties. Claude already has PT in its training data.
- Constraints-inducing-properites, as in Roy Fielding / Christopher Alexander. While tests, and property testing can capture properties, there is no formal connection to the constraints that induces fhem. By constraints, I am not talking about business requirements and business value — those are better understood through Promise Theory. I am talking about things like at-least-once delivery or total ordering (from append-only constraint). Claude already has Fielding’s dissertation and Alexander’s works and ideas in its training data.
- grammars, as in pattern panguages (not just patterns) a la Alexander / Fielding are also not captured in code alone. These tell both humans ans AI how to extend a pattern, and how to identify anti-patterns (when they violate a constraint-inducing-property)
- LLMs are trained with many different worldviews and bounded contexts at the same time, and is very capable of translating across it. However, these need to be soelled out, otherwise it would talk in whatever it infers
Specifications written for the exact way components are wited together run into that stale doc problem. Although it takes much more human attention and token burn to describe things in terms of pattern language and promise theory, it becomes easier over time. The actual implementation plan tends to fall out more cleanly when all those other stuff are at least considered. This is where I have been spending most of my time.
I’m not happy with the Actions API. I think Gitlab’s cicd design is much better, and I’m not fighting it all the time when I use it.
People also shared Hypercard apps.
I think it is less about client/server and more about how ideas can be shared. Sometimes, data might be shared.
I remember my first pass reading of Stephenson’s Snow Crash and Diamond Age, I was bedazzled by some of the tech … it was later readings that the comments like “biomass” (the recent echo in AI “meat proxy”), or how the Primer was ultimately a failure sank in later readings.
Or even that, the very same ecosystem congratulates themselves on the typing system but still relies on linters because the language and runtime themselves allow whole categories of dumb ideas to be written?
I also wonder if this works well with Ruby’s duck-typing and monkeypatching.
He made a distinction between intrinsic value and extrinsic value. Plankton is not as complex of a lifeform as whales, yet whales cannot live without plankton. One has more intrinsic value and the other has more extrinsic value. There is an interrelationship that does not have to flatten value for everything and everyone.
LLMs are trained from the language corpus of our collective consciousness. It reflects our collective, all the wonderful, beautiful, and horrific things we can dream of and put into words.
Async runtimes can’t really do preemptive scheduling so those end up using other methods that, while getting low latency, may not improve reliability or reduce variance in latency.
Orchestrating tasks across a number of different services that are not in your control becomes a distributed system where not everything is reliable.
Mesos was designed from ideas with HPC and catered to that. Large hardware capex, which is not elastic. Containers did not make sense in that world when it was architected, and it was retrofited into Mesos's architectural foundation.
Kubernetes was designed for a wide variety of workloads, and designed to be composable, versatile, and extensible. It has a far more decentralized approach, an antithesis to Mesos's Data Center as an OS approach. It isn't that Kubernetes did not try to do too much. It's that they laid a much more flexible foundation.
It turns out, Kubernetes was a better fit for a many more use-cases, even beyond large and medium sized enterprises. Kubernetes works pretty well at the edge and locally as well, and it runs many ML workloads on the other end of scale.
This is not theoretical.
I have run Linux laptops before. After running it for five years, I came to the conclusion that it did not make a good laptop for my use-case. Poor suspend-resume support, poor wireless networking support means I can not just pick and go. (And no one has yet to replicate Apple’s trackpad experience). So yes, I run Apple laptop with MacOS and use my TUI tools, sometimes with Linux running in an VM, sometime remotely to a full headless VM with my full dev suite via mosh because I use cli and TUI for dev.
Your turn. You still have not defined “poor man’s Linux”.
My Siri use has narrowed down to just setting timers. And even then, I still have my phone call people in the middle of the night. Siri is pretty dumb and does not do what I want it. I’d rather be able to customize an assistant to myself.
I am also thinking of automation in my day to day workflow for work.
For example, at a level of scale, Kubernetes start having emergent behavior.
On the other hand, it doesn’t take much to produce a complex system. The Boids simulation is a complex adaptive system in the form of a flock, yet each member of the flock concurrently follows only three basic rules.
And, the Cynefine Framework defines “complexity” a bit differently than the intuitive way it’s often used.
The simple domain is a single dimension. The complicated domain is a system of factors. I think when most people say “complex”, they are really talking about what Cynefine labels as “complicated”.
The Cynefine complex domain is not so easily solved or reduced. It has emergent behaviors. The act of measuring tends to perturb the system. No single solution will ever solve something in the Cynefine complex domain, because the complex system will shift behavior, making solutions that worked before start working against it.
Examples are ecosystems and economies. Software systems tend not to be complicated, not complex, until you start getting into distributed systems.
One of the key insights of Cynefine is understanding that each of the domains has its own way of solving things and that often times, people use solutions and methods from one domain to solve problems characterized by a different domain.
You don’t solve problems in the complicated domain with methods from the simple domain. And you don’t solve problems in the complex domain with methods that work for complicated domains.
There are other properties such as, maintainability, scalability, reliability, resilience, anti-fragility, extensibility, versatility, durability, composability. Not all apply.
Being able to talk about tradeoffs in terms of solution spaces, not just along a single dimension, is one of what I consider the differentiator between a senior and staff+ developer.
https://isolveproblems.substack.com/p/how-microsoft-vaporize...
https://www.kunalganglani.com/blog/microsoft-fedramp-failure...
Not necessarily even code contributions. It could be professional networking. It is a bit different if the person is not a stranger.