• @[email protected]
    link
    fedilink
    1431 year ago

    Is it really tempting for people? They’ve given me too many headaches when I’ve had to reformat or add functionality to files.

    Unless it’s a simple single use script that fit on the computer screen, I don’t feel like global variables would ever be tempting, unless it’s for constants.

    • @PetDinosaurs
      link
      861 year ago

      Most people suck at software engineering.

      Plus, there’s always the temptation to do it the shitty way and “fix it later” (which never happens).

      You pay your technical debt. One way or another.

      It’s way worse than any gangster.

      • Square Singer
        link
        fedilink
        441 year ago

        Not if you leave the project soon enough. It’s like tech debt chicken.

      • @rodolfo
        link
        201 year ago

        amen

        Plus, there’s always the temptation to do it the shitty way and “fix it later”

        double amen

          • Square Singer
            link
            fedilink
            221 year ago

            In a 10 year old commit from someone who’s left the company 5 years ago.

            • @PetDinosaurs
              link
              8
              edit-2
              1 year ago

              Bruh. I fixed software from the 90’s.

              Scientific software too. Which is way weirder.

              😀

              • @decerian
                link
                61 year ago

                Why is that weirder? The people writing scientific software are, by and large, less good at writing software than people who only specialize in software development. I’d expect there to tons of terrible engineering practices in an old code base like that

                • @PetDinosaurs
                  link
                  5
                  edit-2
                  1 year ago

                  good question.

                  Because even trivial things like Fourier transforms (to people like me) are very difficult to understand to those that don’t know them. They took me years to understand. Non scientific software engineers do not understand those. It’s just a different course of education.

                  You’re also right about old code base as well. Algorithms like these belong in c++ (or C or fortran), and it’s extremely difficult to explain why to people who have no understanding of numerical computing.

                  It’s just different education.

          • @rodolfo
            link
            31 year ago

            I wish I was so lucky to have comments.

            in real life, I’m fighting with - I’m not joking - a few dozen “quick patches”. code does not reflect in any point functional requirements, and dude is adamant he’s in the right and supersarcastic in any occasion.

            • @PetDinosaurs
              link
              31 year ago

              I’ve been working at my current company for almost a year.

              I had no idea it could be this bad.

              I actually had to fight/plead with someone to “please read the code”. Guy did get fired though.

      • @FlickOfTheBean
        link
        81 year ago

        Rarely have I ever actually had consequences for my sins, which tends to be why I don’t go back and fix them…

        If tech debt weight is felt in any way, it tends to get fixed. If it’s not felt, it’s just incredibly easy to forget and disregard.

        (This is mostly me not learning my lesson well enough from my time being on Tech Debt: The Team. I do try and figure out the correct way to do things, but at the end of the day, I get paid to do what the boss wants as cheaply as possible, not what’s right :/ money dgaf about best practices until someone gets sued for malpractice, but on that logic, maybe the tech debt piper just hasn’t returned for payment from me yet… Only time will tell)

        • magic_lobster_party
          link
          fedilink
          71 year ago

          For me most of the people who have written our most annoying tech debt left the company long time ago.

          • @FlickOfTheBean
            link
            31 year ago

            Ah yeah, that would be a worry, except I forgot to mention that most of the code I work on usually gets thrown away after like 6 months. Makes tech debt not have nearly as big of an impact on me.

            We do have a longer lasting code base that the little widgets I make run off of. That has a much more strict requirements to ensure tech debt is not introduced specifically so we don’t end up in that sort of a position.

            That said, and yet we couldn’t even keep it out of our own code base. So yeah, I think my original comment is just wrong because I forgot all the ways tech debt actually has effected me in the past and how my industry’s project cycle is so short term that i rarely have the opportunity to run into tech debt that I caused in a problematic way…

            • magic_lobster_party
              link
              fedilink
              41 year ago

              That make sense. Most industry best practices are there to prevent problems that arises when code is evolving over a long period of time.

              • @FlickOfTheBean
                link
                51 year ago

                Yeah, that makes total sense.

                Most software engineers also have to actively maintain and add features to their finished project, and those aspects change a lot about how the problem can be approached.

                I failed to take into account why might I have not been effected by tech debt despite occasionally creating it before commenting. Will have to make sure that filter gets a bit stronger lol

          • @FlickOfTheBean
            link
            71 year ago

            Fair point, I work in a consumer facing, fast turn around, short lived code project industry. Not a typical software project with long life cycles.

            These practices would almost certainly bite my company in the ass if we had to maintain anything for longer than year.

            Occasionally, we do have to support a client for multiple years, and everytime it’s a hilarious shit show trying to figure out how to keep all the project dependencies up to date. This is likely platform tech debt, and would be the beginning of the problem if we didn’t have the privilege of being able to start over from scratch code-wise for each client’s new order.

            I guess I’m just in a lucky spot in the programmer pool where tech debt literally doesn’t hit me as hard as it usually does others, and I just couldn’t identify that before now lol

            Instead of saying tech debt isn’t that bad, my tune will change to something else. Like I said, I was on a team at one point that had a worse than usual tech debt problem, and it was unworkably stressful to deal with. Im guessing that experience is more typical of being near tech debt than my other experiences.

            • @PetDinosaurs
              link
              7
              edit-2
              1 year ago

              Good on you for acknowledging that. 👍

              I’ve fixed 20 year old issues that could kill people.

              Different requirements. Different solutions.

              That’s why it’s great to be an engineer!

      • @nogrub
        link
        111 months ago

        and thats why we are reading a book about clean code at my apprenticeship

    • @[email protected]
      link
      fedilink
      261 year ago

      They’ve given me too many headaches…

      I.e. you did use them, but learned the hard way why you shouldn’t.

      Very likely OP is a student, or entry-level programmer, and is avoiding them because they were told to, and just haven’t done enough refactoring & debugging or worked on large enough code bases to ‘get’ it yet.

    • @[email protected]
      link
      fedilink
      191 year ago

      Is it really tempting for people? They’ve given me too many headaches when I’ve had to reformat or add functionality to files.

      I don’t get it either. Why would you ever feel the need for them to begin with?

      • magic_lobster_party
        link
        fedilink
        11 year ago

        In software that’s already badly engineered. Either you do the work and refactor everything, or accept it’s probably not worth all the effort.

      • @[email protected]
        link
        fedilink
        11 year ago

        Unironically: For in-house scripts and toolboxes where I want to set stuff like input directory, output directory etc. for the whole toolbox, and then just run the scripts. There are other easy solutions of course, but this makes it really quick and easy to just run the scripts when I need to.

    • @fluxion
      link
      English
      211 months ago

      As with the sexual connotation here, the temptation is not rooted in long-term considerations like future maintainability

    • ZILtoid1991
      link
      fedilink
      21 year ago

      Depends on what you’re doing. Functional programming has its own downsides, especially once you want to write interactive programs, which often depend on global states. Then you either have to rely on atoms, which defeat the purpose of the functional programming, or pass around the program state, which is janly and can be slow.

      I personally go multi paradigm. Simpler stuffs are almost functional (did not opt for consting everything due to performance issues), GUI stuff is OOP, etc.

    • GTG3000
      link
      fedilink
      Русский
      1
      edit-2
      11 months ago

      Well, if you’re writing something the user will be looking at and clicking on, you will probably want to have some sort of state management that is global.

      Or if you’re writing something that seems really simple and it’s own thing at first but then SURPRISE it is part of the system and a bunch of other programmers have incorporated it into their stuff and the business analyst is inquiring if you could make it configurable and also add a bunch of functionality.

      I also had to work with a system where configurations for user space were done as libraries setting global constants. And then we changed it so everything had to be hastily redone so that suddenly every client didn’t have the same config.

  • idunnololz
    link
    891 year ago

    Just create a global object and stuff your variable in there. Now you have a global singleton and that’s not a purely bad practice :D

    • magic_lobster_party
      link
      fedilink
      401 year ago

      Not necessarily a bad practice if the singleton is immutable, and it’s provided via dependency injection for example.

      • @wreckedcarzz
        link
        English
        381 year ago

        As a hobby coder: “mmmhm, mmmm, mmhm… I know some of these words!”

        • @[email protected]
          link
          fedilink
          37
          edit-2
          1 year ago

          Software dev is full of obscure keywords that describe otherwise pretty simple or basic concepts you stumble upon in practice naturally and that you probably already understand.

          • singleton: a class/object that is designed to be single use, i.e. only ever instantiated with a single instance. Typically used when you use class/objects more for flow control or to represent the state of the program itself, rather than using it to represent data
          • immutable: read-only, i.e. unchangeable
          • dependency injection: basically when you pass a function or object into another function object, thereby extending their effective functionality, typically for modular code and to separate concerns.

          Here’s one more of my favourite examples of such a keyword: memoization

          • @Solemarc
            link
            71 year ago

            Ahh yes memoization, the complicated way to say “remember this, I might need it again”

    • @Anonymousllama
      link
      221 year ago

      Important to contain all your mess to one side of the room, makes it easier to manage

      • @shotgun_crab
        link
        English
        21 year ago

        Yeah yeah let’s put all the eggs in one basket

    • @mdk_
      link
      131 year ago

      So you saying, just the tip?

    • @[email protected]
      cake
      link
      fedilink
      9
      edit-2
      1 year ago

      Real enterprise programmers know that everything should be on the stack… so they declare a List《void*》 in main.

      • idunnololz
        link
        81 year ago

        But we might need to add more features in the future so it might not just be a list in a few years. Better encapsulate it in a few layers of abstractions just to be safe.

    • z3rOR0ne
      link
      fedilink
      21 year ago

      Ah yes. Global Objects, AKA the thinnest of condoms, lol.

      • @marcos
        link
        151 year ago

        There’s no ISO standardized definition for variable. People use that word with all kinds of meaning.

        • @[email protected]
          link
          fedilink
          English
          181 year ago

          Waaaait a minute… isn’t it called a variable because the contents are, you know, variable?

          • @BassTurd
            link
            41 year ago

            It started as a variable, then ended as a constant.

        • @[email protected]
          link
          fedilink
          111 year ago

          This is needlessly obtuse. The definition of the word is that it’s non-constant. There isn’t an ISO definition of the word no, but there are many reputable dictionaries out there that will serve as an alternative.

          • @marcos
            link
            31 year ago

            Well, starting with the definition from algebra, where it’s not something allowed to vary…

            I guess more people know about math than use imperative programing languages.

            • @[email protected]
              link
              fedilink
              2
              edit-2
              1 year ago

              Except that’s exactly what it is allowed to in algebra.

              Sure, in most equations you solve in early algebra school there is only one possible value for the variables. But in many equations there can be multiple, or even infinite. It’s an unknown, and the contents can vary (depending on other constraints, ie. The rest of the equation(s)).

              • @marcos
                link
                11 year ago

                There’s no time in algebra for your variables to vary.

                When you have a non-unitary set of solutions, you have a constant non-unitary set of solutions.

      • @[email protected]
        link
        fedilink
        5
        edit-2
        1 year ago

        I feel like it’s like pointers.

        “Variable” refers to the label, i.e. a box that can contain anything (like *ptr is a pointer to [something we dont know anything about])

        Immutable describes the contents, i.e. the stuff in the box cant change. (like int* ptr describes that the pointer points to an int)

        Rust makes it very obvious that there’s a difference between constants and immutable variables, mainly because constants must be compile time constants.

        What do you call it when a variable cant change after its definition, but isnt guaranteed to be the same on each function call? (E.g. x is an array that’s passed in, and we’re just checking if element y exists)

        It’s not a constant, the contents of that label are “changing”, but the label’s contents cant be modified inside the scope of that function. So it’s a variable, but immutable.

        • @[email protected]
          link
          fedilink
          3
          edit-2
          1 year ago
          int const golden = 1.618;
          int* non_constant = (int*)&golden;
          golden = 1.61803399;
          

          Casts are totally not a danger that should require a comment explaining safety…

    • @[email protected]
      link
      fedilink
      21 year ago

      And more generally mutable aliasing references of any sort are evil. Doesn’t mean they’re not useful, just that you need magic protection spells (mutexes, semaphores, fancy lock-free algorithms, atomics, etc) to use them safely. Skip the spell or use she wrong one, and the demon escapes and destroys all you hold dear.

  • @KittyCat
    link
    281 year ago

    You can do better, define intergalactic variables that share the same memory location across multiple programs so you can seamlessly pass variables from one to the next.

    • @hansl
      link
      41 year ago

      The ONE TRUE CONSTANT; even with an infinite universe, the value is the same in all of them.

      • @Fungah
        link
        21 year ago

        Are the legends really true?

    • @Fungah
      link
      21 year ago

      But not sand memory. It’s coars ena drogjh and irritating and gets everywhere.

  • alphacyberranger
    link
    English
    221 year ago

    Is it an orgy if multiple global variables are used in a multi threaded code?

  • @[email protected]
    link
    fedilink
    201 year ago

    I’ve once had a course involving programming and the lecturer rewrote the code, which we were usually using at our institute, making ALL variables global. - Yes, also each and every loop counter and iterator. 🤪

    • @Chriszz
      link
      171 year ago

      There’s no way you teach a uni course and do this kind of thing unless to demonstrate poor practice/run time difference. Are you sure you were paying attention?

      • @[email protected]
        link
        fedilink
        17
        edit-2
        1 year ago

        Yes. He really thought it was efficient and would avoid errors if literally all variables were defined in a single Matlab function he called at the beginning of the script. We students all thought: “Man, are you serious?” As we didn’t want to debug such a mess, in our code, we ignored what he was doing and kept using local variables.

        • @Chriszz
          link
          231 year ago

          Ah I misread I thought it was specifically a programming course. I can expect this from a math prof.

          • @[email protected]
            link
            fedilink
            8
            edit-2
            1 year ago

            Yes, it was a course on finite deformation material models. And no, you do really, really not want to declare each and every variable in your material subroutine globally for the whole finite element program.

          • @[email protected]
            link
            fedilink
            31 year ago

            That’s why when your job hires new people right out of college they have no idea what they’re doing and now must be trained how to actually do the job. “What, you mean we aren’t writing this enterprise application in python!?”

      • @rtxn
        link
        English
        4
        edit-2
        1 year ago

        I’ve seen two teachers do this, both of them mathematics professors who teach programming for the extra cash. One uses C, the other Pascal.

  • @stephfinitely
    link
    171 year ago

    I am not a programmer who knows how to program. I know this because global variables are how I fix most the issue I run into, but are constantly told this wrong.

  • @[email protected]
    link
    fedilink
    13
    edit-2
    1 year ago

    I asked stable diffusion for a photo-realistic version of this image. This isn’t what I had in mind

  • @BilboBargains
    link
    6
    edit-2
    1 year ago

    Our Father, who art in Microsoft HQ,

    hallowed be thy naming conventions;

    thy architecture;

    thy will be done;

    on earth as it is in Linus Tech Tips.

    Give us this day our daily StackOverflow.

    And forgive us our 'sploits,

    as we forgive those who trespass against our user stories.

    And lead us not into temptation;

    but deliver us from a thicket of global variables.

    For thine is the irritating project manager, the power and the glory,

    for ever and ever.

    Or at least 7 years until obsolescence.

    Amen.

  • @[email protected]
    link
    fedilink
    English
    51 year ago

    Nothing wrong with global variables.

    If anyone asks just say it’s the singleton pattern.