Choice of language for software projects has become a very different game now that we have robot friends to do most of our code generation and translation for us.
I have people wondering why I just shipped a project in Rust when I don't like the language and don't hand-code in it myself. I did this because I am adjusted to current reality, and now I'm going to talk about that.
The age of hand-coding is mostly over. It no longer matters as much whether the computer language I use is comfortable to my hand, only whether the robot friend I'm using can generate it at high quality.
It also matters whether I can read the language, because I am going to want to run my eyeball over it to review the code. Rust meets that bar - I find it kind of spiky but basically readable.
Rust is a good deployment language for me to choose when (a) I want solid memory-safety guarantees, and (b) the code is already mature and I don't expect to need to do exploratory programming or serious feature development on it in the future.
In particular, this makes Rust a good place for me to land my old C projects. Which is why in the last couple of months I have migrated two of them to Rust. C to Rust translation by robots is cheap and easy now; I will probably continue to do this. Each time I get a bug report on one of these projects in the future, boing! Rusticated.
You may believe that Rustacea is stuffed with Communists and sexual deviants. You might even be right. I don't have to care whether that's true anymore, because I have a robot friend who is in all relevant ways smarter than they are.
The wider lesson here is that the developer and user community around a language doesn't matter as much as it used to in whether you should get involved with it. Because in the future, we're going to be relying on human community brains less and artificial intelligences more. And that future is now.
Not everything C gets moved to Rust, though. I lifted cvs-fast-export to Golang instead, because I think it's fairly likely that I'm going to have to do significant development work on it is in the future, so the payoff from a language I'm more comfortable reading and modifying by hand goes up.
I'm certainly never going to start a project in C again. What would be the point, other than masochism? I spent 40 years writing C and I'm very good at it, but I will cheerfully leave it and it's buffer overruns and its heap corruption and its undefined behaviors and its portability problems behind.
It helps that my robot friends are good at writing C code that doesn't have those problems, but...why even go there? Why expose yourself to those risks if the robot misses something?
These days I do my exploratory programming in Python or Golang. My robot friends are extremely good at generating code in both those languages. I think they're slightly higher leverage on Golang, possibly due to that language having a smaller surface?
Python used to be my favorite language. I soured on it for a while after the 2-to-3 transition was massively botched, and the GIL meant concurrency in it was a disaster area, and managing library dependencies became an even bigger disaster area. I'm a little happier with Python now that I can declare strict typing and uv has reduced dependency pain somewhat.
But I think if I think I'm going to have to write anything much larger than a glue script in Python, I just shrug and reach for Golang instead. I'm very comfortable in Golang. Over time, I'll probably migrate my older Python projects to Golang because that's cheap and easy now and the performance win can be quite significant.
I don't know what other languages I'm going to be using in the future. I do know that choosing a development language is a much less grave commitment than it used to be, because if it turns out to be not well suited for the job I'm doing, I can simply have my robot friend translated to a better one.
The token cost to build a production feature is now lower than the meeting cost to discuss building that feature.
Let me rephrase.
It is literally cheaper to build the thing and see if it works than to have a 30 minute planning meeting about whether you should build it.
It’s wild when you think about it.
This completely inverts how you should run a software organization. The planning layer becomes the bottleneck because the building layer is essentially free. The cost of code has dropped to essentially 0.
The rational response is to eliminate planning for anything that can be tested empirically. Don’t debate whether a feature will work.
Just build it in 2 hours, measure it with a group of customers, and then decide to kill or keep it.
I saw a startup operating this way and their build velocity is up 20x. Decision quality is up because every decision is informed by a real prototype, not a slide deck and an expensive meeting.
We went from “move fast and break things” to “move fast and build everything.”
The planning industrial complex is dead.
Thank god.
how to build a bootstrapped startup without funding:
1. pick a problem you personally have. if you don't use your own product daily, quit now
2. skip the pitch deck. open your code editor. ship something ugly in a weekend
3. charge money from day 1. free users give you nothing but support tickets
4. use boring tech. PHP, SQLite, vanilla JS. frameworks are a trap that mass waste your time
5. host on cheap VPS ($5-20/mo). not AWS. you don't need kubernetes for 1,000 users
6. do customer support yourself. it's the fastest product feedback loop that exists
7. automate everything you do more than twice. cron jobs > employees.
8. grow on Twitter/X by building in public. your journey IS the marketing
9. keep your burn rate near zero so you never need to raise. ramen profitable > series A
10. say no to investors, cofounders, and "advisors" who want equity for intros
i've been doing this for 10+ years now. no employees, no funding, no board meetings
the entire VC game is designed to make you think you need permission to start
you don't
Get ready everybody. If you've got a language bias, be prepared to lose it. Language choice barely matters anymore. (with some notable and arbitrary exceptions).
With one agent, I used to wait for Claude. With two agents I still waited for Claude, but not as long. With three agents Claude is waiting for me. I am the bottleneck. And the bottleneck is all planning.