this article is incredibly long and rambly, but please enjoy as this asshole struggles to select random items from an array in presumably Javascript for what sounds like a basic crossword app:
At one point, we wanted a command that would print a hundred random lines from a dictionary file. I thought about the problem for a few minutes, and, when thinking failed, tried Googling. I made some false starts using what I could gather, and while I did my thing—programming—Ben told GPT-4 what he wanted and got code that ran perfectly.
Fine: commands like those are notoriously fussy, and everybody looks them up anyway.
ah, the NP-complete problem of just fucking pulling the file into memory (there’s no way this clown was burning a rainforest asking ChatGPT for a memory-optimized way to do this), selecting a random item between 0 and the areay’s length minus 1, and maybe storing that index in a second array if you want to guarantee uniqueness. there’s definitely not literally thousands of libraries for this if you seriously can’t figure it out yourself, hackerman
I returned to the crossword project. Our puzzle generator printed its output in an ugly text format, with lines like "s""c""a""r""*""k""u""n""i""s""*" "a""r""e""a". I wanted to turn output like that into a pretty Web page that allowed me to explore the words in the grid, showing scoring information at a glance. But I knew the task would be tricky: each letter had to be tagged with the words it belonged to, both the across and the down. This was a detailed problem, one that could easily consume the better part of an evening.
fuck it’s convenient that every example this chucklefuck gives of ChatGPT helping is for incredibly well-treaded toy and example code. wonder why that is? (check out the author’s other articles for a hint)
I thought that my brother was a hacker. Like many programmers, I dreamed of breaking into and controlling remote systems. The point wasn’t to cause mayhem—it was to find hidden places and learn hidden things. “My crime is that of curiosity,” goes “The Hacker’s Manifesto,” written in 1986 by Loyd Blankenship. My favorite scene from the 1995 movie “Hackers” is
most of this article is this type of fluffy cringe, almost like it’s written by a shitty advertiser trying and failing to pass themselves off as a relatable techy
Is it just me or isn't this not even that tricky (just a bit of work, so I agree with him on the free evening thing, esp when you are a bit rusty)? Anyway, note how he does give a timeframe for doing this himself (an evening) but doesn't mention how long he worked on the chatgpt stuff, nor does he mention if he succeeded at his project at all
It's not tricky at all, but it is tedious. It's tedious precisely because it isn't tricky. There's little essential complexity in the task (so it isn't fun to solve unless you're a beginner), but it's buried in a lot of incidental complexity.
The thing I've personally gotten most actual real-world utility out of LLMs for is ... writing VimL scripts, believe it or not. VimL is a language that's almost entirely made out of incidental complexity, and the main source of friction (at least to me) is that while I use Vim all the time, I rarely write new VimL scripts, so I forget (repress?) all the VimL trivia that aren't just simple compositions of my day-to-day commands. This is exactly what you'd expect LLMs to be good at: The stakes are low, the result is easy to test, the scripts I need are slight variations over various boring things we've already done a ton of times, and writing them requires zero reasoning ability, just a large pile of trivia. I'd prefer it if Vim had a nicer scripting language, but here we are.
They still screw it up, of course, but given that I never want a VimL script to be very large anyway, that's easy to fix.
Yeah I was mentally already thinking about different datastructures and how to convert via various ones to solve the crossword puzzle thing (before I went 'wtf am I doing') and was already annoyed by a bit of the tedium of the problem.
And that is interesting that it works well for scripting like that.
I do now wonder, how much of the working with LLMs for code is partially the rubber duck effect. That while talking to a LLM and trying to get it to generate code you want are you already working out the problem more and more?
For the example problem: If the dictionary file comfortably fits in memory and this was just a one-off hack, I probably wouldn't even have to think about the solution; it's a bash one-liner (or a couple lines of Python) and I can a certainly write it faster than I could prompt an LLM for it. If I'm reading the file on a Raspberry Pi or the file is enormous, I'd use one of the reservoir sampling algorithms. If performance isn't all that important I'd just do the naive one (which I could probably hack up in a couple of minutes), if I needed an optimal one I'd have to look at some of my old code (or search the internet). An LLM could probably do the optimal version faster than I could (if prompted specifically to do so) ... but obviously I'd have to check if it got it right, anyway, so I'm not sure where the final time would land.
I am sure, however, that it'd be less enjoyable. And this (like I think the author is trying to express) is saddening. It's neat that the hardware guy in the story could also solve a software problem, but a bit sad that he can do it without actually learning anything, just by prompting a machine built out of appropriated labour - I imagine this is what artists and illustrators feel about the image generators. It feels like skills it took a long time to build up are devaluing, and the future the AI boosters are selling - one where our role is reduced to quality controlling AI-generated barf, if there's a role left for us at all - is a bleak one. I don't know how well-founded this feeling actually is: In a world that has internet connections, Stack Overflow, search engines and libraries for most of the classic algorithms, the value of being able to blam out a reservoir sampling algorithm from memory was very close to zero anyway.
It sure wasn't that ability I got hired for: I've mentioned before that I've not had much luck trying to use LLMs for things that resemble my work. I help maintain an open-source OS for industrial embedded applications. The nice thing about open source is that whenever we need to solve some problem someone else already solved and put under an appropriate license, we can just use their solution directly without dragging anything through an LLM. But this also definitionally means that we spend pretty much all our time on problems that haven't been solved publicly (and that LLMs haven't seen examples of). For us, at the moment, LLMs don't help with any of the tasks we actually could use help with. Neither does Stack Overflow.
But the explicit purpose of generative AI is the devaluation of intellectual and creative labour, and right now, a lot of money is being spent on an attempt to make people like me redundant. Perhaps this is just my anxiety speaking, but it makes me terribly uneasy.
I’ve been conducting DevOps and SRE interviews for years now. There’s a huge difference between someone that can copypasta SO code and someone that understands the SO code. LLMs are just another extension of that. GitHub Copilot is great for quickly throwing together an entire Terraform file. Understanding how to construct the project, how to tie it all together, how to test it, and the right things to feed into Copilot requires actually having some skill with the work.
I might hire this person at a very junior level if they exhibited a desire to actually understand what’s going on with the code. Here an LLM can serve as a “mentor” by spitting out code very quickly. Assuming you take the time to understand that code, it can help. If you just commit, push, deploy, you can’t figure out the deeper problems that span files and projects.
To me the only jobs that might not be safe are for executives a good programmer probably doesn’t want to work for.
I'm not personally concerned that any currently-existing ML system can take my job. The state-of-the-art ones can barely help me in my job, let alone do it for me. The things I've found them to be good at are things I spend very little time at work actually doing.
But they're vaguely shaped like something that can take our jobs, and I don't know if they'll turn into that. So I worry - in part also for the purely personal reason that I'm a disabled, middle-aged guy who's seen better days; a hypothetical future labour market that has no need for programmer-shaped brains anymore is one that people like me would probably do very poorly in.
I help maintain an open-source OS for industrial embedded applications.
fuck yes. there’s something weirdly exciting about work like that — not only is it a unique set of constraints, but it’s very likely that an uncountable number of people (myself possibly included) have interacted with your code without ever knowing they did
But the explicit purpose of generative AI is the devaluation of intellectual and creative labour, and right now, a lot of money is being spent on an attempt to make people like me redundant. Perhaps this is just my anxiety speaking, but it makes me terribly uneasy.
absolitely same. I keep seeing other programmers uncritically fall for poorly written puff pieces like this and essentially do everything they can to replace themselves with an LLM, and the pit drops out of my stomach every time. I’ve never before seen someone misunderstand their own career and supposed expertise so thoroughly that they don’t understand that the only future in that direction is one where they’re doing a much more painful version of the same job (programming against cookie cutter LLM code) for much, much less pay. it’s the kind of goal that seems like it could only have been dreamed up by someone who’s never personally survived poverty, not to mention the damage LLM training is doing to the concept of releasing open source code or even just programming for yourself, since there’s nothing you can do to stop some asshole company from pilfering your code.
the only future in that direction is one where they’re doing a much more painful version of the same job (programming against cookie cutter LLM code) for much, much less pay.
To the extent that LLMs actually make programming more “productive”, isn’t the situation analogous to the way the power loom was bad for skilled handweavers whilst making textiles more affordable for everyone else?
I should perhaps say that I’m saying this as someone who is just starting out as a web developer (really chose the right time for that, hah). I try to avoid LLMs and even strictly unnecessary libraries for now because I like learning about how everything works under the hood and want to get an intimate grasp of what I’m doing, but I can also see that ultimately that’s not what people pay you for that and that once you’ve built up sufficient skill to quickly parse LLM output, the demands of the market may make using them unavoidable.
To be honest, I feel as conflicted & anxious about it all as others already mentioned. Maybe I am just too green to fully understand the value that I would eventually bring, but can I really, in good conscience, say that a customer should pay me more when someone else can provide a similar product that’s “good enough” at a much lower price?
since there’s nothing you can do to stop some asshole company from pilfering your code.
Currently. Though I think that there is a future where adversarial machine learning might be able to greatly increase the cost of training on pilfered data by encoding human generated inputs in a way that runs counter to training algorithms.
I would have expected JS standard library to contain something along the lines of random.sample but apparently not. A similar thing exists in something called underscore.js and I gotta say it's incredibly in-character for JavaScript to outsource incredibly common utility functions to a module called "_".
Language bashing aside, there's something to enjoy about these credulous articles proclaiming AI superiority. It's not the writing itself, but the self-esteem boost regarding my own skills. I have little trouble doing these junior dev whiteboard interview exercises without LLM help, guess that's pretty impressive after all!
It's so incredibly easy to randomly select a few lines from a file that it really doesn't need to be in the standard library. Something like 4 lines of code could do it. Could probably even do it in a single unreadable line of code.
I haven't touched Perl in years so if I decided to do it in Perl it might take a couple hours. If I decided it should be my Hello World program in Go, which I've never used, then I dunno, maybe an evening, to account for reading docs? In Python (or Perl back when I used it every day), then yeah, 30-60 minutes, with another hour to make it pretty and testable.
Build a dictionary with the word extractions, bung it in Beautiful Soup. All the time would be spent on the CSS, ffs.
ah, the NP-complete problem of just fucking pulling the file into memory (there’s no way this clown was burning a rainforest asking ChatGPT for a memory-optimized way to do this),
It's worse than that, because there's been incredibly simple, efficient ways to k-sample a stream with all sorts of guarantees about its distribution with no buffering required for centuries. And it took me all of 1 minute to use a traditional search engine to find all kinds of articles detailing this.
If you can't bother learning a thing, it isn't surprising when you end up worshiping the magic of the thing.
reading back, I wonder if they were looking for a bash command or something that’d do it? which both isn’t programming, and makes their inability to find an answer in seconds much worse
Our puzzle generator printed its output in an ugly text format... I wanted to turn output like that into a pretty Web page that allowed me to explore the words in the grid, showing scoring information at a glance. But Iknew the task would be tricky: each letter had to be tagged with the words it belonged to, both the across and the down. This was a detailed problem
I'm so confused. how could the generator have output something that amounts to a crossword, but not in such a way that this task is trivial? does he mean that his puzzle generator produces an unsorted list of words? what the fuck is he talking about
you know, you’re fucking right. I was imagining taking a dictionary and generating every valid crossword for an N x N grid from it, but like you said he claims to already have a puzzle generator. how in fuck is that puzzle generator’s output just a list of words (or a list of whatever the fuck "s""c""a""r""*""k""u""n""i""s""*" "a""r""e""a" is supposed to mean, cause it’s not valid syntax for a list of single characters with words delimited from * in most languages, and also why is that your output format for a crossword?) if it’s making valid crossword puzzles?
fractally wrong is my favorite kind of wrong, and so many of these AI weirdos go fractal
I... think (hope??) the "*" is representing filled in squares in the crossword and that he has a grid of characters. But in that case the problem is super easy, you just need to print out HTML table tags between each character and color the table cell black when the character is "*". It takes like 10 minutes to solve without chatgpt already. :/
@self This was the point where I started wanting to punch things:
“At one company where I worked, someone got in trouble for using HipChat, a predecessor to Slack, to ask one of my colleagues a question. “Never HipChat an engineer directly,” he was told. We were too important for that.”
Bless his heart. That, dearie, isn’t “engineers are so special”, it’s managers wanting to preserve old-fashioned lines of communication and hierarchy because they fear becoming irrelevant. Gatekeeping access to other people’s knowledge to make yourself important goes back millennia.
Really love the bit about how gpt is able to tackle the simple stuff so easily. If an original insight, I take my hat off to you. I came to the edge of it, but never quite really saw it as you point out.
if you never have, find YouTube videos of folks trying to use an LLM to generate code for a mildly obscure language. one I watched that gave the game away was where someone tried to get ChatGPT to write a game in Commodore BASIC, which they then pasted directly into a Commodore 64 emulator to run. not only did the resulting “game” perform like a nonsensical mashup of the simple example code from two old programming books, there was a gigantic edit in the middle of the video where they had to stop and make a significant number of fixes to the LLM’s output, where it either fictionalized something like a line number or constant, or where the mashup of the two examples just didn’t function. after all that programming on their part for an incredibly substandard result, their conclusion was still (of course) that the LLM did an amazing job