
The Unofficial Guide to Rich Hickey's Brain - fdb
http://www.flyingmachinestudios.com/programming/the-unofficial-guide-to-rich-hickeys-brain/
======
plinkplonk
Most of this is 'classic' FP, which existed long before Rich Hickey ever
talked about it. There is nothing "Hickeysian" (to use a word from this very
lightweight article) about distinctions between values and identity.

"Identity is a putative entity we associate with a series of causally related
values (states) over time. It's a label, a construct we use to collect a time
series."

True enough, but this is extensively covered in SICP Chapter 3 (for example).
It is great that Rich Hickey believes this and speaks about it, but he didn't
invent the idea, as _some_ Clojure hipsters seem to think.

Not to bash the immensely talented, and balanced Rich Hickey (who doesn't make
any grandiose claims, and is a brilliant engineer if the quality of the
Clojure implementation is any kind of signifier), but this kind of cult
behaviour by some of his followers is annoying.

~~~
nonrecursive
Author here. Thanks for pointing out that Rich Hickey didn't invent any of
this stuff, and for the SICP reference.

The reason why I wrote the article as I did - as a Clojure hipster - was that
I thought two things were important:

1) Getting people exposed to Rich Hickey's exceptional talks. Even if the
ideas he talks about aren't new, he explains them in a way that's very easy
for me to understand, and I think his speaking style is enjoyable. For my
purposes, I don't really care about the attribution of ideas as long as those
ideas get out. My thinking is that I'll have more success with this approach
than by saying, "Dude, you should check out SICP Chapter 3. Then rock the
lambda papers. And here are 100 other pages of great stuff, too."

2) Providing a lightweight reference to newbies like myself. I understand that
more experienced programmers might find all this old hat, but hopefully others
might find the presentation valuable.

Now, if you'll excuse me I need to go light some incense and place it in front
of my Rich Hickey shrine :)

~~~
plinkplonk
Both your points are reasonable. You've stated them clearly here, but your
article comes across as too gushy (to me).

That said, it is your article, and the choice of tone is completely your
decision.

My opinion is just that, opinion, from someone on the internet. Take it for
what it is worth.

You say (quoting your article)

"In this article (and more to come (possibly)), I begin my attempt to catalog
Mr. Hickey's unique viewpoint."

My (mild) criticism was that there is nothing unique or, in your words,
"Hickeysian" (shudder) about any of this. Or if you did actually 'catalog Mr
Hickey's _unique_ viewpoint' I didn't see it (in the article).

That maybe a trivial point to you, but I believe it is valid criticism,
especially when you make a very specific claim, as above. And hey fwiw, I
didn't say that on your blog, only as a comment on HN.

Fwiw, I completely agree with the idea that Rich Hickey's talks are well worth
listening to for all devs, whether newbies or not. He is a great speaker and
clear thinker, and a great engineer.

Actually, I _would_ like to see an article decoding Hickey's way of thinking.

Avoiding 'the gush' makes for stronger articles. Consider this feedback - a
random comment on your blog post if you will (imo again, ymmv etc, as always,
and that is as it should be). If it helps you create better articles in the
future, that's great. If not, that is fine too.

But yes, incense and chanting at the shrine is one way to do it ;). Go for it,
and more power to you.

~~~
nonrecursive
Thanks - I really appreciate the feedback. In my mind, I had meant
"Hickeysian" in a tongue-in-cheek way, and I had considered jokingly
mentioning that the post was a kind of hagiography. Now I really see how this
could appear to someone else, and I have to admit this realization has made me
shudder a little myself. This will definitely help my writing.

As for cataloging his unique viewpoint - hopefully as I progress I'll do a
better job. I think that some of his later talks like "The value of values"
and the one on place may be more uniquely his.

~~~
plinkplonk
Great, I look forward to your future posts.

I suspect the way to 'thinking like Rich Hickey' (vs specific ideas etc) goes,
at least partly, through Polya's "How to Solve It". He seemed to be very
influenced by it ( I forget which talk he mentioned it in).

~~~
fogus
"Hammock-driven Development" I think.

~~~
emcl
The hammock was never the same after fogus fell-out.

------
pat_shaughnessy
Great read - thanks! I love the river metaphors. The metaphysics discussion
also brought back memories of college philosophy classes on Plato's theories
around ideas vs. forms. Probably my memory is failing me here and someone more
versed in philosophy could help me out here :) But to me it's interesting how
classical philosophy could even remotely be related to computer programming.

~~~
telemachos
The river metaphor probably made you think of Plato. The famous quote "You can
never step into the same river twice" is attributed to Heraclitus[1], but it's
Plato who (first) tells us that Heraclitus said it[2].

Plato's theory of forms (or ideas - they're two ways expressing the same
theory in Plato, not oppositions) is arguably a response to earlier theories
of Heraclitus and Parmenides[3]. In a Heraclitean world, everything is always
changing; nothing stays the same, and there is not even an underlying
substance that undergoes the changing and stays itself (the way we might say
there's an underlying me that was once young and is now older). In contrast to
Heraclitus, Parmenides said almost the opposite (maybe - people argue a lot
about what the hell Parmenides said): nothing ever changes; the only reality
is being, which is always (and only) what it is and doesn't change. Heraclitus
denied the reality of stability, and Parmenides denied the reality of change.
Plato is trying to bridge these two theories: he wants to agree with
Heraclitus that the world shows massive change, but also with Parmenides that
not everything changes, and that something must subsist all the changing.
Forms help to explain permanence for Plato: a form is an eternal, immutable,
non-sensory X that all the concrete particular x things participate in. For
example, the form of Beauty (which is permanent, unchanging and perfectly
beautiful, but non-sensory - a funny combination) is what makes actual
beautiful things (which can change and become ugly) beautiful. When put that
way without more context, Plato's theory sounds bizarre and obviously false.
But he was struggling to understand what later philosophers call
"properties"[3] and "the problem of universals"[4], and it turns out that
_that_ problem is not easily solved.

[1]: <http://plato.stanford.edu/entries/heraclitus/>

[2]: <http://plato.stanford.edu/entries/heraclitus/#Flu>

[3]: <http://plato.stanford.edu/entries/parmenides/>

[4]: <http://plato.stanford.edu/entries/properties/>

[5]: <http://plato.stanford.edu/entries/universals-medieval/>

------
watmough
One of the key things about Rich, is that he simply 'does'. Needed a way to
access Java arrays from Clojure, #bam#, it's done.

Things have slowed down a bit with the maturing of Clojure, but it was really
something how fast Clojure developed back in about 2007/2008 or so.

------
jasonkostempski
"a State is a specific value for an identity at a point in time." That just
did a little something for my noggin as well. Cool post. Now I have another
Hickey video to watch that's probably going to send me off on some crazy
tangent for months :)

------
Roybatty
I find Rich's anti-OO philosophy refreshing. I know Rich's reasons for not
liking mainstream/traditional OO is different, but for some reason I've never
liked the idea of having methods and data together. I like the concept of
Common Lisp's CLOS.

~~~
GlennS
I find it refreshing too. I find it much easier for my programming to flow
when I'm sparing in my object use.

But, I'm not quite ready to throw out bundling functions with data just yet.
Sometimes there's no other use you'd have for a function, and the dot notation
and discovery through autocomplete is really convenient.

Not quite sure how to resolve these things yet.

~~~
Roybatty
In a language like Clojure you wouldn't have the problem of autocomplete
because there isn't an object for the method to be attached to.

I love autocomplete and editors/IDEs for dynamic OO languages have a hard time
providing it, because the type isn't know except through certain types of
analysis, which can never be 100% known.

