But eventually you get to a point where you've solved variations of the problem hundreds of times before, and it's just hours of time being burnt away writing it again with small adjustments.
It's like getting into making physical things with only a screwdriver and a hammer. Working with your hands on those little projects is fun. Then eventually you level up your skills and realize making massive things is much easier with a power drill and some automated equipment, and gives you time to focus on the design and intricacies of far more complicated projects. Though there are always those times where you just want to spend a weekend fiddling with basics for fun.
The rest is then general design and archiceture, where LLMs really don't help much with. What they are really good for is to get an idea of possible options in spaces were you have little experience or to quickly explain and summarize specific solutions and their pros and cons. But I tried to make it pick a solution based on the constraints and even with many tries and careful descriptions, the results were really bad.
Then I use these validations both in the backend and frontend.
Does F# provide ability to display validation errors with good UX to users using your app? How does it know what user friendly error messages look like?
Okay very simple example prompt that will generate 100+ lines of code.
"Give CRUD example using shadcn, react-hook-form, zod, trpc to create an example of a TODO app"
Which programming language would be able to replace the UI at this level of quality and how the UI looks?
Now this is very basic example, and it's a "todo app" without existing project, but I find it can give me a lot various different 100+ lines of boilerplate, from charts to sql explorers, to much else.
Also most web app developers and especially juniors usually have terrible error, loading, validation handling, and SOTA seems far superior to that, handling those cases everytime with ease and most intuitive error messages.
It will patiently always do "isLoading", checks for error, etc.
What I meant is that this can be solved by a good language. But you would have to use F# (or another language with a feature like type providers) on the frontend.
But even TypeScript can infer types in many cases?
You have to generate those types as source code (like you basically do with the llm).
In F# and other languages, you can generate those types on the fly and use them. It can even go as far as describing errors with sql columns. Then, if there is any mismatch, the project won't compile. And if you add a new field, the code and validation will automatically work.
i think for the most part its meant to help you "get past" all the generic code you usually write in the beginning of a project, generic functions you need in almost all systems, etc.
I'm not saying that I don't like writing code. I'm just saying that doing a lot of it can be mentally exhausting. Sometimes I'd just prefer to ship feature-complete stuff on-time and on-budget, then go back to my kids and wife without feeling like my brain is mush.
If you don't know how to handle a bike, the ebike won't help you in these situations. (You might even get yourself in a tricky spot).
But if you know how to ride, it can be really fun.
Same with code. If you know how to code it can make you much more productive. If you don't know how to code, you get into tricky spots...
If you're biking for the purpose of fitness then this is a downside, but if your goal is to see more and go further, then it's an acceptable tradeoff.
Similar to coding. If you're writing code because you enjoy writing code, it's less fun. If you're writing code to build stuff, AI will help you build faster
In some cases, LLMs act as a stackoverflow replacement for me, like „sort this with bubble sort, by property X“. I’d also ask it to write some test cases around that. I won’t import a bubble sort library just for this, but I also don’t want to spend any more time than necessary, implementing this for the nth time.
That said, I think everyone can relate to wasting an awful lot of time on things that are not "interesting" from the perspective of the project you are working on. For example, I can't count the number of hours I've spent trying to get something specific to work in webpack, and there is no payoff because today the fashionable tool is vite and tomorrow it'll be something else. I still want to know my code inside and out, but writing a deploy script for it should not be something I need to spend time on. If I had a junior dev working for me for pennies a day, I would absolutely delegate that stuff to them.
Crap like that, 100 times a day.
"Walk through this array and pull out every element without an index field and add it to a new array called needsToBeIndexed, send them off to the indexing service, and log any failures to the log file as shown in the function above".
Cursor lets me think closer to the level of architecting software.
Sure having a deep knowledge of my language of choices is fun, and very needed at times, but for the 40% or so of code that is boring work of moving data around, Cursor helps a lot.