I don't mean to be mean, but the problem is that AI has exposed how much programming is designed around human usability. C/Rust/Go wrap assembly. TypeScript wraps JS. Java/Python wrap C.
Do you need all these layers of abstraction when the human is no longer looking at the code?
Best analogy is forgetting how to use a slide rule following the advent of calculators. The former was made to make hand-calculation of logarithms easy. The latter does these calculations directly (obviating the need for a slide rule at all).
I think what humans still need to learn are the theory and domain fundamentals for their industry. If that industry is computer science, that means algorithms, calculus, linear algebra, etc. I think the future of CS is then (a) theoretical human-drive design and (b) prompt engineering to implement and verify that design.
It would also be helpful to have domain knowledge outside of CS as having the skills to build something is nearly commoditized (outside of the above fundamentals).
There was a post a few days ago about why control-flow-macros aren't that bad, and their thesis was basically "because AI can understand code well now", though I feel like that sort of missed a bigger point of "if AI can understand the code easily, what's the point of macros at all?"
Even hygenic macros still end up being there primarily to increase legibility and ergonomics. Good ones, like core.async, make it easy to understand how threads and the like are glued together, but ultimately it's just syntax-sugar on steroids.
If the goal is not for humans to read the code at all, I'm not entirely sure of the point of syntax macros; the LLM could just generate the expanded code.
> C/Rust/Go wrap assembly. TypeScript wraps JS. Java/Python wrap C.
LLMs rely on the semantic richness of these languages in order to capture the the gradient of human intent from their training.