Coding is like taking a lump of clay and slowly working it into the thing you want it to become. It is this process, and your intimacy with the medium and the materials you’re shaping, that teaches you about what you’re making – its qualities, tolerances, and limits – even as you make it. You know the least about what you’re making the moment before you actually start making it. That’s when you think you know what you want to make. The process, which is an iterative one, is what leads you towards understanding what you actually want to make, whether you were aware of it or not at the beginning. Design is not merely about solving problems; it’s about discovering what the right problem to solve is and then solving it. Too often we fail not because we didn’t solve a problem well but because we solved the wrong problem.
When you skip the process of creation you trade the thing you could have learned to make for the simulacrum of the thing you thought you wanted to make. Being handed a baked and glazed artefact that approximates what you thought you wanted to make removes the very human element of discovery and learning that’s at the heart of any authentic practice of creation. Where you know everything about the thing you shaped into being from when it was just a lump of clay, you know nothing about the image of the thing you received for your penny from the vending machine.
@aral But so many times you just want a library to do some specific thing, you don’t care a lot about its implementation, so you add it to your project without looking at the code. Maybe you heard it’s good, you have a look at the download count or the commit history to see if it’s actively maintained, but in the end it’s not critical and it could be replaced without much consideration. In the same way AI-generated code is useful in similar cases.
@alfonsomunozpomer Any library worth adding to your project is written by people who have spent extensive time and effort in the problem domain. It has vigorous tests and is actively maintained. None of that is true for AI-generated code which is more akin to adding the first Node module that comes up in a npm search and hoping for the best. In fact, no, you’d likely still get higher quality code that way due to npm’s default algorithm surfacing higher quality libraries.
@aral I’ve had Copilot write tests for me; other times I wrote the tests myself and have had Copilot write the implementation. I always read and review what it writes. Just yesterday it saved me time by rewriting some documentation, and pasted some DDL and ask it to write a few SQL queries. Granted that none of that is “vibe coding”, but I think AI assistants can be used judiciously and they can be helpful.