7 ms·
I think it's something a bit more basic - logic. Learning programming teaches logic, because the computer will find every logical shortcoming in what you tried
by tyrfing 12y ago
I think it's something a bit more basic - logic. Learning programming teaches logic, because the computer will find every logical shortcoming in what you tried to express.
Natural language is the bread and butter of our every day existence, and it is a veritable swiss cheese of logic. Most people won't hear your argument and notice the unfounded assumption that destroys the whole thing, but a compiler will. Most people won't notice if you leave some of what you say implicit, but your compiler will.
Something I've noticed over the years is that people, in general, are just not good at logic. Very few things teach it, the few that explicitly cover it like symbolic and formal logic classes are arcane, scary corners of the educational system. Logic doesn't win arguments, it doesn't get you laid, it generally doesn't help you interact with other people. It does teach you to think, but like deodorant, nobody knows they need it until they already have it.
So, start small. Teach logic, teach people to think, teach them the very fundamental underpinnings of programming. Programming is then just another way for people to express what they already know, like learning a foreign language rather than learning language in the first place.
I think most people saying "teach them to program!", at least the ones I've seen calling out the "it teaches you a new way to think" part, actually mean logic in general.
- TeMPOraL 12y agoI personally don't mean just logic when advocating that programming "teaches you a new way to think". Sure, there's logic. There's a skill of very precise and clear thinking on multiple levels of abstraction simultanously that you need to write code that works. But there is more! There's that feeling and understanding of basic units of computation. And I mean computation in the general, mathematical sense. Then there's the ability to express your will in terms of those computation units. And understanding how computation transforms information on an elemental level. This gives you new abilities - like, being able to automate a repetitive process. Or understanding how one thing can influence another via information. Or understanding what is feasible and what not based on computational complexity. For instance, it's hard to explain to non-programmers (and even some programmers!) just how much you can infer from information they leave on Facebook - because most people lack the neccessary mental models to even talk about it. And having them is increasingly important in comprehending the technological world around us.
- collyw 12y agoI think some people learn to think in a deeper more abstract way but many don't. My team leader always describes database results like an imperative program "if it has this show do this". I have to translate that into "return the set where this happens". We will debate database schemas, and I can see that one version is essentially a normalized version of the other option and a join will transform it into the same table . I think there are plenty of programmers who reach a basic level of understanding and no more. The one years experience 10 times type guy.
- TeMPOraL 12y agoIndeed. A lot of programming jobs don't really require you to grasp deeper and more abstract ways of thinking - you can just glue together some StackOverflow answers with latest JS framework and collect your paycheck. Not that there's anything wrong with that (I have some objections, but it's a topic for another discussions) - but it shows that just because someone knows how to code, doesn't mean he learns the important abstractions. As Bret Victor says, for "thinking the unthinkable", coding is a tool, not a goal.
- dasboth 12y agoThis is very true. Someone who builds websites/CRUD screens and someone who programs for NASA might both call themselves programmers but they are very different jobs. I'm fairly good at the first one, but I probably wouldn't know where to begin for the second.
- TeMPOraL 12y agoAnd even if you're working for NASA your job may not be inherently more difficult than CRUD, it's just different. Where I care about server latency, as NASA engineer you'll care about real-time guarantees. Where I care about UX, you'll care about code correctness, etc. Ability to comprehend abstractions is a bit orthogonal to all of this. It starts to shine when you need to architect a complex system or model some real-life phenomenon.
- TheOtherHobbes 12y agoThat's really an argument for teaching critical thinking, verbal reasoning, social presentation, and rhetoric, all of which are more useful in the real world than $programming_language, formal logic, or analytical modelling. The humanities have been hacking human minds for millennia. They've become so good at it it's possible to hack the beliefs of entire populations so subtly those populations don't notice they're being... modified. This might be more of an issue than knowing what xor does, or how to search a binary tree. >people, in general, are just not good at logic. No, people aren't. That's because people's brains are story machines, selected by evolution to work on quick-and-plausible heuristic arguments based on narrative relationships, and not on deep research and formal abstraction. I wouldn't be surprised if across the population as a whole, only some percentage - less than half, more than a third, maybe - is capable of non-trivial formal logic at all. Most people seem far more swayed and interested in by simple stories with an emotional punchline. The idea that you even can do formal modelling of the future is personally unfamiliar to them.
- TeMPOraL 12y ago> No, people aren't. That's because people's brains are story machines, selected by evolution to work on quick-and-plausible heuristic arguments based on narrative relationships, and not on deep research and formal abstraction. That, and the fact that logic itself is not the right tool to work with messy reality - probability theory is. And heuristics are part of this when probabilistic models meet limited computational resources and time constraints (you can't think too long about what's that yellow striped thing in the bushes, because you'll get eaten by it).
- deleted 12y ago[deleted]
- NobleLie 12y ago> The humanities have been hacking human minds for millennia. They've become so good at it it's possible to hack the beliefs of entire populations so subtly those populations don't notice they're being... modified. I had to chime in here and congratulate you on your fine explanation of the concept Plato deemed the Noble Lie. I don't want to assume you know of its but I'll go ahead and do so anyway, since you seem the type. For others, it's truly fascinating : https://en.wikipedia.org/wiki/Noble_lie https://en.wikipedia.org/wiki/Noble_lie Humans so readily eat them for breakfast, lunch, dinner and in our dreams. Not to say I am such a grand detective at the age of 23, but I feel as if the building software has taught me (and will continue to teach me,) many valuable logical lessons, which help me to methodically deconstruct things beyond programming (stories, my beliefs, other people's beliefs.) This would make sense since usual we build software by translating those things (stories and beliefs) into the fractal complexity necessary to achieve a real solution. I can't think of any better substitution than teaching logic through programming since I happen to agree with one of the parents in that pure logic in philosophy is slightly harder to pin down concretely for younger minds. They are also less apt to pick up on and find existential value in philosophy. In other words, I'm completely for programming literacy in middle, and high school. Especially for it's ineffectiveness with logic, but also to since they are just beginning to realize the complex programs in their very own mind (built by themselves... or others.) I'd want them (and everyone) to know how to deconstruct and find roots, reasons, and rationale.
- sergiosgc 12y agoPeople often confuse the mechanical learning of reading and writing, with the more advanced learning of how to write properly and how to analyze texts. Learning to write properly, learning to lay out one's argument, or story, in a solid, comprehensible and fun to read way is difficult. The learning process actually changes the student thought process, making it more structured and forcing a third-person view of the text. The same actually applies to programming. The mechanical task of programming isn't very difficult, and can be taught in a few dozen hours. The thought process that leads to solid programs, though, is akin to proper writing. It is hard, requires an even more structured approach to defining solutions, and actually changes one's approach to modelling reality in general. If we believe that a formal view of the world is a necessary skill (which I do), then teaching programming is as useful as teaching good writing. Note that I don't mean the basic skill of writing code, but the skill that is similar to good writing. Distinguishing the two is necessary for discussion. We can call it programming and software engineering, or programming and Programming (with a capital P), or something else. The rote task and the modelling task lead to different discussion paths.
- icebraining 12y agoI actually disagree. People have a pretty good grasp of basic logic. The issue is that when we say "computers are logical", what we really mean is that you need to treat computers like someone who is missing important parts of their brain. People are used to interact with other entities that can perform advanced logical inferences, deductions, etc in an intuitive way. They are at a loss when they're forced to dumb it down to "talk" to someone who needs to be told not to crash into the wall when being told to walk in a certain direction. Worse still, when people do understand that computers are really dumb, but actually good at following orders when you treat them like a mentally challenged toddler, they get stuck again when even that fails; when they encounter application after application that does not operate in any logical sense, because they aren't programmed by other computers, but by lazy/dumb/stressed/ignorant programmers like me. The best quote I read on this comes from this essay: http://stilldrinking.org/programming-sucks http://stilldrinking.org/programming-sucks "The only reason coders' computers work better than non-coders' computers is coders know computers are schizophrenic little children with auto-immune diseases and we don't beat them when they're bad."
- dasboth 12y agoIf you're using logic that assumes the entity you're interacting with "can perform advanced logical inferences, deductions, etc." but don't understand how to dumb it down for a computer, does that not mean that somewhere you don't have a grasp of something? What is that something, is it logic? I'm playing devil's advocate more than anything but I think being able to tell a computer step by step what to do requires logic, albeit perhaps a specific type of logic.
- NobleLie 12y agoIt's logical sentiments that have faded to the unconscious. If the society you are within has the same elements in their unconsciousness, information bandwidth to convey a message is reduced for all parties, with An unknown amount of subtle complexities (within messages) still successfully conveyed. This idea (amongst many other gems) comes from a great short book I just finished on cybernetics (old, old book) The Human Use of Human Beings (1950) by Norbert Weiner But I'm more on your side, only because I think we should be able to elaborate on the elements that faded to the unconscious, since if we cannot, we will not be able to apply the subtle rules in novel ways
- skywhopper 12y agoA compiler can only catch syntax errors (ie grammar). But just as a well-written essay can be based on false-premises, so a syntactically correct program can be full of bugs, particularly if the programmer had a faulty idea of what the problem was to begin with. Pure logic can only work correctly with reasonable premises. But it can't provide us with those premises. We can only construct, refine, and share those through natural language. To get back to the point of the OP, I think the underlying assumption that systematic modelling is the new literacy only makes sense if we assume the "old" literacy. In other words, the ability to model the real world only works if we can actually understand and communicate about that real world outside the models. Without the underlying meaning, the model is just a toy.
- _asummers 12y ago> Pure logic can only work correctly with reasonable premises. But it can't provide us with those premises. We can only construct, refine, and share those through natural language. Have you ever looked into formal verification or assisted theorem provers? There's a branch of math called "constructive mathematics" that utilizes them where formerly natural language would have been used, in an attempt to codify them and get productivity gains.
- virmundi 12y agoWhy teach these things with programming? Historically we, the west, have taught these things with philosophy. That's how we went from tribalism to democracy. Why not teach with philosophy? I know that we live in a technical world, but no matter what, we live in a philosophical world. Everyone deals with philosophy (either reflective or forced upon them) daily. How we work with each other might be via a keyboard and mouse, by why we work with each other is philosophical. It would be better to teach various systems of thought, allow a dialectic to occur, and get a better, more informed citizen.
- TeMPOraL 12y agoBecause philosophy is too imprecise. When you dig down to the most fundamental concepts of CS you end up in what is usually considered the territory of philosophers, only with a better mental toolkit to explore it. There is an interesting paper by Scott Aaronson about the intersection of those two disciplines and how the more CS-y approach can help solve philosophical problems: http://www.scottaaronson.com/papers/philos.pdf http://www.scottaaronson.com/papers/philos.pdf.
- parfe 12y agoHave you taken a philosophy department logic course? I learned way more useful logical thinking in philosophy classes. My CS classes didn't even come close. Sure I learned to make a mindless machine calculate the proper result, but that's far less important than reading the writing of another person an being able to understand their ideas.
- fnordfnordfnord 12y agoI think it is interesting to note here that there are a number of people who are well regarded as computer programmers who have degrees in philosophy. I wish I could remember who they were at the moment.
- scarecrowbob 12y ago
- mkr-hn 12y agoI've seen enough programmers with poor logic to think it's not an ideal way to teach logic.