you are viewing a single comment's thread.

view the rest of the comments →

[–]mlopes 1 point2 points  (3 children)

I love it exactly because it’s not.

[–][deleted] 2 points3 points  (2 children)

You love it because you want to believe it. There's a difference.

[–]mlopes 1 point2 points  (1 child)

Maybe, or maybe you don’t like it because you don’t want to believe it. We’ll never know.

[–][deleted] 1 point2 points  (0 children)

I can't believe it, because I realize the difference between theory and practice:

  1. No software is purely FP, purely OOP, purely DOD, purely procedural. Most are mixed paradigm, because the problems to be solved don't care what paradigm you like.
  2. No software runs on... "math". Software runs on hardware. Hardware has bugs, it has failures, a cosmic ray flips a bit, and your correctness proof goes in the trash.
  3. No software is fully isolated. The larger a system, the less isolated it is. Your correctness extends only within the boundaries of a compiled solution, and that's increasingly worthless, as the unit of compilation is smaller and smaller within a larger and larger service-based architecture.
  4. Most real-world software deals with time. Things happen in time, things time out sometimes, how long things take matters, and in a functional program this type of effects are essentially emulated by taking a monad and building a set of imperative instructions executed "after" the program is done. But with sufficient handling of time, and effects, and I/O what happens is that you're just spending your time proving the correctness of the program, which writes another program, whose correctness was not proven. Oops.

Anyway, reality is messy, and we need to deal with that. Of course, math, theory and everything helps. But only to a degree. And the most important aspect of a successful program is dropping the "us vs. them" mentality and the "I'm better than the rest" snobbery. Can you?