• dankm@lemmy.ca
    link
    fedilink
    arrow-up
    8
    ·
    1 year ago

    Naming things is one of the two hardest problems in computer science. The other one is cache coherency and off by one errors.

    • InputZero@lemmy.ml
      link
      fedilink
      arrow-up
      1
      ·
      1 year ago

      The number of times I have labeled something as fart, poop, fart_poop, temp_fart_poop, etc, and just forgot about it is not okay.

    • xia@lemmy.caOP
      link
      fedilink
      English
      arrow-up
      3
      ·
      1 year ago

      I’m glad you provided a link, because I would not have believed you otherwise. Take my upvote.

  • palordrolap@kbin.social
    link
    fedilink
    arrow-up
    3
    ·
    1 year ago

    U nd to rembr tht mny snr devs grw up prgrmng on old hrdwr tht ddn’t hv mch mmry & oftn th lang ony allwd shrt var nms anywy. Also thy wr th gen of txtspk fr smlr rsns.

    Yngr snr devs pckd up bd hbts frm tht gen.

    And here’s a sentence that’s not squashed to cleanse your palettes / give a sigh of relief because I figure if I need a break from typing like that, you need a break from reading it.

    Nmng thngs s hrd.

  • Pxtl@lemmy.ca
    link
    fedilink
    English
    arrow-up
    3
    ·
    1 year ago

    Hah, I (a Sr developer at the time) once built an entire mapping layer in our ETL system to deal with the fact that our product had long and expressive names for every data point but our scientists used statistical tools that had no autocomplete and choked on variable names longer than 32 chars so they named everything in like 8 chars of disemvoweled nonsense.

  • erogenouswarzone@lemmy.ml
    link
    fedilink
    English
    arrow-up
    2
    arrow-down
    1
    ·
    edit-2
    1 year ago

    Does anyone have any good advice on variable naming? Here’s some of my rules I try to live by:

    • camelCase
    • use prefixes
    • prefixes should be one word followed by an underscore.
    • 10 character limit or 3 word limit, not counting the prefix
    • functions should be prefixed with the file in which they’re defined, ie utils_FooBar
    • file names should be one word
    • Start Bools with is
    • Don’t use not in bool names.
      • This has farther-reaching implications that will keep you from making confusing code most of the time (I’m sure this will be controversial, but it works no matter what they say)
    • start output with _
    • Globals should be g_VARIABLENAME
    • use the least amount of words possible
    • but being too verbose can draw attention - use this to aide in readability
      • calc_ImportantValueThatWillDecideTheUsersView is better than calc_SumYears if the variable is more important than the others.
    • Even the greatest variable names are not replacements for documentation
    • Even the most readable code is not replacement for documentation.
      • Force yourself to love documentation.

    Edit: I realize I was speaking about function-naming with the prefix stuff.

    For variables, I still use prefixes, but for variable type. Even if you define the variables as types, it’s still incredibly useful. For instance,

    a string is s_MyName,

    enumerable is e_MyType,

    A number is int or double or whatever i_MyAge or d_MyWeight

    This might be obvious for custom objects, but I’d still do it like this p_Person or per_Person.

    Seriously it does make a huge difference

    • First@programming.dev
      link
      fedilink
      arrow-up
      1
      ·
      1 year ago
      • Don’t code in a language/style that requires you to write code that makes prefixing necessary - divide and conquer instead
      • Readable code and well written unit/BDD tests is much better than separate documentation that will go out of sync the minute another Dev does some surgical incision into the code
      • Be verbose if you need to in order to convey the relevant semantics, the characters are virtually free
      • Use the casing that is mainstream/recommended by its’ developers for the language at hand
    • PR_freak@programming.dev
      link
      fedilink
      arrow-up
      0
      ·
      edit-2
      1 year ago

      Camel case for local variables

      Pascal case for global ones

      The name should tell me it’s purpose

      That’s it

        • 𝘋𝘪𝘳𝘬@lemmy.ml
          link
          fedilink
          arrow-up
          1
          ·
          1 year ago

          These are things I have picked up from 18 years in the industry.

          Let me comment some of it then …

          camelCase
          use prefixes
          prefixes should be one word followed by an underscore.

          Highly depends on your environment, your naming convention, etc.

          functions should be prefixed with the file in which they’re defined

          In modern day programming the file names are pretty much irrelevant. All somewhat recent programming languages have modules and namespaces. I don’t care in what file fooBar was defined. ALso: what happens if you refactor stuff and rename the file? Do you want to go through everything where the function is mentioned? (This can be automated, though, but still.)

          Start Bools with is

          Or with whatever is the naming convention you or your team follows. I do embedded scripting and one of the projects explicitly wants can_verb_thing when it comes to user permissions (can_change_foobar, can_run_baz, etc.). It is a good advice but heavily depends on your environment.

          start output with _

          Paraphrasing the naming convention I mostly work with: Start everything with _ that will be exported to global namespace. Also use the name of your module. Instead of foobar use _mymodule_foobar.

          Globals should be g_VARIABLENAME

          Globals should be properly namespaced to global context. constants are uppercase.

          calc_ImportantValueThatWillDecideTheUsersView is better than calc_SumYears

          And summarizeYears is even better. Do not use abbreviations and describe what the function does. If it summarizes the years there is no need to name it something else. Document your code (in-code documentation as well as user-facing documentation if applicable).

          • erogenouswarzone@lemmy.ml
            link
            fedilink
            English
            arrow-up
            1
            ·
            edit-2
            1 year ago

            I appreciate your emacs perspective, thanks for the input.

            I get the sense that programmerhumor hates prefixes, but I’m telling you, they have changed my life. Next project-for-fun, just give it a try and see what happens. I think you’ll be surprised.

            To many of your points, I say I agree that a lot of naming conventions depend on context. The environment you’re working in, the IDE, the team you’re working on, the language you’re coding in.

            However, prefixes I’m firm on. I think it’s unpopular because it’s from a bygone era where IDEs were non-existent. And while yes, ides have replaced many of the uses, they have been the most radical change to my readability and comprehension of the code I’ve written.

            Also, I’m mostly a js programmer, so yes, very different from emacs.

            Also, for calc_SumYears, I literally meant to add the years together, hense the prefix. So, maybe the prefixes are a little more useful than you give them credit.

  • Pxtl@lemmy.ca
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    1 year ago

    Also, can somebody explain this to sysadmins when it comes to naming computers?

    I mean programmers can have some weird naming conventions, but I’ve never met an adult professional programmer who named all his variables after planets or Harry Potter characters or just called everything stuff like ADMUTIL6 or PBLAB03T1 or PBPCD1602.

  • Evil_Shrubbery@lemm.ee
    link
    fedilink
    arrow-up
    1
    ·
    1 year ago

    Nah, always use as lewd names as possible, like really over the top, preferably r34 compliant. And the comments need to be there to explain the fictional stories behind all the names and all the lewdness - and not really to explain what the code does, that’s just a common misconception.

    If someones dares to look into my code they need to be ready to suffer.

    (And no, I’m not a dev, no one in my team can code anything, boss won’t give me a an actual dev - and when I write something for other ppl as a favor I make an effort to make the code clean and comments only mildly amusing)

    • drathvedro@lemm.ee
      link
      fedilink
      arrow-up
      1
      ·
      edit-2
      1 year ago

      Reminds me when back in the day I was working on a system where one of major component’s acronym was BOOTY. It was hard picking right terms and names for the new parts, but I managed to fit a variable named BOOTY_SLAP in there such that none of the reviewers even questioned it.

    • Luvon@beehaw.org
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      Character limits and a stupid badly used Hungarian notation to waste limited characters to tell use what the ide already knows.

      If you have a table, (that’s an array for sane programmers) name the variable as a plural and we will know it’s a table.

      Don’t name two variables the same stupid abbreviation with different Hungarian notation characters stuck to the front

        • Luvon@beehaw.org
          link
          fedilink
          English
          arrow-up
          1
          ·
          1 year ago

          But that is a typing weakness of that language. I just prefer using languages where the compiler actually does know what the types are at all time and thus can inform me instead of me trying to make sure that types align correctly.

          That is tedious work that has been proven to be a terrible idea to shift onto humans. Strong type systems make much more robust code.

          Abap only has one collection type, and its tables. Contextually it’s not hard to read what a collection of things are and what a single thing is.

          If I am looping through comments and do something with comment, it’s contextually clear what ma going on. The exact type can be easily checked for when it’s actually needed.

          Naming a count of something the plural seems like a much less intuitive thing. Especially sense generally the count is gotten from the collection.

      • QuazarOmega@lemy.lol
        link
        fedilink
        arrow-up
        0
        ·
        1 year ago

        Can you bleach my eyes with some really bad ABAP code? I’ve never seen ABAP and I want to feel scared

        • andrew@lemmy.stuart.fun
          link
          fedilink
          English
          arrow-up
          1
          ·
          1 year ago

          I’m not gonna lie, I haven’t seen ABAP in 10 years and was only briefly familiar with it. But I did what one does and asked GPT4 for some tax computation ABAP.

          DATA: lv_income TYPE P DECIMALS 2 VALUE '50000',
                lv_tax_rate TYPE P DECIMALS 2,
                lv_tax_amount TYPE P DECIMALS 2.
          
          * Select the appropriate tax rate from the tax table based on income
          SELECT SINGLE TAX_RATE INTO lv_tax_rate 
          FROM ZTAX_TABLE 
          WHERE INCOME >= lv_income 
          ORDER BY INCOME ASCENDING.
          
          IF sy-subrc = 0.
            lv_tax_amount = lv_income * lv_tax_rate / 100.
            WRITE: / 'Income:', lv_income,
                   / 'Tax Rate:', lv_tax_rate,
                   / 'Tax Amount:', lv_tax_amount.
          ELSE.
            WRITE: / 'No tax rate found for income', lv_income.
          ENDIF.
          
          • Luvon@beehaw.org
            link
            fedilink
            English
            arrow-up
            1
            ·
            1 year ago

            This isn’t even like the worst of it. It’s an old enough language they still thought the compiler shouldn’t have to do more work.

            So you have to declare all variables, types, and methods in the top section of the class, and the method implementation in its own section. That means while working on a method, the method signature is a long way away. And because abap developers are allergic to splitting up code into reasonable classes, that can be a couple thousand lines away.

            Oh and all classes are in the global namespace. So all the classes you make must start with the letter z because SAP reserves any and all names that don’t start with z.

            Oh and they didn’t feel like making library code to do a lot of basic stuff, oh no, they thought that 3000+ keywords was a much better system. Especially sense hovering over a keyword gives no documentation and discoverable is therefore pretty terrible.

            Also they wanted everything to be sentenced like so keyword structures are often many special words in specific orders and hopefully you can write enough of it to get a prompt to fill in the rest.

          • WoodenBleachers@lemmy.basedcount.com
            link
            fedilink
            English
            arrow-up
            1
            ·
            1 year ago

            Oh that looks awful. Maybe it’s just because I don’t know how to read it, but the fact that it is similar to SQL (definitely pronounced sequel at this time) messed with my head

          • QuazarOmega@lemy.lol
            link
            fedilink
            arrow-up
            1
            ·
            1 year ago

            Oh my, that’s an abomination, I’m literally squinting my eyes to read it. That ENDIF tho, that’s where I draw the line °~°