• Enkrod ( Enkrod@feddit.org ) 
      link
      fedilink
      arrow-up
      9
      ·
      5 months ago

      I told my boss I wouldn’t use AI to help write code and sign off on the commits with my name. He told me to use it to write the documentation… it was bad. Essential concepts were not mentioned and obvious shit was explained five times in slightly different phrasing. I am now writing our documentation as an obsidian vault myself again.

      I only have it compile a change log from the commit messages of commits and merges on the main and development branch. I know our commits are well written (because I established the standards for them in our repo myself) and that’s concrete and rigid enough that it can’t fuck it up enough to matter.

      But honestly there are build tools that could do that for me, I don’t need to buy tokens for that.

      • honestly there are build tools that could do that for me, I don’t need to buy tokens for that.

        Yes. This is where every “have you tried Agentic AI?” conservation lands, for me.

        They tell me I could pay daily, for worse results, to give up the bash script that has worked perfectly for five years. Oh, gee. Tell me more! Haha.

    • Agreed it’s why if I’m asking for llm assistance I will generally start with a design for a component and ask it to follow that and comment accordingly usually leads to much better results than blanket asking it to do something for you

  • Thorry ( Thorry@feddit.org ) 
    link
    fedilink
    arrow-up
    29
    ·
    5 months ago

    Asking an LLM to add comments is actually pretty much the worst thing you can do. Comments aren’t meant to be documentation and LLMs have a habit of writing documentation in the comments. Documentation is supposed to be in the documentation, not in the code. LLMs are often trained on things like tutorials, where super obvious statements are commented to allow people to learn and follow along. In actual code you absolutely do not do this, obvious statements should be obvious by themselves. At best it’s extra work to read and maintain the comments for obvious statements, at worst they are incorrect and misleading. I’ve worked on systems where the comments and the code weren’t in line with each other and it was a continual guess if the comment is the way it was supposed to work, or if the code is correct and the comment wrong.

    So when do you actually add comments? That’s actually very hard, something people argue about all the time and a bit of an art form to get right. For example if I have some sort of complex calculation, but it’s based on a well known algorithm, I might comment the name of that algorithm. That way I can recognize it myself right away and someone that doesn’t know it can look it up right away. Another good indicator for comments are magic numbers. It’s often smart to put these in constants, so you can at least name them, but a small little comment to indicate why it’s there and the source can be nice. Or when there is a calculation and there’s a +1 for example in there somewhere, one might ask why the +1, then a little comment is nice to explain why.

    Comments should also serve like a spidey sense for developers. Whenever you are writing comments or have the urge to add some comments somewhere, it might be an indicator the code is messy and needs to be refactored. Comments should be short and to the point, whenever you start writing sentences, either start writing documentation or look at the code why it’s required to explain so much and how to fix that.

    Another good use for comments is to warn away instincts for future devs. For example in a system I worked on there is a large amount of code that seems like it’s duplicate. So a new dev might look at it and see a good place to start refactoring and remove the duplicated code. However the duplication was intentional for performance reasons, so a little comment saying the dupe is intentional is a good idea.

    I’ve also seen comments used to describe function signatures, although most modern languages have official ways of doing that these days. These also might border on documentation, so I’d be careful with that.

    LLMs also have a habit of writing down responses to prompts in the comments. For example the LLM might have written some code, you say: Hey that’s wrong, we shouldn’t set x to y, we should set it to z. And the LLM writes a comment like // X now set to Z as requested. These kinds of comments make no sense to people reading the code in the future.

    Keep in mind comments are there to make it easier for the next guy to work on the code, and often that next guy is you. So getting it right is important and hard, but very much worth while. What I like to do is write code one day and then go back and read it the next day or a few days later. And not the commit, with the diff and the description, the actual files beginning to end. When I think something is weird or stands out, I’ll go back and edit the code and perhaps add comments.

    IMHO LLMs are terrible at writing code, it’s often full of mistakes and oversights, but one of the worst parts is the comments. I can tell code was AI generated right away by the comments and those comments being present are a good indicator the “dev” didn’t bother to actually read and correct the code.

    • jtrek ( jtrek@startrek.website ) 
      link
      fedilink
      arrow-up
      22
      ·
      5 months ago

      There’s also the class of comments that explain strange business decisions.

      # Product guy said to return January 1st if the user doesn't have a birthday on record

      Kind of arbitrary but someone with decision making power decreed it.

      • baines ( baines@lemmy.cafe ) 
        link
        fedilink
        English
        arrow-up
        11
        ·
        5 months ago

        this is among the most important comment types that exist imo

        it may not seem like it but 20 years and 5million lines later when shit behaves odd because of some non standard code practice this type of comment is a life saver

    • Excellent comment and I fully agree with almost everything. Just one tiny nitpick:

      For example if I have some sort of complex calculation, but it’s based on a well known algorithm, I might comment the name of that algorithm.

      Unless you really need this complex calculation to be inline (e.g. for performance reasons) it would be better to move it into a function or method and include the algorithm in the name instead of adding a comment.

      • baines ( baines@lemmy.cafe ) 
        link
        fedilink
        English
        arrow-up
        3
        ·
        5 months ago

        i want it in a function

        fully include the pre implementation long hand in comments and the book / expert reference

        the number of times i’ve found longer algos not doing as advertised is scary

        improperly used statistical algos given the data sets and hand waving results are so common

        gee i wonder why testing shows no improvement

      • Thorry ( Thorry@feddit.org ) 
        link
        fedilink
        arrow-up
        2
        ·
        5 months ago

        Very good! Your spidey senses are working perfectly. Hey I want to comment this calculation, why don’t I move it into a function so the name can explain what it does. Good call!

        Sometimes the algorithm is inlined for performance, sometimes it’s a class with a bunch of functions that as a whole is primarily based on an algorithm, so comments might make sense in those cases. Most of the times it’s a library, so the name of the library kinda gives it away and hopefully has good documentation as well.

    • Dumhuvud ( Dumhuvud@programming.dev ) 
      link
      fedilink
      English
      arrow-up
      2
      ·
      5 months ago

      Comments aren’t meant to be documentation

      Documentation is supposed to be in the documentation, not in the code.

      Some tooling generates documentation from comments. Like rustdoc or LDoc.

      I’ll be honest, I mostly skimmed through your comment. Sorry if it’s something you touch upon later on.

  • jaybone ( jaybone@lemmy.zip ) 
    link
    fedilink
    English
    arrow-up
    15
    ·
    5 months ago

    A lot of big companies are basically forcing you to be Bill. They try to track AI usage, and make sure everyone is using it. Because they invested so much in AI, they need to force it, to make it a self fulfilling prophecy. It’s truly one of the dumbest things to behold.

  • kibiz0r ( kibiz0r@midwest.social ) 
    link
    fedilink
    English
    arrow-up
    15
    ·
    5 months ago

    “Did you just have Claude ship all this code?”

    “Yep”

    “You shouldn’t ship code you don’t understand…”

    “Good point. Claude, go understand this code for me!”

  • 7U5K3N ( 7U5K3N@lemmy.dbzer0.com ) 
    link
    fedilink
    arrow-up
    9
    ·
    5 months ago

    Well… Heck. I recently vibe coded an app for a specificish use case. I didn’t even think about commenting my code. It was the first time I’ve ever done such a thing…

    I’ll go and comment it all.

    Thanks for the reminder OP

  • I know I’m gonna get flamed for this, but here goes.

    I have vibe coded a system at work that has enabled me to deliver value in a fraction of the time I expected. My verification steps have been around whether it does the things I told it I wanted it to do. I’m not maintaining the syntax and I’m not expecting anyone else to. Ever.

    That said, our teams that deliver products that touch customer data or financial records…they shouldnt (and dont) engineer this way. The tech isnt there (yet).

    Let the flaming commence.

    • “…enabled me to deliver value in a fraction of the time I expected.”

      I don’t wanna flame you for it.

      This is kinda where I see vibe coding taking off the most: The same phenomenon as using LLMs to summarize and reply to pithy business emails.

      Business gets so unbearably businessy, people are using machines to bypass the inherently un-human “professionalism performance” for them.

      It might not be work anybody can claim to be proud of, but right now success for the professional-managerial class runs on looking busy and circling back to synergizing the workflow with best practices for optimal returns regarding key performance metrics 🤢 or whatnot.

      I don’t blame people for it, in a work context. Looking impressive with AI tools is now a survival tactic when working under normies holding the purse strings and investing stupid amounts of money into the bubble. They’ve forced people to be part of a circular, self-reinforcing imaginary reality they’re profiting from.

      So, I don’t wanna flame you. I just hope you’re doing something fundamentally human to keep your soul alive on the side, at least. Something you as a unique human being on this earth can be proud of. <3

      • Honestly im proud of the problems I’m able to solve today now that I can use AI to do it so quickly.

        Even when I stop and manually check all the work the AI has done, it’s still much faster and I’m having to rely on my knowledge and experience to do so. When I’m vibe coding I’m relying on that same knowledge and experience to architect the solution rather than deliver it.

        Ive seen the other side- the colleagues who all of a sudden think theyre engineers and are unknowingly exposing critical commercial data to our competitors. That side is scary…and gives me hope that my role while changing, is far from dead.

        Also I have hobbies - i only work to pay for them. If “the man” wants to pay me to spend tokens…fine by me. I’ll be here to clean it up if it all goes wrong.

        • All good, and I respect your perspective!

          I know you were like “flame me!” Lol, But hope I wasn’t sounding too judgy. I think it’s hard not to have strong opinions on the topic either way these days. (And I’m already prone to soapboxing haha.)

          Wishing you the best out there. :)

    • JackbyDev ( JackbyDev@programming.dev ) 
      link
      fedilink
      English
      arrow-up
      3
      ·
      5 months ago

      I once heard someone describe legacy systems as systems without test coverage. I think it’s not the best description, but it’s certainly an interesting perspective.

      It’s part of why it bothers me when folks say they use LLMs to make unit tests. If anything, you should be writing tests by hands to get a solid specification then let the AI make the code. Of course this is a false dichotomy, but I’m just saying if you have to choose between those two options in some weird hypothetical bizarro world.

  • I hate most of the companies paying people to write code though, isn’t it a good thing if their code is shit that no one can understand and doomed to collapse under its own weight?

  • I recently got moved to another team after my company restructured. Several repos have zero documentation. Most of those don’t even have comments on the functions. LinkXxxx(some args) like Xxxx to /what?!/ It’s also an over-engineered mess with multiple layers of abstraction. I can’t wait to finish figuring out what everything does and re-write (and document it) like a sane person. This code presumably had no AI involvement which I’d argue is even worse since real humans made these shit decisions. Don’t get me starting on their testing (and mostly lack thereof)…

    Worker suggested using AI to write some documentation. Another coworker did. I immediately spotted a bunch of hallucinated shit. Good times. I want to know in my head what a thing does, how it works, and how it fits into the architecture. I can’t do that if an AI is just deciding stuff; it’s like a quiz back in school where I would memorize shit for about one week before 99% of it left my brain forever.

    • psud ( psud@aussie.zone ) 
      link
      fedilink
      English
      arrow-up
      2
      ·
      5 months ago

      Sometimes documentation doesn’t help. My workplace used to be waterfall and we still have systems analysts producing documentation

      One piece of work came to my team as “this calculation fails in this case and we can’t tell why”

      Looking at it there were two updates in the documentation showing updates ten years ago the first fixing that corner case with the second fixing a side effect of the fix

      Why didn’t it work? It was never built, or perhaps built but never merged

      On the good side we have an excellent plan for how to fix that corner case, on the bad side we aren’t funded to do that amount of work so we have to half arse a solution

      • The documentation I mean here should be in the repo and checked as a part of the PR process. I don’t mean it should be a manual, I just mean a readme should at least describe what the service does (it has such a generic name in my case that it’s not self-evident and is so broad in scope I don’t know what happened). The functions also have terrible naming and no comments to describe what they do. So, as a guy just coming into this team after re-org with no idea what all this stuff does, I was completely lost. They also changed which services which teams owned, further making it difficult to get knowledge.