It generated around 13K lines of Go for me in just over two weeks. I didn't previously speak Go, but its not hard to skimread to get the gist of its approach. I probably wrote about 100 lines, though I added and removed a lot of logging at various times to understand what was actually happening. I got it to write a lot of unit tests, so that coverage testing is very good. But I didn't actually pay a lot of attention to most of those tests on the first pass, because it generally got all the fine detail stuff exactly right on the first pass. So why all the tests? First, if something seems off, I have a place to start a deep dive. Second, it pins down the architecture so that functionality can't creep without me noticing that it is needing to change the unit tests.
Some observations.
- Coding this way is very effective - the new models almost never make fine detail mistakes. But I want to step it through chunks of new functionality at a size that I can at least skim and understand. So that 13K LoC is about 300 PRs. Otherwise I lose track of the big picture, and in this world, the big picture is my task.
- Normally the big design decisions are separated by days of fine detail coding. Using codex means I get to make all those decisions nearly back-to-back. This is both good and bad. The experience is quite intense - mostly I found the fine-detail coding to be "therapeutic", but I don't get that anymore. But not needing to pay attention to the fine detail (at least most of the time), means I think I have a better picture in my head of the overall code structure. We only have so much attention at any time, and if I don't have to hold the details, I can pay attention to the more important things.
- It's very good at writing integration tests quickly, so I write a lot more of them. These I do pay a lot of attention to. Its these tests that tell me if I got the design right, and if not, these are the place I start digging to understand what I need to change.
- Because it takes 10-30m to come back with a response, I try to keep it working on around three tasks at a time. That takes some effort, as it does require come context switching, and effort to give it tasks that won't result in large merge conflicts. If it was faster, I would not bother to set multiple tasks in parallel.
- Codex allows you to ask for multiple solutions. For simpler stuff, I've found asking for one is fine. For slightly more open questions, it's good to ask for multiple solutions, review them and decide which you prefer.
- Just prompting it with "find a bug and suggest a fix" every now and then often shows up real bugs. Mostly they tend to be some form if internal inconsistency, where I'd changed my mind about part of the code, and the something elsewhere needed to be changed to be consistent.
- I learned a lot about Go from it. If I'd been writing myself, my Go would have looked more like C++ which I'm very familiar with. But it wrote more idiomatic Go from the start, and I've learned along the way.
- Any stock algorithm stuff it will one-shot. "Load this set of network links, build a graph from them, run dijkstra over the graph from this node, and tell me the histogram of how many equal-cost shortest paths there are to every other node." That sort of stuff it will one-shot.
- It's much better than me about reasoning about concurrency. Though of course this is also one of Go's strengths.
Now I don't have any experience of how good it would be for maintaining a much larger codebase, but for this sort of scale of utility, I'm very impressed with how effective it has been.
Disclaimer: I work at OpenAI, but on networks, not AI.
On highways, it will be a different situation. There will be plenty of gas and diesel still available, as the remaining business from towns becomes more concentrated. You won't find a gas station without a restaurant attached though. Fast chargers will be common, but ultra-fast ones won't be as common as we'd like, as they will want to keep you just long enough to buy a meal, etc.
I find myself pining for a lot of the "old days" when anything seemed possible and it was open and exciting. You could DO surprisingly, not a lot, but everything still felt possible.
Now everything seems trapped in advertising dominated closed box. Login and live in this limited little space...
The internet is still there, I can still put up a site that isn't covered with ads. I wish I could surf just that internet and so on.
If you package the permeate in a balloon (hopefully a very strong one!) and let the balloon rise to the surface, buoyancy is very relevant.
If you instead pipe it -- to simplify the analysis, let's say it's going straight up a vertical chimney to the surface -- it doesn't seem like buoyancy is relevant.
Take a vertical water-filled pipe sealed at the bottom and open to the air on top. The water N meters from the top of the pipe will be the same pressure as N meters inside the ocean -- even if the pipe's nowhere near an external body of water! A water column self-pressurizes due to the potential gradient of Earth's gravity.
Now put the bottom of the pipe at the bottom of the ocean, you can unseal it and stick a pump on it.
You put 1 kg of water into the pipe N meters below the surface. You take 1 kg of water out at the surface. And repeat in a cycle. Some part of the system has to be doing enough work to lift 1 kg of water N meters per cycle. That work has to come from the pump -- where else could it come from?
I'm skeptical of any notion that water "floats" to the surface of the pipe "for free"!
If you put this in the ocean, you can remove the salt pipe and get the same effect. But if you want continuous fresh water, you need to further increase the pressure difference across the membrane by continuously lowering the height of the fresh-water column by pumping water up and out of the top. That takes energy, but not as much as it would take if we had to raise the pressure on the salt-water side.