▲ 87 ▼ Professional software engineers of Lemmy, are code reviews still a thing in the age of "AI" assisted coding? (lemmy.world) submitted 2 months ago by ccunning@lemmy.world to c/asklemmy@lemmy.world 54 comments fedilink hide all child comments
[–] nymnympseudonym@piefed.social -1 points 2 months ago (2 children) Basically programmers are becoming designers and code reviewers. There are now so many code changes that the code review is the bottleneck more than the coding. We depend more now on tests to validate software does what it should. We get AI to write the gazillion tests. And we get AI to summarize and explain blocks of code. permalink fedilink source parent hideshow 4 child comments replies: [–] slevinkelevra@sh.itjust.works 16 points 2 months ago (1 child) That is just the thing, developer and tester should never be the same person. Let alone same AI model. IMO testing is never taken seriously enough, just seen as unnecessary step and merged together with dev testing. From my years of experience I know that everything testers find is just explained away rather than properly adressed, and then with all of the obvious stuff in the way you never see the real issues. permalink fedilink source parent hideshow 2 child comments replies: [–] nymnympseudonym@piefed.social 0 points 2 months ago (1 child) Interested in how much actual experience you have with AI geneated testsuites. My code was never tested this well. permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 17 points 2 months ago (1 child) I have experience with AI generated test suites, and while its good for generating coverage, it isn't so good for actually ensuring correctness, which is the actual point. I've watched the robot happily introduce bugs to pass broken tests, and also break tests to match code, and everything in between. I don't want lots of tests, I want good tests. permalink fedilink source parent hideshow 2 child comments replies: [–] ellen.kimble@piefed.social 1 point 2 months ago (1 child) You have to prompt for that, I do that regularly along with refactors. ‘Examine all tests to ensure they are testing functionality and not just passing a test.’ It finds them and will work on it. I think the problem continues to be engineering discipline. People are lazy with AI on multiple levels, not just copy pasta slop. permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago (2 children) Testing functionality isn't the same as correctness. permalink fedilink source parent hideshow 4 child comments replies: [–] ellen.kimble@piefed.social 1 point 2 months ago (1 child) Oh excuse me then, what is correctness? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago (1 child) int add(int a, int b) { return a + b; } This code is clearly functional, it'll compile and execute. However, the customer actually needs the code to do a saturating add. With that knowledge, we can clearly see that the code is not correct. It will not saturate, it will wrap around instead. Without that knowledge, an LLM will happily write some basic unit tests that won't cover the saturation edge case, and the bug would live on until its hit in prod. If you're lucky, and your function doco is good, the LLM might spot the bug, and notify you. My personal preference for how to generate tests is to ask the agent to write specific tests. E.g: "write a test for add that demonstrates that it saturates". permalink fedilink source parent hideshow 2 child comments replies: [–] slevinkelevra@sh.itjust.works 2 points 2 months ago (1 child) IMO this is a bad example as in theory, testers test code against requirements, and if there is no such req stating anything about saturation then how should the testers or in this case the LLM know? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago It is over simplified, but there are often implicit requirements that a human would be aware of from the broader context that the LLM may not be. i.e add is used to increment a health bar, so wrap around doesn't make sense. permalink fedilink source parent [–] slevinkelevra@sh.itjust.works 1 point 2 months ago (1 child) Yeah, I had testers that tested the functionality of a delay... But had set the delay parameter to zero. Well good thing this one case worked, but you didn't check anything beyond that for correctness at all. permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago Timing and tests, name a better migraine duo :D. We continuously create tests that ensure a process completes in an set amount of time, and every time, we don't give them enough leeway, and the test will fail randomly if the CI runner gets overloaded. permalink fedilink source parent [–] Casterial@lemmy.world 12 points 2 months ago* (1 child) Are you new to engineering? Coding was never the bottleneck. Having someone who knows what to do, and planning usually is. I spend 20-30% of my time at most actively coding. 30-40% helping people with dumb things that take my time when they shouldn't, and the remainder in meetings, scoping my work, or debugging. permalink fedilink source parent hideshow 2 child comments replies: [–] HaraldvonBlauzahn@feddit.org 7 points 2 months ago* (last edited 2 months ago) I spend 20-30% of my time at most actively coding. And by my experience, most of that time is still not "typing in code". As a benchmark, I was working in two greenfield projects, each for about five years. One was about a topic very close to my doctorate thesis in signal processing, one an embedded device for a large scientific experiment - with the systems engineers and the scientists as users sitting next door. So, in both cases, extremely well defined, far better than what an average programmer will ever see. Some colleagues worked on the JWST. That org knows damn well how to engineer stuff. At the end of these five years, I had both times around 60,000 lines of code. Pretty productive. Now, let's do the math: With about 250 work days per year, that is ..... 48 lines of code per day. You could type that in five minutes (and no, you don't need a Dvorak keyboard layout to do this, LOL). For old legacy projects, that average will be far far worse. So, most of the productive time is actually thinking about code, and talking with people. And LLMs can't do that. They can only type. And worse, doing that they don't use the most important key for a programmer: The 'delete' key. permalink fedilink source parent
[–] slevinkelevra@sh.itjust.works 16 points 2 months ago (1 child) That is just the thing, developer and tester should never be the same person. Let alone same AI model. IMO testing is never taken seriously enough, just seen as unnecessary step and merged together with dev testing. From my years of experience I know that everything testers find is just explained away rather than properly adressed, and then with all of the obvious stuff in the way you never see the real issues. permalink fedilink source parent hideshow 2 child comments replies: [–] nymnympseudonym@piefed.social 0 points 2 months ago (1 child) Interested in how much actual experience you have with AI geneated testsuites. My code was never tested this well. permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 17 points 2 months ago (1 child) I have experience with AI generated test suites, and while its good for generating coverage, it isn't so good for actually ensuring correctness, which is the actual point. I've watched the robot happily introduce bugs to pass broken tests, and also break tests to match code, and everything in between. I don't want lots of tests, I want good tests. permalink fedilink source parent hideshow 2 child comments replies: [–] ellen.kimble@piefed.social 1 point 2 months ago (1 child) You have to prompt for that, I do that regularly along with refactors. ‘Examine all tests to ensure they are testing functionality and not just passing a test.’ It finds them and will work on it. I think the problem continues to be engineering discipline. People are lazy with AI on multiple levels, not just copy pasta slop. permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago (2 children) Testing functionality isn't the same as correctness. permalink fedilink source parent hideshow 4 child comments replies: [–] ellen.kimble@piefed.social 1 point 2 months ago (1 child) Oh excuse me then, what is correctness? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago (1 child) int add(int a, int b) { return a + b; } This code is clearly functional, it'll compile and execute. However, the customer actually needs the code to do a saturating add. With that knowledge, we can clearly see that the code is not correct. It will not saturate, it will wrap around instead. Without that knowledge, an LLM will happily write some basic unit tests that won't cover the saturation edge case, and the bug would live on until its hit in prod. If you're lucky, and your function doco is good, the LLM might spot the bug, and notify you. My personal preference for how to generate tests is to ask the agent to write specific tests. E.g: "write a test for add that demonstrates that it saturates". permalink fedilink source parent hideshow 2 child comments replies: [–] slevinkelevra@sh.itjust.works 2 points 2 months ago (1 child) IMO this is a bad example as in theory, testers test code against requirements, and if there is no such req stating anything about saturation then how should the testers or in this case the LLM know? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago It is over simplified, but there are often implicit requirements that a human would be aware of from the broader context that the LLM may not be. i.e add is used to increment a health bar, so wrap around doesn't make sense. permalink fedilink source parent [–] slevinkelevra@sh.itjust.works 1 point 2 months ago (1 child) Yeah, I had testers that tested the functionality of a delay... But had set the delay parameter to zero. Well good thing this one case worked, but you didn't check anything beyond that for correctness at all. permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago Timing and tests, name a better migraine duo :D. We continuously create tests that ensure a process completes in an set amount of time, and every time, we don't give them enough leeway, and the test will fail randomly if the CI runner gets overloaded. permalink fedilink source parent
[–] nymnympseudonym@piefed.social 0 points 2 months ago (1 child) Interested in how much actual experience you have with AI geneated testsuites. My code was never tested this well. permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 17 points 2 months ago (1 child) I have experience with AI generated test suites, and while its good for generating coverage, it isn't so good for actually ensuring correctness, which is the actual point. I've watched the robot happily introduce bugs to pass broken tests, and also break tests to match code, and everything in between. I don't want lots of tests, I want good tests. permalink fedilink source parent hideshow 2 child comments replies: [–] ellen.kimble@piefed.social 1 point 2 months ago (1 child) You have to prompt for that, I do that regularly along with refactors. ‘Examine all tests to ensure they are testing functionality and not just passing a test.’ It finds them and will work on it. I think the problem continues to be engineering discipline. People are lazy with AI on multiple levels, not just copy pasta slop. permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago (2 children) Testing functionality isn't the same as correctness. permalink fedilink source parent hideshow 4 child comments replies: [–] ellen.kimble@piefed.social 1 point 2 months ago (1 child) Oh excuse me then, what is correctness? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago (1 child) int add(int a, int b) { return a + b; } This code is clearly functional, it'll compile and execute. However, the customer actually needs the code to do a saturating add. With that knowledge, we can clearly see that the code is not correct. It will not saturate, it will wrap around instead. Without that knowledge, an LLM will happily write some basic unit tests that won't cover the saturation edge case, and the bug would live on until its hit in prod. If you're lucky, and your function doco is good, the LLM might spot the bug, and notify you. My personal preference for how to generate tests is to ask the agent to write specific tests. E.g: "write a test for add that demonstrates that it saturates". permalink fedilink source parent hideshow 2 child comments replies: [–] slevinkelevra@sh.itjust.works 2 points 2 months ago (1 child) IMO this is a bad example as in theory, testers test code against requirements, and if there is no such req stating anything about saturation then how should the testers or in this case the LLM know? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago It is over simplified, but there are often implicit requirements that a human would be aware of from the broader context that the LLM may not be. i.e add is used to increment a health bar, so wrap around doesn't make sense. permalink fedilink source parent [–] slevinkelevra@sh.itjust.works 1 point 2 months ago (1 child) Yeah, I had testers that tested the functionality of a delay... But had set the delay parameter to zero. Well good thing this one case worked, but you didn't check anything beyond that for correctness at all. permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago Timing and tests, name a better migraine duo :D. We continuously create tests that ensure a process completes in an set amount of time, and every time, we don't give them enough leeway, and the test will fail randomly if the CI runner gets overloaded. permalink fedilink source parent
[–] CameronDev@programming.dev 17 points 2 months ago (1 child) I have experience with AI generated test suites, and while its good for generating coverage, it isn't so good for actually ensuring correctness, which is the actual point. I've watched the robot happily introduce bugs to pass broken tests, and also break tests to match code, and everything in between. I don't want lots of tests, I want good tests. permalink fedilink source parent hideshow 2 child comments replies: [–] ellen.kimble@piefed.social 1 point 2 months ago (1 child) You have to prompt for that, I do that regularly along with refactors. ‘Examine all tests to ensure they are testing functionality and not just passing a test.’ It finds them and will work on it. I think the problem continues to be engineering discipline. People are lazy with AI on multiple levels, not just copy pasta slop. permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago (2 children) Testing functionality isn't the same as correctness. permalink fedilink source parent hideshow 4 child comments replies: [–] ellen.kimble@piefed.social 1 point 2 months ago (1 child) Oh excuse me then, what is correctness? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago (1 child) int add(int a, int b) { return a + b; } This code is clearly functional, it'll compile and execute. However, the customer actually needs the code to do a saturating add. With that knowledge, we can clearly see that the code is not correct. It will not saturate, it will wrap around instead. Without that knowledge, an LLM will happily write some basic unit tests that won't cover the saturation edge case, and the bug would live on until its hit in prod. If you're lucky, and your function doco is good, the LLM might spot the bug, and notify you. My personal preference for how to generate tests is to ask the agent to write specific tests. E.g: "write a test for add that demonstrates that it saturates". permalink fedilink source parent hideshow 2 child comments replies: [–] slevinkelevra@sh.itjust.works 2 points 2 months ago (1 child) IMO this is a bad example as in theory, testers test code against requirements, and if there is no such req stating anything about saturation then how should the testers or in this case the LLM know? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago It is over simplified, but there are often implicit requirements that a human would be aware of from the broader context that the LLM may not be. i.e add is used to increment a health bar, so wrap around doesn't make sense. permalink fedilink source parent [–] slevinkelevra@sh.itjust.works 1 point 2 months ago (1 child) Yeah, I had testers that tested the functionality of a delay... But had set the delay parameter to zero. Well good thing this one case worked, but you didn't check anything beyond that for correctness at all. permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago Timing and tests, name a better migraine duo :D. We continuously create tests that ensure a process completes in an set amount of time, and every time, we don't give them enough leeway, and the test will fail randomly if the CI runner gets overloaded. permalink fedilink source parent
[–] ellen.kimble@piefed.social 1 point 2 months ago (1 child) You have to prompt for that, I do that regularly along with refactors. ‘Examine all tests to ensure they are testing functionality and not just passing a test.’ It finds them and will work on it. I think the problem continues to be engineering discipline. People are lazy with AI on multiple levels, not just copy pasta slop. permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago (2 children) Testing functionality isn't the same as correctness. permalink fedilink source parent hideshow 4 child comments replies: [–] ellen.kimble@piefed.social 1 point 2 months ago (1 child) Oh excuse me then, what is correctness? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago (1 child) int add(int a, int b) { return a + b; } This code is clearly functional, it'll compile and execute. However, the customer actually needs the code to do a saturating add. With that knowledge, we can clearly see that the code is not correct. It will not saturate, it will wrap around instead. Without that knowledge, an LLM will happily write some basic unit tests that won't cover the saturation edge case, and the bug would live on until its hit in prod. If you're lucky, and your function doco is good, the LLM might spot the bug, and notify you. My personal preference for how to generate tests is to ask the agent to write specific tests. E.g: "write a test for add that demonstrates that it saturates". permalink fedilink source parent hideshow 2 child comments replies: [–] slevinkelevra@sh.itjust.works 2 points 2 months ago (1 child) IMO this is a bad example as in theory, testers test code against requirements, and if there is no such req stating anything about saturation then how should the testers or in this case the LLM know? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago It is over simplified, but there are often implicit requirements that a human would be aware of from the broader context that the LLM may not be. i.e add is used to increment a health bar, so wrap around doesn't make sense. permalink fedilink source parent [–] slevinkelevra@sh.itjust.works 1 point 2 months ago (1 child) Yeah, I had testers that tested the functionality of a delay... But had set the delay parameter to zero. Well good thing this one case worked, but you didn't check anything beyond that for correctness at all. permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago Timing and tests, name a better migraine duo :D. We continuously create tests that ensure a process completes in an set amount of time, and every time, we don't give them enough leeway, and the test will fail randomly if the CI runner gets overloaded. permalink fedilink source parent
[–] CameronDev@programming.dev 1 point 2 months ago (2 children) Testing functionality isn't the same as correctness. permalink fedilink source parent hideshow 4 child comments replies: [–] ellen.kimble@piefed.social 1 point 2 months ago (1 child) Oh excuse me then, what is correctness? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago (1 child) int add(int a, int b) { return a + b; } This code is clearly functional, it'll compile and execute. However, the customer actually needs the code to do a saturating add. With that knowledge, we can clearly see that the code is not correct. It will not saturate, it will wrap around instead. Without that knowledge, an LLM will happily write some basic unit tests that won't cover the saturation edge case, and the bug would live on until its hit in prod. If you're lucky, and your function doco is good, the LLM might spot the bug, and notify you. My personal preference for how to generate tests is to ask the agent to write specific tests. E.g: "write a test for add that demonstrates that it saturates". permalink fedilink source parent hideshow 2 child comments replies: [–] slevinkelevra@sh.itjust.works 2 points 2 months ago (1 child) IMO this is a bad example as in theory, testers test code against requirements, and if there is no such req stating anything about saturation then how should the testers or in this case the LLM know? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago It is over simplified, but there are often implicit requirements that a human would be aware of from the broader context that the LLM may not be. i.e add is used to increment a health bar, so wrap around doesn't make sense. permalink fedilink source parent [–] slevinkelevra@sh.itjust.works 1 point 2 months ago (1 child) Yeah, I had testers that tested the functionality of a delay... But had set the delay parameter to zero. Well good thing this one case worked, but you didn't check anything beyond that for correctness at all. permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago Timing and tests, name a better migraine duo :D. We continuously create tests that ensure a process completes in an set amount of time, and every time, we don't give them enough leeway, and the test will fail randomly if the CI runner gets overloaded. permalink fedilink source parent
[–] ellen.kimble@piefed.social 1 point 2 months ago (1 child) Oh excuse me then, what is correctness? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago (1 child) int add(int a, int b) { return a + b; } This code is clearly functional, it'll compile and execute. However, the customer actually needs the code to do a saturating add. With that knowledge, we can clearly see that the code is not correct. It will not saturate, it will wrap around instead. Without that knowledge, an LLM will happily write some basic unit tests that won't cover the saturation edge case, and the bug would live on until its hit in prod. If you're lucky, and your function doco is good, the LLM might spot the bug, and notify you. My personal preference for how to generate tests is to ask the agent to write specific tests. E.g: "write a test for add that demonstrates that it saturates". permalink fedilink source parent hideshow 2 child comments replies: [–] slevinkelevra@sh.itjust.works 2 points 2 months ago (1 child) IMO this is a bad example as in theory, testers test code against requirements, and if there is no such req stating anything about saturation then how should the testers or in this case the LLM know? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago It is over simplified, but there are often implicit requirements that a human would be aware of from the broader context that the LLM may not be. i.e add is used to increment a health bar, so wrap around doesn't make sense. permalink fedilink source parent
[–] CameronDev@programming.dev 1 point 2 months ago (1 child) int add(int a, int b) { return a + b; } This code is clearly functional, it'll compile and execute. However, the customer actually needs the code to do a saturating add. With that knowledge, we can clearly see that the code is not correct. It will not saturate, it will wrap around instead. Without that knowledge, an LLM will happily write some basic unit tests that won't cover the saturation edge case, and the bug would live on until its hit in prod. If you're lucky, and your function doco is good, the LLM might spot the bug, and notify you. My personal preference for how to generate tests is to ask the agent to write specific tests. E.g: "write a test for add that demonstrates that it saturates". permalink fedilink source parent hideshow 2 child comments replies: [–] slevinkelevra@sh.itjust.works 2 points 2 months ago (1 child) IMO this is a bad example as in theory, testers test code against requirements, and if there is no such req stating anything about saturation then how should the testers or in this case the LLM know? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago It is over simplified, but there are often implicit requirements that a human would be aware of from the broader context that the LLM may not be. i.e add is used to increment a health bar, so wrap around doesn't make sense. permalink fedilink source parent
[–] slevinkelevra@sh.itjust.works 2 points 2 months ago (1 child) IMO this is a bad example as in theory, testers test code against requirements, and if there is no such req stating anything about saturation then how should the testers or in this case the LLM know? permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago It is over simplified, but there are often implicit requirements that a human would be aware of from the broader context that the LLM may not be. i.e add is used to increment a health bar, so wrap around doesn't make sense. permalink fedilink source parent
[–] CameronDev@programming.dev 1 point 2 months ago It is over simplified, but there are often implicit requirements that a human would be aware of from the broader context that the LLM may not be. i.e add is used to increment a health bar, so wrap around doesn't make sense. permalink fedilink source parent
[–] slevinkelevra@sh.itjust.works 1 point 2 months ago (1 child) Yeah, I had testers that tested the functionality of a delay... But had set the delay parameter to zero. Well good thing this one case worked, but you didn't check anything beyond that for correctness at all. permalink fedilink source parent hideshow 2 child comments replies: [–] CameronDev@programming.dev 1 point 2 months ago Timing and tests, name a better migraine duo :D. We continuously create tests that ensure a process completes in an set amount of time, and every time, we don't give them enough leeway, and the test will fail randomly if the CI runner gets overloaded. permalink fedilink source parent
[–] CameronDev@programming.dev 1 point 2 months ago Timing and tests, name a better migraine duo :D. We continuously create tests that ensure a process completes in an set amount of time, and every time, we don't give them enough leeway, and the test will fail randomly if the CI runner gets overloaded. permalink fedilink source parent
[–] Casterial@lemmy.world 12 points 2 months ago* (1 child) Are you new to engineering? Coding was never the bottleneck. Having someone who knows what to do, and planning usually is. I spend 20-30% of my time at most actively coding. 30-40% helping people with dumb things that take my time when they shouldn't, and the remainder in meetings, scoping my work, or debugging. permalink fedilink source parent hideshow 2 child comments replies: [–] HaraldvonBlauzahn@feddit.org 7 points 2 months ago* (last edited 2 months ago) I spend 20-30% of my time at most actively coding. And by my experience, most of that time is still not "typing in code". As a benchmark, I was working in two greenfield projects, each for about five years. One was about a topic very close to my doctorate thesis in signal processing, one an embedded device for a large scientific experiment - with the systems engineers and the scientists as users sitting next door. So, in both cases, extremely well defined, far better than what an average programmer will ever see. Some colleagues worked on the JWST. That org knows damn well how to engineer stuff. At the end of these five years, I had both times around 60,000 lines of code. Pretty productive. Now, let's do the math: With about 250 work days per year, that is ..... 48 lines of code per day. You could type that in five minutes (and no, you don't need a Dvorak keyboard layout to do this, LOL). For old legacy projects, that average will be far far worse. So, most of the productive time is actually thinking about code, and talking with people. And LLMs can't do that. They can only type. And worse, doing that they don't use the most important key for a programmer: The 'delete' key. permalink fedilink source parent
[–] HaraldvonBlauzahn@feddit.org 7 points 2 months ago* (last edited 2 months ago) I spend 20-30% of my time at most actively coding. And by my experience, most of that time is still not "typing in code". As a benchmark, I was working in two greenfield projects, each for about five years. One was about a topic very close to my doctorate thesis in signal processing, one an embedded device for a large scientific experiment - with the systems engineers and the scientists as users sitting next door. So, in both cases, extremely well defined, far better than what an average programmer will ever see. Some colleagues worked on the JWST. That org knows damn well how to engineer stuff. At the end of these five years, I had both times around 60,000 lines of code. Pretty productive. Now, let's do the math: With about 250 work days per year, that is ..... 48 lines of code per day. You could type that in five minutes (and no, you don't need a Dvorak keyboard layout to do this, LOL). For old legacy projects, that average will be far far worse. So, most of the productive time is actually thinking about code, and talking with people. And LLMs can't do that. They can only type. And worse, doing that they don't use the most important key for a programmer: The 'delete' key. permalink fedilink source parent