The author doesn’t understand the reason for the bimodal distribution of attorney compensation. If you look at a distribution of salaries overall, they are not smooth. There will be small peaks at round numbers, $60k, $70k, 80k, etc., rather than a smooth curve from 60->80. People like round numbers.
The top peak in the law is due to human bias just the same.
>Just like how a partner at Cravath likely sketches an outline of how they want to approach a particular case and swarms of largely replaceable lawyers fill in the details…
Except those “replaceable” attorneys at Cravath are the top peak of the distribution. The distribution is caused by social decisions of what firms to compete with. Top salary information is well-publicized and firms who want to be in the category of “BigLaw” basically match each other.
The lower peak of the distribution is more local attorneys. Your local estate law attorney, government workers like district attorneys/public defenders, etc. who are not competing with Cravath for talent or clients.
I would assume this is already what exists in programming with “BigTech” salaries being equivalently publicized and matched across firms concerned with being perceived to be a “FAANG+”. If it doesn’t, I would guess the reason is that not enough positions actually exist in “BigTech” to make a significant blip on a population-wide salary graph. BigLaw attorneys exist in almost every medium-large city in the US, but you can’t say the same about BigTech programmers.
Law is extreme because you have people who went to a relative handful of law schools, clerked for federal court justices including SCOTUS, and work at white shoe big city law firms (like Cravath)--and everyone else. Yes, senior partners make more than junior partners make more than associates at those firms but it's also sort of up or out (and the out associates tend to move on to other things).
And then there are the, as you say, local attorneys doing routine real estate transactions or whatever. Which tend to be pretty middling compensation generally.
The story isn't quite that neat of course. Big company in-house counsels tend to be reasonably well compensated professional jobs and there are successful owners/partners of local law practices but there's a pretty good bimodal narrative in general.
You can imagine why there might be a modality for people who can land jobs at specific tech companies that pay outsized salaries because they're so profitable and can afford to be very selective based on (they hope) relevant criteria but it's certainly based on less clear metrics if nothing else.
> went to a relative handful of law schools, clerked for federal court justices including SCOTUS, and work at white shoe big city law firms
This is the "not what you know, it's WHO you know" pattern. I imagine it's likely to accelerate. It'll still be important to go to the right university and pay expensive tuition - probably even MORE important - but you'll be able to have AI do most of the tedious, irrelevant academic side while you focus on the very important business of going to parties with the right people.
It does seem to me a lawyer's pedigree is as important as the types of arguments they bring to the case.
I imagine this bias exists because law schools are a dime a dozen, and lawyers have created another form of gatekeeping to augment their licensing rules.
Agreed. I was entering the law field around 2001.
1) During 1990's, silicon valley startups started poaching talented lawyers from west coast law firms.
2) To combat this, some top west coast law firms raised their salaries to retain talent.
3) At the same time, junior lawyers in NYC and CA starting sharing salary information on Internet message boards.
4) Almost over night, top NYC law firms raised their salaries to match the CA salaries.
5) So the bimodal distribution was formed from the "top" law firms all match each other's salaries.
There is research [1] that suggests using GPS navigation could impact your brain function negatively. I wonder how this code generation “assistant” will impact the coding skills of its users in long term.
As for the LLMs, stochastic parroting (hallucination), which is inherent to its design, makes it untrustworthy for precision work. Maybe some other architecture will prove more useful. LLMs can generate BS authoritatively which is easy to detect for toy examples and forgivable by the AI hype train but can be very costly or hard to fix in a complex system with a lot of moving parts.
I’m actually optimistic about the future of AI. At the same time I believe we should know the capabilities and understand the limitations of our tools in order to use them more effectively. Unfortunately people are misunderstanding tools like ChatGPT, etc. for we are human and vulnerable to anthropomorphism.
I wonder how this code generation “assistant” will impact the coding skills of its users in long term.
My brain is already negatively impacted having to juggle 3 separate package managers, know the syntax and inputs for 17+ different dotfiles in a repo and then actively context switch between at least 3-4 languages on a daily basis. I counted it up recently and I've built products in at least 20 languages over the past two+ decades. At some point you really just can't effectively compartmentalize it all and context switch perfectly. I try by using different fonts+colors per lang etc but it still is hard. AI has been a net win for syntax recall just by giving it gentle nudges towards intent.
Why are you touching 17 different dotfiles on a regular basis to require knowing their syntax/inputs ?
I've done a similar number of platform jumping but I honestly don't remember when I've used more than 3 or 4 at the same time. Like I was really into Clojure for ~1 year back around ~2010 - if you put me on a clojure project I'd be lost for a month. I wouldn't need to get over LISP and functional programming mindset again but the details are lost.
At this point I rarely see big paradigm shifts and it's just picking up the details + connecting with things I already know. I've outsourced remembering details to Google :)
I didn’t mean just any negative impact like getting tired from context switching or feeling exhausted because the workload is high.
What I meant was: Will you lose it if you don’t use it?
Maybe you won’t, I am not certain. Or maybe you will and you don’t see it now because the “net win for syntax recall just by giving it gentle nudges towards intent” relies on your hard earned ability to understand the code which is gained partly through exercise. You’ve already done your exercise.
I wouldn’t form an opinion just yet. For now we can ask the questions.
But losing it may free up resources to gain other things. Like how "losing" assembly skills allowed people to dedicate more capability to higher-level approaches.
Sure that could happen. Nothing against that. But I am not fully confident. As a counter example, we have ORMs. They bring value but I have seen enough devs who are too reliant on it and don’t develop a good understanding of how the underlying database behaves. This could be actually detrimental to the work.
Maybe we will have a mixed result similar to ORM example. It can lower the barriers to entry, which is good, but won’t eliminate the need for deep expertise. At least initially.
I sincerely doubt it, humans are historically poor at multitasking, being able to focus on solving problems at an architectural and algorithmic level requires concentration - not having to worry about some bull crap DevOps cloud formation nonsense.
I agree but there is a certain "god of the gaps" process that's happening here.
To me what's been achieved so far is encoding text into natural (and programming) languages. These models can't reason and e.g., can't pass a Turing test. For example, if you play with GPT-3 or ChatGPT enough you can definitely get it to fail on a task a human would succeed at.
When models so far have achieved "reasoning" behavior, usually it's in conjunction with a classical algorithm -- for example AlphaZero used a model to evaluate chess positions but then ran a tree search algorithm to decide what move to play.
I think if LLMs can be combined effectively with some kind of computation process like in AlphaZero or some kind of "chains of thought" [1], then we might see them do things we'd truly call "reasoning".
Some "gaps" have been (1) "(encoding into) images is hard" (2) "(encoding into) natural language is hard" and now (3) "'reasoning' is hard" and afterwards (4) "subjective experience is hard".
Whether to be optimistic or pessimistic about AI depends on the final "gap" -- whether there is an irreplicable/noncomputable/etc. property of human consciousness other than qualia. That is, if "understanding" is hard (e.g., via some voodoo like [2]). If not humans will become obsolete, so I hope the answer is yes.
> There is research [1] that suggests using GPS navigation could impact your brain function negatively.
Wrong, that research only shows that when you use a GPS, you don't learn routes as quickly. That is only equal to "impacts brain function negatively" in a narrow sense, which you should specify rather than use such a broad and scary-sounding phrase!
Who said I was scared? I'm just pointing out that the phrase you used it very vague and some interpretations can be scary. It pays to be specific, especially in tech and medicine, you know? Winkyface.
> There is research [1] that suggests using GPS navigation could impact your brain function negatively. I wonder how this code generation “assistant” will impact the coding skills of its users in long term.
I wonder how code completion and syntax highlighting have altered the brains of programmers negatively as well.
Have you never seen a project where exactly one use of a term is mistyped across whole project? Guess what tool is responsible for that.
Also there's distinct project structure difference between users of tree style project navigation vs find-anywhere or editor tabs vs modal windows/buffers.
I mean, the influence is not negative, at least not obviously, but the deformation is there.
Most programmers wish to be stupid. They willingly embrace philosophies predicated on their inability to be conscious and learn.
Goddamn do I hate this industry. I work hard to sow dissent in my blue-chip, VC startup though. Guerrilla tactics. And I get to do it raking in a quarter mil a year in my underwear.
It's a real struggle, the company I work for was just bought out by a megacorp (in the top 1,000 in the world by employee count, and most posters here would recognize their name) and the sheer lack of motivation to learn of many of the devs both at the acquired company and the acquiring company is staggering. Really basic stuff like "instead of package management let's pass DLLs around over email/Slack/wherever and then complain about all the time we have to spend debugging because of version mismatches." It's like they intentionally make things harder on themselves through willful ignorance.
I just tried ChatGPT today after weeks of hype on Twitter, and I was surprised to NOT be impressed?
First I tried it on a bunch of programming topics -- it definitely gets in the right ballpark, but then the details are frequently wrong.
I asked which languages have the F# |> operator, and it told me that OCaml, Elixir, Haskell and Scala do. 2 of them are correct, and 2 appeared wrong, so I googled it.
After Googling, then I asked it specifically if Haskell does, and it says no. I ask it if Scala does, and it apologizes for its earlier mistake.
It gave me a good although slightly shallow answer about how PyPy works, but then fell down hard for a prolog type checker, and a few other programming queries. It doesn't understand the question.
---
It is generally very mealy-mouthed and vague. It often doesn't answer the question directly, but just tells you what it happens to know in the ballpark.
I like another framing I saw on Twitter -- it's "mansplaining as a service". If you want someone to confidently explain things you didn't really ask about, and be frequently wrong, that's kinda what it does!!
---
After programming, I asked it about Black Sabbath, UFC, travel and biking, health, and got similarly vague/slightly incorrect answers.
It confabulates A LOT.
The best I can say is that Google is filled with spam now, so chatting with ChatGPT was a relatively fun and focused experience, after I took into account the fact that it is not "honest" and just trying to "please me" with closely related words.
I honestly don't get the hype, and I feel like there must have been some coordinated marketing aimed at me ...
If this chat is representative of what it can do for programming, then I think this article saying that "programmer salaries will be affected by LLM" is very weird.
It is assuming something that simply has NOT happened!
---
I mean even Geoff Hinton (who I respect) said several years ago that "we should stop training radiologists", and that plainly did not happen. Likewise with Elon and the fleet of self-driving taxis.
I'd honestly be surprised if someone wants to argue that a tech company staffed with LLMs + a few smart people is NOT like those predictions. Of course the blog post doesn't give a time frame, so it can't be falsified. But it appears to be nonsense.
(FWIW it doesn't matter to me personally, as I left the industry several years ago. Also FWIW I did work a little bit on deep learning, when the hype was in its upswing.)
I agree that a lot of it is anthropomorphism -- projecting some kind of intelligence, knowledge, or intention on what is really a big, expensive bag of data organized to respond to inputs.
Maybe there are other models that are better, but I was really, honestly not impressed with ChatGPT. Maybe people were hyping it too much for the last several weeks, and inflated my expectations.
This is not what it's good at at all. Not sure why people expect this to be it's forte.
It's like a really smart sheep dog or a junior junior carpenter. It's currently helping me refactor a .NET app to a trending pattern, not because it know how to do that exactly or which pattern is better, but because it doesn't tire out at the "boring" parts like I do, and it knows the difference (most of time) between IQueryable and ISomething that I just can't bother to google for the Nth time.
expectations are interesting things... i was impressed with chatgpt, though not blown away as it's simply the latest in a chain of increasingly impressive research demos. substantially though my experience was the same as yours, though perhaps i'm more forgiving (haskell does have a reverse function application operator, just using a different symbol, and you can get |> in scala via a commonly-used library).
i guess one difference might be that i also tried a variety of tasks where confabulation was called for, like making up games and getting it to play them with me.
all of this certainly does seem farther from productizability than the optimists admit... it tantalizingly 'almost works' in so many domains, but despite the rate of progress, its not obvious at all to me that it will soon converging on the reliability which is necessary for robust application.
playing with the tech in more creative areas has certainly expanded my mind as to what is and what may become possible, and i think this is true of the general reaction as well... it's the flashes of strangeness and potential, the weird use cases like simulated command lines and ascii art games, the cat-and-mouse of prompt injection... not hard to let your imagination run wild... depending on how much disbelief you're willing to suspend.
Yes, I too have found it to be completely unreliable when it comes to specifics. However, I've been finding it really helpful in a few areas:
- taking point form, or messy notes, and converting it to full sentences/paragraphs. Useful for things like writing blurbs, longer emails, proposals. Naturally, it does veer towards cliche, so you kind of have to massage it back after.
- getting a bash script started in the right direction. I'm always fuzzy on bash syntax because I don't use it all the time. ChatGPT will usually screw up some details, but those can be fixed
- getting a general overview of a new topic area like a new software library, or say a historical period
That vibes with the images from what I saw with Dall-E. The rendering/styling was superb, however, the logic and scene understanding were toddler-like.
Still impressive, but if you had a picture with dogs sometimes a dog head would be pasted on top at the wrong angle. Confabulation is a great term for it IMHO.
That's basically right, AI of the type we're discussing has high technical ability like ability to draw and make grammatically correct sentences, without understanding the higher level structure of what it's doing. A bit like an enthusiastic teenager.
But I can't see how people aren't impressed, we couldn't do this a few years ago, and surely we will build on top of this in coming years.
I tried it without reading anything about it and I freaked out about losing my job. Then I tried it for any practical programming and realised it was no immediate threat at least and I calmed down abit.
I mean "generate BS authoritatively" seems fairly similar to "fake it till you make it".. Some people writing code now generate BS authoritatively, some don't.
Comment here seem to largely miss the point of the article, which isn't saying that nobody will employ software engineers. It is saying that instead of the current model of:
1 very highly compensated staff+ engineer
4 highly compensated senior engineers
4 pretty well-compensated mid-level engineers
2 decently compensated junior engineers
The future might look like:
1 yet-more-highly-compensated staff+ engineer who specializes in architecture
10 decently compensated junior engineers who specialize in error-checking LLMs and detail-intensive technical work
In the same way that paralegals aren't unskilled people, and aren't paid terribly -- but they aren't doing the same job as the partner-level lawyer who's crafting the legal strategy, and they don't have a simple clean progression to eventually getting his job.
My issue with this is that I have never, and I mean never, met a good software architect that wasn't also extremely good at the nuts-and-bolts of coding. I mean, I've interviewed people who called themselves software "architects" who could barely code a for loop, and these people are generally pretty useless beyond churning out PowerPoint diagrams.
I feel like this idea that you can have a software architect that just corrales a bunch of lowly code monkeys is a model that was invented by some MBA, or IBM (sorry to dig at IBM, there are some brilliant folks there but also some folks that for the life of me I can't figure out what they could be doing day-to-day). Will something like ChatGPT make this a viable model? Potentially, but I doubt it. If anything, I think it would be more difficult for a junior-level programmer to point out the subtle bugs that ChatGPT produces.
Like most software innovations in the past, I think that code generative AI will essentially lead to a Jensen's paradox for software - it will allow existing skilled programmers to just write more code, thus lowering the overall cost of code, leading to more demand.
10 highly compensated middle managers and their staff who convinced the c suite to fire the senior engineers because of an AI article they read
2 poorly compensated junior developers with an AI bot replacing a 10 person team, who will get canned when SHTF so the 10 middle managers can jump ship to the next company with a padded resume. There are also 10 people because the middle managers got their friends positions from the savings due to the firing of the old engineers.
A team with "1 yet-more-highly-compensated staff+ engineer" would also have a pipeline of people one step below that for progression. Usually people who are "yet-more-highly-compensated" are not easy to poach and don't tend to change their job. You have to develop them internally. E.g. most DEs and Fellows in tech companies rose through the ranks over decades. It's very hard to hire a DE from the job market.
The unintuitive thing about software engineering is that low-level implementation and high-level architecture are both equally sensitive to quality of talent (and equally impact your product quality and business outcomes) because every line of code is a business decision. That's a big reason why even entry-level SWE talent costs so much. There is no paralegal-level work in software - it's been automated away.
If that's what it's saying then it's just like every other blog post or Tik Tok video from someone clueless person who's never worked in tech.
10 to 1 juniors to "senior" would have any "senior" quitting on day 1. Even 2 juniors will takes up > 50% of a seniors time to corral. 10 of them would be like a mob of people all screaming at you.
Add into that mix an AI chatbot spitting out partially incorrect stuff to all 10 of these juniors that is completely unworkable.
Humans have trouble error checking each other's code. Imagine an army of devs who are expected to read and error check a machine. It's an absolute nightmare and fits the literal definition of bullshit job. But if it pays someone will do it. I dont know how one would hire an army of these sad folk though.
Industries need the hierarchical treadmill of juniors moving up to mid moving up to senior and so on in order to populate the top level. People can't just start there. The idea of 1 staff+ engineer and 10 juniors will only work if businesses are happy with people moving from junior straight to staff+. That seems unlikely to me.
It's missing a third group: the ML researchers developing the LLM. I'm not sure what the best analogy in the legal world is - the politicians writing the laws?
"Note that querying LLMs and making the outputted code conform to specifications is probably a lot easier than writing the code yourself"
This overestimates the time developers spend typing text and underestimates the time spent thinking about problems, verification and locating bugs/code, etc.
Just because the output of a model is text doesn't mean it is a replacement. You would need extraordinary "single shot" functionality where the LLM always outputs correct code and knows how to deal with any potential specification. The moment it fails then you wouldn't want "paralegal" developers, you would want normal, maybe inexperienced, developers.
Single shot functionality is very impressive because humans can't do it, they build things incrementally, but once your program gets large, it can only be written incrementally, which at least implies that the AI needs to keep track of unbounded context.
Much like the adage that you need to be smarter to debug code than to write code, you need to be smarter to "touch up" AI generated code than to write it yourself.
The problem with AI generated code is that it contains mistakes and because of the nature of how it works, those mistakes may be entirely unlike the kind of mistakes a human would make or may be completely undetectable unless you know what the code should be doing.
The best use case for AI code generation is auto-complete. Depending on the complexity of the code, that can be sufficient to do 90% of the work of writing code, but it's very different from "solving problems" which tends to be the tricky part. It also requires the AI user to already know the code they want the AI to generate before it does it.
An interesting application of AI outside of simple code generation however is what GitHub is currently experimenting with as "code brushes", i.e. "touching up" existing code, trying to fix bugs or apply refactorings. This fits in the gap of "single shot functionality" but operates on existing code rather than requiring a blank slate.
But at the end of the day I think AI will fail to kill programming just like other attempts like WYSIWYG UI builders and COBOL have and for the same reason: competence as a programmer is not about the ability to write code but the ability to understand programs and systems, both at scale and in depth. A beginner will not write bad code simply because they lack experience in using the language, they will write bad code because they lack understanding of what the code does and how it interacts with its environment (and how that environment interacts with it in turn, e.g. UX).
Only yesterday, I worked on a ticket for few hours, inspecting several Mongo collections in QE and prod. And then had to make 4 to 5 lines of changes across 3/4 python scripts. And then manually run them to patch the mongo collections. Which was the root cause of the bug. I don't see GPT doing this kind of stuff anytime soon.
And yes, very less percentage of the time, do we right chunks of fresh code, in which this could help. But that again to an extent. It can generate functions. But the glue code is still complicated. So it can definitely be a better Stack Overflow replacement, perhaps.
The smaller the problem the easier it is to use AI. Which makes the window where it's useful very small.
Its easier to understand and test code that you wrote than code you just read. If you ask it to write a 100k line program you're going to have to trace through everything and read it countless times over to fix any issues.
If you ask it to write a small 10 line snippet that you need to test you might as well do it yourself.
It can write a ten line function faster than I can, and my code has a lot of ten line functions in it. Even for trivial code, it's a force multiplier (moreso when plumbed into an IDE)
I think this makes assumptions about the demand for software engineers that seem unproven. Law salaries are bimodal because the demand for lawyers is limited, so there's only so many big law firms that can exist. In the near future, at least, it seems like demand for software engineers far outstrips supply and I think this will stay true in the long run because the market for software engineers is just different from the market for lawyers, in that software engineers can work on a multitude of different industries (faang covers personal devices, social media, entertainment, e-commerce, search, and more).
I think the real concern is for when the rate of new startups decreases, because I view startups as basically the tech industry's way for searching for ways to increase the overall size of the pie, and startups slowing down means demand for software engineers will start to stagnate.
> it seems like demand for software engineers far outstrips supply
Definitely not the case when layoff right now is in full force. Also this doesn't necessarily indicate high salary anyway. There is a huge demand for fruit picker, but due to the nature of economy and margin of business, the salary will stay deflated thus the shortage persists. In a high interests, no free money environment, will software firms still able to demonstrate ability to generate return for investors? That would the ultimate key for whether the high salary is going to sustain or disappear.
Regardless, I think this article has a point. We might be as well observing the end of the golden era for software engineers. LLM is a long-term salary oppressor, but in short term, simple dynamics of economy would test the market sufficiently.
doomer take but tbh i respect it. but the central thesis of the tech industry is that it allows for products to be created with very low marginal cost which facilitates the high returns and if that thesis turns out to no longer be true then i would say that the identity of the tech industry has irrevocably changed.
I can't believe this needs to be said, but the salary data that you're linking to excludes the thousands of Bay Area employers who aren't part of levels.fyi's dataset. Most of the employers in their dataset compete with each other, and pay in the second/higher bimodal curve.
This is correct. This also excludes contractors, which there are tons of in the Bay Area, and they make a lot less than a regular employee, even at places like Google.
Don't be fooled by the $23k range brackets next to a single bracket lumping in everything $527k+. That bracket is just an aggregation of the same chart trajectory, not another mode.
AI/ML will solve some great problems, many that are critical. Similar to how Wix solves your basic webpage for the average person. Does Wix solve anything for your typical enterprise or SAAS app? Even if it did, would these institutions not manage to add a new layer to the layer cake?
It's kind of been one of my main critiques of companies like Palantir. You really can't just dump a company's data into the big ML tumbler and expect useful/sellable products to just pop out. Take a random use case like, I don't know, Pepsi. Maybe Pepsi can get some insights about their supply chain and customer preferences. Alright? Okay. Did the world end because that happened? Not really.
Shifting gears back to programmers - AI will be a super smart programmer that will write a bunch of your code. I worked with some super smart programmers, and they can manage to write a lot of super smart code that eventually becomes a clusterfuck too.
We'll just go from unwrapping human shit code, to unwrapping AI shit code (or even better, unwrapping a mix of human shit and AI shit). The job prospects here are even greater than you imagine.
Long as you maintain the belief in the fundamental truth, that anything in existence is capable of writing shit code, then the world will never end for programmers.
Sometimes though we shouldn't have the AI write the code first.
So many times, I look over things people copy and pasted piece by piece from blogs and stackoverflow, when if they thought about it for 5 minutes, they'd realize a simpler implementation would have worked and been easier to write in the end. AI, if chatgpt is any indication, is moving toward overly flowerly and long prose while telling lies, that is stuff that looks "impressive" at a glance like the large ornate class hiearchies of java and c++ in the 90s looked but are things that could be done in a shell script.
I am worried then that like stackoverflow, AI will make a generation of developers who are extremely lazy and not critically thinking, just like stackoverflow did, and leave more of a mess for us to pick up after. Of course, in the midst of this, management won't know the difference. Just like chatgpt sounding impressive as it tells falsehoods, AI-code will look impressive to fools.
Yeah I think LLMs are really amazing and I'm open minded about how they can contribute to the craft of creating software. I've played around with these for generating code and it's very cool how much can be done.
BUT. Honestly I just see a lot of code review and refactoring of shitty AI-generated code in my future. And I think people who lean on this heavily are going to struggle to progress... Just like when I get the whiff of code copied verbatim from SO, it's going to put a sour taste in my mouth when I get a series of reviews with a bunch of poorly factored AI generated code.
But maybe it's more likely that old fogeys like me with our backwards beliefs are not long for this world. But I dunno, I haven't yet been replaced by the hordes of actual humans crowdsourcing this on SO, so color me a bit skeptical!
> I am worried then that like stackoverflow, AI will make a generation of developers who are extremely lazy and not critically thinking
If you take someone already hard working and able to think critically, with enough time and practice they can grow into being a decent developer. The learning resources they have available don't determine their long term work ethic or bar for quality.
I think it will be more like airline pilots with the addition of autopilot. Maybe you could write whole services, and networks of services with AI, but you need engineers to be the guiding hand. Engineers will always be better at using AI to build systems than non-developers.
Also, it’s worth pointing out that AI is using existing data. If a new iOS API comes out, the AI will need code bases with it already implemented to be able to train with it.
So in my mind, it will hurt the junior developers doing grunt work more than general devs.
I think no code/low code products are more of a risk to hurting devs than AI.
Additionally, I would expect that AIs wouldn't fare as well in situations where footguns abound, specialization is high, and there's a much smaller body of code to learn from — think things like hardware drivers written in C or C++ or embedded firmware with restricted resources, which is much less forgiving than e.g. CRUD web app backend written in Python.
depending on how advanced this AI will be, it could learn from a few samples and the API docs, possibly itself designed to be optimally consumed by AI. If I knew that AI would consume my custom programming language docs then I would make sure that each API is used once in some kind of sample code so it can give answers to everything. Plus, that's a sensible thing to do anyway.
Even better (or worse), tell your AI/LLM to output sample uses of the project to be training data for other AI/LLM. Probably ends up being a knowledge transfer protocol.
Seeding gpt (or using copilot) on snippets of your code is extremely effective. I often paste a function of my codebase before asking code questions, as in: “here is an example of a product class, generate the swagger spec for a user crud api” and it will infer how and even what kind of fields our user class has, without having seen it.
There is a lot of doom and gloom about programming and AI.
However, let me talk about something to be excited for.
I am really excited about LLMs taking the drudgery out of programming. There are many times what I have a project in mind that I want to do, but there is a lot of boilerplate (writing configurations, or writing tests, etc) that I have to do and slows me down or for personal projects even keeps me from doing them. However, if I have an AI assistant that I can assign all the drudgery to, and I can focus on the interesting work, I feel that my creativity can really be unleashed.
I am most excited to see the results of this in games. Right now, to produce a AAA game is a lot of work and requires massive teams (if only for the art assets). However, I can see a future where once again a single programmer can write very compelling games (and even have the AI generate the art assets for the game based on the programmer's vision).
I think it will be the opposite - it will take all fun out of programming and leave just the mess around connecting different interfaces and making them work reliably in a single product, i.e. debugging with nobody having the internal knowledge how the system actually works.
Back in those times you had more competent managers though, now the decision to generate code using AI will be made by some clueless PHB and people will be only needed to glue fragments together without actually designing the most interesting parts.
Currently, designing or changing systems involves quite a bit of careful thought since you have to keep all the constraints in your mind and reason about how the system would work. If tools existed to create implementations based on these designs, that would be pretty amazing.
Additionally: Being able to quickly iterate on designs that translate quickly into working systems will encourage more experimentation among people who might otherwise have been turned off by the amount of technical skills required to implement designs.
Chatgpt has been pretty transformative to my programming, probably surpassing the only other thing coming close of really leveraging powerful ides like IntelliJ. It can generate all the scaffolding I need by just inputting a couple of sketches of Plantuml or even just markdown lists. I can build tools, unit tests, test data, fuzz harnesses, admin uis, dashboards, all within a few hours. I can transform a couple of words into very legible documentation. If you seed it with just a couple of lines of your own code and setup, it’s able to usually build stuff that matches the style of the codebase. It’s broken and wrong 80% of the time, but in a way that I can fix within a few minutes.
This leaves me with 4h of high quality thinking and programming time instead of 1. It means I can try out 3 different approaches with full tooling instead of 1. It means I can build a whole terraform for aws and gcp and bare iron in 30 minutes.
The fact that I can build solid tools and a full slurry of unit tests and end up with 4x time in my day is just blowing my mind. The quality of my software has tremendously gone up despite using something that mostly outputs broken code.
I work in e-commerce/retail. So it’s things like:
- storybook stories to cover all cases of ui configuration
- tooling to create reports/import/export of different csv formats
- api endpoints, validating incoming data, instrumentation for monitoring
- every action and error gets logged as an event for auditing
Overall the part of the codebase that is not some kind of scaffolding is like, computing taxes on an order item or something like that. The rest is just shuffling data around and ensuring it is tracked and validated properly.
It’s tempting to be clever and devise a killer tool that allows you to write a single data declaration and derive all the rest but that rarely survives an encounter with the real world.
May I ask how you're getting ChatGPT to be reliable enough as a service to get these results? I had a similar experience the first week, but now most times I try it is overloaded and inaccessible, and when it's not the hourly rate limiter makes it difficult to be very productive.
I'm going to be the optimist here and instead of AI killing engineering jobs it's going to turn most engineers into much better engineers and what tech company doesn't want a whole bunch of better engineers? Building applications right now is time intensive, it takes years to build products, months to build features, and maybe we change it to be weeks and days instead, respectively. Maybe it's all just upside.
I think people are more impressed than they should be because of a misconception about what programmers really do.
For most big software projects the bottleneck is not writing code and test boilerplate that runs correctly locally. Which of course LLMs can do reasonably well. Most time is spent on design, on integrations with other internal services, scaling concerns, and reasoning about other things that these models can't really reason about yet.
I'm obvious impressed that these models can generate simple client/server websites and generate code to solve competitive programming problems. But I don't think they've "solved" software engineering; they've only solved "what you boss thinks software engineering is".
> But I don't think they've "solved" software engineering; they've only solved "what you boss thinks software engineering is".
That's still bad, though, because your boss makes hiring and salary decisions.
Maybe in the end it's a kind of "great filter" - companies and bosses that can't tell the difference don't survive. But a lot of good programmers can get fired before the clueless bosses die off...
That's capitalism. After you get fired, if you can still produce useful labor there will ideally be more employers waiting; you can freelance if your visa situation allows it; or you can start your own business and outcompete.
The cause of the inefficiency and "great filter" you're describing is the labor protectionism currently in the U.S.
Theoretically a good programmer has arbitrage via their skills and expertise. If you can get things done people will pay you for it, assuming you're allowed to work (in the U.S., EU, etc.).
Theoretically rarely beats ignorance in practice though. Software engineers in aggregate think and act like they’re working in a meritocracy (we aren’t) and this gives even more leverage to management and owners. It’s one of the big reasons engineer salaries right now aren’t as high as they otherwise would be.
>they've only solved "what you boss thinks software engineering is".
Which is why bosses are excited but engineers are not, because subpar LLMs will be used to justify firing actual engineers and replace them with fresh college grads tasked to work with a code bot, because the bosses fundamentally think that is enough.
Well, if that works, then it works! But if it doesn't (and I'm in the "I don't think it will" camp), then we'll know in less than a year or so.
I actually don't relate to this "bosses don't know what software engineering is" thing at all. All my bosses are older-school engineers-turned-management who are more skeptical of this than the young'uns.
Then those projects will fail and they won't do that anymore. Or they'll succeed and engineers will have to find harder problems to solve.
If a new grad + LLM can do task X about as well as an experienced engineer can, then the experienced engineer will have to find other harder problems to solve. Personally I think labor efficiency is good; why waste your labor on easy/solved problems?
> The experienced engineer also gets an LLM though
Say experienced engineer Edna was working on a project and the new grad Nelson replaced her because he was cheaper and about as good if both have LLMs, i.e.,
Edna + LLM ≈ Nelson + LLM
even though
Edna >> Nelson.
So Edna needs to find a project to work on where LLMs don't equalize her arbitrage, i.e.,
My contention is "how do you determine if someone was 'as good'?" Very likely the people in the position to make a decision will not be qualified enough to even make that decision. IF (and really only if) such a determination is possible, then sure, I agree, find harder problems etc, but I assert that people will not make that determination (which is close to impossible to make) well, if at all because that wasn't the point in the first place.
If a bunch of projects given to NG + LLM fail, the company will say at some point "this is no good, let's not do that anymore". If they mostly succeed, they'll do it more.
From a middle manager's perspective, where they're funding 10-20 projects, this kind of measurement is feasible and carries at least some signal. So I don't agree it's difficult to measure.
>Building applications right now is time intensive, it takes years to build products, months to build features, and maybe we change it to be weeks and days instead, respectively.
You want to increase churn? Are you insane?
I feel like if you poll computer / phone users (ie., the vast majority of the population) one of the most annoying things users hate about modern devices are mandatory updates, like the infamous meme video where someone screams at their window machine updating. Now, you want to make it easier for middle managers to push new unneeded updates so they can pad their resumes, how absurd.
Speed of feature is less compelling than quality. There is a saying about EHRs, that they propagate error at the speed of light. Likewise speeding up feature accrual seems as if all the worst ideas will be implemented first as the best ones need time to think through and acculturate.
On the other hand, if the models can be Atkinson-like and produce -2000 lines of code [0], that is a day to which I would look forward.
I wouldn’t underestimate the ability to iterate on fully finished features quickly, if you have to operate with end users. Closing a feedback loop can lead to threshold effects.
That'd be great if true. Human nature being what it is, chances are good that the ill thought out and in retrospect harmful will be deployed just as faster than "fully finished" as they are now.
Could that be iterated? Can a half baked release ever become whole or does progress just slow down and stretch out exponentially? 1/2 + 1/4 + 1/8 + ...
Yeah, I think my point is more that this makes it possible to iterate quicker while maintaining quality, which might be beneficial. Of course if you are working in a team that cares about the result (and the business does too), then iteration is always a win.
What I want is an AI that can do static analysis of code and report defects that traditional static analysis couldn't hope to detect.
I suspect that detecting errors that way will be a part of training non-terrible code generators. But with the added benefit of being useful to human programmers as well.
The other day I pasted chatgpt some code that I wanted it to add functionality to and it pointed out a bug in that code first (without me asking it to do that)
Except you can't do a web search on proprietary code within your business, and hosting AI on-premises to model your codebase would likely be a huge waste of money and slower than just telling a real life person what you want.
There has been zero-progress towards AI comprehension, so you can only get out of it what you are already familiar with. The human must always do the mental heavy lifting to tease out a good result, or indeed even know if it's a good result and not just a hallucinated mess.
This post is way to bullish on ChatGPT for coding, and underestimates how big the gap is between ChatGPT and a mid level FANG eng. ChatGPT is very impressive in what it can do, but if you deviate problem statements even a little bit from what it's seen before, it completely fails.
Just an example try asking it to write Battleship in Python. It does very well. But then, try changing the rules a bit, and adding some requirements. It spits out code that looks correct if you squint, but has terrible style, and often doesn't even work. Check out the test prompt [1].
Maybe GPT-4 is 1000x better at coding, but barring that, I don't see ChatGPT being useful as a replacement for human coders.
[1] Prompt: Write a version of Battleship with modified rules for sinking a ship. In this version, a ship is sunk when the "head" and "tail" of the ship (its beginning and end parts) are hit. Hits to the center do not matter. Use object oriented programming, with classes for the Board and for Ships. There should be support for multiple ships and two board instances. Write it in Python.
Yeah I'd never heard LLM, and I know what ChatGPT is and read hacker news pretty much every day.
Just as an example for future writers – one line at the beginning of the piece explaining the acronym and using the ChatGPT example would go a long way.
If I did search & replace on this article, replacing “programmer” with “manager”, would the conclusions and reasoning be much different (regardless of whether they’re spot on or not)?
A funny thing I noticed when googling whether melamine was microwave-safe: I got a lot of clickbaity articles from sketchy sites. Some said melamine is microwave safe, some said it is not, and some seemed to contradict each other.
An Asimov story called "Liar!" concerns a robot which has the ability to read minds. When asked to tell what's going on in another person's mind (does so-and-so have a crush on me? is my boss planning to give me a promotion?) the robot, following its First Law directive not to allow humans to come to harm (including emotional harm), tells the querent what they would like to hear based on the robot's reading of the querent's mind, instead of the truth because the truth can hurt. When the robot is shown that its actions hurt humans anyway, it promptly shuts down and refuses to function.
These language models seem like that robot. The articles on melamine suggest to me that the AIs which generated them are producing output that their statistical models suggest the querent wants to hear, rather than output with correct answers. In light of this, it seems that using these models for assistance in coding would be like having an obsequious but shitty coworker, whose output you must carefully review and vet because even money it's not a solution to your problem, just a guess at what you want to see based on a vast statistical soup built up of thousands of programmers' efforts on millions of tasks. Which means any effort you saved up now will be paid for with extra effort later, as every programmer knows it's much easier and more fun to wrote new code than to review and debug someone else's code, especially if it's shitty, especially^2 if it's subtly shitty. It really is like Teitelman's DWIM evolved, with correspondingly magnified lossage in its failure modes!
> we are perhaps converging to a future where a FAANG L7 can just sketch out architectural details and the programmer equivalent of paralegals will simply query the latest LLM and clean up the output.
This is just proposing waterfall + outsourcing all over again. The author doesn't seem to understand that "sketching out architectural details" is the thing that developers do.
This is very doom and gloom compared to the actual landscape in law. Yeah entry level salaries suck in law, but plenty of decent lawyers who are nothing special end up billing 200 an hour 6 years into their career and taking their 40% of that. While outside of big law is not paying what it used to it is still an upper middle class profession if you stick it out.
Societies demand for software is basically infinite. Right now only people who can pay for developers get to have good custom software. As LLMs increase the output of a programmer more people will be able to comission custom software. More software will get made and programmer salaries will remain high.
I beg to differ with the author’s perception ..in all it’s glory I don’t think L7 or principals or even software managers will have a reasonable chance of surviving. Because it is quite possible that agents built on LLM and AGI will be perfectly capable of not only arguing with each other and weigh on the pros and cons of any given option and arrive at a consensus just like the current Principals or managers do their negotiation, it is also quite possible they will be able to assign task and track the progress as well as take remediation action when needed. All these can be handled by advanced agents to a very large part. It is also possible to see teams of these AI agents working together in a cooperative way and surprising us with the outcome. Good luck !!
This sounds more like a sci-fi AI bot than the current route that AI research is going. How do you even get the training data or build a simulation for an agent like this...
Just ask chatGPT anything you would ask a principal or a manager and you maybe surprised about how coherent the answer is. I don’t think the training data is that exotic and may be already there , the agents are continuously learning.
Engineers create value - making them more efficient at their work generally creates more opportunity for work.
Lawyers are an unfortunate necessity that extract value from society. Making them more efficient at their work (hopefully) creates less opportunity for work.
You could just as easily say that engineers work to exploit and otherwise harm people, and lawyers work to protect people from exploitation and other harm.
This type of attitude displays a common blind spot of many engineers. Manipulating human social systems to achieve a specific result is harder, and at the end of the day probably more important than manipulating computer systems. Software engineers have a tendency to think "well if only everyone would just act exactly so and so none of this would be a problem! So it's obviously everyone elses fault for acting wrongly.", and they refuse to accept that politics, law, sales, management, and all the rest are completely 100% necessary and that not a single complex dynamic human interactive system is ever going to just do whatever they think it should do as a matter of moral obviousness.
This seems tangential? Engineering and law aren't the only exemplars of these categories, there are lots of fields where the marginal problems to solve are interesting verses uninteresting, they were just contrasting the two in the article. For example, more productive artists usually leads to more experimentation and weirder artwork; more doctors usually leads to more specialization and advanced knowledge; more VC money for crypto projects usually leads to more Ponzi schemes; etc, etc
The author of this post claims that the Internet happened, enabling easier, cheaper access to law databases, which increased the value that "top tier" lawyers could extract from their paralegals.
> What happened? Well, if you’re an elite lawyer in the modern age, you probably command a large team of lower-tier lawyers, cheap paralegals, and so on, who are very good at using the Internet to look up case law and draft your opinions and so on. In contrast, if you’re an elite lawyer in the year 1990, it’s much more valuable for you specifically to have an encyclopedic knowledge of all the relevant case law, and it’s much harder for you to delegate modular pieces of work off to less competent people.
> What happened? Well, if you’re an elite lawyer in the modern age, you probably command a large team of lower-tier lawyers, cheap paralegals, and so on, who are very good at using the Internet to look up case law and draft your opinions and so on.
This already happened to programmers. We call these elites some version of tech lead or staff engineer. Maybe even principal, but that feels different still.
> P.S. If your objection is that you played with ChatGPT and wasn’t impressed, you should try projecting trends beyond the t=1 month timescale.
That is a dismissive stance announced in a very obnoxious way. I don't know where and how fast the AI thing will go but I do know they're treating an unknowable outcome as fact.
Hasn't offshoring already done that to software? Unlike law, which is pretty local, the field is universal in software and most of the Asian, Eastern European, or South American programmers make nothing like north Americans.
And programmers in Silicon Valley or Seattle make tons more than in Oklahoma.
I wanted to see if what all these influencers were saying was true and so I tried to use ChatGPT to create a webapp the other day.
The first problem is that it's totally overloaded at the moment if you use the app and so even just logging in is almost impossible. After 20 minutes I managed to get in.
I first asked it to come up with 5 different ideas for the app. All of them were generic rubbish like a blog or suchlike so I asked it to be more niche and specific and it managed to throw up things like:
* A Project management webapp
* Farm management software
* Todo List
I picked the farm management software which I actually now interpreted as crop management software. This is a very competitive market lots of big software companies doing this already but I thought ok I'll give it a try.
I asked it to build a basic landing page which is initially refused to do. When I did prompt it correctly it built a basic HTML only page with no styling and basically no content other than a header and a couple of fake testimonials.
It then refused to style the thing at all and closed the chat. I then managed to prompt it correctly and it updated the font and stuck some stuff in boxes.
During this process it told me several times that it will not create a landing page.
I then gave up on the landing page and tried to get it to be able to help me write the code on the frontend to allow the user to define the crop areas on google maps. It spat out just the JS (no html) and which showed how to draw a polygon on the map basically the code you would get by looking up the google maps documentation.
During this process the text reply was very slow like character by character and it kicked me out several times.
I suspect we're about to enter a world where AI supercharges the average engineer's productivity, which is going to make it so that so much more stuff can be built. Using Copilot, the time to build a prototype for a simple app or API drops by a big multiple. Things that would take a week of work can be tried out in a weekend. Super cool future.
You really think that it won't be the pampered prima donnas who won't use an AI which is trained on your code but just like chatgpt outputs nonsense to replace you?
What replacement? When "AI" can code decently, it will already have replaced Excel and Powerpoint workers, and middle managers sitting in pointless meetings.
The top peak in the law is due to human bias just the same.
>Just like how a partner at Cravath likely sketches an outline of how they want to approach a particular case and swarms of largely replaceable lawyers fill in the details…
Except those “replaceable” attorneys at Cravath are the top peak of the distribution. The distribution is caused by social decisions of what firms to compete with. Top salary information is well-publicized and firms who want to be in the category of “BigLaw” basically match each other.
The lower peak of the distribution is more local attorneys. Your local estate law attorney, government workers like district attorneys/public defenders, etc. who are not competing with Cravath for talent or clients.
I would assume this is already what exists in programming with “BigTech” salaries being equivalently publicized and matched across firms concerned with being perceived to be a “FAANG+”. If it doesn’t, I would guess the reason is that not enough positions actually exist in “BigTech” to make a significant blip on a population-wide salary graph. BigLaw attorneys exist in almost every medium-large city in the US, but you can’t say the same about BigTech programmers.