Comment by CyberDildonics

19 days ago

No, the best thing you can do for simplicity is to not conflate concepts. The perpetual idea of mixing data and execution is a misguided search for a silver bullet and it never makes things better in the long term.

This is cleverness over craftsmanship. Keeping data and execution as separate as possible is what leads to simplicity and modularity.

The exception is data structures which need the data and the functions that deal with it to expose that data conveniently to be closely tied to each other.

Everything else is an unnecessary dependency that obscures what is actually happening and makes two things that could be separated depend on each other.

> No, the best thing you can do for simplicity is to not conflate concepts.

This presumes the framework in which one is working. The type of map is and always will be the same as the type of function. This is a simple fact of type theory, so it is worthwhile to ponder the value of providing a language mechanism to coerce one into another.

> This is cleverness over craftsmanship. Keeping data and execution as separate as possible is what leads to simplicity and modularity.

No, this is research and experimentation. Why are you so negative about someone’s thoughtful blog post about the implications of formal type theory?

  • This presumes the framework in which one is working.

    One doesn't have to presume anything, there are general principles that people eventually find are true after plenty of experience.

    The type of map is and always will be the same as the type of function. This is a simple fact of type theory, so it is worthwhile to ponder the value of providing a language mechanism to coerce one into another.

    It isn't worthwhile to ponder because this doesn't contradict or even confront what I'm saying.

    No, this is research and experimentation.

    It might be personal research, but people have been programming for decades and this stuff has been tried over and over. There is a constant cycle where someone thinks of mixing and conflating concepts together, eventually gets burned by it and goes back to something simple and straightforward. What are you saying 'no' to here? You didn't address what I said.

    You're mentioning things that you expect to be self evident, but I don't see an explanation of why this simplifies programs at all.

    • > One doesn't have to presume anything, there are general principles that people eventually find are true after plenty of experience.

      I guess I just disagree with you here. Plenty of programmers with decades of experience have found no such general principle. There is a time and place for everything and dogmatic notions about "never conflate X and Y" because they're "fundamentally different" will always fall flat due to the lack of proof that they are in fact fundamentally different. It depends on the framework in which you're analyzing it.

      > It isn't worthwhile to ponder because this doesn't contradict or even confront what I'm saying.

      This is a non sequitur. What is worthwhile to ponder has no bearing on what you say. How arrogant can one person be?

      > It might be personal research, but people have been programming for decades and this stuff has been tried over and over.

      Decades? You think that decades is long enough to get down to the fundamentals of a domain? People have been doing physics for 3 centuries and they're still discovering more. People have been doing mathematics for 3 millennia and they're still discovering more. Let the cycle happen. Don't discourage it. What's it you?

      > You're mentioning things that you expect to be self evident, but I don't see an explanation of why this simplifies programs at all.

      It may not simplify programs, but it allows for other avenues of formal verification and proof of correctness.

      ----

      Do you have other examples of where concepts were conflated that ended up "burning" the programmer?

      5 replies →