• kescusay@lemmy.world
    link
    fedilink
    English
    arrow-up
    11
    ·
    5 days ago

    Python is easy, but it can also be infuriating. Every time I use it, I’m reminded how much I loathe the use of whitespace to define blocks, and I really miss the straightforward type annotations of strong, non-dynamically typed languages.

      • kescusay@lemmy.world
        link
        fedilink
        English
        arrow-up
        6
        ·
        4 days ago

        Oh, I know you can, but it’s optional and the syntax is kind of weird. I prefer languages that are strongly typed from the ground up and enforce it.

        • sugar_in_your_tea@sh.itjust.works
          link
          fedilink
          English
          arrow-up
          3
          ·
          4 days ago

          Python is strongly typed, it’s just not statically typed. Python with consistent type hinting is extremely similar to a statically typed language like C#.

          • kescusay@lemmy.world
            link
            fedilink
            English
            arrow-up
            2
            ·
            4 days ago

            I would argue that without consistent and enforced type hinting, dynamically typed languages offer very little benefit from type-checking at runtime. And with consistent, enforced type hinting, they might as well be considered actual statically typed languages.

            Don’t get me wrong, that’s a good thing. Properly configured Python development environments basically give you both, even if I’m not a fan of the syntax.

            • sugar_in_your_tea@sh.itjust.works
              link
              fedilink
              English
              arrow-up
              1
              arrow-down
              1
              ·
              4 days ago

              What’s wrong with the syntax? It’s just var_name: Type = value, it’s very similar to Go or Rust. Things get a little wonky with generics (list[Type] or dict[Type]), but it’s still similar to other languages.

              One nice thing about it being runtime checked is you can accept union types, def func(param: int | float), which isn’t very common in statically typed languages.

      • JackbyDev@programming.dev
        link
        fedilink
        English
        arrow-up
        3
        ·
        4 days ago

        But nobody else does, and I need it more on code I am consuming than producing. In fact, many functions rely on being able to send various types for different behavior. Dynamic programming is crazy to me. It’s like guessing. I don’t know what type your code is accepting and I have to guess based on the name of read your code directly.

        • sugar_in_your_tea@sh.itjust.works
          link
          fedilink
          English
          arrow-up
          1
          ·
          4 days ago

          I have the opposite experience, a ton of libraries I use provide optional types, and the handful that don’t often have a good reason for it (e.g. numpy). Our projects at work have types almost everywhere, and it’s pretty nice to work with.