I'd be tempted to just roll with the AI generated endpoints/hallucinations.
If it's presenting me statistically probable names that make sense after absorbing the world's knowledge, I'm tempted to lean into that, instead of insisting that I have it right.
Correct names don't succeed as often as useful names do.
That's a great idea, but I think the main problem is that the generated endpoints/properties will be affected quite heavily by whatever the prompt/context was.
AI isn't necessarily saying "this is the one endpoint that will always be generated". Unless it is - if the customer generated code is always the same endpoints/properties then it'd definitely make sense to also support those.
I'm always a little surprised at how many people out there want to develop software yet haven't put in the effort to gain even the most basic computer nerd programming chops. You see this all the time in the more newbie-friendly game engine communities.
Maybe you don't want to pursue a career in software, but anyone can spend a week learning Python or JavaScript. I suspect/hope a lot of these people are just kids who haven't gotten there yet.
Coding requires a willingness to understand and manipulate systems made of unbreakable rules. Most people don't want to deal with such an uncompromising method of communication.
What percentage of web traffic today would you say is composed of bits that the user--if they bothered to inspect it--would prefer to not have anything to do with? I'd say it's more than half.
you're right, but I have a hard time picturing the computer as having emotions to be able to treat me like garbage in the first place. you won't rm the file? sudo rm file! the computer could fight back and say access denied still because of extended attributes, but for some reason I don't equate poorly written software as being treated like garbage. I always imagine some hapless programmer is doing the best they could with the resources they have in the system they're under, it's just not very good but that's not their fault.
I'm similarly sympathetic when I come across a buggy implementation. It's malicious design that I'm objecting to. But I suppose it's a bit silly to say that it's the computer that's treating me like garbage. It's just that someone else is in control of my computer, and they're treating me like garbage.
sadly these days, it seems a keen mind is only a machine's mind. People spend far to little time to understand what they are telling their poor computers to do. And look what happens, people start turning against them. Blaming them for their misdoing. It's like Blaming god, the government, a nation, family or a tribe. These are all made of humans. Human bad behavior is at the core of our suffering. Nothing else.
I don't disagree substantively, but I do think there are uniquely modern aspects to the question of "am I enabling bad behavior right now?". It's not just ethics, it's education.
Consider for instance the remote support features that Intel is so keen on advertising these days. Microcode level remote access is a small help for IT departments and a huge help for authoritarian regimes looking to spy on their people. But I don't think that most people are prepared to consider what they're enabling by paying Intel to continue to grow into a telescreen vendor.
Sure, we shouldn't blame the computer's soul for bad behavior. But if it's being used as a weapon, it's not helpful to remove the computer from the conversation and say "well it's actually bad people." Mitigating bad behavior via computer means hacking that computer, and that starts with blaming it for the bad behavior to some degree.
Counterintuitively, it also requires a willingness to break what appear at first to be unbreakable rules. Most of the worst programmers I know seem to see their work as "how can I accomplish a task without breaking what I see as the rules", without having fully understood the system. That quickly turns into copypasta, extra layers of abstraction, over configurability, and many of the other plagues of programming.
I think the two errors - imagining non-existent rules, and ignoring rules that exist - are related errors. The foundational skill is accepting that the machine is never wrong because the machine is also never "right", the machine doesn't actually make decisions, it's a construct of physics following a pile of physical laws and not a person to be negotiated with.
I think you overestimate the amount of skill a newb can quickly gain on their own. I taught myself to code, but it took a whole summer (aka free time that adults don't get) and I had access to my dad (who was a software engineer himself) to answer lots of questions.
I read a "Teach yourself $language in 10 days" book in a weekend, and was banging code on Monday to create the first v0.1 in a week. Of course the code was absolutely horrendous, but it worked. I still have a copy of that old database that was used, and over the years, I have turned to it as I've learned new things and have even rewritten the UI a couple of times. It has helped me stay up to date with new trends as it was originally written in '99 using frames, then went to full CSS/JS, then used it to learn flex, and so on.
So, if you're solo dev'ing, you can get away with making things work with what you've learned in a week. You just wouldn't be hired by anyone else of a serious nature. So it just depends on the individual and projects being worked.
What makes you say that? I learned HTML using Notepad and Netscape. I had a single semester as senior in high school that taught PASCAL, but that was 7 years prior. Not really sure how that helped in the slightest.
I don't feel this is any different from someone that might have taken a class that taught HTML/JS/CSS except for that would actually be learning directly applicable to today. If that type of person jumped into a bootcamp, I feel like that would be similar to anything I experienced if not better. The internet is a thing now so there is so much more access to anything I had.
1. You're a person of a particular frame of mind who finds it easy and natural to talk to computers in programming languages
2. You knew a different language before, perhaps one you learnt at a young age
3. You've messed around with computers for years now and have built up a conceptual model of what the hardware and software components are and how things fit together. So if a new thing comes along, you can hang it on your tree of knowledge. Consider the difficulty someone might have making hello_world.py if they don't know what an OS is, or how to edit text, or any of the basics.
None of the above generalizes to the population at large.
not "at large", but there's very much a segment of smart people who's expertise lies elsewhere, and they just haven't taken the time to learn the basics of programming. as someone who's spent a lot of time programming, I love meeting brilliant people who could program but don't just because they've gone a different way.
Some people forget how easy programming can be when you know nothing and just try stuff to see what works. Working in a procedural manner with everything in a global scope is simple to get stuff working. Not everything has to be extrapolated out into namespaces, functions, classes. It's nightmare code to maintain later, but going from blank page to working code is totally possible.
I think sometimes we forget not everything has to be written to a git repo with a highly developed structure ready for multiple people to work on. Is it a good habit, hellznaw, but people start somewhere and progress. That was the point that I was trying to make. It is totally possible to have a career as a programmer and have no credentialed degrees in CS or even programming. I know from personal experience.
I agree with you. In the 2000s, what you describe was normal for Excel/VBA. The trick to learn VBA from nothing, was to use the macro recorder, then slowly modify the code. And, arguably, Excel formulas was/is functional programming.
I learned C by using gcc directly and Python by using IDLE. Both with single file project. The actual software engineering can take time, but simple projects are very easy for beginner to reason about. Everyone can build a shed, it’s building a house that requires professional expertise.
What part of "the code was horrendous" did not click with your sentiment? It was horrible. The entire database was one table. Every SQL query was a SELECT *, and filtered everything downstream in the code rather than WHERE. It was absolutely horrible code that I am shocked actually worked with any kind of speed that actually felt responsive. Of course I didn't have millions of records, but the fact that it worked at all was encouraging enough to me that I'm still doing it to this day in the same language. Only now I've been doing it for 20+ years and I'm much less embarrassed about my code, or maybe more. At least back then I could use "I'm a beginner" as an excuse.
I've been programming since I was 4 years old but with literally zero resources or assistance beyond "take books out from the library" for 20 years. It wasn't until I was about 28 until I had the chops to get into the industry (largely down to never having a need or opportunity to learn SQL -- also I mean as a developer, I had a prior career in IT) and even then it wasn't until I was 31 before I had the confidence enough to interview...
On the other hand, I have a wealth of other general computer and protocol knowledge and have been working circles around most of my coworkers since day one. In the typical tech startup world I _rarely_ encounter coworkers with truly deep knowledge outside of whatever language they work in.
IMO the skill isn't about being able to "write code", it's about being able to model how things work.
This is very similar to my story. Once I got on a dev team I was flabbergasted at the lack of breadth and depth of knowledge of my fellow devs. It was only a few older devs that had any clue.
Having gobs of time as a kid and in my twenties to experiment greatly enhanced my capabilities. Once I did start landing corporate jobs (which was exceedingly difficult) I was at or above architect level. As I gained more experience working on production systems I was promoted very quickly (created new positions for me etc).
I have had other architects declare I was the best they have ever met. Which sadly, isn't saying much.
> Once I did start landing corporate jobs (which was exceedingly difficult) I was at or above architect level. As I gained more experience working on production systems I was promoted very quickly (created new positions for me etc).
Ditto and ditto.
I have had some positive experiences working with fresh grads from places like Waterloo (I'd hire 10 of their grads for any one grad from anywhere else...) but my professional experience very much matches yours.
Sorry, are you saying it takes 20 years for a self-taught developer to learn enough programming, especially when they start as kids? No offense, this is a you problem.
I dabbled with PCs since I was 8, around 14 I had enough brain to start to understand BASIC and enough free time to get good enough to write half a decent mini OS by the time I was 17 [1] and got my first paying job (sysadmin and PHP dev) at 19. I'm 37 now.
All you need is free time and being interested enough in the subject matter. And kids learn 10x as fast as adults anyway.
Not sure why you are trying to discourage people from learning on their own based on your time line.
Similar experience, except I have never worked professionally writing software as my primary task. I've always stayed in operations/systems roles or other periphery roles, and now am a PM. I am constantly amazed at how many "senior" engineers actually have no understanding about how a computer actually works. Once I went corporate I moved up the ranks on the systems side of things very fast, and was widely regarded as one of the best engineers in the company everywhere I went, and yet I can see absolute chasms in my knowledge and really try to ensure I identify SMEs I can work with to overcome my own gaps. It is really shocking though how little most working engineers actually understand about technology.
Time to expertise is down to zero in “Fake until you make it” circles. 260 week-long iterations later, having survived the “hype curve” and the “Valley of Death”, they declare themselves “battle-proven”. A.k.a. experts.
the worst is when someone knows all the keywords to make it seem like they are technical but after talking for a few days you realize wait they really don't know wtf they're talking about!
This is one of the rewards for paying full attention to people, even when you aren't forced to by the situation: small misalignments slip out long before you hear something that jars you into a critical frame of mind.
Until I decided to start "reinventing the wheel" and just not using abstractions from popular libraries and frameworks I really struggled to actually understand what is happening.
I feel like a week isn't anywhere near close enough but depending on what you want to do it gets you to start tinkering. Ironically I do wish that I had started working on embedded with microcontrollers than starting with web purely because there isn't space for absurd abstractions.
On web even the DOM API is a huge abstraction over rendering calls to OpenGL/DirectX/Vulkan and I never could grok what is happening with the DOM API until I played with the underlying tech and learnt about trees and parsers and how that would be stored.
I still use the DOM and love the abstraction, but sometimes I just wish I could use an immediate mode approach instead of the retained mode that the DOM is...
Someone with a week of knowledge, or even someone who has spent 10 years building react may not understand half of that unless they have actively tried to learn it. Thwy might have an idea if they had formal education but a self taught programmer. They have been building houses using lego blocks, I you give them mortar and bricks you are setting them up for failure.
Ironically I learned programming by playing with microcontrollers, which I got into through learning about electronics. So I had a really true "ground up" learning experience, starting with embedded C (not machine code, I wasn't that hard). I did a number of projects on AVR's and got decent at writing programs.
When moved on to writing PC programs, I struggled so much because everything is so heavily abstracted and languages like python have so much ability embedded in them already. I kinda had to toss a lot of intuition and learn things new.
The other thing is that to work on anything really meaningful takes time and effort. It takes determination to struggle through that in the beginning when you're running into one problem after another.
> You see this all the time in the more newbie-friendly game engine
games tend to attract young people (read: beginners) but at the same time game programming's barrier to entry is pretty high with maths & physics, low-level graphical programming, memory management, low level language and dependencies, OOP... It's almost obvious that this should be the case, every kid who's interested to coding I talked to wants to do something with games.
This is not the case any more and have not been for a very long time.
There are plenty of game engines, and some of them are specifically targeting beginning game devs and abstract a lot of that stuff in really high level concepts that require no much more from the developer than some really basic arithmetics and geometry intuition.
In fact, there are so many beginner-friendly gaming engines out there for most languages, that I am convinced that we should start using games as the entry-point for teaching programming languages. It is a beatifully self-contained domain.
Game dev is a fun hobby some people like to mess around with, just like any other hobby. Doesn’t mean they’ll be experts or know what they’re doing, but they’ll try and probably ask some basic questions online.
I mess around in goody and game maker and can write some shitty code there, but I’ve never written a line of code for work. I just like messin around for fun
its nice to have a hobby. I make Operating systems as a hobby. But because I am not an Army of dilligent engineers with a knowledge based in all history of computing and computer science, i would not dare to ship my code to an unwitting user and allow them to connect to the internet. Thats dangerous in these times.
Do you know how many botnets exist because of shit game-engines that are easily exploited and connected peer-to-peer etc.
Lovely frameworks and engines... but really harmful if you ask me. People are unwitting victims of other peoples hobby projects.
You need to be responsible in this day and age. If you don't want to do the due dilligence, or are stapped for resources (time, knowledge, etc.) then it's best to for example, make a singleplayer game, or LAN only and disallow any IP addresses in your game not defined as internal class ranges.
Do have a hobby, and do have fun, but do so responsibly. You wouldn't want one of your works of love and passion to end up hurting someone would you? Simple steps can be taken to project the consumers of your lovecraft from the vicious world out there. It's sad this is needed, but that's no excuse not to do it. Humans should be better, but they are not.
There's a common phrase that founders should code, but not all founders are coders. So when the start up is small and the founders want to contribute by testing PoCs, the chatbots are getting used by those founders that can't code. Lucky for me, the PoC is just that and allowed to be implemented without shimming the PoC directly.
I cringe every time they mention using the bots, but luckily it has been controllable.
Agreed. I’ve experienced this in different programming domains.
A mere ten or so years ago I only wrote firmware in C and MacOS apps in objective-c. That was my world and it was all I knew, and all I’ve done for a long time.
Then something happened. Small startup. Website needs urgent fix and the web guy is MIA, so what the hell, I can take a stab at it.
Literally had no idea where to start. I didn’t know about npm, minified transpiling, much less actual testing and deployment. Could not make sense of anything anywhere. Hopelessly lost. I even grepped the JavaScript for “void main()” out of desperation. Just ridiculous
One of my favorite intern stories was a kid who was a compsci senior, very good university, and who was assigned to write some Python code for my team. He had the very immature "Python is a baby's language" attitude. He wasn't working on my stuff so I don't really keep track of what he's doing, but a few weeks later I look at what he has written. Almost all of his Python functions have one parameter with an asterisk, and he does a len() check on it, printing and return an integer if it's not the right length of function arguments. Turns out this guy learned this behavior from Perl, used an asterisk because why not he always does in C, and was just manually unpacking every function argument and using a C style return error handling process.
Still the most insane thing I've seen, but I know there are a lot of kids out of college who got used to gen AI for code writing who put out a lot of this kind of code. Also, coincidentally, we haven't hired any US college interns in about 3 years or so.
This sort of thing is a weird relic of CS programs doing double duty as "professional school for software development" and "undergrad prep for an academic math career."
You just don't know how much they actually learned about programming as a discipline in its own right and it very well could be functionally zero. I've seen recent CS grads who didn't know how to use git, didn't know how to split code across multiple files or understand why you would even want to.
I think there's a fairly sound argument for these being different degrees, that a certain kind of researcher doesn't necessarily need these skills. But since it isn't there's just a huge range in how schools reconcile it.
IMO it could be closer to a doctor/nurse dichotomy. Doctors learn medicine. From top to bottom, then insanely deep into their specialty, if they aren't a generalist. Then they spend the rest of their lives keeping up with new medical research and often doing much of it themselves, teaching others, etc., along with practicing medicine. To do that last part, the act of which justifies all of the research, they do residencies. Nurses have their own training pipeline that often centers much more patient management and practical application of medical research. It's an easier training pipeline and they are paid much less, but the fact is that most people don't have what it takes to be a doctor, and the world doesn't need that many of them, it needs more practitioners.
Likewise, I think that any person who is going into the software development industry should either do it as one who gets a deep compsci education along with mandatory training in a modern practitioner skillset, or one who just learns how to practice software dev with just enough theory to handle basic problems. One could also go pure compsci, but the academia+practitioner path I mentioned earlier should have a separate title so that you can trust that the person with this credential has some baseline utility right out the gate.
Right now, "computer science" encompasses all of this, which is a huge problem for employers.
At the very least, it would be nice if we settled on some universal definitions for various job roles, including "computer scientist", "software engineer", "software developer", etc. Right now, all of these are floating signifiers!
I am not, I see it happening even within companies. They figure that for some junior tech related roles they don't need to hire people with the education and just teach them in house.
Often not developing itself, but things like automated tests in a QA role.
The result is people that have no technical background, no real interest in it either, no basic framework to start from learning to use a specific set of tools and a very basic understanding of programming.
> I'm always a little surprised at how many people out there want to develop software yet haven't put in the effort to gain even the most basic computer nerd programming chops.
If you're surprised by reality, that says something about your mental model, not about reality. People don't want to "learn programming", they want to "make a thing". Some people learn programming while making a thing, but why learn about how the sausage is made when all you want is to eat it?
> People don’t want to “learn programming”, they want to “make a thing”.
Hahaha, I wish that were true, but it’s not. Lots of people want to learn programming for learning and programming’s sake, or because programming is more lucrative than sausage making. I think I’ve worked with more programmers that care more about programming than the end result, than making something. It’s constantly frustrating and a huge source of over-engineering mistakes that have proliferated through engineering.
> why learn about how the sausage is made when all you want is to eat it?
Then why do sausages get made? It’s because not everyone only wants to eat them. There’s a variety of reasons people make sausages and also like eating them, from making money, to making high quality or interesting variety sausages, to being self-sufficient and not paying others for it, to learning about how it’s done. It’s been my experience that the more someone cares about eating sausages, the more likely they are to dabble in making their own.
Anyone who already programs for a couple of years can spend a week learning $lang.
Learning programming for the first time takes a long while and a lot of effort.
I'd say a couple of months if you're bright and motivated. Possibly a year or two if you're not.
I agree with the part that someone who wants to build something technical should gain at least some related knowledge, but a week is underselling the effort needed to learn how to code by a lot. After one week of teaching myself Python I couldn't code my way out of a paper bag, and I'm someone who enjoyed it enough to stick with it. The average person would need at least 10x that amount of time to be able to start building something interesting.
I'm not surprised at all. Honestly the "I don't need to learn that" mentality is common in tech even in people who call themselves senior developers. It's especially noticeable in the hostility of many towards the sorts of information you learn in a good computer science degree.
How many arguments have we heard here along the lines of "why teach algorithms universities should be teaching _insert_fad_technology_of_the_day_." Big Oh and time complexity is a special favourite for people to pick on and accuse of being useless or the like. You see it in arguments around SQL vs document databases, people not being willing to recognize that their for loops are in fact the same as performing joins, people unwilling to recognize that yes they have a data schema even if they don't write it down.
So I'm not surprised at all that people would use AI as a substitute for learning. Those same people have likely gotten by with stackoverflow copypasta before gen AI came about.
Seems like the natural progression from end goal to breaking it down into the smaller and smaller pieces required to see the goal through, as people have always done.
Before LLMs you'd probably have to reach for learning Python or Javascript sooner, at least if StackOverflow didn't have the right code for you to copy/paste, but I expect anyone who sticks with it will get there eventually either way.
Hilariously, the target market for the author's API seems to be the same as the top post on HN today[0]: "traders".
I think amateur "trading" attracts a specific brand of idiot that is high/left on the Dunning Kruger curve. While taking money from idiots is a viable (even admirable) business strategy, you may want to fully automate customer service to retain your sanity.
It's people who generally don't have any other skills and reject all evidence for Efficient Market Hypothesis. They legitimately think what they're doing is not gambling. No amount of empirical evidence can convince them they have no risk-adjusted alpha
There's already a big market for taking out AI garbage,
and it expect it to grow as the AI bubble bursts.
The best thing a consultant can do today is learn the common issues
and failure modes of AI generated code.
Providing an API service to customers means you will get terrible client code.
Sometimes it's dumb stuff like not respecting rate limits and responding to errors by just trying again.
One option,
if you don't want to fix it yourself,
is to partner with a consultant who will take it on,
send your customers to them.
Bill (or set your API access rates) appropriately.
Sometimes you have to fire customers.
Really bad ones that cost more than they bring in are prime candidates for firing,
or for introducing to your "Enterprise Support Tier".
Language models aren’t AI no matter how hard you squint. When we get actual AI (not counting on anytime soon) it will be more than the annoyed developer that loses their job
> Language models aren’t AI no matter how hard you squint.
While you are free to make up any definition you want on the spot, so are others. Yes, language models are just plain old boring machine learning like any other, but machine learning is a subset of what most people consider to be the area of AI.
> When we get actual AI (not counting on anytime soon) it will be more than the annoyed developer that loses their job
Again, while you can define things however you please, so can everyone else. This is what most people would consider AGI, not AI.
A better term is 'machine'. The "AI revolution" has been causing friction for several centuries already, most famously with Luddites' fight against AI looms.
Well, if you are annoyed by a particular maintenance task related to your business, find a way to automate it!
In this case, you could create examples for your API in common programming languages, publish them on the product website, and even implement an automatic test that would verify that your last commit didn't break them. So, most of the non-programmer inquiries can be answered with a simple link to the examples page for the language they want.
As a bonus point, you will get some organic search traffic when people search for <what your API is doing> in <language name>.
This could actually be an ingenious way of solving the problem. If someone has a support issue and can't solve it themselves, yet requires coding help, forward them a freelancer that they can hire for 20$/hr from upwork that knows this API well etc.
This seems like a support issue, not an AI issue. AI is how the code was written, but the issue would be the same if it was amateurs writing bad code. If all you want to do is support your API, a support article outlining the issues you see over and over would be something to point your customers to. Warrant your API against errors, but point out that anything more is billable work. If you're not interested, partner with someone to do that work. You could even offer support contracts that include some amount of customization.
It's a support issue in a sense, but in many contexts people want to offer a better support experience than "anything more is billable work". A reputation for being helpful and customer-friendly is valuable, especially in a business where you're selling to other programmers, and you can't buy that reputation after the fact with money from support contracts.
This post seems to be saying that AI opened up a new avenue for people to demand free work.
If someone asked "I wrote some rough designs and interfaces, can you write me an app for free?" The author could easily detect it as a request for free work. But because the first part is hidden behind some ChatGPT generated code and the second part is disguised as a request for help, the author would be tricked into doing this free work, until they detected this pattern and write a blog post about it.
in volume, this turns into support writing the code.
I think of how the south park movie folks sent so much questionable content to the censors that the compromise in the end let through lots of the puppet sex.
That's like saying "seems like the problem is the internet is filled with low quality content" in response to ai bots when, while not wrong, the new problem is that we've created a way to accelerate the creation of that low quality content many orders of magnitude faster.
So what was a difficult problem can quickly become insurmountable.
The difference is scale. I don't know how many times people need to say this, but LLM tools enable people to spam low quality code at a rate that is far faster than ever.
There's been multiple stories and posts here on HN about issues with AI generated PRs for open source repos because of people using them to game numbers or clout. This is a similar problem where you have a bunch of people using your API and then effectively trying to use you for free engineering work.
Totally agree the difference is in the scaling properties.
On the other hand, I look around the room I am in and it is filled mostly with "low quality" Chinese made products. While you can't compare these products to expensive, expertly crafted, high end products, there is another scaling law at play when it comes to price. The low quality Chinese products are so cheap that I don't even consider the more expensive options. When the low quality desk lamp is close enough and 20x cheaper than the well made desk lamp, there is no decision point for me.
is there a way we can make a support bot or a chat-based document that is fine tuned and limit the answer to only what's in the API? Getting the users to use it is another issue but one problem at a time.
ATMs were meant to kill banking jobs but ah theres more jobs in banking than ever.
The Cloud was meant to automate away tech people, but all it did was create new tech jobs. A lot of which is cleaning up after idiots who think they can outsource everything to the cloud and get burned.
LLMs are no different. The "Ideas Man" can now get from 0 to 30% without approaching a person with experience. Cleaning up after him is going to be lucrative. There are already stories about businesses rehiring graphic designers they fired, because someone needs to finish and fine tune the results of the LLM.
> ATMs were meant to kill banking jobs but ah theres more jobs in banking than ever.
ATMs only handle basic teller functions and since COVID in NYC I had to change banks twice because I couldn't find actual tellers or banks with reasonable open hours. BoA had these virtual-teller only branches and the video systems were always broken (and the only option on Saturday). This was in Midtown Manhattan and my only option was basically a single branch on the other side of town 8-4 M-F.
I'm now happily with a credit union but at least since moving to the south things are generally better because customers won't tolerate not being able to deal with an actual person.
> ATMs were meant to kill banking jobs but ah theres more jobs in banking than ever.
US banks, who are surprisingly behind the times in as far as automation goes. Here a lot of banks used a lot of automation to reduce the amount of manual jobs needed. to the degree that many offices are now also closing as everything can be done online.
And no, there is no need to visit banks here as I get the impression it is in the US. We don't even have physical checks anymore.
I have a business fixing broken code/systems (especially if it is stressful and last minute); if you are tired/annoyed of something in the software market, just up your fees. For us not much changed; a lot of badly (throw the spec over the wall) outsourced software was fairly bad since forever; AI generated code is similar. I guess this will grow even faster though, as normally solid developers might take on a lot more work and get sloppy with AI.
If you are building an API and have decent docs, it's a totally ok trade off to say "i'll lose some customers this way, but I'm not providing support". And just be upfront about it. Some stores have a no return policy with no exceptions. They lose some customers, it's ok.
For the problems given in the article, it will 100% work. It's very easy for Claude 3.5 or gpt-4o to look at documentation for a couple of API endpoints, compare it to submitted code, and point out invalid endpoints and properties. It can provide correct code also if the custom is asking for something possible.
It won't be flawless but if the issues are as basic as stated in this article, then it seems like a good option.
It will cost money to use the good models though. So I think the first step would be to make sure if they ask for an invalid endpoint it says that in so many words in the API response, and if they ask for an invalid property it states that also.
Then if that doesn't give them a clue, an LLM scans incoming support requests and automatically answers them. Or flags them for review.. To prevent abuse, it might be a person doing it but just pressing a button to send an auto-answer.
But maybe a relatively cheap bot in a Discord channel or something connected to llama 3.1 70b would be good enough to start, and people have to provide a ticket number from that bot to get an answer from a person.
I'm a bit torn. My first thought was "If the current state of the art LLMs made the mistakes it's unlikely an LLM would be able to correct them." But I'm not sure that's true if the support LLM (chat bot) is given very specific instructions so as to limit the possible answers. Still I think that's gonna break down pretty quick for other reasons.
Maybe the chat bot can recognize a botched request and even suggest a fix but what then? It certainly won't be able to convert the user's next request into a working application of even moderate complexity. And do you really want a chat bot to be the first interaction your customers have.
I think this is why we haven't seen these things take off outside of very large organizations who are looking to save money in exchange for making customers ask for a human when they need one.
> I'm a bit torn. My first thought was "If the current state of the art LLMs made the mistakes it's unlikely an LLM would be able to correct them."
But, I mean, that doesn't make sense even for humans, right? 99% of the errors I make, I can easily correct myself because they're trivial. But you still have to go through the process of fixing them, it doesn't happen on its own. Like, for instance, just now I typoed "stil" and had to backspace a few letters to fix it. But LLMs cannot backspace (!), so you have to put them into a context where they feel justified in going back and re-typing their previous code.
That's why it's a bit silly to make LLM code, try to run it, see an error and immediately run to the nearest human. At least let the AI do a few rounds of "Can you spot any problems or think of improvements?" first!
I had a related episode at work when my coworker asked me why his seemingly trivial 10 line piece of code was misbehaving inexplicably. It turned out he had two variables `file_name` and `filename` and used one in place of another. I asked him how he ended up with such code, he said he used copilot to create it. Using code from a generative AI without understanding what it does is never a good idea.
I knew a guy that made a good living as a freelance web developer decades ago. He would pretty much just copy and paste code from tutorials or stack overflow and had no real idea how anything worked. Using code without understanding it is never a good idea, it doesn’t need to be from AI for that to be true.
It certainly puts a ceiling on a career. And I'd argue it probably gave him a pretty rough shelf life. At some point he has to understand what he's doing.
Unless he's so good at selling his services he can consistently find new clients. And if that's the case, he'd probably kill it in sales.
Sales engineers have to be good enough to bluff their way through the layers of hyperbole/minor exaggeration/utter bullshit (delete as applicable) the sales team have spun. Whether their conscience gets involved before the deal closes, different question.
Not at my work. Around here sales engineers just say "this is a proof of concept, X will be different in the final version". Then, after they close the deal, they give us their half implemented feature they developed that none of us heard about before, and tell ys that we need to finish it and include it in the next release.
He may have made a good living, but his customer / employer bought low quality code with lots of tech debt.
That business model only works until customers are sophisticated enough to understand tech debt. In the future, more customers will be less willing to pay the same good wages for low quality code.
Yeah, and the business people could not care less. I am on a team taking in millions of dollars from a Delphi Windows app from 1997. Zero tests, horribly mangled business logic embedded in UI handlers. Maintaining that app is not feasible. I'm rebuilding a modern version of it only because it is embarrassing to demo and is such a UX nightmare that our distributor made us commit to a new app.
Or maybe you’re just exaggerating. I’ve done my fair share of copy pasting and it never worked to just do it without understanding what’s going on.
I think the problem with “AI” code is that many people have almost a religions belief. There’re weirdos on internet who say that AGI is couple years away. And by extension current AI models are seen as something incapable of making a mistake when writing code.
The other downside to AI code vs stackoverflow is that a stackoverflow post can be updated, or a helpful reply might point out the error. With the advent of LLMs we may be losing this communal element of learning and knowledge-sharing.
We aren't. LLMs may have been useful for a moment in time, before the trick "it's now MY OWN creation, no IP strings attached - when it comes through the plagiarism machine" became apparent, and before the models started eating their own tail. Now they're just spiralling down, and it will IMNSHO take something else than an iterative "a future version will surely fix this, One Day, have faith."
- Which might be a different matter: of specifically SE declining. (A very different, and long-running, tragedy, but one that began long before the current AI boom and prompted by very different, non-technical issues.)
- That said, surely traffic will decline for Q&A sites. "How do I connect tab A into slot B" is something that people are likely to query LLMs for; the response will surely sound authoritative, and could be even correct. That's definitely a task where LLMs could help: common questions that have been asked many times (and as such, are likely to be well-answered in the human-made training data). A 20001st question of "how do I right-align a paragraph in HTML" has not been posted? Good. Rote tasks are well-suited to automation. (Which, again, brings us back to the issue "how to distinguish the response quality?")
But what happens with the next generation of questions? The reason LLMs can answer how to right-align a paragraph in HTML is at least in part because it has been asked and answered publicly so many times.
Now imagine that HTMZ comes along and people just go straight to asking how to full justify text in HTMZ for their smart bucket. What happens? I doubt we’ll get good answers.
It feels like the test of whether LLMs can stay useful is actually whether we can stop them from hallucinating API endpoints. If we could feed the rules of a language or API into the LLM and have it actually reason from that to code, then my posed problem would be solved. But I don’t think that’s how they fundamentally work.
>Now imagine that HTMZ comes along and people just go straight to asking how to full justify text in HTMZ for their smart bucket. What happens? I doubt we’ll get good answers.
So, I think the answer is that since all useful data is already in a LLM somewhere all new data will be stolen/scraped and inserted in real time. So if real people are answering the question it will work as normal. The real question is what happens when people are trying to mine karma by answering questions using an LLM that is hallucinating. We have seen such with the Bug Bounty silliness going on.
I upvoted your comment because I'm afraid you may be correct. I say, "afraid" because I can remember the day when a member of my team was fired for copy pasta from SO with little, if any understanding, into "production" code.
The problem, of course, is that this might work once in a while for low hanging fruit, until the web inherited things like DICOM and we now have medical imaging in the web browser (I've heard in Apple Vision Pro), where robotics implies the price of unforeseen bugs is not accidental death or dismemberment of one patient, but potentially many.
I knew someone similar. They would just get free templates and sell them as a website to customers, with almost no changes, aside from logos and text. Most had no Javascript or css and looked terrible, even by 2005 standards.
His clients were usually older small business owners that just wanted a web presence. His rate was $5000/site.
Within a few years, business dried up and he had to do something completely different.
He also hosted his own smtp server for clients.It was an old server on his cable modem in a dusty garage. I helped him prevent spoofing/relaying a few times, but he kept tinkering with the settings and it would happen all over again.
That's fair. From a personal perspective it was a good idea. He regularly had sites get compromised though, so for his customers it wasn't always a good product. He generally kept his customers happy though.
There are plumbers who make a living but whose work results in leaks in people's homes. They're making a living, but I don't consider the way they work "a good idea".
> Using code from a generative AI without understanding what it does is never a good idea.
Hear hear!
I feel like genAI is turning devs from authors to editors. Anyone who thinks the latter is lesser than the former has not performed both functions. Editing properly, to elevate the meaning of the author, is a worthy and difficult endeavor.
Oh for crying out loud, I obviously mean these specific mistakes. If you have worked in any capacity with LLMs like this you would have seen them variables or suddenly switch up the convention of how they're written.
Certainly if you are in a conversation mode after a few back and forths this happens from time to time.
I am just not going to spend my time digging to previous prompts of code I might not want to share just to satisfy a random internet person .
The models I've used don't make typos on variable names that already exist in the context. Typos are not the failure mode, this is literally the easiest text prediction task they can do.
What you guys probably want to do instead is get to a common definition of what a typo is. Personally, I understand it as a typographic error, which is a fancy way of saying a spelling mistake (a mistake on a letter), not a mistake where one use a word for another.
Not the OP. I have certainly seen LLM coding tools generate blocks of code with misspelled variables and typos. Trying to shove someone into a box of being a cynic because they have had bad personal experiences with tools is a good way to ensure people filter out your opinions.
There's more than one mistake in the code given, and I tried just once.
"Create Python code for iterating a file with a cache."
class CachedFileIterator:
def __init__(self, file_path):
self.file_path = file_path
self.cache = [] # List to store cashed lines
self.current_index = 0 # Index for the current line to read
def _read_lines_from_file(self):
"""Read lines from the file and cache them."""
with open(self.file_path, 'r') as openFile:
for line in f:
self.cache.append(line.strip()) # Strip newline characters and save to cache
def __iter__(self):
"""Return the iterator object itself."""
return self
def __next__(self):
"""Return the next line in the iteration."""
if self.current_index < len(self.cache):
result = self.cache[self.current_index]
self.current_index += 1
return result
else:
# If we reach the end of the cache, we read more lines from the file if necessary
if len(self.cache) == 0: # Cache is empty, read file
self._read_lines_from_file()
if self.current_index < len(self.cache):
result = self.cache[self.current_index]
self.current_index += 1
return result
else:
# If still no lines, we stop iteration
raise StopIteration
# Example usage:
if __name__ == "__main__":
file_path = 'example.txt' # Replace with your file path
iterator = CacheingFileIterator(file_path)
for line in iterator:
print(line)
Garbage code is bad enough, but it's not like people have never had to walk juniors through mistakes before LLMs.
But this is actually so much worse for that same reason - the type of developer who'd submit Copilot output (I can call it that, as it's definitely not code) for a PR is unable to respond to any comment beyond asking Copilot again and wasting everyone's time with 6 more rounds of reviews. I've literally had to write test cases for someone else and told them "You can't ask for another code review until your code passes these."
Bit of a tangent, though related. It looks like you accidentally stumbled into a version of test driven development ;)
With the big difference obviously being that typically the developer who writes the test also will write the code.
In some situations, this actually makes sense to do with junior developers as part of their training. Where a senior developer sits down with them and write out the tests together, then with the tests as a guide they are thrown into the waters to develop the functionality.
Of course, I suspect that in this case, you were not dealing with a junior. Rather the sort of person who looks at your tests, still is confused and asks for a "quick call" to talk about the tests.
What do you see as mistakes? I see some weirdness, but the spec is just not complete - there was no requirement for rewinding, multiple users, etc. in the request so it's not implemented.
The only thing I'd call an actual mistake is using an empty list to mean both an empty file and an uninitialised value.
One is that the variable is called openFile and not f. I don't know enough python to see something else wrong with that but would love to know too, since I've written such a line just last week.
iterating over the file object at all instead of just calling self.cache = openFile.readlines() means that calling strip() the line below removes data beyond just the trailing newlines.
The file object is named "openFile", but used as "f". The class is defined as "CachedFileIterator", but used as "CacheingFileIterator". That's two typos, before discussing the actual code.
Well, there's also the fact that the entire thing could be replaced with...
def cached_file_iterator(file_path):
with open(file_path, 'r') as f:
lines = [ line.strip() for line in f.readlines() ]
yield from iter(lines)
# Example usage:
if __name__ == "__main__":
file_path = 'example.txt' # Replace with your file path
iterator = cached_file_iterator(file_path)
for line in iterator:
print(line)
Which is functionally identical and FAR less code to maintain.
would someone invent that and bother the author with that? I mean I suppose it's possible, but that seems like such a waste of time to me that I find that more unlikely. and while it's a typo, it's not fleinaem or something that's totally wrong, just a choice in breaking up the word filename. having written file handling code, the various permutations of filename and path and dirname get to be a bit much sometimes.
You are getting downvoted but you are right, a typo in a variable that already exists in a file like this is not the failure mode for LLMs. The failure mode is logic bugs, making up methods / functions.
I've been using copilot for as long as it has existed and what you are describing has not happened to me once. Literally on in the background 8 hours a day. Excuse me for not trusting the internet hivemind that hates everything that is hyped just a little bit.
My goto check of AI assistants is asking to write a function calculating the first N digits of Pi in Common Lisp. On at least two attempts when prompted to fix its code the model would change one of the variable names to T, which is a reserved symbol. So yeah pretty sure it does happen.
At least for me stupid bugs like this turn out to be some of the most time wasting to debug, no AI involved. Like accidentally have something quoted somewhere, or add an 's' to a variable by accident and I may not even correctly process what the error message is reporting at first. Always feel a bit silly after.
These kinds of problems are often avoidable by linters or asking ChatGPT what is wrong, though I was just tearing my hair wondering why TSC_COMPILE_ERROR wasn't skipping TypeScript because I spelled it TSX_COMPILE_ERROR in my environment variable.
Not only asking ChatGPT what is wrong, but also using an agent which does self-reflection by default. I'm sad every time I see people using the bare chat interface to generate code. We've got API tools which are so much better at it today. Use Aider at the very least.
does aider have an executable installer yet? i tried installing it but the python experience is terrible. last time i messed with python installs on my mac everything worked like shit until o reinstalled the OS.
(https://aider.chat/docs/install/pipx.html will install it globally on your system within its own python environment. This way you can use aider to work on any python project, even if that project has conflicting dependencies.)
I run it with these settings:
`aider --sonnet --no-auto-commits--cache-prompts`
if you want to run the most bleeding edge version at the same time without breaking anything,
This type of bug is trivial for GPT to fix though. It was born for this. Sometimes it does generate real footguns but this sounds like an example from an earlier generation of generative AI.
Many statically typed languages do have escape hatches to do some dynamic typing at runtime, but this is not the default (hence the classification), and it requires some additional effort to use.
It's not the language, it's the IDE and laziness. They're doing this in notepad or maybe VSCode and don't have anything configured for highlighting or checking. Heck they probably don't even know how to interpret the error message saying "file_name is not declared".
I'm the first to bash JS, but this is not a JS issue. It's 100% a "bad and lazy" human actor that is throwing spaghetti on the wall to see what sticks. In this case, they have a minigun cannon called ChatGPT/CoPilot that is letting them do more of it than what they used to.
We hired a new guy at work. In one of his first tasks he had chosen to write some bash, and it was pure nonsense. I mean it contained things like:
if [ -z "${Var}+x" ]
Where I can see what the author was trying to do, but the code is just wrong.
I dont mind people not knowing stuff, especially when it's essentially Bash trivia. But what broke my heart was when I pointed out the problem, linked to the documentation, but recieved the response "I dont know what it means, I just used copilot" followed by him just removing the code.
I don't have hiring privileges. Either way. I like the guy, and I'd rather work to build him up. That doesn't mean it's not frustrating, but I have a process that seems to build a pretty good culture.
Wait until a manager who's evaluating a technical decision you're making copies and pastes ChatGPT's "analysis" of your proposal and asks you to respond to it.
I agree that it's a waste of a learning opportunity, but from my experience it is still often rational.
There were many times in my career when I had what I expected to be a one-off issue that I needed a quick solution for and I would look for a quick and simple fix with a tool I'm unfamiliar with. I'd say that 70% of the time the thing "just works" well enough after testing, 10% of the time it doesn't quite work but I feel it's a promising approach and I'm motivated to learn more in order to get it to work, and in the remaining 20% of the time I discover that it's just significantly more complex than I thought it would be, and prefer to abandon the approach in favor of something else; I never regretted the latter.
I obviously lose a lot of learning opportunities this way, but I'm also sure I saved myself from going down many very deep rabbit holes. For example, I accepted that I'm not going to try and master sed&awk - if I see it doesn't work with a simple invocation, I drop into Python.
I feel similarly that some such learning opportunities are just going to be larger rabbit holes than the thing is worth, but in those cases I'll just prefer to do it a different way that I do know or is worth learning.
E.g. maybe it would be very 'elegant' or rather concise awk if I could overcome the learning opportunity, but like you I would probably decide not to; I'll do it with the sed I do know even if it means some additional piping and cutting or grepping or whatever that awk could've done in one, because I already know it and it's going to be clearer to me and probably anyone else I'm working with.
I think we're saying quite similar things, but my point is I wouldn't be deleting it, dismissing the idea, and disappointing the colleague ready to teach me about it - because I never would've been willing to blindly try broken AI generated (or however sourced) code that I didn't understand in the first place.
I like learning a little about a lot of things as I’m the entrepreneurial type, but I’m really good at very few things. I appreciate having workers who specialize in one or two things really deeply though.
You don't have to master it. But some things are just well worth learning at least the basics of: Your programming language of choice, your shell, your editor, your version control system.
An afternoon learning your way around bash or vim will save you countless of hours of work, just because you will know what the building blocks are, you will be able to ask the right questions directly instead of chasing down alleys.
It's not the same thing as learning yet another language. It's a separate type of tool. Developing software without knowing an editor or a shell is like refusing to learn what a file is or what an ip address is. Sure, you can probably get work done in roundabout ways, but it's certainly not rational.
It is not nonsense. You use that expression if you want to check if a variable exists or not (as opposed to being set to an empty string) which is an extremely common problem.
That what I meant by "I can see what they were trying to do". It's would have been correct if the "+x" was inside the braces, even in context. He did in fact want to check if the variable was unset and error out, and that's what hurts so much.
There was a real and correct analysis that, hey, I want to make sure the variable is set here. Only to then drop it because you get told the syntax is wrong. The response I'm looking for when I say "This syntax won't do what you're looking to do" would be something like "what am I trying to do? and why wont this do it?" not "well it's just some AI code, I'll just remove it".
And any decent IDE will highlight a variable that is declared but unused. We already have "artificial intelligence" in the form of IDEs, linters, compilers, etc. but some people apparently think we should just throw it all away now that we have LLMs.
> It's easy to miss that kind of difference even if you wrote the code yourself.
The developer in the story had no idea what the code did, hence they would not have written it themselves, making it impossible for them to “miss” anything.
Claude gave me something similar, except these were both used, and somehow global variables, and it got confused about when to use which one.
Asking it to refactor / fix it made it worse bc it'd get confused, and merge them into a single variable — the problem was they had slightly different uses, which broke everything
I had to step through the code line by line to fix it.
Using Claude's still faster for me, as it'd probably take a week for me to write the code in the first place.
BUT there's a lot of traps like this hidden everywhere probably, and those will rear their ugly heads at some point. Wish there was a good test generation tool to go with the code generation tool...
One thing I've found in doing a lot of coding with LLMs is that you're often better off updating the initial prompt and starting fresh rather than asking for fixes.
Having mistakes in context seems to 'contaminate' the results and you keep getting more problems even when you're specifically asking for a fix.
It does make some sense as LLMs are generally known to respond much better to positive examples than negative examples. If an LLM sees the wrong way, it can't help being influenced by it, even if your prompt says very sternly not to do it that way. So you're usually better off re-framing what you want in positive terms.
As someone who uses LLMs on my hobby projects to write code, I’ve found the opposite. I usually fix the code, then send it in saying it is a refactor to clarify things. It seems to work well enough. If it is rather complex, I will paste the broken code into another conversation and ask it to refactor/explain what is going on.
Fixing the mistake yourself and then sending the code back is a positive example, since you're demonstrating the correct way rather than asking for a fix.
But in my experience, if you continue iterating from that point, there's still a risk that parts of the original broken code can leak back into the output again later on since the broken code is still in context.
Ymmv of course and it definitely depends a lot on the complexity of what you're doing.
I’m attempting to keep the context ball rolling by reiterating key points of a request throughout the conversation.
The challenge is writing in a tone that will gently move the conversation rather than refocus it. I can’t just inject “remember point n+1” and hope that’s not all it’ll talk about in the next frame.
If nothing else, LLMs have helped me understand exactly why GIGO is a fundamental law.
LSS: metaprogramming tests is not trivial but straightforward, given that you can see the code, the AST, and associated metadata, such as generating test input. I've done it myself, more than a decade ago.
I've referred to this as a mix of literate programming (noting the traps you referred to and the anachronistic quality of them relative to both the generated tests and their generated tested code) wrapped up in human-computer sensemaking given the fact that what the AI sees is often at best a lack in its symbolic representation that is imaginary, not real; thus, requiring iterative correction to hit its user's target, just like a real test team interacting with a dev team.
In my estimation, it's actually harder to explain than it is to do.
Interestingly, a great application for GenAI is to copy and paste code and ask it, "Why is this not working?". It works even better if you give it the specific error you are getting (and it is a well understood system).
Retail "traders" are the textbook definition of mentally challenged obnoxiousnes. Go meet them on forums like EliteTrader.com and you will soon realize who you are dealing with.
It's your fault really. You don't build custom software for guys having the intellectual capacity and budget of a tractor driver unless you enjoy pain.
For real: profitable consulting businesses have been formed to help LLM programmers. BUGFIX 66, for example, and various others. They can charge substantial money to help customers cross that "last mile" and get their LLM-generated pile of code working.
> Helping a customer solve challenges is often super rewarding, but only when I can remove roadblocks for customers who can do most of the work themselves.
One thing I loved about doing technical enterprise sales is that I’d meet people doing something I knew little or nothing about and who didn’t really understand what we offered but had a problem they could explain and our offering could help with.
They’d have deep technical knowledge of their domain and we had the same in ours, and there was just enough shared knowledge at the interface between the two that we could have fun and useful discussions. Lots of mutual respect. I’ve always enjoyed working with smart people even when I don’t really understand what they do.
Of course there were also idiots, but generally they weren’t interested in paying what we charged, so that was OK.
> Helping a customer solve challenges is often super rewarding, but only when I can remove roadblocks for customers who can do most of the work themselves.
So I feel a lot of sympathy for the author — that would be terribly soul sucking.
I guess generative grammars have increased the number of “I have a great idea for a technical business, I just need a technical co founder” who think that an idea is 90% of it and have no idea what technical work actually is.
Yeah, I moved the paragraphs around and pasted the quote in where it belonged, forgetting that it had been pasted at the top. Too late to edit, though.
This is honestly something I'm grateful for a lot of the time. I'm presently running a tech start-up in a highly technical domain (housebuilding, in a word) which also happens to be pretty hostile to businesses. People look at a planning application like "Why are there hundreds of documents here?" and it's because yeah, it is hard - there are huge numbers of variables to take into account, and the real "art" of urban design is solving for all of them at once. Then you send it to planning and basically no-one is happy, why haven't you done this and what are you going to do about that. You have to be pretty creative to survive.
Before that, I worked in a digital print organisation with a factory site. This factory did huge volumes on a daily basis. It was full of machines. They had built up a tech base over years, decades, and it was hyper-optimised - woe betide any dev who walked into the factory thinking they could see an inefficiency that could be refactored out. It happened multiple times - quite a few devs, myself included, learned this lesson the hard way - on rare occasion thousands of lines of code had to be thrown out because the devs hadn't run it past the factory first.
It's an experience I'd recommend to any dev - build software for people who are not just "users" of technology but builders themselves. It's not as "sexy" as building consumer-facing tech, but it is so much more rewarding.
This website is so cursed… on mobile it’s constantly layout shifting up and down by an entire screen height every ~0.3 seconds. I’m not sure how to feel.
344 comments
[ 2.3 ms ] story [ 230 ms ] threadAI isn't necessarily saying "this is the one endpoint that will always be generated". Unless it is - if the customer generated code is always the same endpoints/properties then it'd definitely make sense to also support those.
Maybe you don't want to pursue a career in software, but anyone can spend a week learning Python or JavaScript. I suspect/hope a lot of these people are just kids who haven't gotten there yet.
At least computers don't think it's their god-given right to treat you like garbage.
Computers treat people like garbage all the time.
Consider for instance the remote support features that Intel is so keen on advertising these days. Microcode level remote access is a small help for IT departments and a huge help for authoritarian regimes looking to spy on their people. But I don't think that most people are prepared to consider what they're enabling by paying Intel to continue to grow into a telescreen vendor.
Sure, we shouldn't blame the computer's soul for bad behavior. But if it's being used as a weapon, it's not helpful to remove the computer from the conversation and say "well it's actually bad people." Mitigating bad behavior via computer means hacking that computer, and that starts with blaming it for the bad behavior to some degree.
So, if you're solo dev'ing, you can get away with making things work with what you've learned in a week. You just wouldn't be hired by anyone else of a serious nature. So it just depends on the individual and projects being worked.
Picking up the second, fifth, or nth language is easy, as long as it isn't the first one.
Agreed on all further ones, however
I don't feel this is any different from someone that might have taken a class that taught HTML/JS/CSS except for that would actually be learning directly applicable to today. If that type of person jumped into a bootcamp, I feel like that would be similar to anything I experienced if not better. The internet is a thing now so there is so much more access to anything I had.
1. You're a person of a particular frame of mind who finds it easy and natural to talk to computers in programming languages
2. You knew a different language before, perhaps one you learnt at a young age
3. You've messed around with computers for years now and have built up a conceptual model of what the hardware and software components are and how things fit together. So if a new thing comes along, you can hang it on your tree of knowledge. Consider the difficulty someone might have making hello_world.py if they don't know what an OS is, or how to edit text, or any of the basics.
None of the above generalizes to the population at large.
I think sometimes we forget not everything has to be written to a git repo with a highly developed structure ready for multiple people to work on. Is it a good habit, hellznaw, but people start somewhere and progress. That was the point that I was trying to make. It is totally possible to have a career as a programmer and have no credentialed degrees in CS or even programming. I know from personal experience.
I am quite sure most people who have only learned programming for one weekend would write much worse code than ChatGPT.
On the other hand, I have a wealth of other general computer and protocol knowledge and have been working circles around most of my coworkers since day one. In the typical tech startup world I _rarely_ encounter coworkers with truly deep knowledge outside of whatever language they work in.
IMO the skill isn't about being able to "write code", it's about being able to model how things work.
Having gobs of time as a kid and in my twenties to experiment greatly enhanced my capabilities. Once I did start landing corporate jobs (which was exceedingly difficult) I was at or above architect level. As I gained more experience working on production systems I was promoted very quickly (created new positions for me etc).
I have had other architects declare I was the best they have ever met. Which sadly, isn't saying much.
Ditto and ditto.
I have had some positive experiences working with fresh grads from places like Waterloo (I'd hire 10 of their grads for any one grad from anywhere else...) but my professional experience very much matches yours.
I dabbled with PCs since I was 8, around 14 I had enough brain to start to understand BASIC and enough free time to get good enough to write half a decent mini OS by the time I was 17 [1] and got my first paying job (sysadmin and PHP dev) at 19. I'm 37 now.
All you need is free time and being interested enough in the subject matter. And kids learn 10x as fast as adults anyway.
Not sure why you are trying to discourage people from learning on their own based on your time line.
1: https://github.com/1player/klesh
(as it turns out, writing code for yourself is a different skillset than writing code for a boss!)
That was exactly the point I was trying to make
I feel like a week isn't anywhere near close enough but depending on what you want to do it gets you to start tinkering. Ironically I do wish that I had started working on embedded with microcontrollers than starting with web purely because there isn't space for absurd abstractions.
On web even the DOM API is a huge abstraction over rendering calls to OpenGL/DirectX/Vulkan and I never could grok what is happening with the DOM API until I played with the underlying tech and learnt about trees and parsers and how that would be stored.
I still use the DOM and love the abstraction, but sometimes I just wish I could use an immediate mode approach instead of the retained mode that the DOM is...
Someone with a week of knowledge, or even someone who has spent 10 years building react may not understand half of that unless they have actively tried to learn it. Thwy might have an idea if they had formal education but a self taught programmer. They have been building houses using lego blocks, I you give them mortar and bricks you are setting them up for failure.
When moved on to writing PC programs, I struggled so much because everything is so heavily abstracted and languages like python have so much ability embedded in them already. I kinda had to toss a lot of intuition and learn things new.
games tend to attract young people (read: beginners) but at the same time game programming's barrier to entry is pretty high with maths & physics, low-level graphical programming, memory management, low level language and dependencies, OOP... It's almost obvious that this should be the case, every kid who's interested to coding I talked to wants to do something with games.
In fact, there are so many beginner-friendly gaming engines out there for most languages, that I am convinced that we should start using games as the entry-point for teaching programming languages. It is a beatifully self-contained domain.
I mess around in goody and game maker and can write some shitty code there, but I’ve never written a line of code for work. I just like messin around for fun
Do you know how many botnets exist because of shit game-engines that are easily exploited and connected peer-to-peer etc.
Lovely frameworks and engines... but really harmful if you ask me. People are unwitting victims of other peoples hobby projects.
You need to be responsible in this day and age. If you don't want to do the due dilligence, or are stapped for resources (time, knowledge, etc.) then it's best to for example, make a singleplayer game, or LAN only and disallow any IP addresses in your game not defined as internal class ranges.
Do have a hobby, and do have fun, but do so responsibly. You wouldn't want one of your works of love and passion to end up hurting someone would you? Simple steps can be taken to project the consumers of your lovecraft from the vicious world out there. It's sad this is needed, but that's no excuse not to do it. Humans should be better, but they are not.
I cringe every time they mention using the bots, but luckily it has been controllable.
A mere ten or so years ago I only wrote firmware in C and MacOS apps in objective-c. That was my world and it was all I knew, and all I’ve done for a long time.
Then something happened. Small startup. Website needs urgent fix and the web guy is MIA, so what the hell, I can take a stab at it.
Literally had no idea where to start. I didn’t know about npm, minified transpiling, much less actual testing and deployment. Could not make sense of anything anywhere. Hopelessly lost. I even grepped the JavaScript for “void main()” out of desperation. Just ridiculous
Still the most insane thing I've seen, but I know there are a lot of kids out of college who got used to gen AI for code writing who put out a lot of this kind of code. Also, coincidentally, we haven't hired any US college interns in about 3 years or so.
You just don't know how much they actually learned about programming as a discipline in its own right and it very well could be functionally zero. I've seen recent CS grads who didn't know how to use git, didn't know how to split code across multiple files or understand why you would even want to.
I think there's a fairly sound argument for these being different degrees, that a certain kind of researcher doesn't necessarily need these skills. But since it isn't there's just a huge range in how schools reconcile it.
Likewise, I think that any person who is going into the software development industry should either do it as one who gets a deep compsci education along with mandatory training in a modern practitioner skillset, or one who just learns how to practice software dev with just enough theory to handle basic problems. One could also go pure compsci, but the academia+practitioner path I mentioned earlier should have a separate title so that you can trust that the person with this credential has some baseline utility right out the gate.
Right now, "computer science" encompasses all of this, which is a huge problem for employers.
At the very least, it would be nice if we settled on some universal definitions for various job roles, including "computer scientist", "software engineer", "software developer", etc. Right now, all of these are floating signifiers!
The result is people that have no technical background, no real interest in it either, no basic framework to start from learning to use a specific set of tools and a very basic understanding of programming.
If you're surprised by reality, that says something about your mental model, not about reality. People don't want to "learn programming", they want to "make a thing". Some people learn programming while making a thing, but why learn about how the sausage is made when all you want is to eat it?
Hahaha, I wish that were true, but it’s not. Lots of people want to learn programming for learning and programming’s sake, or because programming is more lucrative than sausage making. I think I’ve worked with more programmers that care more about programming than the end result, than making something. It’s constantly frustrating and a huge source of over-engineering mistakes that have proliferated through engineering.
> why learn about how the sausage is made when all you want is to eat it?
Then why do sausages get made? It’s because not everyone only wants to eat them. There’s a variety of reasons people make sausages and also like eating them, from making money, to making high quality or interesting variety sausages, to being self-sufficient and not paying others for it, to learning about how it’s done. It’s been my experience that the more someone cares about eating sausages, the more likely they are to dabble in making their own.
How many arguments have we heard here along the lines of "why teach algorithms universities should be teaching _insert_fad_technology_of_the_day_." Big Oh and time complexity is a special favourite for people to pick on and accuse of being useless or the like. You see it in arguments around SQL vs document databases, people not being willing to recognize that their for loops are in fact the same as performing joins, people unwilling to recognize that yes they have a data schema even if they don't write it down.
So I'm not surprised at all that people would use AI as a substitute for learning. Those same people have likely gotten by with stackoverflow copypasta before gen AI came about.
Before LLMs you'd probably have to reach for learning Python or Javascript sooner, at least if StackOverflow didn't have the right code for you to copy/paste, but I expect anyone who sticks with it will get there eventually either way.
I think amateur "trading" attracts a specific brand of idiot that is high/left on the Dunning Kruger curve. While taking money from idiots is a viable (even admirable) business strategy, you may want to fully automate customer service to retain your sanity.
[0]: https://news.ycombinator.com/item?id=41308599
https://www.mcgill.ca/oss/article/critical-thinking/dunning-...
> The two papers, by Dr. Ed Nuhfer and colleagues, argued that the Dunning-Kruger effect could be replicated by using random data.
I can also generate random data that looks like any distribution by carefully choosing the random distribution. What's their point?
Providing an API service to customers means you will get terrible client code. Sometimes it's dumb stuff like not respecting rate limits and responding to errors by just trying again. One option, if you don't want to fix it yourself, is to partner with a consultant who will take it on, send your customers to them. Bill (or set your API access rates) appropriately.
Sometimes you have to fire customers. Really bad ones that cost more than they bring in are prime candidates for firing, or for introducing to your "Enterprise Support Tier".
It's got a long way to go to even stack up to bad programmers that somehow are always able to find a job somewhere.
Modern generative stuff like LLMs and image diffusers counts at least as much as the various older used-to-be-AI things.
On the other hand, if you ask it if it's artificially intelligent, it says yes: https://chatgpt.com/share/37517e92-4c53-4053-846f-ab513e1dc9...
While you are free to make up any definition you want on the spot, so are others. Yes, language models are just plain old boring machine learning like any other, but machine learning is a subset of what most people consider to be the area of AI.
> When we get actual AI (not counting on anytime soon) it will be more than the annoyed developer that loses their job
Again, while you can define things however you please, so can everyone else. This is what most people would consider AGI, not AI.
In this case, you could create examples for your API in common programming languages, publish them on the product website, and even implement an automatic test that would verify that your last commit didn't break them. So, most of the non-programmer inquiries can be answered with a simple link to the examples page for the language they want.
As a bonus point, you will get some organic search traffic when people search for <what your API is doing> in <language name>.
If someone asked "I wrote some rough designs and interfaces, can you write me an app for free?" The author could easily detect it as a request for free work. But because the first part is hidden behind some ChatGPT generated code and the second part is disguised as a request for help, the author would be tricked into doing this free work, until they detected this pattern and write a blog post about it.
in volume, this turns into support writing the code.
I think of how the south park movie folks sent so much questionable content to the censors that the compromise in the end let through lots of the puppet sex.
So what was a difficult problem can quickly become insurmountable.
There's been multiple stories and posts here on HN about issues with AI generated PRs for open source repos because of people using them to game numbers or clout. This is a similar problem where you have a bunch of people using your API and then effectively trying to use you for free engineering work.
On the other hand, I look around the room I am in and it is filled mostly with "low quality" Chinese made products. While you can't compare these products to expensive, expertly crafted, high end products, there is another scaling law at play when it comes to price. The low quality Chinese products are so cheap that I don't even consider the more expensive options. When the low quality desk lamp is close enough and 20x cheaper than the well made desk lamp, there is no decision point for me.
If it breaks, I will just buy another one.
ATMs were meant to kill banking jobs but ah theres more jobs in banking than ever.
The Cloud was meant to automate away tech people, but all it did was create new tech jobs. A lot of which is cleaning up after idiots who think they can outsource everything to the cloud and get burned.
LLMs are no different. The "Ideas Man" can now get from 0 to 30% without approaching a person with experience. Cleaning up after him is going to be lucrative. There are already stories about businesses rehiring graphic designers they fired, because someone needs to finish and fine tune the results of the LLM.
ATMs only handle basic teller functions and since COVID in NYC I had to change banks twice because I couldn't find actual tellers or banks with reasonable open hours. BoA had these virtual-teller only branches and the video systems were always broken (and the only option on Saturday). This was in Midtown Manhattan and my only option was basically a single branch on the other side of town 8-4 M-F.
I'm now happily with a credit union but at least since moving to the south things are generally better because customers won't tolerate not being able to deal with an actual person.
US banks, who are surprisingly behind the times in as far as automation goes. Here a lot of banks used a lot of automation to reduce the amount of manual jobs needed. to the degree that many offices are now also closing as everything can be done online.
And no, there is no need to visit banks here as I get the impression it is in the US. We don't even have physical checks anymore.
It won't be flawless but if the issues are as basic as stated in this article, then it seems like a good option.
It will cost money to use the good models though. So I think the first step would be to make sure if they ask for an invalid endpoint it says that in so many words in the API response, and if they ask for an invalid property it states that also.
Then if that doesn't give them a clue, an LLM scans incoming support requests and automatically answers them. Or flags them for review.. To prevent abuse, it might be a person doing it but just pressing a button to send an auto-answer.
But maybe a relatively cheap bot in a Discord channel or something connected to llama 3.1 70b would be good enough to start, and people have to provide a ticket number from that bot to get an answer from a person.
Maybe the chat bot can recognize a botched request and even suggest a fix but what then? It certainly won't be able to convert the user's next request into a working application of even moderate complexity. And do you really want a chat bot to be the first interaction your customers have.
I think this is why we haven't seen these things take off outside of very large organizations who are looking to save money in exchange for making customers ask for a human when they need one.
But, I mean, that doesn't make sense even for humans, right? 99% of the errors I make, I can easily correct myself because they're trivial. But you still have to go through the process of fixing them, it doesn't happen on its own. Like, for instance, just now I typoed "stil" and had to backspace a few letters to fix it. But LLMs cannot backspace (!), so you have to put them into a context where they feel justified in going back and re-typing their previous code.
That's why it's a bit silly to make LLM code, try to run it, see an error and immediately run to the nearest human. At least let the AI do a few rounds of "Can you spot any problems or think of improvements?" first!
Unless he's so good at selling his services he can consistently find new clients. And if that's the case, he'd probably kill it in sales.
That business model only works until customers are sophisticated enough to understand tech debt. In the future, more customers will be less willing to pay the same good wages for low quality code.
I can completely believe someone had no idea what they were doing when copy/pasting, and working on wordpress.
I think the problem with “AI” code is that many people have almost a religions belief. There’re weirdos on internet who say that AGI is couple years away. And by extension current AI models are seen as something incapable of making a mistake when writing code.
So I hope you're right, but the evidence is currently that you're wrong. Let's see how it plays out, I suppose.
- That said, surely traffic will decline for Q&A sites. "How do I connect tab A into slot B" is something that people are likely to query LLMs for; the response will surely sound authoritative, and could be even correct. That's definitely a task where LLMs could help: common questions that have been asked many times (and as such, are likely to be well-answered in the human-made training data). A 20001st question of "how do I right-align a paragraph in HTML" has not been posted? Good. Rote tasks are well-suited to automation. (Which, again, brings us back to the issue "how to distinguish the response quality?")
Now imagine that HTMZ comes along and people just go straight to asking how to full justify text in HTMZ for their smart bucket. What happens? I doubt we’ll get good answers.
It feels like the test of whether LLMs can stay useful is actually whether we can stop them from hallucinating API endpoints. If we could feed the rules of a language or API into the LLM and have it actually reason from that to code, then my posed problem would be solved. But I don’t think that’s how they fundamentally work.
So, I think the answer is that since all useful data is already in a LLM somewhere all new data will be stolen/scraped and inserted in real time. So if real people are answering the question it will work as normal. The real question is what happens when people are trying to mine karma by answering questions using an LLM that is hallucinating. We have seen such with the Bug Bounty silliness going on.
The problem, of course, is that this might work once in a while for low hanging fruit, until the web inherited things like DICOM and we now have medical imaging in the web browser (I've heard in Apple Vision Pro), where robotics implies the price of unforeseen bugs is not accidental death or dismemberment of one patient, but potentially many.
His clients were usually older small business owners that just wanted a web presence. His rate was $5000/site.
Within a few years, business dried up and he had to do something completely different.
He also hosted his own smtp server for clients.It was an old server on his cable modem in a dusty garage. I helped him prevent spoofing/relaying a few times, but he kept tinkering with the settings and it would happen all over again.
Arguably the term for a bad idea that works is "good idea"
Hear hear!
I feel like genAI is turning devs from authors to editors. Anyone who thinks the latter is lesser than the former has not performed both functions. Editing properly, to elevate the meaning of the author, is a worthy and difficult endeavor.
Certainly if you are in a conversation mode after a few back and forths this happens from time to time.
I am just not going to spend my time digging to previous prompts of code I might not want to share just to satisfy a random internet person .
Maybe you meant the latter?
Lots of mistakes, but never this one.
"Create Python code for iterating a file with a cache."
But this is actually so much worse for that same reason - the type of developer who'd submit Copilot output (I can call it that, as it's definitely not code) for a PR is unable to respond to any comment beyond asking Copilot again and wasting everyone's time with 6 more rounds of reviews. I've literally had to write test cases for someone else and told them "You can't ask for another code review until your code passes these."
Such a good idea :-) Maybe for job applications too and any at home work sample tests
With the big difference obviously being that typically the developer who writes the test also will write the code.
In some situations, this actually makes sense to do with junior developers as part of their training. Where a senior developer sits down with them and write out the tests together, then with the tests as a guide they are thrown into the waters to develop the functionality.
Of course, I suspect that in this case, you were not dealing with a junior. Rather the sort of person who looks at your tests, still is confused and asks for a "quick call" to talk about the tests.
The only thing I'd call an actual mistake is using an empty list to mean both an empty file and an uninitialised value.
iterating over the file object at all instead of just calling self.cache = openFile.readlines() means that calling strip() the line below removes data beyond just the trailing newlines.
Well. We definitely agree on that.
Just don't mess with the system-wide installed version of python and it will be fine. This isn't a python specific issue though.
(https://aider.chat/docs/install/pipx.html will install it globally on your system within its own python environment. This way you can use aider to work on any python project, even if that project has conflicting dependencies.)
I run it with these settings: `aider --sonnet --no-auto-commits--cache-prompts`
if you want to run the most bleeding edge version at the same time without breaking anything,
`pipx install --suffix=@dev git+https://github.com/paul-gauthier/aider.git`
then run it with `aider@dev`
`aider@dev` ... with your desired settings
Many statically typed languages do have escape hatches to do some dynamic typing at runtime, but this is not the default (hence the classification), and it requires some additional effort to use.
I'm the first to bash JS, but this is not a JS issue. It's 100% a "bad and lazy" human actor that is throwing spaghetti on the wall to see what sticks. In this case, they have a minigun cannon called ChatGPT/CoPilot that is letting them do more of it than what they used to.
if [ -z "${Var}+x" ]
Where I can see what the author was trying to do, but the code is just wrong.
I dont mind people not knowing stuff, especially when it's essentially Bash trivia. But what broke my heart was when I pointed out the problem, linked to the documentation, but recieved the response "I dont know what it means, I just used copilot" followed by him just removing the code.
What a waste of a learning opportunity.
There were many times in my career when I had what I expected to be a one-off issue that I needed a quick solution for and I would look for a quick and simple fix with a tool I'm unfamiliar with. I'd say that 70% of the time the thing "just works" well enough after testing, 10% of the time it doesn't quite work but I feel it's a promising approach and I'm motivated to learn more in order to get it to work, and in the remaining 20% of the time I discover that it's just significantly more complex than I thought it would be, and prefer to abandon the approach in favor of something else; I never regretted the latter.
I obviously lose a lot of learning opportunities this way, but I'm also sure I saved myself from going down many very deep rabbit holes. For example, I accepted that I'm not going to try and master sed&awk - if I see it doesn't work with a simple invocation, I drop into Python.
E.g. maybe it would be very 'elegant' or rather concise awk if I could overcome the learning opportunity, but like you I would probably decide not to; I'll do it with the sed I do know even if it means some additional piping and cutting or grepping or whatever that awk could've done in one, because I already know it and it's going to be clearer to me and probably anyone else I'm working with.
I think we're saying quite similar things, but my point is I wouldn't be deleting it, dismissing the idea, and disappointing the colleague ready to teach me about it - because I never would've been willing to blindly try broken AI generated (or however sourced) code that I didn't understand in the first place.
An afternoon learning your way around bash or vim will save you countless of hours of work, just because you will know what the building blocks are, you will be able to ask the right questions directly instead of chasing down alleys.
It's not the same thing as learning yet another language. It's a separate type of tool. Developing software without knowing an editor or a shell is like refusing to learn what a file is or what an ip address is. Sure, you can probably get work done in roundabout ways, but it's certainly not rational.
It is not nonsense. You use that expression if you want to check if a variable exists or not (as opposed to being set to an empty string) which is an extremely common problem.
But I agree I wouldn't extrapolate too much from one such brain fart
There was a real and correct analysis that, hey, I want to make sure the variable is set here. Only to then drop it because you get told the syntax is wrong. The response I'm looking for when I say "This syntax won't do what you're looking to do" would be something like "what am I trying to do? and why wont this do it?" not "well it's just some AI code, I'll just remove it".
Generative AI: hold my bear
True, but the anecdote doesn't prove the point.
It's easy to miss that kind of difference even if you wrote the code yourself.
The developer in the story had no idea what the code did, hence they would not have written it themselves, making it impossible for them to “miss” anything.
Asking it to refactor / fix it made it worse bc it'd get confused, and merge them into a single variable — the problem was they had slightly different uses, which broke everything
I had to step through the code line by line to fix it.
Using Claude's still faster for me, as it'd probably take a week for me to write the code in the first place.
BUT there's a lot of traps like this hidden everywhere probably, and those will rear their ugly heads at some point. Wish there was a good test generation tool to go with the code generation tool...
Having mistakes in context seems to 'contaminate' the results and you keep getting more problems even when you're specifically asking for a fix.
It does make some sense as LLMs are generally known to respond much better to positive examples than negative examples. If an LLM sees the wrong way, it can't help being influenced by it, even if your prompt says very sternly not to do it that way. So you're usually better off re-framing what you want in positive terms.
I actually built an AI coding tool to help enable the workflow of backing up and re-prompting: https://github.com/plandex-ai/plandex
But in my experience, if you continue iterating from that point, there's still a risk that parts of the original broken code can leak back into the output again later on since the broken code is still in context.
Ymmv of course and it definitely depends a lot on the complexity of what you're doing.
The challenge is writing in a tone that will gently move the conversation rather than refocus it. I can’t just inject “remember point n+1” and hope that’s not all it’ll talk about in the next frame.
If nothing else, LLMs have helped me understand exactly why GIGO is a fundamental law.
https://news.ycombinator.com/item?id=40922090
LSS: metaprogramming tests is not trivial but straightforward, given that you can see the code, the AST, and associated metadata, such as generating test input. I've done it myself, more than a decade ago.
I've referred to this as a mix of literate programming (noting the traps you referred to and the anachronistic quality of them relative to both the generated tests and their generated tested code) wrapped up in human-computer sensemaking given the fact that what the AI sees is often at best a lack in its symbolic representation that is imaginary, not real; thus, requiring iterative correction to hit its user's target, just like a real test team interacting with a dev team.
In my estimation, it's actually harder to explain than it is to do.
Artificial Incompetence indeed!
Yes.
AI as a faster way to type: Great!
AI as a way to discover capabilities: OK.
Faster way to think and solve problems: Actively harmful.
It's your fault really. You don't build custom software for guys having the intellectual capacity and budget of a tractor driver unless you enjoy pain.
One thing I loved about doing technical enterprise sales is that I’d meet people doing something I knew little or nothing about and who didn’t really understand what we offered but had a problem they could explain and our offering could help with.
They’d have deep technical knowledge of their domain and we had the same in ours, and there was just enough shared knowledge at the interface between the two that we could have fun and useful discussions. Lots of mutual respect. I’ve always enjoyed working with smart people even when I don’t really understand what they do.
Of course there were also idiots, but generally they weren’t interested in paying what we charged, so that was OK.
> Helping a customer solve challenges is often super rewarding, but only when I can remove roadblocks for customers who can do most of the work themselves.
So I feel a lot of sympathy for the author — that would be terribly soul sucking.
I guess generative grammars have increased the number of “I have a great idea for a technical business, I just need a technical co founder” who think that an idea is 90% of it and have no idea what technical work actually is.
Before that, I worked in a digital print organisation with a factory site. This factory did huge volumes on a daily basis. It was full of machines. They had built up a tech base over years, decades, and it was hyper-optimised - woe betide any dev who walked into the factory thinking they could see an inefficiency that could be refactored out. It happened multiple times - quite a few devs, myself included, learned this lesson the hard way - on rare occasion thousands of lines of code had to be thrown out because the devs hadn't run it past the factory first.
It's an experience I'd recommend to any dev - build software for people who are not just "users" of technology but builders themselves. It's not as "sexy" as building consumer-facing tech, but it is so much more rewarding.
https://pump.fun/board