Frontend dev for 13+ years here. In my experience it’s pretty bad at anything but basic frontend stuff. I’ve tried all the models, editors, Claude code etc.
It’s constantly wrong about the simplest things. Just now it was hallucinating about CSS grid properties.
I’m convinced that how good AI seems is inversely correlated to someone’s knowledge in that domain, as you also mentioned.
Still super useful in my day to day but I have to hand hold and correct it constantly.
I am very bad at frontend and I know frontend peeps keep saying claude/llms are bad at it, but now, for the first time in my 40 year career, I deliver frontend that are looking better and functioning better than whatever I see in hip products people 'designed with love in blah'. And our clients agree. If the css is correct or not, I don't know as I never really found the energy to learn it and now I don't need to and can focus on the business logic. The endresults look and work phenomenal: not sure why I would care if the css is the best. Especially nice when I have been using something for a long time and some things I always found lacking: now I add them in in minutes: auto completion here, move creation inline there, add drag and drop: ah but on mobile make it like that. Everything just works and in hours vs days or weeks it was before.
I agree to a point. But I also would like to point out how alarming your take is.
I mean you can easily compare this to trades and construction. Would you want a house that's built in a week by cheap foreign workers that don't know what they're doing? The end result looks great on the outside, and you can always let some other cheap worker fix some issues you're having! The electricity works! Until it doesn't and a fire breaks out.
I get it - the hype is based around the quick gains you can absolutely have. The gains are insane, I have been able to be more productive at boilerplate and repetitive tasks too. But just building software isn't hard. Building software that lasts, building software that is rock solid, efficient and maintainable, that's hard!
It's sickening to me how quickly people want to throw that in the garbage. All because it saves a few $ in development time, quality is suddenly a metric that is completely ignored, rather than weighed in.
Nah, I specifically said HTML/CSS; I don't think crap CSS (if it works and is fast) will make the world a worse place. I don't include any logic/code into this take, just design/layout/ux. And in my workplace that's also the markup stuff that gets rewritten the most, so it's throw-away anyway compared to the backend stuff (we have code running that's well over 20 years old on the backend; frontend is 1-3 years).
I agree with you we should have quality standard, but I also think it's 100% inevitable that this will all go out the window, in most companies and if that happens, our asses will be bitten.
Design/layout/ux have value (and I don't think you're saying they don't!) - when it's done by somebody who knows what they're doing, the result is perceivably better than when it's done by somebody like me who learned HTML for her myspace blog. Stuff like accessibility, "responsive design," theming, and stuff I probably haven't even heard of, all make websites easier and more intuitive to use.
As a silly example, an LLM will happily add all sorts of animated gifs to the screen for me, even if it makes the page take three times as long to load and more difficult to use.
It's a shame to lose well-crafted experiences in favor of the lowest-common-denominator that LLMs put out, just because they're cheaper.
I guess the main takeaway is that you don’t care about the quality of the generated code. The end result is all that matters.
If I ask it to “add drag & drop”, I already know in my mind what the correct code should look like, because I’ve implemented it many times in the past. LLMs just never deliver the -code- that I want. The end result might look ok and the drag & drop will work, but the code will be atrocious and on first glance I can pick out 10-20 mistakes that I’ll have to ask it to fix. And even if I ask for a fix, I’ll never get the same code quality as hand written code. And how can I push this kind of sub-par code to an employer’s repo when I know that I can (and should) write better quality code myself. This is what I’m being paid for right?
No, you’re being paid to deliver the product to the _company’s_ chosen standards, not yours. And in my experience, fast and cheap and cheerful is often exactly what they want. They’ll have changed their minds next week and want it all ripped out for something else anyway.
Exactly. _So much_ software dev is "throwaway" in my experience. Of course some isn't. Landing pages, A/B tests, even a lot of feature work is very speculative and gets put in the trash.
I do wonder if this is why there is such a gulf in LLM experience. If you're doing hardcore huge scale distributed systems then I can (maybe?) see why you'd think it is useless. However, that is very niche imo and most software dev work is some level (unfortunately) of virtually throwaway code. Of course, not all is - of all the ideas and experiments, some percentage is hopefully very successful and can be polished.
Indeed. And you get some engineers who only want to code perfect bespoke code all the time and sometimes that’s useful and sometimes it’s not. It depends on the requirements of the client, just as it would in any other trade. We need to be flexible to both the clients time and money budget, and also make code that suits the criticality of the task at hand. If you can’t lower your standards to fit a use case, I think it’s actually a bad thing.
Joined a team that maintains a pretty popular TS library recently. The repo was using Biome. It was unanimously disliked by the team. Linting was broken for most people and in CI. I replaced it with Prettier + ESLint, everyone was into it, and we realized we had a bunch of issues that weren't getting reported due to it not working in CI.
I didn't set up Biome and can't tell you why it wasn't working, but people on the team couldn't get the VSCode extension to show lint errors in their editor (Cursor, primarily). I misspoke about there being a CI issue. It was more like disagreeing with their defaults, e.g. `useHookAtTopLevel` and `noUnusedVars` are off by default.
`useHookAtTopLevel` is especially confusing since other React hook rules are on, and `eslint-plugin-react-hooks` defaults its analogue to "error".
But yeah, no linting in the editor was kinda bonkers.
> To be eligible for membership in the Benevolent and Protective Order of Elks, you must be a citizen of the United States over the age of 21 who believes in God (whatever that means to you).
Here's a helpful atheistic definition of "God" I picked up somewhere: The force that enables good things to happen to groups of people who act upon a belief that they should do good to another.
I.e. if you say "thank God", you're really saying you're thankful that you and the people around you are making decisions that benefit everyone.
(Not an invitation for theistic discussion, just trying to be helpful to a fellow atheist)
IMO, if your star developers aren’t writing readable, maintainable code (at least most of the time, some things are inherently complex), I don’t think it’s right to call them star developers.
FWIW, the problem you’re talking about isn’t one I’ve encountered very often at most of the companies I’ve worked at, and I’ve worked at small startups and large enterprises. I genuinely wonder why that is.
I have, I wrote a GPU implementation of marching cubes algorithm in GLSL that shows realtime topology viewer of electron density grids by slicing through an electron voxel grid represented as a 3D texture on the GPU.
I dont know GLSL, (but I am very experienced with C/C++/Python), and I wrote this by using cursor and muddling through it, all in one afternoon.
Could I have learnt GLSL and coded it myself, maybe, maybe not. We are at the point now that I was able to produce something commercially useful to my platform in a language I didn't know, in a single afternoon, GLSL is pretty similar to C, but even still, theres a certain threshold of effort and time where "could I have done it with enough time" transforms into "I couldn't have done it", and we are close to that.
My issue with this line of argument is that people always want to compare "do it with Copilot" to "do it completely by scratch" when they should be comparing it to "do it by ignorantly copy-pasting from one of the many similar projects on GitHub then tweaking a few things." There are quite a few open-source GLSL implementations of marching squares, maybe copy-pasting would have been faster and higher-quality.
For me, categorically not. I had multiple 2 way dialogs about implementation details and highly
specific questions during the implementation that we created together. It wasn't just saying "Implement X" and then "There's a bug in Y", it's things like "Explain this data structure and why you are allocating memory this way". Or "The algorithm is mirrored incorrectly on the Y axis, fix the coordinate system and give me an option to change it" --- The latter example took Cursor like 3 seconds to complete perfectly. I'm not exaggerating, it was 3 seconds. It had implemented the solution faster than I could have found the problem by scrolling the mouse wheel and reading the code with my eyes (Let alone THEN fixing it). Imagine a whole afternoon of this high momentum. Is it perfect? No. Is it net-positive? Yes, a LOT
Going away and finding implementations, and then trying to integrate them (they undoubtably use different data structures, functions etc) would have been MUCH slower, MUCH higher effort, and I would have given up much earlier. Having some{one,thing} there I can just ask a highly specific question and get an equally specific answer with examples RIGHT IN THE IDE, kept the momentum up.
There's absolutly no way finding other examples on github would have been faster or higher quality. This is no longer a matter of taste, its the practical difference between complete and incomplete.
I mean this went from "I dont know GLSL at all" to "Here is a complete implementation of a realtime electron density grid viewer running in WebGL in the browser" in an afternoon
> There's absolutely no way finding other examples on github would have been faster or higher quality.
How do we ascertain its quality? The problem is this absolute trust in your reply. How do you know what it tried to "explain" was the right explanation?
At least when you search and find examples you do evaluate potentially multiple solutions.
I absolutly dont trust it blindly at all. Where did you get that from?
I kept asking it questions and stepping through the debugger until I understood its implementation.
How do I know it's implementation is correct? Because I can see the results, I can see the data sturctures in memory, I can step though it and understand it - I know what electron densities around atoms look like, and I kept iterating on the code after it made mistakes, helping it and fixing it together, until it was finished. I just kept asking questions and interating so I could learn what I needed to of GLSL so that I could get it "un-stuck" when it hit a dead end or got caught in a loop.
I dont expect it to come up with the correct implementation straight away, what I'm saying is the enormous productivity increase kept momentum and enthusiasm up so much, I was able to implement something new and novel, something that would otherwise not have been created.
> I absolutely don't trust it blindly at all. Where did you get that from?
Not consulting a 2nd source or just looking at the results, as in..
> Because I can see the results
Which, yes, it's correct in that sense but as per the other comments you can copy and example and get that same result. In development a lot of things are correct but have different implications, e.g. bubble sort vs quick sort.
> I'm saying is the enormous productivity increase
Assuming it has led you on the right / correct path. It's often times led me on to the wrong path instead.
> Not consulting a 2nd source or just looking at the results, as in..
I do continuously check multiple sources : reality, our material simulations and predictions are lab verified, and spectographic analysis shows our predictions are correct - I have large experimentally generated datasets that our predictions and code are verified against.
We even have a system called "reality server" who's job is experimental parity, it runs continuously checking predictions (which are all totally produced by our code - code we are writing with the help of Cursor) against experiments.
> Which, yes, it's correct in that sense but as per the other comments you can copy and example and get that same result. In development a lot of things are correct but have different implications, e.g. bubble sort vs quick sort.
All of us approximate to "good enough". This is good enough. Results, Big-O, Integration ease, good enough is multivariate, but good enough is good enough, I'm a startup, and I'm not searching for divine correctness, good enough on the multiple variables is good enough.
> Assuming it has led you on the right / correct path. It's often times led me on to the wrong path instead.
It led me down the wrong path many times, that just means you are not yet finished. Then with more work, we found the correct solution together.
Even in our materials simulations we fail 100 times and win once, the win still enormously outweighs the fails.
Nobody is claiming it's perfect, nobody is claiming it doesn't get stuff wrong, nobody is claiming it doesn't lead you down the wrong path. It's about keeping experimental momentum up, because discovery is a factor or productivity - and my discovery is 5x because my productivity is 10x.
I was doing something to graph some numbers against each other using pandas and whatnot recently.
I don't use this setup much or do this kind of work much. For the first part I stumbled through, doing it myself and referring to the docs.
Then I installed Cursor to give it a go. I did a few things in less than five minutes that would have taken me 30 minutes or more to read the docs, have a go, read stack overflow and go back and forth and code.
There is a question as to whether I would have understood things more and learnt things more deeply had I done it the old way.
But still. It's impressive. Coupled with good software engineering practice it's going to make people able to produce even more.
The problem I have is when I ask it to do something that does not have 1 million examples on github from tutorials it will just output something completely non-functional.
I find it good for things that are completely derivative. Like, "implement a function that converts this type into another type"
I still identify with the “frontend developer” title, even though my skill set has grown beyond it. Best practices are framework dependent, the tooling one should choose is dependent on their problem space, and we do appreciate simplicity.
No one is forcing people to use React, Svelte, Vue, etc. The sentiment of wishing for a simpler time has never felt right to me, cause no one is policing what people use. If you feel like people are forcing you into frameworks, I’m sorry, and I feel like I have a piece of advice.
If you truly believe a framework isn’t worth it, tell your team why. You might be right, and you might be wrong.
I’ve worked at large and small companies; discussions about what technologies to use have always been welcome. I’ve advocated for and won when making a case for “simpler solutions,” when it makes sense.
All that said if you think using a framework framework === complexity for the sake of complexity, you’re wrong. OP I’m not saying you think this, but I have to imagine that it’s the sentiment of at least part of the folks who made this the top comment.
It’s constantly wrong about the simplest things. Just now it was hallucinating about CSS grid properties.
I’m convinced that how good AI seems is inversely correlated to someone’s knowledge in that domain, as you also mentioned.
Still super useful in my day to day but I have to hand hold and correct it constantly.