« BackHow Complex is my Code?philodev.oneSubmitted by speckx 5 days ago
  • klabb3 3 hours ago

    From 20y experience and CS degree, I see software engineering as a constant struggle against accidental complexity. Like quicksand, every movement you make will pull you deeper, even swimming in the right direction. And like entropy, it governs all things (there are no subfields that are free of complexity). It even seems impossible to give a meaningful, useful definition, perhaps by necessity. All is dark.

    But now and then, something beautiful happens. Something that used to be dreadful, becomes "solved". Not in the mathematical strict sense, but some abstraction or some tool eliminates an entire class of issues, and once you know it you can barely imagine living without it. That's why I keep coming back to it, I think.

    As a species, I think we are in the infancy stages of software engineering, and perhaps CS as well. There's still lots of opportunity to find better abstractions, big & small.

    • appplication 3 hours ago

      This was really well written and I agree with you completely. Though I am not so optimistic as a species we have much runway left to get meaningfully much farther out of that infancy.

      As tech progresses and those abstractions become substantially more potent, it only amplifies the ability of small groups to use them to massively shape the world to their vision.

      On the more benign side of this is just corporate greed and extraordinary amplification of wealth inequality. On the other side is authoritarian governments and extremist groups.

      • Droobfest 3 minutes ago

        Wealth inequality is a direct cause of authoritarianism and is not benign.

        • Joel_Mckay 23 minutes ago

          Perhaps, but generally annoying millions of technology people tends not to end well for firms. Usually the market simply evolves to better match the fiscal conditions.

          https://en.wikipedia.org/wiki/Competitive_exclusion_principl...

          The Internet itself will likely further fracture into different ecosystems. =3

        • vbezhenar 3 hours ago

          Can you provide some examples of these beautiful abstractions or tools?

          • kelsey98765431 2 hours ago

            Take message queues. ZMQ and the like have basically solved message passing which was a ghastly thing to worry about for many years.

            • stephbook an hour ago

              Memory garbage collection, borrow checker, compile-time static typing in dynamic languages (Typescript, Python).

              Language specific for JavaScript: Strict comparison operator === that disables type coercion, together with banning ==.

              == allows "5" equals 5.

              • whattheheckheck 2 hours ago

                Read The Linux Programming Interface book

            • mherrmann 3 minutes ago

              I find that Claude Code and others often write code that is more complex than it needs to be. It would be nice to measure the code complexity before and after a change made by the agent, and then to tell it: "You increased code complexity by 7%. Can you find a simpler solution?". Alas, I haven't yet had look into this.

              • wxw 3 hours ago

                Wonderful article, thanks for sharing. These complexity definitions and the connection to linguistic complexity are useful. Also enjoyed this line:

                > The cognitive complexity of a function can only be determined by the reader, and only caring about the reader can enable the writer to improve the learning experience.

                • AnonyMD 2 hours ago

                  This is a very informative article. I hadn't really considered the complexity of the code before, so this is very helpful.

                  • Joel_Mckay 39 minutes ago

                    Spiral development with dependency injection is avoidable. A zero-cost solution is enforcing workmanship standards, well documented simple/clean design-patterns, and doxygen discipline.

                    https://en.wikipedia.org/wiki/The_Power_of_10:_Rules_for_Dev...

                    Maintainable coding practices are a skill like any other. =3