| ▲ | pdntspa 2 days ago |
| That's why you treat it like a junior dev. You do the fun stuff of supervising the product, overseeing design and implementation, breaking up the work, and reviewing the outputs. It does the boring stuff of actually writing the code. I am phenomenally productive this way, I am happier at my job, and its quality of work is extremely high as long as I occasionally have it stop and self-review it's progress against the style principles articulated in its AGENTS.md file. (As it tends to forget a lot of rules like DRY) |
|
| ▲ | n4r9 2 days ago | parent | next [-] |
| I think we have different opinions on what's fun and what's boring! |
| |
| ▲ | Nemi 2 days ago | parent | next [-] | | You've really hit the crux of the problem and why so many people have differing opinions about AI coding. I also find coding more fun with AI. The reason is that my main goal is to solve a problem, or someone else's problem, in a way that is satisfying. I don't much care about the code itself anymore. I care about the thing that it does when it's done. Having said that I used to be deep into coding and back then I am quite sure that I would hate AI coding for me. I think for me it comes down to – when I was learning about coding and stretching my personal knowledge in the area, the coding part was the fun part because I was learning. Now that I am past that part I really just want to solve problems, and coding is the means to that end. AI is now freeing because where I would have been reluctant to start a project, I am more likely to give it a go. I think it is similar to when I used to play games a lot. When I would play a game where you would discover new items regularly, I would go at it hard and heavy up until the point where I determined there was either no new items to be found or it was just "more of the same". When I got to that point it was like a switch would flip and I would lose interest in the game almost immediately. | | |
| ▲ | breuleux 2 days ago | parent | next [-] | | I think it ultimately comes down to whether you care more about the what, or more about the how. A lot of coders love the craft: making code that is elegant, terse, extensible, maintainable, efficient and/or provably correct, and so on. These are the kind of people who write programming languages, database engines, web frameworks, operating systems, or small but nifty utilities. They don't want to simply solve a problem, they want to solve a problem in the "best" possible way (sometimes at the expense of the problem itself). It's typically been productive to care about the how, because it leads to better maintainability and a better ability to adapt or pivot to new problems. I suppose that's getting less true by the minute, though. | | |
| ▲ | doug_durham 2 days ago | parent [-] | | Crafting code can be self-indulgent since most common patterns have been implemented multiple times in multiple languages. A lot of time the craft oriented developer will reject an existing implementation because it doesn't match their sensibilities. There is absolutely a role for craft, however the amount of craft truly needed in modern development is not as large as people would like. There are lots of well crafted libraries and frameworks that can be adopted if you are willing to accommodate their world view. | | |
| ▲ | breuleux 2 days ago | parent [-] | | As someone who does that a lot... I agree. Self-indulgent is the word. It just feels great when the implementation is a perfect fit for your brain, but sometimes that's just not a good use of your time. Sometimes, you strike gold, so there's that. | | |
| ▲ | sfn42 2 days ago | parent [-] | | I kind of struggle with this. I basically hate everyone elses code, and by that I mean I hate most people's code. A lot of people write awesome code but most people write what I'd call trash code. And I do think there's more to it than preference. Like there's actual bugs in the code, it's confusing and because it's confusing there's more bugs. It's solving a simple problem but doing so in an unnecessarily convoluted way. I can solve the same problem in a much simpler way. But because everything is like this I can't just fix it, there's layers and layers of this convolution that can't just be fixed and of course there's no proper decoupling etc so a refactor is kind of all or nothing. If you start it's like pulling on a thread and everything just unravels. This is going to sound pompous and terrible but honestly some times I feel like I'm too much better than other developers. I have a hard time collaborating because the only thing I really want to do with other people's code is delete it and rewrite it. I can't fix it because it isn't fixable, it's just trash. I wish they would have talked to me before writing it, I could have helped then. Obviously in order to function in a professional environment i have to suppress this stuff and just let the code be ass but it really irks me. Especially if I need to build on something someone else made - itsalmost always ass, I don't want to build on a crooked foundation. I want to fix the foundation so the rest of the building can be good too. But there's no time and it's exhausting fixing everyone else's messes all the time. | | |
| ▲ | gmueckl 2 days ago | parent | next [-] | | I can guarantee you that if you were to write a completely new program and continued to work on it for more than 5 years, you'd feel the same things about your own code eventually. It's just unavoidable at some point. The only thing left then is degrees badness. And nothing is more humbling than realizing that the only person that got you there is yourself. | | |
| ▲ | jffhn a day ago | parent | next [-] | | I can guarantee you that I have been doing just that for 20 years, creating and working on the same codebase, and that it only got better with time (cleaner code and more robust execution), though more complex because the domain itself did.
We would have been stuck in the accidental complexity of messy hacks and their buggy side effects if we had not continuously adapted and improved things. | |
| ▲ | sfn42 a day ago | parent | prev [-] | | No, I wouldn't. I have been working for years on the same codebase, it's not that hard to keep it clean and simple. I just refactor/redesign when necessary instead of adding hacky workarounds on top of hacky workarounds for years until the codebase is nothing but a collection of workarounds. And most importantly I just design it well from the start, it's not that hard to do. At least for me. Of course we all make mistake, there's bugs in my code too. I have made choices I regret. But not on the level that I'm talking about. |
| |
| ▲ | pdntspa 2 days ago | parent | prev | next [-] | | I feel this too. And it seems like the very worst code always seems to come from the people that seem the smartest, otherwise. I've worked for a couple of people that are either ACM alum and/or have their own wikipedia page, multiple patents to their name and leaders in business, and beyond anyone else that I have ever worked with, their code has been the worst. Which is part of what I find so motivating with AI. It is much better at making sense of that muck, and with some guidance it can churn out code very quickly with a high degree of readability. | | |
| ▲ | danielmarkbruce 2 days ago | parent [-] | | did you ever consider their code was good and it's you that is the problem? | | |
| ▲ | pdntspa 21 hours ago | parent [-] | | I did, and that is very much not the case here. I don't know how a "good" programmer opens the same gig+ file for writing in multiple threads (dozens sometimes) without any kind of concurrency management. A "good" programmer doesn't give you a 2000+-line python script where every variable has no more than two characters in its name, with 0 comments or explanatory info. A "good" programmer doesn't write a cluster that checks an "OK" REST endpoint on a regular interval, and then have that same cluster freak the fuck out and check 10-100x as often if that "OK" does not arrive exactly as it should. | | |
| ▲ | danielmarkbruce 14 hours ago | parent [-] | | I'll take a guess - you've never spent a minute at a company that is considered world class as far a software engineering goes. Am I right? |
|
|
| |
| ▲ | 93n 2 days ago | parent | prev | next [-] | | Yeah, I know this feeling very well. I usually attribute it to people being lazy, not caring, or not using their brain. It's quite frustrating when something is *so obviously* wrong, to the point that anyone with a modicum of experience should be able to realize that what was implemented is totally whack. Please, spend at least a few minutes reviewing your work so that I don't have to waste my time on nonsense. | |
| ▲ | KronisLV 2 days ago | parent | prev | next [-] | | I’ve linked this before, but I feel like this might resonate with you: https://www.stilldrinking.org/programming-sucks | | |
| ▲ | manmal a day ago | parent | next [-] | | Yeah a bridge has a plan that it’s built and verified against. It’s the picture book waterfall implementation. The software industry has moved away from this approach because software is not like bridges. | | |
| ▲ | KronisLV a day ago | parent [-] | | > It’s the picture book waterfall implementation. One of my better experiences with software development was actually with something waterfall-adjacent. The people I was developing software for produced a 50 page spec ahead of any code being written. That let me get a complete picture of the business domain. That let me point out parts of the spec that were just wrong in regards to the domain model and also things that could be simplified. Implementation became way more straightforwards and I still opted for a more iterative approach than just one deliverable at the end. About 75% of the spec got build and 25% was found to be not necessary, it was a massive success - on time and with fewer bugs than your typical 2 week "we don't know the big picture" slop that's easy to get into with indecisive clients. Obviously it wasn't "proper" waterfall and it also didn't try to do a bunch of "agile" Scrum ceremonies but borrowed whatever I found useful. Getting a complete spec of the business needs and domain and desired functionality (especially one without prescriptive bullshit like pixel perfect wireframes and API docs written by people that won't write the API) was really good. | | |
| ▲ | skydhash a day ago | parent [-] | | If you can't get a complete spec, it's better start with something small that you can get detailed info on, and then iterate upon that. It will involve refactoring, but that is better than badly designing the whole thing from the get go. |
|
| |
| ▲ | sfn42 2 days ago | parent | prev [-] | | I enjoyed that but honestly it kind of doesn't really resonate. Because it's like "This stuff is really complicated and nobody knows how anything works etc and that's why everything is shit". I'm talking about simple stuff that people just can't do right. Not complex stuff. Like imagine some perfect little example code on the react docs or whatever, good code. Exemplary code. Trivial code that does a simple little thing. Now imagine some idiot wrote code to do exactly the same thing but made it 8 times longer and incredibly convoluted for absolutely no reason and that's basically what most "developers" do. Everyone's a bunch of stupid amateurs who can't do simple stuff right, that's my problem. It's not understandable, it's not justifiable, it's not trading off quality for speed. It's stupidity, ignorance and lazyness. That's why we have coding interviews that are basically "write fizzbuzz while we watch" and when I solve their trivial task easily everyone acts like I'm Jesus because most of my peers can't fucking code. Like literally I have colleagues with years of experience who are barely at a first year CS level. They don't know the basics of the language they've been working with for years. They're amateurs. | | |
| ▲ | KronisLV 2 days ago | parent [-] | | Then it’s quite possible that you’re working in an environment that naturally leads to people like that getting hired. If that’s something you see repeatedly, then the environment isn’t a good fit for you and you aren’t a good fit for it. So you’d be better served by finding a place where the standards are as high as you want, from the very first moment in the hiring process. For example, Oxide Computers has a really interesting approach https://oxide.computer/careers Obviously that’s easier said than done but there are quite a few orgs out there like that. If everyone around you doesn’t care about something or can’t do it, it’s probably a systemic problem with the environment. |
|
| |
| ▲ | a day ago | parent | prev [-] | | [deleted] |
|
|
|
| |
| ▲ | altmanaltman 2 days ago | parent | prev | next [-] | | A few counterpoints: 1. If you don't care about code and only care about the "thing that it does when it's done", how do you solve problems in a way that is satisfying? Because you are not really solving any problem but just using the AI to do it. Is prompting more satisfying than actually solving? 2. You claim you're done "learning about coding and stretching my personal knowledge in the area" but don't you think that's super dangerous? Like how can you just be done with learning when tech is constantly changing and new things come up everyday. In that sense, don't you think AI use is actually making you learn less and you're just justifying it with the whole "I love solving problems, not code" thing? 3. If you don't care about the code, do the people who hire you for it do? And if they do, then how can you claim you don't care about the code when you'll have to go through a review process and at least check the code meaning you have to care about the code itself, right? | | |
| ▲ | keeda 2 days ago | parent | next [-] | | Note I'm not saying one is better than the other, but my takes: 1. The problem solving is in figuring out what to prompt, which includes correctly defining the problem, identifying a potential solution, designing an architecture, decomposing it into smaller tasks, and so on. Giving it a generic prompt like "build a fitness tracker" will result in a fully working product but it will be bland as it would be the average of everything in its training data, and won't provide any new value. Instead, you probably want to build something that nobody else has, because that's where the value is. This will require you to get pretty deep into the problem domain, even if the code itself is abstracted away from you. Personally, once the shape of the solution and the code is crystallized in my head typing it out is a chore. I'd rather get it out ASAP, get the dopamine hit from seeing it work, and move on to the next task. These days I spend most of my time exploring the problem domain rather than writing code. 2. Learning still exists but at a different level; in fact it will be the only thing we will eventually be doing. E.g. I'm doing stuff today that I had negligible prior background in when I began. Without AI, I would probably require an advanced course to just get upto speed. But now I'm learning by doing while solving new problems, which is a brand new way of learning! Only I'm learning the problem domain rather than the intricacies of code. 3. Statistically speaking, the people who hire us don't really care about the code, they just want business results. (See: the difficulty of funding tech debt cleanup projects!) Personally, I still care about the code and review everything, whether written by me or the AI. But I can see how even that is rapidly becoming optional. I will say this: AI is rapidly revolutionizing our field and we need to adapt just as quickly. | | |
| ▲ | skydhash 2 days ago | parent | next [-] | | > The problem solving is in figuring out what to prompt, which includes correctly defining the problem, identifying a potential solution, designing an architecture, decomposing it into smaller tasks, and so on Coding is just a formal specification, one that is suited to be automatically executed by a dumb machine. The nice trick is that the basic semantics units from a programming language are versatile enough to give you very powerful abstractions that can fit nicely with the solution your are designing. > Personally, once the shape of the solution and the code is crystallized in my head typing it out is a chore I truly believe that everyone that says that typing is a chore once they've got the shape of a solution get frustrated by the amount of bad assumptions they've made. That ranges from not having a good design in place to not learning the tools they're using and fighting it during the implementation (Like using React in an imperative manner). You may have something as extensive as a network protocol RFC, and still got hit by conflict between the specs and what works. | | |
| ▲ | RHSeeger a day ago | parent | next [-] | | > I truly believe that everyone that says that typing is a chore once they've got the shape of a solution get frustrated by the amount of bad assumptions they've made. To a lot of people (clearly not yourself included), the most interesting part of software development is the problem solving part; the puzzle. Once you know _how_ to solve the puzzle, it's not all that interesting actually doing it. That being said, you may be using the word "shape" in a much more vague sense than I am. When I know the shape of the solution, I know pretty much everything it takes to actually implement it. That also means I've very bad at generating LOEs because I need to dig into the code and try things out, to know what works... before I can be sure I have a viable solution plan. | | |
| ▲ | skydhash a day ago | parent [-] | | I understand your point. But what you should be saying is that you have an idea of the correct solution. But the only correct solution is code or a formal proof that it is in fact correct. It’s all wishes and dreams otherwise. If not, we wouldn’t have all of those buffer overflow, one by off errors, and xss vulnerabilities. | | |
| ▲ | RHSeeger a day ago | parent [-] | | All we _ever_ have is an idea of the correct solution. There's no point at which we can ever say "this is the correct solution", at least not for any moderately sized software problem. That being said, we can say - Given the implementation options we've found, this solution/direction is what we think is the best - We have enough information now that it is unlikely anything we find out is going to change the solution - We know enough about the solution that it is extremely unlikely that there are any more real "problems/puzzles" to be solved At that point, we can consider the solution "found" and actually implementing it is no more a part of solving it. Could the implemented solution wind up having to deal with an off-by-one error that we need to fix? Sure... but that's not "puzzle solving". And, for a lot of people, it's just not the interesting part. |
|
| |
| ▲ | keeda a day ago | parent | prev | next [-] | | I think you would be surprised by how much these AIs can "fill in the blanks" based on the surrounding code and high-level context! Here is an example I posted a few months ago (which is coincidentally, related to the reply I just gave the sibling comment): https://news.ycombinator.com/item?id=44892576 Look at the length of my prompt and the length of the code. And that's not even including the tests I had it generate. It made all the right assumptions, including specifying tunable optional parameters set to reasonable defaults and (redacted) integrating with some proprietary functions at the right places. It's like it read my mind! Would you really think writing all that code by hand would have been comparable to writing the prompt? | | |
| ▲ | skydhash a day ago | parent [-] | | I’m not surprised. It would be like being suprised by the favt that computers can generate a human portrait (which has been been a thing before LLMs), but people are still using 3d software because while it takes more time, they have more control over the final result. | | |
| ▲ | keeda 15 hours ago | parent [-] | | We still have complete control over the code, because after the AI generates it, it's right there to tweak as we want! But the point is, there were no assumptions or tooling or bad designs that had to be fought. Just an informal, high-level prompt that generated the exact code I wanted in a fraction of the time. At least to me that was pretty surprising -- even if it'd become routine for a while by then -- because I'd expect that level of wavelength-match between colleagues who had been working on the same team for a while. |
|
| |
| ▲ | PaulDavisThe1st a day ago | parent | prev [-] | | > Coding is just a formal specification If you really believe this, I'd never want to hire you. I mean, it's not wrong, it's just ... well, it's not even wrong. | | |
| ▲ | snovv_crash a day ago | parent [-] | | I'd still hire them, in fact I see that level of understanding as a green flag. Your response and depth of reasoning about why you wouldn't hire them is a red flag though. Not for a manager role and certainly not as an IC. | | |
| ▲ | PaulDavisThe1st 20 hours ago | parent [-] | | I provided zero depth of reasoning. Coding is as much a method of investigating and learning about a problem as it is any sort of specification. It is as much play as it is description. Somebody who views code as nothing more than a formal specification that tells a computer what to do is inhibiting their ability to play imaginatively with the problem space, and in the work that I do, that is absolutely critical. |
|
|
| |
| ▲ | altmanaltman 2 days ago | parent | prev [-] | | Honestly, I fundamentally disagree with this. Figuring out "what to prompt" is not problem-solving in a true sense imo. And if you're really going too deep into the problem domain, what is the point of having the code abstracted? My comment was based on you saying you don't care about the code and only what it does. But now you're saying you care about the code and review everything so I'm not sure what to make out of it. And again, I fundamentally disagree that reviewing code will become optional or rather should become optional. But that's my personal take. | | |
| ▲ | sho a day ago | parent | next [-] | | > Figuring out "what to prompt" is not problem-solving in a true sense This just sounds like "no true scotsman" to me. You have a problem and a toolkit. If you successfully solve the problem, and the solution is good enough, then you are a problem solver by any definition worth a damn. The magic and the satisfaction of good prompting is getting to that "good enough", especially architecturally. But when you get good at it - boy, you can code rings around other people or even entire teams. Tell me how that wouldn't be satisfying! | |
| ▲ | keeda 2 days ago | parent | prev [-] | | > My comment was based on you saying you don't care about the code and only what it does. But now you're saying you care about the code and review everything so I'm not sure what to make out of it. I'm not the person you originally replied to, so my take is different, which explains your confusion :-) However I do increasingly get the niggling sense I'm reviewing code out of habit rather than any specific benefit because I so rarely find something to change... > And if you're really going too deep into the problem domain, what is the point of having the code abstracted? Let's take my current work as an example: I'm doing stuff with computer vision (good old-fashioned OpenCV, because ML would be overkill for my case.) So the problem domain is now images and perception and retrieval, which is what I am learning and exploring. The actual code itself does not matter as much the high-level approach and the component algorithms and data structures -- none of which are individually novel BTW, but I believe I'm the only one combining them this way. As an example, I give a high-level prompt like "Write a method that accepts a list of bounding boxes, find all overlapping ones, choose the ones with substantial overlap and consolidate them into a single box, and return all consolidated boxes. Write tests for this method." The AI runs off and generates dozens of lines of code -- including a tunable parameter to control "substantial overlap", set to a reasonable default -- the tests pass, and when I plug in the method, 99.9% of the times the code works as expected. And because this is vision-based I can immediately verify by sight if the approach works! To me, the valuable part was coming up with that whole approach based on bounding boxes, which led to that prompt. The actual code in itself is not interesting because it is not a difficult problem, just a cumbersome one to handcode. To solve the overall problem I have to combine a large number of such sub-problems, so the leverage that AI gives me is enormous. | | |
| ▲ | skydhash a day ago | parent [-] | | What people are wary of is not solving the problem in the first pass. They are wary of technical debt and unmaintainable code. The cost of change can be enormous. Software engineering is mostly about solving current problems and laying the foundation to adapt for future ones at the same time. Your approach's only focus is current problems which is pretty much the same as people that copypaste from StackOverflow without understanding. | | |
| ▲ | keeda 15 hours ago | parent [-] | | Technical debt and understanding is exactly why I still review the code. But as I said, it's getting rare that I need to change anything the AI generates. That's partly because I decompose the problem into small, self-contained tasks that are largely orthogonal and easily tested -- mostly a functional programming style. There's very little that can go wrong because there is little ambiguity in the requirements, which is why a 3 line prompt can reliably turn into dozens of lines of working, tested code. The main code I deal with manually is the glue that composes these units to solve the larger computer vision problem. Ironically, THAT is where the tech debt is, primarily because I'm experimenting with combinations of dozens of different techniques and tweaks to see what works best. If I knew what was going to work, I'd just prompt the AI to write it for me! ;-) |
|
|
|
| |
| ▲ | pdntspa 2 days ago | parent | prev | next [-] | | Why can't both things be true? You can care about the code even if you don't write it. You can continue learning things by reading said code. And you can very rigidly enforce code quality guidelines and require the AI adhere to them. | | |
| ▲ | altmanaltman 2 days ago | parent [-] | | I mean if you're reading it and "rigidly" enforcing code quality guidelines, then you do care about the code, right? But the parent comment said they don't care about the code but what it does. Both of them cannot be true at the same time, since in your example, you do care about the code enough to read it and refactor it based on guidelines and not just "what the code" does. |
| |
| ▲ | danielmarkbruce 2 days ago | parent | prev [-] | | are you really solving the problem, or is the compiler doing it? | | |
| ▲ | altmanaltman 2 days ago | parent [-] | | is the compiler really solving the problem or the electricity flowing through the machine? | | |
|
| |
| ▲ | ben_w 2 days ago | parent | prev | next [-] | | > > I think we have different opinions on what's fun and what's boring! > You've really hit the crux of the problem and why so many people have differing opinions about AI coding. Part of it perhaps, but there's also a huge variation in model output. I've been getting some surprisingly bad generations from ChatGPT recently, though I'm not sure if that's ChatGPT getting worse or me getting used to a much higher quality of code from Claude Code which seems to test itself before saying "done". I have no idea if my opinion will flip again now 5.2 is out. And some people are bad communicators, an important skill for LLMs, though few will recognise it because everyone knows what they themselves meant by whatever words they use. And some people are bad planners, likewise an important skill for breaking apart big tasks that LLMs can't do into small ones they can do. | | |
| ▲ | danielmarkbruce 2 days ago | parent [-] | | This isn't just in coding. My goodness the stuff I see people write into an LLM and then say "see! It's stupid!". Some people are naturally good at prompting and some people just are not. The differences in output are dramatic. |
| |
| ▲ | RHSeeger a day ago | parent | prev | next [-] | | > I don't much care about the code itself anymore. I use writing the code as a way to investigate the options and find new ones. By the time I'm sure of the correct way to implement something, half the code is written [1]. At that point, now that I know what and how I'm going to do, it starts to get boring. I think what would work best for me would be able to say "ok, now finish this" to the AI and have it do that boring part. [1] This also makes my LOEs horrible, because I don't know what I'm going to build until I've completed half of it. And figuring out how long it will take to do something that isn't defined is... inaccurate. | |
| ▲ | libraryofbabel 2 days ago | parent | prev | next [-] | | I like this framing; I think it captures some of the key differences between engineers who are instinctively enthusiastic about AI and those who are not. Many engineers walk a path where they start out very focussed on programming details, language choice, and elegant or clever solutions. But if you're in the game long enough, and especially if you're working in medium-to-large engineering orgs on big customer-facing projects, you usually kind of move on from it. Early in my career I learned half a dozen programming languages and prided myself on various arcane arts like metaprogramming tricks. But after a while you learn that one person's clever solution is another person's maintainability nightmare, and maybe being as boring and predictable and direct as possible in the code (if slightly more verbose) would have been better. I've maintained some systems written by very brilliant programmers who were just being too clever by half. You also come to realize that coding skills and language choice don't matter as much as you thought, and the big issues in engineering are 1) are you solving the right problem to begin with 2) people/communication/team dynamics 3) systems architecture, in that order of importance. And also, programming just gets a little repetitive after a while. Like you say, after a decade or so, it feels a bit like "more of the same." That goes especially for most of the programming most of us are doing most of the time in our day jobs. We don't write a lot of fancy algorithms, maybe once in a blue moon and even then you're usually better off with a library. We do CRUD apps and cookie-cutter React pages and so on and so on. If AI coding agents fall into your lap once you've reached that particular variation of a mature stage in your engineering career, you probably welcome them as a huge time saver and a means to solve problems you care about faster. After a decade, I still love engineering, but there aren't may coding tasks I particularly relish diving into. I can usually vaguely picture the shape of the solution in my head out the gate, and actually sitting down and doing it feels rather a bore and just a lot of typing and details. Which is why it's so nice when I can kick off a Claude session to do it instead, and review the results to see if they match what I had in mind. Don't get me wrong. I still love programming if there's just the right kind of compelling puzzle to solve (rarer and rarer these days), and I still pride myself on being able to do it well. Come the holidays I will be working through Advent of Code with no AI assistance whatsoever, just me and vim. But when January rolls around and the day job returns I'll be having Claude do all the heavy lifting once again. | | |
| ▲ | skydhash 2 days ago | parent [-] | | I'm guessing, but I'm pretty sure you're dealing with big balls of mud which has dampened your love of coding. Where implementing something is more about solving accidental complexity and dealing with technical debts than actually doing the job. | | |
| ▲ | libraryofbabel 2 days ago | parent [-] | | I've seen some balls of mud, sure, but I don't think that's the essence of it. It's more like: 1) When I already have a rough picture of the solution to some programming task in my head up front, I do not particularly look forward to actually going and doing it. I've done enough programming that many things feel like a variation on something I've done before. Sometimes the task is its own reward because there is a sufficiently hard and novel puzzle to solve. Mostly it is not and it's just a matter of putting in the time. Having Claude do most of the work is perfect in those cases. I don't think this is particularly anything to do with working on a ball of mud: it applies to most kinds of work on clean well-architected projects as well. 2) I have a restless mind and I just don't find doing something that interesting anymore once I have more or less mastered it. I'd prefer to be learning some new field (currently, LLMs) rather than spending a lot of time doing something I already know how to do. This is a matter of temperament: there is nothing wrong with being content in doing a job you've mastered. It's just not me. | | |
| ▲ | skydhash 2 days ago | parent [-] | | > 1) When I already have a rough picture of the solution to some programming task in my head up front, I do not particularly look forward to actually going and doing it. Every time I think I have a rough picture of some solution, there's always something in the implementation that proves me wrong. Then it's reading docs and figuring whatever gotchas I've stepped into. Or where I erred in understanding the specifications. If something is that repetitive, I refactor and try to make it simple. > I have a restless mind and I just don't find doing something that interesting anymore once I have more or less mastered it. If I've mastered something (And I don't believe I've done so for pretty much anything), the next step is always about eliminating the tedium of interacting with that thing. Like a code generator for some framework or adding special commands to your editor for faster interaction with a project. |
|
|
| |
| ▲ | standarditem a day ago | parent | prev | next [-] | | I feel the same way when writing code for work. It's pretty neat to have an AI bot working on the grunt work for me while I review and write high level algorithms. It's quicker and I get less burnt out. But I still love getting my hands dirty and writing code as a mental puzzle. And the best puzzles tend to happen outside of a work environment anyways. So I continue to work through advent of code problems (for example) as a way of exercising that muscle. | |
| ▲ | agumonkey 2 days ago | parent | prev | next [-] | | it's true that 'code' doesn't mean much, but the ability to manage different layers, states to produce logic modules was the challenge getting things solved entirely feels very very numbing to me even when gemini or chatgpt solves it well, and even beyond what i'd imagine.. i feel a sense of loss | |
| ▲ | pdntspa 2 days ago | parent | prev [-] | | You are hitting the nail on the head. We are not being hired to write code. We are being hired to solve problems. Code is simply the medium. | | |
| ▲ | wahnfrieden 2 days ago | parent | next [-] | | I believe wage work has a significant factor in all this. Most are not paid for results, they're paid for time at desk and regular responsibilities such as making commits, delivering status updates, code reviews, etc. - the daily activities of work are monitored more closely than the output. Most ESOP grant such little equity that working harder could never observably drive an increase in its value. Getting a project done faster just means another project to begin sooner. Naturally workers will begin to prefer the motions of the work they find satisfying more than the result it has for the business's bottom line, from which they're alienated. | | |
| ▲ | hibikir a day ago | parent | next [-] | | It gets worse than that: You can possibly get rewarded based on your manager's goals, or maybe your skip level's, but that doesn't necessarily have to line up all that well with more serious business goals. I am sure I am not the only one that had to help initiatives that I thought would be, at best, just wasteful to the business, or that we could get 80% of the value with 20% of the efforts. But it's ultimately about the person who writes the review. This gets us to the rule number one of being successful at a job: Make sure your manager likes you. Get 8 layers of people whose priority is just to be sure their manager likes them, and what is getting done is very unlikely to have much to do with shareholder value, customer happiness, or anything like that. | |
| ▲ | Sammi 2 days ago | parent | prev | next [-] | | > Naturally workers will begin to prefer the motions of the work they find satisfying more than the result it has for the business's bottom line, from which they're alienated. Wow. I've read a lot of hacker news this past decade, but I've never seen this articulated so well before. You really lifted the veil for me here. I see this everywhere, people thinking the work is the point, but I haven't been able to crystallize my thoughts about it like you did just now. | | | |
| ▲ | order-matters 2 days ago | parent | prev [-] | | I think it's related. The nature of the wage work likely also self-selects for people who simply enjoy coding and being removed from the bigger picture problems they are solving. Im on the side of only enjoy coding to solve problems and i skipped software engineering and coding for work explicitly because i did not want to participate in that dynamic of being removed from the problems. instead i went into business analytics, and now that AI is gaining traction I am able to do more of what I love - improving processes and automation - without ever really needing to "pay dues" doing grunt work I never cared to be skilled at in the first place unless it was necessary. |
| |
| ▲ | agumonkey 2 days ago | parent | prev [-] | | but do you solve the problem if you just slap a prompt and iterate while the LLM gathers diffs ? | | |
| ▲ | ben_w 2 days ago | parent | next [-] | | Depends what the problem is. Sometimes you can, sometimes you have to break the problem apart and get the LLM to do each bit separately, sometimes the LLM goes funny and you need to solve it yourself. Customers don't want you wasting money doing by hand what can be automated, nor do they want you ripping them off by blindly handing over unchecked LLM output when it can't be automated. | | |
| ▲ | agumonkey 2 days ago | parent [-] | | there are other ways: being scammed by lazy devs using AI to produce what devs normally do and not saving any money for the customer. i mentioned it in another thread, i heard first hand people say "i will never report how much time savings i get from gemini, at best i'll say 1 day a month" | | |
| ▲ | Dylan16807 a day ago | parent [-] | | If you produce the same product, then you get to ask for the same pay. That's not a scam. If enough people can make the product faster, then competition will drive the price down. But the ability to charge less is not at all an obligation to charge less. | | |
| ▲ | agumonkey a day ago | parent [-] | | it's paradoxical, the llm is not helping consumers, it's not helping the experienced engineer, it's helping a new class of devs that just want the easy way out. and ultimately this wave will make the price go down to the point the skilled dev won't be able to sustain long term growth because learning more and more advanced will not be valued by the economy.. just a thought but i don't see a nice path ahead now | | |
| ▲ | Dylan16807 a day ago | parent [-] | | Why is it not helping the experienced engineer? I don't fully understand your scenario. If the experienced engineer is already faster than the LLM, their job is not at risk. If the LLM is faster then the experienced engineer at making some kind of code product, then the experienced engineer can use it to save time. And in the short term they can spend even more time learning! Maybe it's a net negative because it helps the "new class of devs that just want the easy way out" more, but it's still helping the experienced engineer. And if increased competition drops the price then the LLM's influence is helping customers. | | |
| ▲ | agumonkey a day ago | parent [-] | | you may have a point, i'm fuzzy in my perception right now but there are non linear factor imo, here's how i see things - a market needs a certain kind of product (feature set, complexity, performance) - good engineer could apply skills to deliver that - lazy engineers couldn't, but with llm they can, it gives them solutions without understanding much, which is irrelevant for them, they want to ship - i myself don't enjoy having code spilled out for me, and the time savings from llm won't bring much more joy (unlike the lazy engineer who is happy) - a llm might help me do more advanced things but the market might not care for it. say the average user wants a dashboard with a bunch of data points and a few actions. the llm answer will match that perfectly. I could ask the llm to produce a more complex dashboard with more customization, more feature.. but the user will not want it because it's beyond its needs so yeah it's a matter of ratio, it seems that lazy devs will get a 10x improvement while a skilled one will only get 1.5 and might be squeezed out of the market |
|
|
|
|
| |
| ▲ | pdntspa 2 days ago | parent | prev | next [-] | | If the client is happy, the code is well-formed, and it solves their problem is a cost-effective manner, what is not to like? | | |
| ▲ | agumonkey 2 days ago | parent [-] | | cause the 'dev' didn't solve anything ultimately i wonder how long people will need devs at all if you can all prompt your wishes some will be kept to fix the occasional hallucination and that's it |
| |
| ▲ | eclipxe 2 days ago | parent | prev [-] | | Yes? |
|
|
| |
| ▲ | embedding-shape 2 days ago | parent | prev | next [-] | | Some people are into designing software, others like to put the design into implementation, others like cleaning up implementations yet others like making functional software faster. There is enough work for all of us to be handsomely paid while having fun doing it :) Just find what you like, and work with others who like other stuff, and you'll get through even the worst of problems. For me the fun comes not from the action of typing stuff with my sausage fingers and seeing characters end up on the screen, but basically everything before that and after that. So if I can make "translate what's in my head into source on disk something can run" faster, that's a win in my book, but not if the quality degrades too much, so tight control over it still not having to use my fingers to actually type. | | |
| ▲ | mkehrt 2 days ago | parent [-] | | I've found that good tab AI-based tab completion is the sweet spot for me. I am still writing code, but I don't have to type all of it if it's obvious. | | |
| ▲ | OkayPhysicist 2 days ago | parent [-] | | This has been my approach, as well. I've got a neovim setup where I can 1) open up a new buffer, ask a question, and then copy/paste from it and 2) prompt the remainder of the line, function, or class. (the latter two are commands I run, rather than keybinds). |
|
| |
| ▲ | AStrangeMorrow 2 days ago | parent | prev | next [-] | | I really enjoy writing some of the code. But some is a pain. Never have fun when the HQ team asks for API changes for the 5th time this month. Or for that matter writing the 2000 lines of input and output data validation in the first place. Or refactoring that ugly dictionary passed all over the place to be a proper class/dataclass. Handling config changes. Lots of that piping job. Some tasks I do enjoy coding. Once in the flow it can be quite relaxing. But mostly I enjoy the problem solving part: coming up with the right algorithm, a nice architecture , the proper set of metrics to analyze etc | |
| ▲ | moffkalast 2 days ago | parent | prev [-] | | He's a real straight shooter with upper management written all over him. | | |
| ▲ | wpasc 2 days ago | parent | next [-] | | but what would you say... you do here? | |
| ▲ | SoftTalker 2 days ago | parent | prev [-] | | Ummm, yeah... I’m gonna have to go ahead and sort of disagree with you there. |
|
|
|
| ▲ | AStrangeMorrow 2 days ago | parent | prev | next [-] |
| Yeah at this point I basically have to dictate all implementation details: do this, but do it this specific way, handle xyz edge cases by doing that, plug the thing in here using that API. Basically that expands 10 lines into 100-200 lines of code. However if I just say “I have this goal, implement a solution”, chances are that unless it is a very common task, it will come up with a subpar/incomplete implementation. What’s funny to me is that complexity has inverted for some tasks: it can ace a 1000 lines ML model for a general task I give it, yet will completely fail to come up with a proper solution for a 2D geometric problem that mostly has high school level maths that can be solved in 100 lines |
|
| ▲ | FeteCommuniste 2 days ago | parent | prev | next [-] |
| Maybe I'm weird but I enjoy "actually writing the code." |
| |
| ▲ | vitro 2 days ago | parent | next [-] | | I sometimes think of it as a sculptor analogy. Some famous sculptors had an atelier full of students that helped them with mundane tasks, like carving out a basic shape from a block of stone. When the basic shape was done, the master came and did the rest. You may want to have the physical exercise of doing the work yourself, but maybe someone sometimes likes to do the fine work and leave the crude one to the AI. | |
| ▲ | breuleux 2 days ago | parent | prev | next [-] | | In my case, it really depends what. I enjoy designing systems and domain-specific languages or writing libraries that work the way I think they should work. On the other hand, if e.g. I need a web interface to do something, the only way I can enjoy myself is by designing my own web framework, which is pretty time-consuming, and then I still need to figure out how to make collapsible sections in CSS and blerghhh. Claude can do that in a few seconds. It's a delightful moment of "oh, thank god, I don't have to do this crap anymore." There are many coding tasks that are just tedium, including 99% of frontend development and over half of backend development. I think it's fine to throw that stuff to AI. It still leaves a lot of fun on the table. | |
| ▲ | nyadesu 2 days ago | parent | prev | next [-] | | In my case, I enjoy writing code too, but it's helpful to have an assistant I can ask to handle small tasks so I can focus on a specific part that requires attention to detail | | |
| ▲ | FeteCommuniste 2 days ago | parent [-] | | Yeah, I sometimes use AI for questions like "is it possible to do [x] using library [y] and if so, how?" and have received mostly solid answers. | | |
| ▲ | stouset 2 days ago | parent | next [-] | | Or “can you prototype doing A via approaches X, Y, and Z, and show me what each looks like?” I love to prototype various approaches. Sometimes I just want to see which one feels like the most natural fit. The LLM can do this in a tenth of the time I can, and I just need to get a general idea of how each approach would feel in practice. | | |
| ▲ | skydhash 2 days ago | parent [-] | | > Sometimes I just want to see which one feels like the most natural fit. This sentence alone is a huge red flag in my books. Either you know the problem domain and can argue about which solution is better and why. Or you don't and what you're doing are experiment to learn the domain. There's a reason the field is called Software Engineering and not Software Art. Words like "feels" does not belongs. It would be like saying which bridge design feels like the most natural fit for the load. Or which material feels like the most natural fit for a break system. | | |
| ▲ | mjr00 2 days ago | parent | next [-] | | > There's a reason the field is called Software Engineering and not Software Art. Words like "feels" does not belongs. Software development is nowhere near advanced enough for this to be true. Even basic questions like "should this project be built in Go, Python, or Rust?" or "should this project be modeled using OOP and domain-driven design, event-sourcing, or purely functional programming?" are decided largely by the personal preferences of whoever the first developer is. | | |
| ▲ | skydhash 2 days ago | parent [-] | | Such questions may be decided by personal preferences, but their impact can easily be demonstrated. Such impacts are what F. Brooks calls accidental complexity and we generally called technical debt. It's just that, unlike other engineering fields, there are not a lot of physical constraints and the decision space have much more dimensions. | | |
| ▲ | mjr00 2 days ago | parent [-] | | > Such questions may be decided by personal preferences, but their impact can easily be demonstrated. I really don't think this is true. What was the demonstrated impact of writing Terraform in Go rather than Rust? Would writing Terraform in Rust have resulted in a better product? Would rewriting it now result in a better product? Even among engineers with 15 years experience you're going to get differing answers on this. | | |
| ▲ | skydhash 2 days ago | parent [-] | | The impact is that now, if you want to modify the project in some way, you will need to learn Go. It's like all the codebases in COBOL. Maybe COBOL at that time was the best language for the product, but now, it's not that easy to find someone with the knowledge to maintain the system. As soon as you make a choice, you accept that further down the line, there will be some X cost to keep going in that direction and some Y cost to revert. As a technical lead, more often you need to ensure that X or/and Y don't grow to be enormous. | | |
| ▲ | mjr00 2 days ago | parent [-] | | > The impact is that now, if you want to modify the project in some way, you will need to learn Go. That's tautologically true, yes, but your claim was > Either you know the problem domain and can argue about which solution is better and why. Or you don't and what you're doing are experiment to learn the domain. So, assuming the domain of infrastructure-at-code is mostly known now which is a fair statement -- which is a better choice, Go or Rust, and why? Remember, this is objective fact, not art, so no personal preferences are allowed. | | |
| ▲ | KronisLV 2 days ago | parent | next [-] | | > So, assuming the domain of infrastructure-as-code is mostly known now which is a fair statement -- which is a better choice, Go or Rust, and why? Remember, this is objective fact, not art, so no personal preferences are allowed. I think it’s possible to engage with questions like these head on and try to find an answer. The problem is that if you want the answer to be close to accurate, you might need both a lot of input data about the situation (including who’d be working with and maintaining the software, what are their skills and weaknesses; alongside the business concerns that impact the timeline, the scale at which you’re working with and a 1000 other things), as well as the output of concrete suggestions might be a flowchart so big it’d make people question their sanity. It’s not impossible, just impractical with a high likelihood of being wrong due to bad or insufficient data or interpretation. But to humor the question: as an example, if you have a small to mid size team with run of the mill devs that have some traditional OOP experience and have a small to mid infrastructure size and complexity, but also have relatively strict deadlines, limited budget and only average requirements in regards to long term maintainability and correctness (nobody will die if the software doesn’t work correctly every single time), then Go will be closer to an optimal choice. I know that because I built an environment management solution in Go, trying to do that in Rust in the same set of circumstances wouldn’t have been successful, objectively speaking. I just straight up wouldn’t have iterated fast enough to ship. Of course, I can only give such a concrete answer for that very specific set of example circumstances after the fact. But even initially those factors pushed me towards Go. If you pull any number of levers in a different direction (higher correctness requirements, higher performance requirements, different team composition), then all of those can influence the outcome towards Rust. Obviously every detail about what a specific system must do also influences that. | | |
| ▲ | Dylan16807 a day ago | parent [-] | | > It’s not impossible, just impractical with a high likelihood of being wrong due to bad or insufficient data or interpretation. If it's impractical to know, why is using personal preference and intuition a "huge red flag"? That's the core idea being disagreed with, not the idea that you could theoretically with enough resources get an objective answer. | | |
| ▲ | KronisLV a day ago | parent [-] | | It might be because depending on one's sensitivity to various factors and how much work they put into discovering the domain, things might feel okay, and yet be the completely wrong choice. For example, how to many people MongoDB felt like a really good option during its hype cycle before it became clear how there are workloads out there, where you will get burnt badly if you pick anything other than a traditional RDBMS with ACID. Similarly, there are cases where people cargo cult really hard or just become opinionated over time - someone who has worked primarily in Java for 20 years will probably pick that for a wide variety of projects, though this preference might make them blind to the fact that others aren't as good with it on a given team and that they might not iterate fast enough to ship, when compared with, let's say Django or Ruby on Rails or even Laravel. Feelings can be dangerous, informed choices will generally be better, though I guess with the way we use language, those two kinda blend together. If those feelings are based on good enough data and experience, then those might be pretty valuable too - someone who has been writing code for 20 years will probably be more accurate than someone who has been programming for 2 years, yet if someone has 10x2 years of experience (doing the same thing, not learning, not exploring), then it's a toss up, worse yet if people think that still means seniority. I kinda get why someone might react to the word "feels" in seemingly deterministic development context, but my own reaction wouldn't be so strong and with certain people, I'd trust their feelings. At the same time I've seen plenty of people who write what they believe to be a good code that is a bit of a mess in my eyes. |
|
| |
| ▲ | skydhash 2 days ago | parent | prev [-] | | Neither. Because the solution for IaC is not Go or Rust, just like the solution for composing music is not a piano or a violin. A solution may be Terraform, another is Ansible,… To implement that solution, you need a programming language, but by then you’re solving accidental complexity, not the essential one attached to the domain. You may be solving, implementation speed, hiring costs, code safety,… but you’re not solving IaC. | | |
| ▲ | Dylan16807 a day ago | parent [-] | | > Neither. > A solution may be Terraform They're asking about what language you use to write Terraform. It's not accidental complexity, it's what the question is about. | | |
| ▲ | skydhash a day ago | parent [-] | | It’s very much accidental complexity. As the sibling comment to my previous comment said, the choice of a language does not depend on Terraform design, but on contextual information like the team skill, business requirements like time delivery and implementation correctness. None of which really impacts the design of Terraform as a solution. Just like SMTP or Posix tools does not care about the language. | | |
| ▲ | Dylan16807 a day ago | parent [-] | | If you're talking about the topic, it's not accidental, it's mandatory, because you have to write Terraform in something. The topic is not how you use Terraform or at a high level design its features, it's how you implement Terraform with code. > the choice of a language does not depend on Terraform design, but on contextual information like the team skill, business requirements like time delivery and implementation correctness That doesn't make it accidental to the topic. It may be accidental to a different topic (the design of Terraform?) that nobody was discussing, but it's not accidental to this topic (language choice). That list of factors is how you get closer to making the decision. | | |
| ▲ | skydhash a day ago | parent [-] | | >> So, assuming the domain of infrastructure-at-code is mostly known now which is a fair statement -- which is a better choice, Go or Rust, and why? This was the question. And my answer was that Go or Rust have no relevancy in the IaC domain. Ansible is relevant, but Python is not. Chef is relevant, Ruby is not. And I’m pretty sure there are in-house stuff that are just Perl scripts. The goal is solving some problem in IaC, by the time, you are considering language choice, you’ve already left the domain and are looking at implementation problems where each choice is balancing tradeoffs. | | |
| ▲ | Dylan16807 a day ago | parent [-] | | Context. That wasn't the original question. That's a short restatement of the real question which is up in an earlier post: >> Such questions may be decided by personal preferences, but their impact can easily be demonstrated. > I really don't think this is true. What was the demonstrated impact of writing Terraform in Go rather than Rust? Would writing Terraform in Rust have resulted in a better product? Would rewriting it now result in a better product? Even among engineers with 15 years experience you're going to get differing answers on this. | | |
| ▲ | skydhash a day ago | parent [-] | | And I’ve already answered that question. One of the main impact is that if you want a contributor to the codebase, the person have to learn Go. Even if they have good knowledge of the domain and are proficient in Rust. There would be some cost associated to training that person in Go (it may be small). Rewriting from Go to another language wouldn’t solve the problem better. Because Go is an implementation choice, not a design choice. There’s nothing in Go that make Terraform better. It could be in C and a lot of people wouldn’t notice. | | |
| ▲ | Dylan16807 a day ago | parent | next [-] | | > And I’ve already answered that question. You somewhat answered it in a way that doesn't really get to why they asked it (you can't make every decision based on "demonstrated impact"). But you did that in a different comment than the one I replied to. The one I replied to was just answering the wrong question entirely. Which is why I replied. > Rewriting from Go to another language wouldn’t solve the problem better. Because Go is an implementation choice, not a design choice. There’s nothing in Go that make Terraform better. It could be in C and a lot of people wouldn’t notice. I'm sorry, are you arguing that using feel to decide how to structure a piece of code is a "huge red flag", but the choice of entire programming language is unimportant? | | |
| ▲ | skydhash a day ago | parent [-] | | > I'm sorry, are you arguing that using feel to decide how to structure a piece of code is a "huge red flag", but the choice of entire programming language is unimportant? From my first reply, I've been arguing that using feels to decide things is very much dangerous. There are usually a less ambiguous way to frame the reasons behind a decision. Methodologies like the five why's can help. And choosing a programming language is orthogonal to designing a solution to a problem. Everything get turned to opcodes and binary at some point. |
| |
| ▲ | a day ago | parent | prev [-] | | [deleted] |
|
|
|
|
|
|
|
|
|
|
|
| |
| ▲ | doug_durham 2 days ago | parent | prev | next [-] | | Do you develop software? Software unlike any physical engineering field. The complexity of any project beyond the most trivial is beyond human ability to work with. You have to switch from analytic tools to more probabilistic tools. That where "feels", "smells", or "looks" come in. Software testing is not a solved problem, unlike bridge testing. | | |
| ▲ | skydhash 2 days ago | parent [-] | | So many FOSS software are made and maintained by a single person. Much more are developer by a very small teams. Probabilistic aren’t needed anywhere. |
| |
| ▲ | fluidcruft 2 days ago | parent | prev [-] | | For example sometimes you're faced with choosing between high-quality libraries to adopt and it's not particularly clear whether you picked the wrong one until after you've tried integrating them. I've found it can be pretty helpful to let the LLM try them all and see where the issues ultimately are. | | |
| ▲ | skydhash 2 days ago | parent [-] | | > sometimes you're faced with choosing between high-quality libraries to adopt and it's not particularly clear whether you picked the wrong one until after you've tried integrating them. Maybe I'm lucky, but I've never encountered this situation. It has been mostly about what tradeoffs I'm willing to make. Libraries are more line of codes added to the project, thus they are liabilities. Including one is always a bad decision, so I only do so because the alternative is worse. Having to choose between two is more like between Scylla and Charybdis (known tradeoffs) than deciding to go left or right in a maze (mystery outcome). | | |
| ▲ | fluidcruft 2 days ago | parent [-] | | It probably depends on what you're working on. For the most part relying on a high-quality library/module that already implements a solution is less code to maintain. Any problems with the shared code can be fixed upstream with more eyeballs and more coverage than anything I build locally. I prefer to keep my eyeballs on things most related to my domain and not maintain stuff that's both ultimately not terribly important and replaceable (if push comes to shove). Generally, you are correct that having multiple libraries to choose among is concerning, but it really depends. Mostly it's stylistic choices and it can be hard to tell how it integrates before trying. |
|
|
|
| |
| ▲ | nottorp 2 days ago | parent | prev | next [-] | | Just be careful if functionality varies between library y version 2 and library y version 3, or if there is a similarly named library y2 that isn't the same. You may get possibilities, but not for what you asked for. | | |
| ▲ | pdntspa 2 days ago | parent [-] | | If you run to the point where you can execute each idea and examine its outputs, problems like that surface pretty quickly | | |
| ▲ | nottorp 2 days ago | parent [-] | | Of course, by that time i could have read the docs for library y the version I'm using... | | |
|
| |
| ▲ | georgemcbay 2 days ago | parent | prev [-] | | > Yeah, I sometimes use AI for questions like "is it possible to do [x] using library [y] and if so, how?" and have received mostly solid answers. In my experience most LLMs are going to answer this with some form of "Absolutely!" and then propose a square-peg-into-a-round-hole way to do it that is likely suboptimal vs using a different library that is far more suited to your problem if you didn't guess the right fit library to begin with. The sycophancy problem is still very real even when the topic is entirely technical. Gemini is (in my experience) the least likely to lead you astray in these situations but its still a significant problem even there. | | |
| ▲ | jessoteric 2 days ago | parent [-] | | IME this has been significantly reduced in newer models like 4.5 Opus and to a lesser extent Sonnet, but agree it's still sort of bad- mainly because the question you're posing is bad. if you ask a human this the answer can also often be "yes [if we torture the library]", because software development is magic and magic is the realm of imagination. much better prompt: "is this library designed to solve this problem" or "how can we solve this problem? i am considering using this library to do so, is that realistic?" |
|
|
| |
| ▲ | theshrike79 2 days ago | parent | prev | next [-] | | You really get enjoyment writing a full CRUD HTTP API five times, one for each endpoint? I don't :) Before I had IDE templates and Intellisense. Now I can just get any agentic AI to do it for me in 60 seconds and I can get to the actual work. | | |
| ▲ | skydhash 2 days ago | parent [-] | | Why do you need a full crud http api for? Just loading the data straight from the database? Usually I've already implemented that before and I just copy paste the implementation and doing some VIM magic. And in Frameworks like Rails or Laravel, it may be less than 10 lines of code. More involved business logic? Then I'm spending more time getting a good spec for those than implementing the spec. |
| |
| ▲ | loloquwowndueo 2 days ago | parent | prev | next [-] | | “I want my AI to do laundry and dishes so I can code, not for my AI to code so I can do laundry and dishes” | | |
| ▲ | thewebguyd 2 days ago | parent | next [-] | | This sums up my feelings almost exactly. I don't want LLMs, AI, and eventually Robots to take over the fun stuff. I want them to do the mundane, physical tasks like laundry and dishes, leave me to the fun creative stuff. But as we progress right now, the hype machine is pushing AI to take over art, photography, video, coding, etc. All the stuff I would rather be doing. Where's my house cleaning robot? | | |
| ▲ | zelphirkalt 2 days ago | parent [-] | | I would like to go even further and say: Those things, art, photography, video, coding ... They are forms of craft, human expression, creativity. They are part of what makes life interesting. So we are in the process of eliminating the interesting and creative parts, in the name of profit and productivity maxing (if any!). Maybe we can create the 100th online platform for the same thing soon 10x faster! Wow! Of course this is a bit too black&white. There can still be a creative human being introducing nuance and differences, trying to get the automated tools to do things different in the details or some aspects. Question is, losing all those creative jobs (in absolute numbers of people doing them), what will we as society, or we as humanity become? What's the ETA on UBI, so that we can reap the benefits of what we automated away, instead of filling the pockets of a few? |
| |
| ▲ | minimaxir 2 days ago | parent | prev | next [-] | | Claude is very good at unfun-but-necessary coding tasks such as writing docstrings and type hints, which is a prominent instance of "laundry and dishes" for a dev. | | |
| ▲ | loloquwowndueo 2 days ago | parent | next [-] | | “Sorry, the autogenerated api documentation was wrong because the ai hallucinated the docstring” | | |
| ▲ | theshrike79 2 days ago | parent [-] | | You can't read? Please don't say you commit AI-generated stuff without checking it first? | | |
| |
| ▲ | mrguyorama 2 days ago | parent | prev [-] | | >writing docstrings and type hints Disagree. Claude makes the same garbage worthless comments as a Freshman CS student. Things like: // Frobbing the bazz res = util.frob(bazz); Or // If bif is True here then blorg if (bif){
blorg;
} Like wow, so insightful And it will ceaselessly try to auto complete your comments with utter nonsense that is mostly grammatically correct. The most success I have had is using claude to help with Spring Boot annotations and config processing (Because documentation is just not direct enough IMO) and to rubber duck debug with, where claude just barely edges out the rubber duck. | | |
| ▲ | minimaxir 2 days ago | parent [-] | | I intentionally said docstrings instead of comments. Comments by default can be verbose on agents but a line in the AGENTS.md does indeed wrangle modern agents to only comment on high signal code blocks that are not tautological. |
|
| |
| ▲ | moffkalast 2 days ago | parent | prev | next [-] | | Well it would be funnier if dishwashers, washing machines and dryers didn't automate that ages ago. It's literally one of the first things robots started doing for us. | |
| ▲ | re-thc 2 days ago | parent | prev [-] | | Soon you'll realize you're the "AI". We've lost control. |
| |
| ▲ | pdntspa 2 days ago | parent | prev [-] | | Me writing code is me spending 3/4 of my time wading through documentation and google searches. It's absolutely hell on my ADD. My ability to memorize is absolutely garbage. Throughout my career I've worked in like 10 different languages, and in any given project I'm usually working in at least 3 or 4. There's a lot of "now what is a map operation in this stupid fucking language called again?!" Claude writing code gets the same output if not better in about 1/10 of the time. That's where you realize that the writing code bits are just one small part of the overall picture. One that I realize I could do without. | | |
| ▲ | n4r9 2 days ago | parent | next [-] | | May be a domain issue? If you're largely coding within a JS framework (which most software devs are tbf) then that makes total sense. If you're working in something like fintech or games, perhaps less so. | | |
| ▲ | pdntspa 2 days ago | parent [-] | | My last job was a mix of Ruby, Python, Bash, SQL, and Javascript (and CSS and HTML). One or two jobs before that it was all those plus a smattering of C. A few jobs before that it was C# and Perl. |
| |
| ▲ | skydhash 2 days ago | parent | prev | next [-] | | I would say notetaking would be a much bigger help than Claude at this point. There's a lot of methods to organize information that I believe would help you, better than an hallucination machine. | | |
| ▲ | neoromantique 2 days ago | parent [-] | | Notetaking with ADHD is another sort of hell to be honest. I absolutely can attest to what parent is saying, I have been developing software in Python for nearly a decade now and I still routinely look up the /basics/. LLM's have been a complete gamechanger to me, being able to reduce the friction of "ok let me google what I need in a very roundabout way my memory spit it out" to a fast and often inline llm lookup. | | |
| ▲ | skydhash 2 days ago | parent | next [-] | | Looking up documentation is normal. If not, we wouldn't have the manual pages in Unix and such an emphasis on documentation in ecosystems like Lisp, Go, Python, Perl,... We even have cheatsheets and syntax references books because it's just so easy to forget the /basics/. I said notetaking, but it's more about building your own index. In $WORK projects, I mostly use the browser bookmarks, the ticket system, the PR description and commits to contextually note things. In personal projects, I have an org-mode file (or a basic text file) and a lot of TODO comments. | | |
| ▲ | pdntspa 2 days ago | parent | next [-] | | And all that take rote mechanical work. Which can quickly lead to fractured focus and now suddenly I'm pulled out of my flow. Or I can farm that stuff to an LLM, stay in my flow, and iterate at a speed that feels good. | |
| ▲ | neoromantique 2 days ago | parent | prev [-] | | It is very hard to explain the extent of it to a person who did not experience it, really. I have over a decade of experience, I do this stuff daily, I don't think I can write a 10 line bash/python/js script without looking up the docs at least a couple times. I understand exactly what I need to write, but exact form eludes my brain, so this Levenshtein-distance-on-drugs machine that can parse my rambling + surrounding context into valid syntax for what I need right at that time is invaluable and I would even go as far as saying life changing. I understand and hold high level concepts alright, I know where stuff is in my codebase, I understand how it all works down to very low levels, but the minutea of development is very hard due to how my memory works (and has always worked). | | |
| ▲ | skydhash 2 days ago | parent [-] | | What I'm saying is that is normal. Unless you've worked everyday with the same language and a very small set of functions, you're bound to forget signature and syntax. What I'm advocating is a faster retrieval of the correct information. | | |
|
| |
| ▲ | theshrike79 2 days ago | parent | prev [-] | | This is the thing. I _know_ what the correct solution looks like. But figuring out what is the correct way in this particular language is the issue. Now I can get the assistant to do it, look at it and go "yep, that's how you iterate over an array of strings". |
|
| |
| ▲ | tayo42 2 days ago | parent | prev [-] | | How do you end up with 3 to 4 languages in one project? | | |
| ▲ | saulpw 2 days ago | parent | next [-] | | Typescript on the frontend, Python on the backend, SQL for the database, bash for CI. This isn't even counting HTML/CSS or the YAML config. | | |
| ▲ | tayo42 2 days ago | parent [-] | | I wouldn't call html, yaml or css languages. Same for sql, do you really context switch between sql and other code that frequently? Everyone should stop using bash, especially if you have a scripting language you can use already. | | |
| ▲ | wosat 2 days ago | parent | next [-] | | Sorry for being pedantic, but what does the "L" stand for in HTML, YAML, SQL?
They may not be "programming languages" or, in the case of SQL, a "general purpose programming language", but they are indeed languages. | | |
| ▲ | tayo42 a day ago | parent [-] | | You don't have to apologize. It's the internet, pedantic is expected |
| |
| ▲ | pdntspa 2 days ago | parent | prev [-] | | Dude have you even written any hardcore SQL? plpgSQL is very much a turing-complete language |
|
| |
| ▲ | merely-unlikely 2 days ago | parent | prev | next [-] | | Recently I've been experimenting with using multiple languages in some projects where certain components have a far better ecosystem in one language but the majority of the project is easier to write in a different one. For example, I often find Python has very mature and comprehensive packages for a specific need I have, but it is a poor language for the larger project (I also just hate writing Python). So I'll often put the component behind a http server and communicate that way. Or in other cases I've used Rust for working with WASAPI and win32 which has some good crates for it, but the ecosystem is a lot less mature elsewhere. I used to prefer reinventing the wheel in the primary project language, but I wasted so much time doing that. The tradeoff is the project structure gets a lot more complicated, but it's also a lot faster to iterate. Plus your usual html/css/js on the frontend and something else on the backend, plus SQL. | |
| ▲ | theshrike79 2 days ago | parent | prev | next [-] | | Go for the backend, something javascripty for the front end. You're already at two. Depending if you count HTML, CSS or SQL as "languages", you're up to a half dozen pretty quick. | |
| ▲ | jessoteric 2 days ago | parent | prev | next [-] | | i find it's pretty rare to have a project that only consists of one or two languages, over a certain complexity/feature threshold | |
| ▲ | zelphirkalt 2 days ago | parent | prev | next [-] | | 3 or 4 can very easily accumulate. For example: HTML, CSS as must know, plus some JS/TS (actually that's 2 langs!) for sprinkles of interactivity, backend in any proper backend language. Oh wait, there is a fifth language, SQL, because we need to access the database. Ah and those few shell scripts we need? Someone's gotta write those too. They may not always be full programming languages, but languages they are, and one needs to know them. | |
| ▲ | tomgp 2 days ago | parent | prev | next [-] | | HTML, CSS, Javascript? | |
| ▲ | pdntspa 2 days ago | parent | prev [-] | | Oh my sweet summer child... |
|
|
|
|
| ▲ | mrsmrtss a day ago | parent | prev | next [-] |
| > its quality of work is extremely high ... It may seem decent until you look closer. Just like with a junior dev, you should always review the code very carefully, you can absolutely not trust it. It's not bad at trivial stuff, but fails almost always if things get more complex and unlike a junior dev, it does not tell you, when things get too complex for it. |
|
| ▲ | traceroute66 a day ago | parent | prev | next [-] |
| I don't follow. In the same breath (same paragraph) you state two polar opposites about working with AI: - I am phenomenally productive
- "as long as I occasionally have it stop" and "it tends to forget a lot of rules like DRY"
I don't see how you can claim to be "phenomenally productive" when working with a tool you have to babysit because it forgets your instructions the whole time.If it was the "junior dev" you also mention, I suspect you would very quickly invite the "junior dev" to find a job elsewhere. |
| |
| ▲ | pdntspa 18 hours ago | parent [-] | | You don't have to follow. I'm still punching way above my weight. Not sure why both things can't be true at once. |
|
|
| ▲ | rootnod3 2 days ago | parent | prev | next [-] |
| Cool cool cool. So if you use LLMs as junior devs, let me ask you how future awesome senior devs like you will come around? From WHAT job experience? From what coding struggle? |
| |
| ▲ | eightysixfour 2 days ago | parent | next [-] | | What would you like individual contributors to do about it, exactly? Refuse to use it, even though this person said they're happier and more fulfilled at work? I'm asking because I legitimately have not figured out an answer to this problem. | |
| ▲ | fluidcruft 2 days ago | parent | prev | next [-] | | How do you get junior devs if your concept of the LLM is that it's "a principal engineer" that "do[es] not ask [you] any questions"? Also, I'm pretty sure junior devs can use directing a LLM to learn from mistakes faster. Let them play. Soon enough they're going to be better than all of us anyway. The same way widespread access to strong chess computers raised the bar at chess clubs. | | |
| ▲ | rootnod3 2 days ago | parent [-] | | I don't think the chess analogy grabs here. In chess, you play _against_ the chess computer. Take the same approach and let the chess computer play FOR the player and see how far he gets. | | |
| ▲ | fluidcruft 2 days ago | parent [-] | | Maybe. I don't think adversarial vs not is as important as gaining experience. Ultimately both are problem solving tasks and learning instincts about which approaches work best in certain situations. I'm probably a pretty shitty developer by HN standards but I generally have to build a prototype to fully understand and explore problem and iterate designs and LLMs have been pretty good for me as trainers for learning things I'm not familiar with. I do have a certain skill set, but the non-domain stuff can be really slow and tedious work. I can recognize "good enough" and "clean" and I think the next generation can use that model very well to be become native with how to succeed with these tools. Let me put it this way: people don't have to be hired by the best companies to gain experience using best practices anymore. |
|
| |
| ▲ | pdntspa 2 days ago | parent | prev | next [-] | | My last job there was effectively a gun held to the back of my head, ordering me to use this stuff. And this started about a year ago, when the tooling for agentic dev was absolutely atrocious, because we had a CTO who had the biggest most raging boner for anything that offered even a whiff of "AI". Unfortunately the bar is being raised on us. If you can't hang with the new order you are out of a job. I promise I was one of the holdouts who resisted this the most. It's probably why I got laid off last spring. Thankfully, as of this last summer, agentic dev started to really get good, and my opinion made a complete 180. I used the off time to knock out a personal project in a month or two's worth of time, that would have taken me a year+ the old way. I leveraged that experience to get me where I am now. | | |
| ▲ | rootnod3 2 days ago | parent [-] | | Ok, now assume you start relying on it and let's assume cloud flare has another outage. You just go and clock out for the day saying "can't work, agent is down"? I don't think we'll be out of jobs. Maybe temporarily. But those jobs come back. The energy and money drain that LLMs are, are just not sustainable. I mean, it's cool that you got the project knocked out in a month or two, but if you'd sit down now without an LLM and try to measure the quality of that codebase, would you be 100% content? Speed is not always a good metric. Sure, 1 -2 months for a project is nice, but isn't especially a personal project more about the fun of doing the project and learning something from it and sharpening your skills? | | |
| ▲ | pdntspa 2 days ago | parent [-] | | When the POS system goes down at a restaurant they'll revert to pen and paper. Can't imagine its much different in that case. |
|
| |
| ▲ | bpt3 2 days ago | parent | prev | next [-] | | Why is that a developer's problem? If anything, they are incentivized to avoid creating future competition in the job market. | | |
| ▲ | rootnod3 2 days ago | parent [-] | | It's not a problem for the senior dev directly, but maybe down the road. And it definitely is a problem for the company once said senior dev leaves or retires. Seriously, long term thinking went out the window long time ago, didn't it? | | |
| ▲ | bpt3 2 days ago | parent [-] | | No, long term thinking didn't go out the window. It is definitely a problem for the company. How is it a problem for the senior dev at any point? What incentive do they have to aid the company at the expense of their own *long term* career prospects? |
|
| |
| ▲ | platevoltage 2 days ago | parent | prev [-] | | There's that long term thinking that the tech industry, and really every other publicly traded company is known for. |
|
|
| ▲ | mjr00 2 days ago | parent | prev | next [-] |
| > That's why you treat it like a junior dev. You do the fun stuff of supervising the product, overseeing design and implementation, breaking up the work, and reviewing the outputs. It does the boring stuff of actually writing the code. I am so tired of this analogy. Have the people who say this never worked with a junior dev before? If you treat your junior devs as brainless code monkeys who only exist to type out your brilliant senior developer designs and architectures instead of, you know, human beings capable of solving problems, 1) you're wasting your time, because a less experienced dev is still capable of solving problems independently, 2) the juniors working under you will hate it because they get no autonomy, and 3) the juniors working under you will stay junior because they have no opportunity to learn--which means you've failed at one of your most important tasks as a senior developer, which is mentorship. |
| |
| ▲ | pdntspa 2 days ago | parent | next [-] | | I have mentored and worked with a junior dev. And the only way to get her to do anything useful and productive was to spell things out. Otherwise she got wrapped around the axle trying to figure out the complex things and was constantly asking for my help with basic design-level tasks. Doing the grunt work is how you learn the higher-level stuff. When I was a junior, that's how it was for me. The senior gave me something that was structured and architected and asked me to handle smaller tasks that were beneath them. Giving juniors full autonomy is a great way to end up with an unmaintainable mess that is a nightmare to work with without substancial refactoring. I know this because I have made a career out of fixing exactly this mistake. | | |
| ▲ | mjr00 2 days ago | parent [-] | | I have never worked with junior devs as incompetent as you describe, having worked at AWS, Splunk/Cisco, among others. At AWS even interns essentially got assigned a full project for their term and were just told to go build it. Does your company just have an absurdly low hiring bar for juniors? > Giving juniors full autonomy is a great way to end up with an unmaintainable mess that is a nightmare to work with without substancial refactoring. Nobody is suggesting they get full autonomy to cowboy code and push unreviewed changes to prod. Everything they build should be getting reviewed by their peers and seniors. But they need opportunities to explore and make mistakes and get feedback. | | |
| ▲ | Philpax a day ago | parent | next [-] | | Your experience is the outlier, not the norm. Most people don't work for AWS. | | |
| ▲ | mjr00 a day ago | parent [-] | | Sure but I've worked for other places too, not just AWS. Including small startups and mid-sized companies. All of them had bad juniors--and bad seniors--who people quickly learned could not be trusted with anything and were either fired or put into a situation where they could do minimal damage. However none of them had blanket expectations of "juniors are too stupid to figure out how to solve problems and need step-by-step instructions." I'm sure some places like that exist, but I'd never want to work there; after all, if the place I'm working for openly admits it hires idiots, what does that say about me? |
| |
| ▲ | pdntspa 2 days ago | parent | prev [-] | | > AWS, Splunk/Cisco It's an entirely different world in small businesses that aren't primarily tech. |
|
| |
| ▲ | kubb a day ago | parent | prev [-] | | In my experience, juniors were more capable at solving engineering problems than some staff engineers, but that’s just an artifact of a broken ladder system. |
|
|
| ▲ | urxvtcd a day ago | parent | prev | next [-] |
| Few weeks ago I'd disagree with you, but recently I've been struggling with concentration and motivation and now I kind of try to embrace coding with AI. I guide it pretty strictly, try to stick with pure functions, and always read the output thoroughly. In a couple of places requiring some carefulness I coded them in executable pseudocode (Python) and made AI translate it to the more boilerplate-y target language. I don't know if I'm any faster than I would be if I was motivated, but I'm A LOT more productive in my current state. I still hope for the next AI winter though. |
|
| ▲ | tiku 2 days ago | parent | prev | next [-] |
| I enjoy finding the problem and then telling Claude to fix it. Specifying the function and the problem. Then going to get a coffee from the breakroom to see it finished when I return. The junior dev has questions when I did that. Claude just fixes it. |
|
| ▲ | order-matters 2 days ago | parent | prev | next [-] |
| I wonder if DRY is still a principle worth holding onto in the AI coding era. I mean it probably is, but this feels like enough of a shift in coding design that re-evaluating principles designed for human-only coding might be worth the effort |
|
| ▲ | alfalfasprout 2 days ago | parent | prev | next [-] |
| I really hope you don't actually treat junior devs this way... |
|
| ▲ | a day ago | parent | prev | next [-] |
| [deleted] |
|
| ▲ | xnx 2 days ago | parent | prev [-] |
| > rules like DRY Principles like DRY |