Hacker News new | ask | show | jobs
by logicallee 3352 days ago
>I also found that knowing something pretty much equals to being able to explain it to someone.

That can't be right, because that would logically imply that there is literally nobody on Earth who knows functional programming -- including the writers of functional compilers -- since no one is able to easily explain it. (No, really, no one is.)

But this is clearly not true: clearly, people do know functional programming (after all, how could they write a compiler for it otherwise, how could people program in it otherwise), despite their inability to explain it.

Therefore, this proves that knowing something does not equal being able to explain it.

Note that I do not go as far as to say it's inexplicable - sometime, somewhere, someone will explain it clearly and in a way that resonates with people that have not programmed in a functional paradigm, so that anyone immediately "gets" all aspects of it. Like a meme, that explanation will reverberate through the Internet, academia, language design, like a wildfire that enlightens everyone who meets it.

But it has not happened. That does not mean "nobody knows functional programming." People know it, although they can't explain it.

EDIT - this was downvoted, but I stand by it. My assertion is pretty easily falsifiable, but note that no reply does so with a link. Of course, I have not reviewed the entirety of the Internet so it is possible that I missed one. But I notice that nobody seems to be showing one. This is a challenge to do so, if you disagree with my example.

4 comments

Not to be glib, but maybe you're reading the wrong books. Someone did explain it clearly and in a way that resonates with people that have not programmed in a functional paradigm. As an example, the link below [1] (which has been posted here to death), explains things very clearly, provided one has the patience to read it carefully and do the exercises.

It's true, though, that one will not necessarily, as you put it, 'immediately "get" all aspects of it'. Many things worth learning, this one included, require a bit more diligence. As Euclid famously explained, there is no royal road to functional programming.

[1] https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html

I find your reference (which I had not seen, though you state it has been posted to death) superlative.

It requires patience but I think I will work through it.

Although it serves as a counterexample (so that the strictest form of my argument, that some people know fp but nobody has explained it, therefore it is not true that to know something is to be able to explain it ... this strict argument does not work as it has a counterexample), still, other similar forms of my argument could stand. After all, not everone who knows fp can write such a resource.

Anyway, it really does seem to be far and away better than others that are posted or offered, usually. I have not completely read it but my subjective opinion of it is very good. Thanks for the link!

Any progammer, certainly anyone with a CS degree, really ought to be aware of, if not familiar with SICP. And yes, it's mentioned on HN almost daily:

https://hn.algolia.com/?query=sicp&sort=byDate&prefix&page=0...

For some value of "easily", these [0] [1] would suffice, in my opinion.

Explaining something easily must also assume that both the instructor and the student have a level of mastery over a common means of communication and relevant background in the prerequisite subject matter, however.

[0] Functional Thinking https://www.youtube.com/watch?v=7aYS9PcAITQ

[1] Clojure Inside Out http://shop.oreilly.com/product/0636920030409.do?cmp=ex-prog...

The assertion that no one is able to explain functional programming is rather extreme and doesn't pass the sniff test.

Does every practitioner of functional programming reinvent the whole thing from scratch each time?

Perhaps you mean to say that it is very difficult to explain?

Here is an explanation, it's the top when when I googled "easy explanation of functional programming."

https://maryrosecook.com/blog/post/a-practical-introduction-...

Please read it. Do you know functional programming now? Do you get it? Do you get the point of it? Did you "grok" the whole reason that the functional paradigm exists?

In my opinion that article fails to meet the test. In its very first paragraph it calls out some negative approaches that assume too much or are too hard; in the second paragraph it does the same thing.

>The assertion that no one is able to explain functional programming is rather extreme and doesn't pass the sniff test.

It's certainly easy to falsify my claim. You can do so with a single link.

So if anyone is able to explain functional program in a way that makes it clear and easy, and really lets people grok its purpose and approach, where is that explanation? Where are the benefits that people reap by reading it?

The fact is, the resources I have reviewed fail that metric. The people who teach it aren't actually able to explain it easily and well. You suggest that "perhaps [I] mean to say that it is very difficult to explain" -- maybe so, but that is still a reason why it is not true that if someone understands something, then they can also explain it. Here we have a clear example where this is not the case. There are also many more examples in the arts and sciences. Not everything can be explained. That doesn't mean nobody knows it. Therefore, the "if you know it -> you can explain it" claim is false. QED.

> but that is still a reason why it is not true that if someone understands something, then they can also explain it

You are going after this rough heuristic as is if it some iron clad metric. Obviously some things are more difficult to explain than others -- I'm not sure how that affects the usefulness of the idea that, in general, being able to explain something well is a sign one likely understands it deeply. This isn't the only measure of understanding, and it isn't perfect, but I've found it be useful.

It seems similar to the notion that to truly know a topic, you must distill it down to concise articulations of the only the most fundamental aspects, as well as the key resulting dynamics that emerge.

Of course, being able to communicate such a rich mental model to others is not always easy, but doing so demonstrates that one understands their own mental model very well.

If you are saying that it isn't a perfect test of understanding, then we are in agreement. But I think that misses the point a bit.

So I am going to go off in the opposite direction and say that often people who apparently can explain things clearly and concisely, using pithy aphorisms even, do not really have any deep mental model at all. I'll quote a poem for you, that I feel is apt here:

    Turning and turning in the widening gyre
    The falcon cannot hear the falconer;
    Things fall apart; the centre cannot hold;
    Mere anarchy is loosed upon the world,
    The blood-dimmed tide is loosed, and everywhere
    The ceremony of innocence is drowned;
    The best lack all conviction, while the worst
    Are full of passionate intensity.
I feel that many deep concepts are the same: the best practictioners might lack all conviction. They cannot distill any articulation. They have nothing clear to say that explains their understanding.

In fact, when I've pressed for some, they have been frustrated.

All of my gurus are the same. They simply cannot explain what they know clearly and concisely.

Is it because I only go to Gurus for information that is inordinately difficult - that, I can find the simplest explanations wherever, so those are not what I ask about? Perhaps.

But as a metric, I simply have not found people's ability to express concepts clearly, or to distill concepts, a good proxy for their understanding them; nor of their level of insight; nor of their mastery of the domain.

In fact, I can almost go as far as to state the opposite: the only people who can clearly explain things, are people who are completely wrong about them. (This is an extreme position and I probably am going a bit too far in this direction. I may not actually believe the sentence I Just wrote.)

Basically I completely reject the premise - I think we completely disagree about whether it is a useful or good heuristic, or even correlates in the positive direction!

>In fact, I can almost go as far as to state the opposite: the only people who can clearly explain things, are people who are completely wrong about them. (This is an extreme position and I probably am going a bit too far in this direction. I may not actually believe the sentence I Just wrote.)

If you don't actually believe this, why state the above?

> It's certainly easy to falsify my claim.

Without a proper definition of what you're looking to be "explained", or a reproducible quantitative metric that you're using to to measure a successful "explanation" vs an unsuccessful one, no it isn't falsifiable. If you provide a detailed framework with clear quantitative conditions, then it might be falsifiable, but as of now, it is purely subjective and it is disingenuous to suggest that's an objective test.

For example, why would an explanation of functional programming (which could include any of a huge number of topics), have to explain to you why it exists? Since it is literally an extension of a specific branch of math, there need not be much more of a reason than 'for exploratory purposes', because often that's the only thing that drives many mathematical innovations.

Secondly, it's important to point out the implicit assumption in that argument, that an explanation of a topic is the only possible source for learning and understanding that topic, which is easily proven false by observing the way humans learn to walk. Do babies usually need a complete and thorough explanation of how to walk before they can master it? No, they go through trial and error and learn largely on their own via experience, and even if they could understand language that early, you'll still likely find it very cumbersome to try and explain to somebody how/why to walk in the kind of detail you seen to be asking of fp articles. Therefore, why can't a discipline/activity like programming or mathematics, also require experience learning to fully grasp? Is there a reason why the assumption was made that it can only be learned/understood via thorough explanation?

And while being able to explain something well is a decent rule of thumb to show competence in an area, it's not universal, as demonstrated by the learning to walk example. Similarly, you can't have a fixed minimum requirement for what qualifies as a good explanation to rate against, because understanding changes and evolves with time. For example, a "good" explanation of how the solar system works circa 300BC, would not be a very good explanation now.

You take a tone as though you disagree with me, but actually do agree with my conclusion, just not my argument. We have reached the same conclusion. So this is just a technical reply to your criticism of the argument I use to get there - you get there via a different argument, and you claim mine is wrong. But we don't disagree about my conclusion.

For how you get there: in your third paragraph you give a shining example that it is not necessary to be able to explain something in order to do it: though everyone (barring a specific hindrance which we would identify and name as a disability) "knows" how to walk, it is clear that if you asked a thousand people "explain how you walk" you would not have a thousand good explanations. So, you have actually produced another example that it is possible to know something without being able to explain it!

Walking is a bit different from a purely mental knowledge/skill/etc, of course, and yet we can probably generalize it without taking too many allowances.

Returning to your criticism in your first paragraph, I feel like given the fact that you introduced the word "disingenuous" I would say it is disingenuous of you to suggest that people cannot tell whether they have received an explanation that is good. Of course we can.

Compare these two explanations:

"Why is two the only even number that is prime?"

- http://math.stackexchange.com/questions/1003491/why-is-two-t...

Explanation 1:

"Two is a prime because it is divisible by only two and one. All the other even numbers are not prime because they are all divisible by two. ... Because every even number other than 2 is obviously divisible by 2 and so by definition cannot be prime."

versus

Explanation 2:

"Pick a prime p. Call a number n p-divisible if pn. Then p is the only p-divisible prime, trivially. In particular, 2 is the only 2-divisible, or even, prime."

Can't you easily tell the subjective difference between the two explanations? One is easy to understand. One is hard to understand.

To be honest, I can't parse and follow the second example. I have to resort to what I actually KNOW it's saying! Rather than its misplaced formalism.

So as you can see this has nothing to do with the subject matter!!

It simply shows that KNOWLEDGE is not reflected in CLEAR EXPLANATION. The second explainer clearly has deep knowledge. But this does not translate to an explanation.

In essence I am saying the same thing. That yes, we can tell a good explanation when we see one (sorry, this is a subjective claim but I'm sticking with it) but that this in no way, shape, or form is a requisite (or even indication) of actual understanding!

> since no one is able to easily explain it. (No, really, no one is.)

Where the hell did that "easily" come from? You just added it, moving the goalposts, and making your whole argument nonsense.

There is no blog post that explains quantum mechanics easily to me in an hour of effort, therefore QM is obviously impossible to explain and probably the whole thing is just made up. /s

(By the way, if you don't respond with a link to such a blog post, you prove my point.)

Why would you say there is no blog post that explains quantum mechanics easily within an hour? I Googled "easy explanation of quantum mechanics" and Got as my first link, this "simple English" wikipedia link:

https://simple.wikipedia.org/wiki/Quantum_mechanics

It seems absolutely easy for me to read and follow! It even includes a section "Why QM is hard to learn", clearly explaining the challenges.

To me, the conversation should have included more mention of wave/particle duality and the uncertainty principle, as well as the double slit experiment, which if clearly described could have shown how quanta behaved "statistically" as though they interfered with each other, even when released one at a time.

It also lists Einstein among the discoverers, but does not talk at length about how Einstein historically was against Quantum Mechanics (saying "God does not play dice"), or what the inherent tension is between his quite deterministic theories, and Newtonian deterministic physics, and the inherent facts of quantum mechanics which I take to be statistical.

There are extremely visceral facts about quantum mechanics, today: today, etchings in silicon are so tiny that sometimes the electrons will jump through (tunnel) to another side. This is because quantum mechanics shows that electrons don't ACTUALLY have a specific location, but rather a range of probabilities of being at certain spaces.

There is currently a certain probability that if I were to individually measure every one of your atoms, they would ALL actually turn out at the instance of measurement, to be beyond Mars in distance from the Earth.

It's just that the chances of that are small in the way 1 in 10^Googolplex is small. (A severe underestimation of the chances, I just don't want to be wrong.) In a very real sense, there is a nonzero chance that every one of your atoms is beyond mars. Of course the chances involved are ludicrously small - much smaller than sitting down with a pair of fair dice and rolling two sixes a hundred times in a row, fairly.

But at the 10 nanometer scale, the scale of current etchings in silicon, the chances that an electron might turn out to be a whole etching over might be 1 in 10,000 to 1 in 100 billion -- in other words, it might regularly occur, multiple times every second or every few seconds.

All of this understanding is quite visceral and could be given in the article, which it does not touch upon.

So actually this is a GREAT example that a very clear explanation does not reflect very deep knowledge: I have linked a superlative explanation above. But does its writer have a superlative understanding? Maybe yes, maybe no. It is not possible to judge.

If I were interviewing for a position as a chief physicist at Intel, then the ability of the candidate to produce a description on command of the above caliber, actually does not to me show their level of understanding of the subject matter. Is it college-level, doctoral-level, post-doctoral, or are they a leading contributor in the domain, one of the five best experts world-wide?

In fact, the "simple English explanation", though superlative from a subjective evaluation of an explanation, does not give this indication at all. In fact it could be that the explanation is fundamentally wrong in many ways. (I am not enough of an expert to tell.) So the linked page passes the criterion of a good description, with flying colors - but may be entirely wrong.

Finally, I checked whether we could at least find a simple English page for functional programming. Going to the link https://simple.wikipedia.org/wiki/Functional_programming

actually transfers us to a 3-line section within Programming languages. I will quote these in full:

>Functional programming looks at programming like a function in mathematics. The program receives input, some information, and uses this information to create output. It will not have a state in between, and it will also not change things that are not related to the computation.

>Procedural programs are a set of steps or state changes.

I think you will agree that as Simple English Wikipedia's COMPLETE description of functional programming -- that's it, that's all they wrote -- this does not fit the description of being a good explanation. "It [the program] will not have a state in between" is simply wrong, insofar as it isn't downright meaningless.

To return to your assertion that I am moving the goal-posts by adding "easily", making my argument nonsense, I will grant that if you are willing to accept obscure, difficult explanations, we are talking about a different metric than I referred to.

In this case, what do you judge the explanations on? Formal correctness? Sounding good? After all, under your suggestion it is not necessary that the person asking for an explanation be able to understand the explanation proffered. Are you suggesting that the person asking, must have sufficient domain expertise to be able to deeply judge even extremely obscure explanations, and that the standard must be "is this obscure explanation complete and correct?" Or what should the standard be under the way you take the goal-posts to be? (By the way I don't agree with your reading but I am interested in you how view it.)

An encyclopedia tells you what quantum mechanics is. You can use that knowledge the next time you are at a party and someone wants to talk about a cat in a box or the double slit experiment. You cannot use that knowledge to teach an undergrad course on QM that involves any math, or even to design a meaningful experiment in the field.

If you want to know what functional programming is to casually mention it at parties, you can easily find an explanation at that level. If you want to determine whether it is worth learning and using, and what it is good for, you're not going to get that without some experience and some investment of effort.