1. 11

  2. 2

    My disappointment than none of the listed items is clickable is huge.

    1. 1

      I don’t want to discuss this at length on here, but in case anyone wondered what I thought, here’s a couple of (loooooong) Twitter threads, one with a reader of the book and one with John:



      1. 1

        Spoilers bitemyapp doesn’t like it. Now you don’t have to click the links :V.

      2. 1

        It’s an interesting and useful stratification of concepts and skills. My beef is with the labelling of the sections.

        The labelling runs from Beginner through Expert. This implies that the Beginner and “Advanced Beginner” levels are less desirable than the Proficient and Expert levels, and that one should strive to reach the Expert level or at least Proficient. Should someone applying just “Advanced Beginner” concepts be considered an “incompetent” functional programmer? (Because the label “Competent” is not applied until the next level!)

        But what is the cost/benefit? This seems much like the Software Engineering Institute’s Capability Maturity Model (CMM) which implies a Level 5 is the goal and more desirable than, say, Level 3.

        But the cost of reaching Level 5 CMM is enormous. The benefit/cost curve diminishes and in practice most organizations benefit greatly from reaching Level 3 at relatively low cost. The benefits of reaching Level 5 only pay off for relatively few organizations whose risks counter the greatly increased cost.

        I don’t know that the Law of Diminishing Returns can be applied to the Standardized Ladder of Functional Programming. I suspect it might, based on my experience and observations. That’s an informal suspicion.

        That’s not to suggest the higher levels have no value. It is to suggest there may be other concepts and skills a programmer or organization may benefit from applying that have a lower cost. Which suggests to me there are one or two columns missing yet from the chart that would make this more useful:

        1. Purpose – is the purpose of the next level just to become an “expert at FP”? or is there a more general purpose for the concepts in that level? Presumably the purpose is to become a better software engineer generally and not to learn FP for the sake of learning FP.

        Which leads to the other missing column:

        1. Alternatives – once the more general purpose is identified then it becomes possibly to weigh options. What alternative concepts and skills might be available to apply toward the same purpose. A good engineer always considers alternative practices and materials that might have a better benefit/cost or that might at least support a better evaluation of the given concepts and skills. Assuming there is only one way to solve a problem is a trap.

        I would be interested in seeing this work not stop here with a handy diagram (or at least not labelled the way it is currently.) Hopefully this will lead to further software engineering research (where engineering considers costs as well as benefits).