Because programming is open-ended symbolic control,
while driving is bounded perceptual control.
That difference matters enormously for AI.
Most confusion comes from comparing surface difficulty instead of control structure.
The one-line answer
Driving is hard because the world is messy.
Programming is hard because the rules are abstract, recursive, and unbounded.
AI is better at the first than the second.
1. Driving lives in a closed feedback loop
Driving is:
- Continuous
- Reactive
- Local in time and space
- Governed by physics
At any moment, the AI needs to answer:
“Given what I see now, what action reduces risk in the next few seconds?”
Mistakes are:
- Immediately observable
- Correctable via feedback (brake, steer, slow down)
Even rare edge cases still live inside the same sensory-action loop.
2. Programming lives in an open-ended search space
Programming is:
- Discrete
- Symbolic
- Long-horizon
- Compositional
A single change can:
- Affect behavior hours later
- Break systems you can’t observe directly
- Introduce silent failures
- Violate implicit contracts
There is no immediate feedback loop that says, “this is wrong.”
Compilation succeeding tells you almost nothing.
3. Programming requires global invariant preservation
A program must simultaneously satisfy:
- Functional correctness
- Performance constraints
- Security properties
- Backward compatibility
- Operational assumptions
- Organizational contracts (“other teams rely on this”)
These constraints:
- Are mostly undocumented
- Often contradictory
- Only visible through failures
Driving doesn’t have this kind of invisible global constraint system.
4. Driving tolerates approximation; programming often doesn’t
In driving:
- “Close enough” steering is fine
- Minor errors self-correct
- Noise averages out
In programming:
- One wrong branch condition
- One missing edge case
- One misunderstood invariant
→ total system failure
Software has cliff-edge correctness.
5. The evaluation signal is weak and delayed
Driving provides:
- Dense reward signals (collision risk, lane deviation)
- Continuous correction
- Natural metrics
Programming provides:
- Sparse rewards (“tests passed”)
- Delayed failure (sometimes weeks later)
- Ambiguous blame
AI systems struggle when the reward signal is:
- Sparse
- Noisy
- Non-local
That’s exactly programming.
6. Programming is meta-work
Driving is doing a task.
Programming is:
- Designing a machine that does tasks
- Encoding future behavior
- Anticipating unknown use cases
- Reasoning about other humans’ assumptions
It’s second-order control.
AI can imitate patterns of code.
But deciding which patterns are valid in this system is architectural
reasoning.
7. Distribution shift is far harsher in software
Roads vary, but:
- Physics stays the same
- Human behavior is statistically stable
Software environments:
- Change APIs
- Change data shapes
- Change scale
- Change ownership
- Change threat models
The “world” the code runs in mutates faster than roads ever will.
The key asymmetry
Self-driving cars solve:
“What action should I take now?”
Programming solves:
“What symbolic structure will remain correct across all future executions I can’t observe?”
That’s a much harder problem.
Why this matters for AI automation
AI excels at:
- Perception
- Pattern completion
- Local optimization
Programming demands:
- Invariant reasoning
- Long-horizon planning
- Counterfactual thinking
- Responsibility for irreversible change
That’s why:
- AI will automate coding tasks
- But not fully automate software creation
And why skilled architects and senior engineers remain the bottleneck.
Bottom line
Programming isn’t harder than driving because it’s more complicated.
It’s harder because:
- The feedback loop is weak
- The state space is unbounded
- The constraints are invisible
- The failures are silent and global
Until AI can reason about invariants under uncertainty, driving will remain the easier problem.

No comments:
Post a Comment