>Let the AI write the code, not design the solutions.
I don't think design is necessarily out of reach for AI. As usual, the closer you get to the bleeding edge of what's been done vs. what's possible, the more thought needs to go into a design for it to be considered good. And TBH, even if you only make it to "it works", that's still laudable. There's plenty of profitable companies with terrible designs, technical debt, and broken systems built before AI, and that's why often these arguments fall flat for me.
I like the idea of mostly getting average designs out of AI. I am tired of running into overly complicated solutions to seemingly simple problems. Microservices vs. Monoliths for example. Maybe they thought they saw something that needed that complexity which was credible before, but they have gone and left someone else with their decisions, and left any credibility to the void. They're just playing the game though because there's is/was an incentive to get micro services on your resume since you can pick and choose the things to talk about in the interview.
> The developers who stand out will be the ones who understand the systems.
That has always been true. AI doesn't change it. It just rearranges some elements that come ahead of that understanding. The volume and velocity are challenges but the understanding and judgement is what separates the good and the great.
BTW: "systems" in my world include not just the technology components but also the humans who operate, adjust and manage all the pieces, and the processes that control it all.
It is an interesting diametric inversion: before AI, you had people designing good code from the ground up for the love of the game and you had businesses cutting corner due to budgets.
Now you have AI infilitrating both sectors, and well.
Ok, so it's probably going to be the same problem. With AI, I can now explore more docs and more tests, and push out into the edge cases, all because I've got a local LLM and have no real worry about electricity costs.
Businesses on the other hand, will be addicted to LLMs and will have token budgets and will soon enough go back to just good enough software designs.
I fall somewhere in the middle of the spectrum of developers the author describes. I use AI daily for limited code writing and lots of debugging. I agree with the author that things go off the rails when you stop truly reviewing its output and just click accept to get the thrill of productivity. I don’t think using AI for debugging means you have to do that though, it’s still a choice. As an AI-human team I have had the experience many times now of debugging an issue in a complex system that I simply don’t think I could have done alone or in a reasonable amount of time. I don’t think this is a reflection of my low abilities - it’s because the AI brings to the table skills that I’ll never have like reading through and correlating huge amounts of logs across many runs of the same system on different compute nodes in a cluster. Once it finds a needle in the haystack I can still take the time to understand and reason about what it found though.
In your closing thoughts, you don't mention what is this staying firmly in control? how do you stay firmly in control while reaping the benefit of the model while being more productive?
because if you start a curriculum over what the model wrote then, one can argue, you are better off writing it yourself in the first place.
I think I do agree with the central point but a point of order is that if you tell AI to fix the bug and then tell it to fix the next error you might still be building an important skill: learning how to make the AI get good results.
I realized recently the LLMs are calling bullshit on the moniker of engineer or programmer that I've bestowed on myself over the course of my career. The current LLMs are making it quite easy to seperate software design from implementation. I used to be firmly in the camp that one really needed to roll up their sleves, sit down with an editor and start banging away until the software evolved and coalesced around a solution.
I convinced myself that functional specs and detailed design documents were not needed because they wouldn't be kept in sync with the code. But the LLMs are essentially turning the synthesis of the code from those documents to a compilation step of sorts.
Now I must ponder the question, what portions of the acts of coding, designing and delivering a working product were the portions that bring me joy. I've been attempting to answer this question by making a concerted effort to delegate the coding to the LLMs and reviewing if the code conforms to the designs I've written down. This process is much closer to the historical engineering disciplines but I have to say, its not been easy.
My advice to the the more junior reading this. Experiment with different functional and design spec formats that best serve the LLMs and develop the skill of writing these and then managing the LLMs.
TLDR, the LLMs are giving the term Software Engineering actual meaning.
I don't think design is necessarily out of reach for AI. As usual, the closer you get to the bleeding edge of what's been done vs. what's possible, the more thought needs to go into a design for it to be considered good. And TBH, even if you only make it to "it works", that's still laudable. There's plenty of profitable companies with terrible designs, technical debt, and broken systems built before AI, and that's why often these arguments fall flat for me.
I like the idea of mostly getting average designs out of AI. I am tired of running into overly complicated solutions to seemingly simple problems. Microservices vs. Monoliths for example. Maybe they thought they saw something that needed that complexity which was credible before, but they have gone and left someone else with their decisions, and left any credibility to the void. They're just playing the game though because there's is/was an incentive to get micro services on your resume since you can pick and choose the things to talk about in the interview.
That has always been true. AI doesn't change it. It just rearranges some elements that come ahead of that understanding. The volume and velocity are challenges but the understanding and judgement is what separates the good and the great.
BTW: "systems" in my world include not just the technology components but also the humans who operate, adjust and manage all the pieces, and the processes that control it all.
Now you have AI infilitrating both sectors, and well.
Ok, so it's probably going to be the same problem. With AI, I can now explore more docs and more tests, and push out into the edge cases, all because I've got a local LLM and have no real worry about electricity costs.
Businesses on the other hand, will be addicted to LLMs and will have token budgets and will soon enough go back to just good enough software designs.
because if you start a curriculum over what the model wrote then, one can argue, you are better off writing it yourself in the first place.
I convinced myself that functional specs and detailed design documents were not needed because they wouldn't be kept in sync with the code. But the LLMs are essentially turning the synthesis of the code from those documents to a compilation step of sorts.
Now I must ponder the question, what portions of the acts of coding, designing and delivering a working product were the portions that bring me joy. I've been attempting to answer this question by making a concerted effort to delegate the coding to the LLMs and reviewing if the code conforms to the designs I've written down. This process is much closer to the historical engineering disciplines but I have to say, its not been easy.
My advice to the the more junior reading this. Experiment with different functional and design spec formats that best serve the LLMs and develop the skill of writing these and then managing the LLMs.
TLDR, the LLMs are giving the term Software Engineering actual meaning.
Sadly the bot-gulled will always say "But the next model will be good enough to do that!".