• 0 Posts
  • 16 Comments
Joined 1 year ago
cake
Cake day: August 14th, 2023

help-circle


  • wanted to add something to the end of a for-loop, but had too little indentation

    To address this, I prefer reducing length & depth of nested code, so the for/while is rarely ever not visible along with everything inside it. Others have success with editors that draw indentation lines.

    opening up new/anonymous scopes

    I occasionally use Python nested functions for this purpose


  • I find it’s possible to operate Python as a statically typed language if you wanted, though it takes some setup with external tooling. It wasn’t hard, but had to set up pyright, editor integration, configuration to type check strictly and along with tests, and CI.

    I even find the type system to be far more powerful than how I remembered Java’s to be (though I’m not familiar with the newest Java versions).







  • Kache@lemm.eetoProgrammer Humor@lemmy.mlGit Rules
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    9 months ago

    avoiding merge conflicts

    No, not like that – you misunderstand. I’m not talking about actively avoiding conflicts. Coordinating to avoid merge conflicts is the same work as resolving a merge conflict anyway, just at a different time.

    I’m talking about creating practices and environments where they’re less likely to happen in the first place, never incurring the coordination cost at all.

    One example at the individual level is similar to what you mentioned, but there’s more to it. E.g. atomically renaming and moving in separate commits, so git’s engine better understands how the code has changed over time and can better resolve merges without conflict.

    But there’re other levels to it, too. A higher-order example could be a hot module where conflicts frequently occur. Sure, atomic commits and all that can help “recover” from conflict more easily, but perhaps if the hot module were re-designed so that interface boundaries aligned with the domains of changes that keep conflicting, future changes would simply not conflict anymore.

    IMO the latter has an actual productivity benefit for teams/orgs. Some portion of devs just aren’t going to be that git proficient, and in this case, good high level organization is saving them from losing hours to incorrect conflict resolutions that can cause lost work, unintended logical conflicts (even though not lexical conflict), etc. Plus, it implies abstraction boundaries better match the changes demanded by the domain, so the code is likely easier to understand, too.


  • Kache@lemm.eetoProgrammer Humor@lemmy.mlGit Rules
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    9 months ago

    It’s kind of difficult to explain in the same way git is difficult to grok on the first try.

    Perhaps it’s convincing enough to just say:

    • Git is the fundamentally better at resolving merges/rebases without conflicts than older VCS that don’t maintain a commit tree data structure.
    • Even within just git, using one diff algorithm vs another can mean the difference between git successfully merging vs failing and showing you a conflict
    • Software is flexible – there are endless permutations to how it can be structured. Everything else being equal, some code/commit structures are more prone to conflicts than others

    I.e. whether a conflict will happen is not some totally unpredictable random event. It’s possible to engineer a project’s code & repo so that conflicts are less common.