Great talk, from a great speaker. The central point is very old and very general, and should be familiar to anyone with a little exposure to the humanities… so, not everybody. That is: “world-structuring beliefs are very powerful” even (especially!) when they are unconscious. The process of becoming more conscious of your own episteme will make you a better programmer, and probably a better person too.
But, regarding types and tests, I think he gives property-based testing way too short a shrift. When he says “QuickCheck just makes more examples”, he ignores that the examples are generated by a formula, which is itself a specification or description of the overall shape of the correctness regions in his little pictures. The test generation process is just sampling within that region. So, PBT lets you use all the expressiveness of your language of choice to specify correct behavior, and brings in some statistical methods to boot. You don’t need a fancy type system to use PBT. (I have nothing against type checking! It’s great, you should use it where and when you can.) Moreover, you can pay a little more and check the very same properties at run time, and now they’re called “contracts”. There’s a strong connection with fuzzing techniques too, which have proven themselves very effective at finding real-world bugs. The difference between point-wise unit tests and PBT is so big that I think it constitutes a paradigm shift in itself. No it’s not everything, but it’s a really good thing for software correctness, and much easier to use than many other powerful techniques.
While I’m up here on my soap box, philosophy is extra credit, but every CS curriculum and boot camp really should include at least a basic stats course. If you missed yours, get remediated as soon as you can! We all need at least a modicum of statistical literacy to have a hope of actually doing empirical science, without which we’re stuck in essentially religious modes of thought.
(meta-comment) I would like to respond to each of your (excellent) points/paragraphs separately. I am interested in finding others in the lobsters community who might like more granularity. I think many of us might have some technical/UI/moderation ideas on how to make this easier. Any pointers on how I can get this ball rolling?
This is a 20 minute video from 2015 that likely still holds true in its entirety, which is why I’m re-posting it. It points out beliefs related to static vs dynamic type systems.
Thank you for doing this. It really enjoyed it, especially after reading this article from the frontpage. The voices (all the blog posts and papers we read, the open source projects we use, the marketing materials we drudge through) that speak in the code we write form what the article calls a chorus or this talk calls ideology, affecting the way we think and act, even if we don’t recognize it. While this is true for code, it is also true for the discussions on what the speaker calls the “fluid” of technical ideology: the Orange Site and also here on Lobsters.
Side note, Žižek started a talk he gave in front of some googlers the same way as this one, using Rumsfeld’s quote and expanding it out to include “unknown knowns.” He is the one who has a film titled “The Pervert’s Guide to Ideology.”
Gary Bernhardt is easily the most charismatic speaker in our industry; his way of presenting is very engaging. I had not seen this one, thank you for posting it.
Since this is 5 years old, and he doesn’t posit a “fix” for ideology- simply awareness: is there a way of asking yourself if there is an underlying unknown assumption to your belief?
I don’t think it makes much sense to look for a “fix” for ideology, everyone has an ideology. If you think you don’t have an ideology, that just means you’re not aware of it (there is a great expansion of this idea in “The Pervert’s Guide to Ideology” mentioned above). The key is, as you say, being aware of how it affects your opinions, and that’s a matter of making a habit of questioning your assumptions, just as you would do as a part of the scientific method.
In my experience, some useful ways to “unpack” one’s motivations include:
retrospective: Think about some particular past decisions and your thought processes behind them.
active: In the context of a decision you want to make, write down your thinking, motivations, emotions, and reasons about the decision.
proactive: As a future-oriented thought experiment, visualize a particular decision you need to make. Think about how you will respond. Write down your thinking, rationale, emotions, and so on.
This can apply to many kinds of decisions: personal, financial, technical, organizational, and so on.
All of these are just a starting point.
Awesome talk! I’d imagine the next step towards safety in the examples given would be to use something like smart constructors:
data RGB = RGB (Double, Double, Double) deriving Show
rgb (r, g, b) | r < 0 || r > 1 = error "r out of range"
| g < 0 || g > 1 = error "g out of range"
| b < 0 || b > 1 = error "b out of range"
| otherwise = RGB (r, g, b)
You could then write tests against this implementation, but I wonder how effective that would be? It seems like as soon as you think of an edge case to test against, you can just add it as an assertion and have it covered. I’d imagine that when writing stateless code, most unit tests can be made redundant by incorporating equivalent assertions throughout the program (though redundancy could be beneficial).
This was already posted. Also should have (2015) in the title.
From 2 years ago: https://lobste.rs/s/z736eo/ideology_talk_by_gary_bernhardt_from
@alynpost Is this something that should be merged or is that not a thing for such an old post?
I agree on the (2015) in the title, unfortunately I can’t make any changes to it now, so maybe a moderator could do that?
This was submitted before, 2 years ago and had no discussion (there’s a link at the bottom). I resubmitted it because its contents is still relevant and I’m happy to see it brought up a bit of a discussion and potentially reached a new audience.