
Talks that changed the way I think about programming - greywolve
http://www.opowell.com/post/talks-that-changed-the-way-i-think-about-programming/
======
joaorico
Alan Kay's intro quote is from this interview to Dr.Dobb's [0]. Here's some
more context to that quote:

"Binstock: Are you still programming?

Kay: I was never a great programmer. That's what got me into making more
powerful programming languages. I do two kinds of programming. I do what you
could call metaprogramming, and programming as children from the age of 9 to
13 or 14 would do. I spend a lot of time thinking about what children at those
developmental levels can actually be powerful at, and what's the tradeoff
between…Education is a double-edged sword. You have to start where people are,
but if you stay there, you're not educating.

Extracting patterns from today's programming practices ennobles them in a way
they don't deserve The most disastrous thing about programming — to pick one
of the 10 most disastrous things about programming — there's a very popular
movement based on pattern languages. When Christopher Alexander first did that
in architecture, he was looking at 2,000 years of ways that humans have made
themselves comfortable. So there was actually something to it, because he was
dealing with a genome that hasn't changed that much. I think he got a few
hundred valuable patterns out of it. But the bug in trying to do that in
computing is the assumption that we know anything at all about programming. So
extracting patterns from today's programming practices ennobles them in a way
they don't deserve. It actually gives them more cachet.

The best teacher I had in graduate school spent the whole semester destroying
any beliefs we had about computing. He was a real iconoclast. He happened to
be a genius, so we took it. At the end of the course, we were free because we
didn't believe in anything. We had to learn everything, but then he destroyed
it. He wanted us to understand what had been done, but he didn't want us to
believe in it.

Binstock: Who was that?

Kay: That was Bob Barton, who was the designer of the Burroughs B5000. He's at
the top of my list of people who should have received a Turing Award but
didn't. The award is given by the Association for Computing Machinery (ACM),
so that is ridiculous, but it represents the academic bias and software bias
that the ACM has developed. It wasn't always that way. Barton was probably the
number-one person who was alive who deserved it. He died last year, so it's
not going to happen unless they go to posthumous awards.

It's like the problem Christian religions have with how to get Socrates into
heaven, right? You can't go to heaven unless you're baptized. If anyone
deserves to go to heaven, it's Socrates, so this is a huge problem. Binstock:
I don't think they do that.

Kay: They should. It's like the problem Christian religions have with how to
get Socrates into heaven, right? You can't go to heaven unless you're
baptized. If anyone deserves to go to heaven, it's Socrates, so this is a huge
problem. But only the Mormons have solved this — and they did it. They proxy-
baptized Socrates.

Binstock: I didn't realize that. One can only imagine how thankful Socrates
must be.

Kay: I thought it was pretty clever. It solves a thorny problem that the other
churches haven't touched in 2,000 years."

[0] [http://www.drdobbs.com/cpp/interview-with-alan-
kay/240003442](http://www.drdobbs.com/cpp/interview-with-alan-kay/240003442)

~~~
pmoriarty
_" Kay: I was never a great programmer."_

I wonder how Kay would score on sites like HackerRank, and how many companies
today would pass him over because of that.

~~~
jhayward
I wonder, if you had some impossible deadlines and a ton of code you had to
write just to survive to the next funding round, would you want Alan Kay on
your team? I say this with enormous respect and admiration for Kay, but there
are horses for courses and groundbreaking ideas are not the same as shipping
product.

~~~
wedesoft
Alan Kay's work is not about how to ship the product within the next 2 months.
But it can be helpful to listen to his talks in order to maintain a longer
term view and to see fundamental limitations in the way we do things.

------
thristian
I suspect a lot of these video are the most powerful when you encounter them
at exactly the time you happen to be wrestling with those same ideas yourself.

Every time I design software, I'm think back to Gary Bernhardt's "Boundaries"
talk¹ and his practical, concrete suggestions for writing testable code. But
I've never met anybody else who seemed as impressed as I was by the idea.

¹:
[https://www.destroyallsoftware.com/talks/boundaries](https://www.destroyallsoftware.com/talks/boundaries)

~~~
leblancfg
Yup, that talk is gold. He's started producing screencasts again, and live
streaming some on twitch.
[https://m.twitch.tv/gary_bernhardt/videos/all](https://m.twitch.tv/gary_bernhardt/videos/all)

------
pc86
When I was consulting full time, I happened to run into this video at exactly
the right time. I shed two toxic clients and a few weeks later negotiated the
largest contract I ever had to that point (and honestly, since).

Mike Monteiro: "F __* you, pay me " \-
[https://www.youtube.com/watch?v=jVkLVRt6c1U](https://www.youtube.com/watch?v=jVkLVRt6c1U)

------
tinco
These talks are a little skewed to the game/high performance programming side
of the art, but still very interesting in general. Of the ones I've already
seen I really like Mike Acton's talk.

Since this has become such a nice thread some additions I'd add:

* Sandi Metz going through the Gilded Rose or "All the small things"

[https://www.youtube.com/watch?v=8bZh5LMaSmE](https://www.youtube.com/watch?v=8bZh5LMaSmE)

I already subscribed to her programming style and the general Ruby TDD/BDD
movement, but this talk captures all the important values in a single example.
I think it made my programming style no longer based on vague things like
experience or intuition, but just on concrete merit shown in this talk.

* Matthew Brecknell demonstrating Hole Driven Development

[https://www.youtube.com/watch?v=52VsgyexS8Q](https://www.youtube.com/watch?v=52VsgyexS8Q)

The programming style demonstrated in this video is a real mind bender. I
think most Haskell programmers use a weaker version of this, Matthew takes it
to the extreme. I didn't adapt this style, I don't think it's practical, but
it's the sort of thing that some person someday will incorporate in some more
comfortable way in a new language or platform as a revolutionary feature.

~~~
vvanders
> These talks are a little skewed to the game/high performance programming
> side of the art, but still very interesting in general.

I get the chance to interact with a pretty wide range of software engineers,
the thing that _constantly_ blows people's minds is how caches work and the
fact that there's 10-50x performance waiting for you if know about it(and have
the time to exploit it).

It's almost like they don't teach it in school or something, I agree there's a
lot of gamedev/perf stuff but that lines up with my experience of things that
change the way people approach programming.

~~~
Szel
> that constantly blows people's minds is how caches work and the fact that
> there's 10-50x performance waiting for you if know about it

Could you point to some sources?

~~~
tinco
This is the paper people usually use to explain some of the performance
benefits you could reap, besides the talk about row vs column based
performance:

[https://www.akkadia.org/drepper/cpumemory.pdf](https://www.akkadia.org/drepper/cpumemory.pdf)

Note that I wouldn't really recommend it unless you're really going to do low
level programming for high performance. It's super long, explains all the
details, if you've got a basic CS college education you should know most of it
already anyway.

If you're just a web developer this won't actually help you as most of this
improvements have already been done in the parts that matter (i.e. your
database, your operating system, your interpreter and perhaps your application
server).

------
troels
I'll just leave this here:

* Growing a Language, by Guy Steele

[https://www.youtube.com/watch?v=_ahvzDzKdB0](https://www.youtube.com/watch?v=_ahvzDzKdB0)

~~~
jeremiep
I loved that talk!

I especially loved the moment when I finally understood the point he's trying
to make is applied to the writing of the very talk he's giving.

------
GeertVL
I love this quote from Eskill's talk

"C++ is evil because it makes dumb people think they are clever."

Replace C++ with any "intelligent" framework or language.

~~~
rcaught
Replace "evil" and "dumb" with "high and mighty, naive, hyperbole".

------
crdoconnor
These two made an impression on me, especially regarding the delicate trade
off between implicit and explicit.

Among other things, how and why to making things more implicit:

[http://youtube.com/watch?v=wf-BqAjZb8M](http://youtube.com/watch?v=wf-
BqAjZb8M) (Beyond PEP8 by Raymond Hettinger)

When implicit goes too far:

[https://www.destroyallsoftware.com/talks/wat](https://www.destroyallsoftware.com/talks/wat)
(wat by Gary Bernhardt)

------
edem
I really like that my two favorites from Rich Hickey are present. If you don't
watch any of these you should at least watch 'Simple made easy'.

~~~
calebm
I clicked the link just to see if I was correct in predicting that "Simple
made easy" was on the list. It's on my list, and seems to be on everybody's
list. It reminds me of that quote: "I didn't have time to write a short
letter, so I wrote a long one instead." (Mark Twain)

~~~
dj-wonk
Rich has great talks.

However, I am not sure if what the author wrote ("Your most powerful problem
solver is your subconscious mind.") is a spot-on articulation of what Rich
means by hammock driven development. Here's my summary of what Rich means:
immersive, focused thinking _followed by_ unstructured, relaxed, open-ended
thinking. It is the _combination_ of the two that is so powerful.

------
comboy
Relevant HN thread that is a goldmine:
[https://news.ycombinator.com/item?id=12637239](https://news.ycombinator.com/item?id=12637239)

------
ivank
Garret Smith - Writing Quality Code in Erlang

[https://www.youtube.com/watch?v=CQyt9Vlkbis](https://www.youtube.com/watch?v=CQyt9Vlkbis)

------
unwind
Fun to see Eskil (there's a typo but that's how you spell it) on here, that
talk isn't very old.

It would be interesting with some more analysis from the OP, namely _what_ was
learned that changed their thinking, and _how_ their thinking was changed.

~~~
greywolve
This is a great idea, I'll definitely be doing some followup posts in future.

------
tchow
He mentioned a lie of:

Code should be designed around a model of the world

but I didn't hear any reason why not to? The Key/Value pair being the only
reason, but besides that being a optimization / preoptimization in high
performance applications, is there any reason to not design code around a
model of the world?

Seems to me it makes things easier to think about.

~~~
b3spoke
Apologies, haven't watched the video, but there are some pitfalls when
designing around a 'model of the world', especially in OO.

I think Wizards and Warriors by Eric Lippert is a perfect illustration of how
our initial assumptions and models aren't often the right ones (although it's
not so much about data in this case)
[https://ericlippert.com/2015/04/27/wizards-and-warriors-
part...](https://ericlippert.com/2015/04/27/wizards-and-warriors-part-one/)

~~~
yathern
Just read through those 5 posts - absolutely fantastic, thanks for the link.

------
stock_toaster
The following talk about event sourcing (not listed in the article)•, really
made an impact on me:

Event Sourcing - Greg Young

[https://www.youtube.com/watch?v=JHGkaShoyNs](https://www.youtube.com/watch?v=JHGkaShoyNs)

•: Not that I really expected it to be I guess.

~~~
JOURNEYSA
Overly complicated pointless eventsourcing wasted 1mil+ at my previous
employer. Now they have to spend 6 months removing it all.

~~~
SanderMak
Care to elaborate? We're having quite good experiences with it at the moment,
but would like to learn from others.

~~~
JOURNEYSA
We used this mess of a library, which provides no clear interface and corrupts
data
[https://github.com/johnbywater/eventsourcing](https://github.com/johnbywater/eventsourcing)

~~~
maxaf
A faulty implementation doesn't necessarily invalidate the idea. I also
strongly suggest looking into statically typed languages. Python is very
poorly suited to working with data.

~~~
kbutler
> Python is very poorly suited to working with data.

This does not seem to be true, based on widespread industry and scientific use
of Python generating, managing, and analyzing data.

Perhaps you meant in some specific way, like "Python does not enforce objects'
data schema" or some such?

------
yazaddaruvala
Anyone have a link to Alan Kay's talk, where he demos UIs and a compiler for
UIs in ridiculously small # lines of code?

There are a few talks like this, but there is one in particular where he goes
into a lot of detail about it. I can't for the life of me find it again.

~~~
dkarapetyan
Is it really "Complex"? Or did we just make it "Complicated"? :
[https://www.youtube.com/watch?v=ubaX1Smg6pY](https://www.youtube.com/watch?v=ubaX1Smg6pY)

~~~
corysama
Btw: The next iteration of that project live here:
[https://github.com/harc/ohm](https://github.com/harc/ohm)

------
nottorp
It would be nice if you linked transcripts where available...

------
dkarapetyan
I know most of these. The common theme is emphasis on solving problems instead
of getting caught up in religious wars over "the one true way".

------
hellofunk
I just watched the Blow talk. I had never seen him talk before and was really
impressed by his perspective. I found myself agreeing with many of his points
in a way that I never would have a couple years ago. I love how his main
metric for optimization is developer time more than anything. I've learned how
important this is in recent years.

------
awongh
This one by Bret Victor (or any of his other talks, really) also come to mind:
[https://vimeo.com/36579366](https://vimeo.com/36579366)

~~~
unixhero
Yeah.

Firstly, maybe lastly, the conclusion of this video is real powerful stuff. I
cannot pinpoint it's philosophical anchoring or origin. The same message was
at the end of the iconic documentary about Jodorowskis Dune.

But

I have been trying to mentally operationalize the advice and ideas here, but
found it really dificult and abstract.

Obviously an incredible lecture that deserves its own category.

------
pbadenski
Additional two on "software design and evolution" that were hugely influential
for me in my career:

* Responsive design, by Kent Beck [https://www.infoq.com/presentations/responsive-design](https://www.infoq.com/presentations/responsive-design)

* The Grand Unified Theory, by Jim Weirich [https://vimeo.com/10837903](https://vimeo.com/10837903)

------
gravypod
> Iterating over a two dimensional array by row is much faster than by column.

Another fun fact is staggering array accesses is faster then linear acesses.

~~~
Namrog84
Can someone elaborate on this? I tried searching and wasn't having any luck. I
always thought sequential linear access was fastest?

~~~
dreta
This is all nonsense. Accessing linear memory in a linear fashion is the way
to go. You gain absolutely nothing by staggering memory accesses, because
you’re waiting for memory to come into cache while the CPU idles, and since
you have little control over how cache is utilised across a span of time, the
whole concept of doing this to pre-load anything is just bogus, unless you’re
doing specific optimisations for a specific architecture, even then there are
cache pre-loading instructions for that.

------
spacemanmatt
I gotta throw in one of my favorites, because I have not seen another that
really speaks so directly to the value of craftsmanship in development. I also
deeply enjoyed the allegory with woodworking tools.

[https://www.youtube.com/watch?v=ShEez0JkOFw&t=13s](https://www.youtube.com/watch?v=ShEez0JkOFw&t=13s)

------
Flimm
Are the start times on these YouTube links deliberate? Some of these link to
the middle of the video, and I'm not sure why.

------
joemanaco
These are exactly the talks that had the most influence to the way I write
software, too. Great list!

------
Insanity
I always hugely enjoy these lists, thanks for sharing this one as well. Great
material in there :-)

------
SonicSoul
tried listening to why OOP is bad and it was painful. 10 minutes in and 0
insights. He kept saying things like "encapsulation doesn't work" and then
moving on. Not willing to stay another 20 min to find out why.

~~~
wheaties
There are many talks about why OOP is "bad" but they tend to come from the FP
camp The decent talks of this nature are backed up by firm, fundamental
reasoning showcasing the power of "better" abstractions. I, personally, find
both OOP and FP compelling, depending on what I'm trying to model.

Wish I could link a few examples, sorry.

------
d1sciple
Guy Steele's, Sean Parent's C++ talks and Alex Stepanov's A9 course.

------
pjc50
The theological second half of this is bizarre - I've never heard of this
being considered a "problem", heaven (in the Christian tradition) is not a
hall of fame that one nominates figures for. And the Mormon tradition of
proxy-baptising people who are dead and never showed any sign of adherence to
their tenets is highly questionable.

~~~
Fuzzy_Logic
Mormon and long time lurker here. Just wanted to give clarity to this because
it can be confusing. Mormons don't believe they are forcibly baptizing these
people by proxy. They believe that everyone should have the opportunity to
accept baptism and salvation through Jesus Christ, even if they did not
receive the opportunity in the mortal stage of life: "Individuals can then
choose to accept or reject what has been done in their behalf."

[https://www.lds.org/topics/baptisms-for-the-
dead?lang=eng](https://www.lds.org/topics/baptisms-for-the-dead?lang=eng)

~~~
nurettin
Hi, sorry if this comes off as offensive, but is there a general consensus in
mormonism about a gradual evolution of life on earth?

~~~
Fuzzy_Logic
Sorry for the delayed response. As paulddraper there is no official doctrine
on evolution, but Mormons do not believe in "Creatio ex nihilo" or that the
creation of the earth was literally a seven day period. The "days" of the
creation story are meant to mean periods of time, and we do not fully
understand how God created the earth or that evolution was not necessarily a
part of it. Mormons do not accept a lot of the "standard" Christian teachings
on creation that actually stem from the Greek/Roman philosophical influence in
early Christianity and not from scripture. Our official doctrine encourages us
to seek to learn and understand the will and processes of God through science
in addition to spiritual experiences.

"Latter-day Saints should strive to use both science and religion to extend
knowledge and to build faith." "Is there any conflict between science and
religion? There is no conflict in the mind of God, but often there is conflict
in the minds of men."
[http://en.fairmormon.org/Mormonism_and_science/Are_they_comp...](http://en.fairmormon.org/Mormonism_and_science/Are_they_compatible)

More Sources:
[http://en.fairmormon.org/Mormonism_and_science/Evolution/Off...](http://en.fairmormon.org/Mormonism_and_science/Evolution/Official_stance)
[http://en.fairmormon.org/Mormon_view_of_the_creation](http://en.fairmormon.org/Mormon_view_of_the_creation)

------
navyad
Thanks for sharing.

