Sure. The book is a sort of resource for learning the programming language Scheme, where the authors will present an illustrative piece of code and discuss different aspects of its behavior in the form of a question-and-answer dialogue with the reader.
In this case, the authors are discussing how to perform numerical comparisons using only a simple set of basic procedures, and they’ve come up with a method that has a subtle error. The lines above encourage the reader to figure out if and why it’s an error.
With computers, it’s really easy to just have a half-baked idea, twiddle some bits, and watch things change, but sometimes the surface appearance of a change is not the whole story. Remembering to “think first, then try” helps me maintain the right discipline for really understanding what’s going on in complex systems. Thinking first about my mental model of a situation prompts questions like this:
Does my model explain the whole thing?
What would I expect to see if my model is accurate? Can I verify that I see those things?
Does my model make useful predictions about future behavior? Can I test that now, or make sure that when it happens, I gather the data I need to confirm it?
It’s harder psychologically (and maybe too late) to ask those questions in retrospect if you try first, and then think, and if you skip asking them, then you’ll suffer later.
You know, I’ve seen a lot on here about how programming relates to thinking relates to rationality. I wonder if it’d be worth trying and where/how I might get started.
It’s certainly at least worth trying, since among things to learn it may be both unusually instructive and unusually useful. Here’s the big list of LW recommendations.
The first trick is to be able to describe how to solve a problem; and then break that description down into the smallest possible units and write it out such that there’s absolutely no possibility of a misunderstanding, no matter what conditions occur.
Once you’ve got that done, it’s fairly easy to learn how to translate it into a programming language.
Which is also why it helps, conversely, for reduction and rational thinking: The same skill that applies to formulating clear programs applies to formulating clear algorithms and concepts in any format, including thought.
You know, I’ve seen a lot on here about how programming relates to thinking relates to rationality. I wonder if it’d be worth trying and where/how I might get started.
I would recommend trying, although I’m not really the right person to ask on starting points, if for no other reason than to test the hypothesis that learning programming aids the study of rationality.
This is a great reminder, and is not always easy advice to follow, especially if your edit-compile-run cycle tightens or collapsescompletely. I think there’s a tricky balance between understanding something explicitly, which you can only do by training your model by thinking carefully, and understanding something intuitively, which is made much easier with tools like the ones I linked.
Do you have a sense for which kind of understanding is more useful in practice? I suspect that when I design or debug software I am making heavier use of System 1 thinking than it seems, and I am often amazed at how detailed a model I have of the behavior of the code I am working with.
Could you unpack that for me?
Sure. The book is a sort of resource for learning the programming language Scheme, where the authors will present an illustrative piece of code and discuss different aspects of its behavior in the form of a question-and-answer dialogue with the reader.
In this case, the authors are discussing how to perform numerical comparisons using only a simple set of basic procedures, and they’ve come up with a method that has a subtle error. The lines above encourage the reader to figure out if and why it’s an error.
With computers, it’s really easy to just have a half-baked idea, twiddle some bits, and watch things change, but sometimes the surface appearance of a change is not the whole story. Remembering to “think first, then try” helps me maintain the right discipline for really understanding what’s going on in complex systems. Thinking first about my mental model of a situation prompts questions like this:
Does my model explain the whole thing?
What would I expect to see if my model is accurate? Can I verify that I see those things?
Does my model make useful predictions about future behavior? Can I test that now, or make sure that when it happens, I gather the data I need to confirm it?
It’s harder psychologically (and maybe too late) to ask those questions in retrospect if you try first, and then think, and if you skip asking them, then you’ll suffer later.
You know, I’ve seen a lot on here about how programming relates to thinking relates to rationality. I wonder if it’d be worth trying and where/how I might get started.
It’s certainly at least worth trying, since among things to learn it may be both unusually instructive and unusually useful. Here’s the big list of LW recommendations.
Khan Academy has a programming course? I might try it.
Mostly, I want the easiest, most handholdy experience possible. Baby talk if necessary. Every experience informs me that programming is hard.
This is the easiest, most handholdy experience possible: http://learnpythonthehardway.org/book/
A coworker of mine who didn’t know any programming, and who probably isn’t smarter than you, enjoyed working through it and has learned a lot.
Programming is hard, but a lot of good things are hard.
The first trick is to be able to describe how to solve a problem; and then break that description down into the smallest possible units and write it out such that there’s absolutely no possibility of a misunderstanding, no matter what conditions occur.
Once you’ve got that done, it’s fairly easy to learn how to translate it into a programming language.
Which is also why it helps, conversely, for reduction and rational thinking: The same skill that applies to formulating clear programs applies to formulating clear algorithms and concepts in any format, including thought.
I would recommend trying, although I’m not really the right person to ask on starting points, if for no other reason than to test the hypothesis that learning programming aids the study of rationality.
This is a great reminder, and is not always easy advice to follow, especially if your edit-compile-run cycle tightens or collapses completely. I think there’s a tricky balance between understanding something explicitly, which you can only do by training your model by thinking carefully, and understanding something intuitively, which is made much easier with tools like the ones I linked.
Do you have a sense for which kind of understanding is more useful in practice? I suspect that when I design or debug software I am making heavier use of System 1 thinking than it seems, and I am often amazed at how detailed a model I have of the behavior of the code I am working with.
No, I don’t, which I realized after spending half an hour trying to compose a reply to this. Sorry.