Now, I don't mean to say that I think that that way of thinking should only be expected of graduate students. I've heard enough to know that many people approach their class problems the same way: look at related things in notes or the book, ask classmates or the professor for help, and/or look on the internet for similar problems. Now, none of that is bad in general, but there seems to be such a significant focus on building off others' work or others' knowledge and applying the methods of others, so much so that I have to wonder if people forget how to solve problems from the problem itself. They'll say, "Movement in a network? Oh that's a network flow problem and there's all these methods to handle network flows," or "That problem is one of classifying, so I'm going to test out a bunch of different machine learning classifiers." That kind of approach will work, but if you go from the problem to an answer, rather than searching various answers to find one that applies to your problem, you can take more advantage of the things that make your problem unique.
The best example I can give for this off the top of my head comes from one of the games I made (the first one in this video). You maneuver a ball through a maze, but if the ball hits the wall, you lose. This means you have to have a way to test if the ball hits the wall. Now I knew nothing about collision detection theory and all its methods at the time, but I still had my own way of solving the problem. It wasn't until some people commented asking about how I did the collision detection that I realized that people had their common methods for doing collision detection, and mine was not one of those. Per-pixel collisions and line intersections were brought up. With a google search you could even find this (look at that second method). I can imagine people saying, "Well you have lines and you have a circle. Why wouldn't you use a circle-line intersection test? There's no need to solve the problem yourself or even write the code yourself, because you can use the code that's already been written." See, it's this kind of thinking that bugs me. If you've carefully considered your problem and come to the conclusion that some method is the best method you can come up with, then that's fine. But, if you just say, "Oh here's some method, it sounds like it works for my problem too, so why not go with it?" then you might be doing something unnecessarily complex or even something that doesn't actually solve your problem correctly. Back to this example, if I wanted to do circle-line intersection tests, I would have had to have written all the positions of all the lines in the level into the program, and then I'd have to go through all of the lines and check if they intersect with the ball. That was all much more work than I saw necessary. The way I actually did it was to say that the walls are distinguished from the path by the color of the background, so if the color behind the ball is black, you've collided with the wall. You can even write it in pseudo-code simple enough for non-coders to understand:
For each pixel in the ball:It's simple so it's easy to implement, and it's more efficient. And this is from someone who's never learned anything about collision detection. This is an example of how you can benefit by trying to create a solution to your specific problem, instead of taking other solutions and trying to apply them to your problem. Although it is the harder approach, when you can solve problems in this way, you can come up with better solutions.
If the background pixel behind it is black:
Then you hit the wall.
I believe that if you are strong enough at logic in general, then you can excel in all of science and mathematics. I say this because these subjects are based on rules or laws. With logic, you can go from the basic rules all the way to an answer to your problem, or you can create general rules from a bunch of observations. "Isn't that just inductive and deductive reasoning?" What are those? Oh- oh yeah, something like that. Anyway, rather than memorizing a bunch of smaller rules and methods, it's much more powerful to memorize the logic behind them, the logic that leads to the creation of these rules and methods.
This is what I believe schools should focus on. Learning should be less about memorizing what, and more about memorizing why. Maybe in the past, before the internet, it was much more important to memorize the whats. When the knowledge you needed to know could only be found in a bunch of obscure books, then it would be pretty useful to know that knowledge off the top of your head. But nowadays, if someone asks you for methods to solve a partial differential equation, you can find that information with a few taps on a smartphone. You hear it said that people don't remember stuff as well because you can just look it up on the internet, but I don't think it's as bad as people say. There's not as much benefit in memorizing facts and methods. This emphasizes the importance in understanding reasoning. Anyone can look up a method, but when you can understand why a method works, then you'll know how to use the method correctly, and when you can understand why the logic behind a methods works, you can develop the method yourself, and perhaps even change it to better solve the specific problems you face.
This is not just something that applies to knowledge in school or problems in math and science. These ideas extend to just about everything you know. What I want to say is that I believe rule-based knowledge is insufficient.
What do I mean by rule-based knowledge? I mean statements such as: when you encounter this kind of problem, use this kind of solution, or when you meet this kind of person, this is how you should act towards them, or you should never (or always) do this or that when you write programs or write a story or create a game, etc. These types of statements are almost never true all the time; they almost always have their exceptions. This is why I say that, more than just remembering the statement, it is also important to remember the reason why the statement is true or why you believe it. When you know the why, you can see the exceptions. As a student, it's always useful to learn the reasoning behind the rules, and as a teacher, it's always beneficial to teach the reasoning.
--------
Well now that's all good and well, but surely that's something that's, you know, pretty difficult for most people to do. I mean maybe it's something you can do, but you can't expect most people to just naturally see the logic behind everything they learn. And is that problem solving approach something that you can rely on? You say, "I'm going to solve the problem from the problem itself," but what if you can't find some easy answer? Even you can't provide a guarantee that you'll always be able to find a better answer, or even a good answer, to every problem by ignoring others' work and simply going from the problem to an answer. On the other hand, if you know a general method, you can say with confidence that you can solve every problem for which the method applies. Maybe there will be some times where it's not the best possible answer, but at least you have a solution that will work, one which someone else has already done all the work for. And what's so bad about rule-based knowledge? That sounds like an argument from someone who's afraid of being wrong. "Oh man, there's one case in a million when this rule doesn't hold, so you can't state it as a rule, you have to say, 'Well it's not always true.'" Surely you would be aware of the fact that plenty of people see nothing wrong with stating something as a fact even though it's only true 99.9% of the time.
I'm sure it is difficult for most people, but I don't think that's a good enough reason not to try for it. As for going from the problem to an answer, sure, it's not something you should use exclusively. But neither is it something you should overlook completely. When you're trying to find your own specific answer to your specific problem, it doesn't mean that you have to ignore the fact that a general solution may already exist. If you can't find a better answer, you can always fall back to that general solution. As for rule-based knowledge, how are you going to know that a statement is true 99.9% of the time if you don't know the reasoning behind the statement? I mean, you might think, "Well everyone I know thinks like this," and assume everyone else in the world thinks the same, even though it may just be because the people you know all grew up in the same conditions or were taught by the same teacher or share the same interests. But putting that aside, there's more benefits to learning the reasoning behind the rules. See, the world is always changing. Technology is always improving. The changes mean that rules of the past will often become outdated. The question is: are you going to be someone who can see when the old rules no longer hold, or are you going to stick with outdated methods because you can't understand why the new ones are better? And to add to that, as I said before, anyone can go on the internet and find information about how to solve most problems. You can distinguish yourself from everyone else by saying, "I know why you do this, I know why it works, and because of that, I can use these methods correctly, and I can also create my own solutions."
...
...
...
...
Interesting, I think this is the first time I've agreed with everything you said. Not that I think you're ever wrong, per se, because I think it always boils down to a philosophical difference. Two conclusions from the same data set.
ReplyDeleteYou've reminded me why I love coding, but why I hate doing it with (most) anyone else. Coding is such an amazing sandbox for problem-solving. You're given a problem, a vague description of some output you need to reach given some possible inputs, and you need to connect them somehow. The only way to do it is with logic. You can rarely apply anything other people have done, or even things you've done in the past, to each new problem. But if you understand exactly what you're trying to do, the solution is usually very clear. Contrary to what most people seem to think, there's very little technical work to do with code. Syntax is basically like grammar in language or notation in music, and it's easy to remember once you know it. Specific libraries or classes you can use are like pulling words out of a dictionary. As long as you have context, it's trivial to find the tools for what you need.
You're spot on with the observation that "why" is always more useful than "what" or "how." I'm pretty disappointed to see how rare this perspective is, even at a place like Mines. It's unbelievably frustrating to see Physics I students, semester after semester, applying random, completely inapplicable strategies to problems they haven't seen before, just because "well that other problem had blocks and pulleys too." And in CS courses, even higher level ones, I'm still seeing people vainly trying to Google magic canned solutions to extremely specific problems, copy/pasting vaguely related bits of code (and often even forgetting to rename the variables to match their own). When I have to work on a coding project with a team, it seems like I'm always trying to work with someone else's sloppy code (often copied straight off the lecture notes) without straight-up telling them it's garbage. And when illogically written code coincidentally works for the single scenario we test, everyone seems so eager to forget about it and move on, even though it will almost certainly break things in the future. These are the people who will supposedly be designing the buildings and software of tomorrow. That seriously worries me.
You also mentioned another interesting point - "rule-based knowledge." Specifically, rules/laws to follow. As you might know, the testing environment restrictions for Physics I/II got a lot stricter a couple years ago. Students aren't allowed to have anything electronic on their person (even car keys and watches), and they need a (same-gender) TA to escort them to the bathroom if they need to use it. I think it's pretty ridiculous, but I guess there's a history of cheating. I remember once a fellow TA demanded a student turn in his (analog) watch before a test. When I asked her why, she proudly stated that it was "because those are the rules, and I will follow them to the letter." Seriously? Do you expect a student to cheat with his freaking $10 analog watch? The point of that rule is to prevent cheating, which is more likely with digital watches. If you really want to prevent him from cheating, you may as well tell him to take off his pants, because he might have notes in his pockets. I pointed out it's much more intelligent to maintain the reasoning behind the rules instead of blindly following them regardless (what she's, you know, supposedly been teaching the students herself). I don't think she particularly appreciated that comment.