4 ms·
Maybe. Maybe not. I am coming to believe that computational thinking != mathematical thinking. I'm able to reason logically in code because I'm able to reason
by igravious 10y ago
Maybe. Maybe not.
I am coming to believe that computational thinking != mathematical thinking.
I'm able to reason logically in code because I'm able to reason logically about things in the real world and natural language supports that. I was able to code (early teens) and think computationally long before I ever knew there was such a thing as formal logic and truth tables and all that.
And let's consider names. In Ruby I knew what the module Enumerable did before I ever read the docs. Monoid? I don't think so. And I have some math background. What about all the potentially very talented programmers that have a non-math background? I don't buy that we need the beginnings of 3rd-level math to be decent programmers. In fact, I'll go further. I think think that the programming landscape is too math-oriented. I know someone who had a curiosity about recursion so I started explaining the concept via factorials as one does. Said person gets little panic attack. Our default explanations oughtn't involve math. Our names should avoid high-level math concepts divorced from everyday speech and concepts. By all means use aliases if you want but give the rest of us something to hang our conceptual hats on.
- cantankerous 10y agoWithout formal methods and math, what does programming do to reason about the mounting complexity of modern systems?
- catnaroek 10y agoTDD obviously. :-p
- igravious 10y agoBetter building blocks. Better programming tools. Understanding the craft of software engineering better. To use a lever do I have to understand physics?
- pka 10y agoIf you are building a bridge or a skyscraper, yes, you absolutely do. If you are building a house for your dog, then no.
- neukoelln 10y ago> What about all the potentially very talented programmers that have a non-math background? If they don't know what something means, they can educate themselves. I learned about monoids in my first course in linear algebra at the university in the first month. My math background at that point was "finished highschool". Just because it has a name that does not appear in everyday language (unlike enumerable) it does not mean the concept is difficult to grasp.
- igravious 10y ago> I learned about monoids in my first course in linear algebra at the university in the first month. You just proved my point.
- Wyverald 10y agoI think you missed his, though -- which was that any person with a high-school math background can easily grasp the concept of monoids with just a tiny bit of effort.
- igravious 10y agoI see what you mean, but what I meant is that either we get much better at explaining math or we exclude a good portion of our population from being able to program. If you respond with "all you need is high-school math plus more math in college" you're missing my point! I'm not in any way anti-math.† Imagine that monads were a part of Scratch (the children's programming environment), and I was trying to explain them to my young daughter. If she couldn't get it should I say to her, "this is only high-school math plus a bit more, come on, don't use the fact that you're 11 as an excuse". The other day somebody pointed out that in Tufts they have shown that children as young as five can think computationally. This is the level I'm talking about. I'm talking about being able to teach programming to people who are normally (for whatever reason) math-phobic. († I took three years of 3rd-level math.)
- catnaroek 10y ago
- catnaroek 10y ago> I am coming to believe that computational thinking != mathematical thinking. How exactly are you defining “computational thinking”? Is it “running the calculation yourself, as if you were the computer”? “Putting yourself in the computer's shoes”? “Empathizing with the computer”? > And let's consider names. In Ruby I knew what the module Enumerable did before I ever read the docs. Monoid? I don't think so. Every technical discipline has a jargon, precisely because their practitioners need to express ideas that can't be conveyed using only everyday language. Programming is not an exception. And you picked a particularly bad example, because, while there exist mathematical objects whose definitions are very obscure and hard to get an intuition for, monoids aren't among them. > I know someone who had a curiosity about recursion so I started explaining the concept via factorials as one does. Recursion is just self-reference. For example, you could've told said person “your ancestors are your parents and their ancestors” - a perfectly good example of a recursive definition.
- igravious 10y agoI'm not against all jargon, I'm advocating for less mathematical jargon and more ordinary language jargon. If I didn't know about functions your explanation of “your ancestors are your parents and their ancestors” would give me some insight into the nature of recursion but not a whole lot.
- catnaroek 10y ago> and more ordinary language jargon. This is a contradiction in terms. By definition, jargon isn't ordinary language. It consists of words that either don't exist in ordinary language (e.g., “metaobject”), or whose technical meaning is different from the ordinary one (e.g., “kind”). > If I didn't know about functions Are you talking about mathematical functions or procedures in computer programming? If the latter, I insist: recursion is not limited to procedures, it can be any form of self-reference. For example: (0) A list is either empty, or has a first element and a tail list. (1) A binomial tree of rank r has a root element and, for every 0 <= q < r, a child tree of rank q. (2) The sum of a list of numbers is 0 if the list is empty, otherwise it's the first element plus the sum of the rest. In fact, one of the major lessons of functional programming is that recursive procedures are naturally defined on recursive data structures - they always go hand in hand. > your explanation of “your ancestors are your parents and their ancestors” would give me some insight into the nature of recursion but not a whole lot. It wasn't an “explanation”, just an example. But if you think a transitive closure (namely, of the parenthood relation) isn't a good example of recursion, arguably you don't understand recursion.