All teachers of programming find that their results display a 'double hump'. It is as if there are two populations: those who can [program], and those who cannot [program], each with its own independent bell curve. Almost all research into programming teaching and learning have concentrated on teaching: change the language, change the application area, use an IDE and work on motivation. None of it works, and the double hump persists.
Quick takeaway from the above excerpt: The speculation is that whatever you do won't work if a person can't program to begin with.
To write a computer program you have to come to terms with this, to accept that whatever you might want the program to mean, the machine will blindly follow its meaningless rules and come to some meaningless conclusion. In the test the consistent group showed a pre-acceptance of this fact: they are capable of seeing mathematical calculation problems in terms of rules, and can follow those rules wheresoever they may lead. The inconsistent group, on the other hand, looks for meaning where it is not. The blank group knows that it is looking at meaninglessness, and refuses to deal with it.
My proposed tongue-in-cheek solution: Convert them to atheism/nihilism. That way, they won't try to look for meaning where it is not [sic] and perhaps then come to terms with binary.
Most people who don't think like geeks don't really WANT to think like geeks either.
But part of solving a problem is breaking it down into smaller parts, each of which is an easy problem to solve. If they can learn how to break up a problem into managable chunks, they'll be well on their way to at least improving some parts of solving a geek-like problems.
As for logic, remind them of the law of non-contradiction: A != !A. A thing cannot be true and false at the same time. We spend too much of our time not even trying to think straight.
I had flunked first semester programming about 3 times,then I tried an online course employing "programmed" learning methods in desperation.
It helped me get over the "hump" by helping me understand programming (I believe) by providing the context and motivations for some of the more common (really simple to you folks) programming logic constructs.
Hours of practice "running" toy programs on paper for different problems afterwards finally ended my absolute confusion on this subject matter.
The link to the free, CS intro course employing this programmed approach that I had used (while ditching my regular lecturer) is :
Still stumped though by exam level problems using stacks and queues and recursion (we used C in our courses but I think it didn't really matter in the final analysis).
In the end, I didn't bother with a CS major as I would have taken forever (probably 2 to 3 yrs more) given my skill level.
I should have paid attention to those puzzle books when I was little. I was more of a LEGO geek then :)
CS instructors (those who only talk and talk) need to be a little more patient, some of us folks aren't good verbal learners.
Parting thought, we all can't be be great writers, but that doesn't stop one from learning (or teaching one) how to write well. I think the same goes for computer programming in the information age.
People can always improve their problem solving ability with practice, but (imo) only to a degree. Some people will never think like that. They just weren't wired that way from birth. I don't think that we have a lot of control over our innate potential, just what we do with it.
I've found that if you keep thinking and are always trying to solve puzzles, even the stupid little ones, in a neat, interesting, optimized, huge, small, pretty much any way, then you keep yourself sharp. Also reading other's solutions help point out things that you would not have thought of which in the long run give you this "tool box" of methods that could be applied in similar or even dissimilar situations.
I doubt the wiring is genetic, its more likely to be socially imprinted upon the brain during childhood. Some children do puzzles and others don't, those that do many puzzles will be better prepared, but as Bill the Lizard mentions I think that anyone can re-train their brain to abstract puzzle solving.
I am not that good at logic, I once remember I had a problem where I wanted to remove something from an array, someone came and told me "why don't you just create a new one but excluding the items you want to remove?". I felt really ashamed, I mean, that solution is perfect, after all, every approach would need to iterate on every element, why not simply do that and copy these to a new array but excluding the unwanted ones?
But going back to the question, some of the things I recommend are:
Playing Chess (this really help you in life, if you play it frequently, you will automatically start to consider different alternatives to different problems and reduce them to the very best one)
Solving Sudokus (this is very good for deduction skills)
Another exercise that really improved my logic skills was to set an easy programming task, and then try to solve it in 3-5 different ways.
I would recommend this site to anyone that has an interest in the casual nature of language. The examples on the site for each kind of logical fallacy are for the most part very good and I guarantee you will learn something. Forward it along.
发布评论
评论(9)
codinghorror.com 上的相关文章:
将编程绵羊与非编程山羊分开
从上面的摘录中快速得出结论:推测是,如果一个人一开始就不会编程,那么无论你做什么都不会起作用。
我提出的半开玩笑的解决方案:将他们转变为无神论/虚无主义。 这样,他们就不会试图寻找非[原文如此]的含义,然后也许会接受二进制。
Related article on codinghorror.com:
Separating Programming Sheep from Non-Programming Goats
Quick takeaway from the above excerpt: The speculation is that whatever you do won't work if a person can't program to begin with.
My proposed tongue-in-cheek solution: Convert them to atheism/nihilism. That way, they won't try to look for meaning where it is not [sic] and perhaps then come to terms with binary.
大多数不像极客那样思考的人也不想像极客那样思考。
但解决问题的一部分是将其分解为更小的部分,每个部分都是一个容易解决的问题。 如果他们能够学习如何将问题分解为可管理的块,那么他们至少会在解决极客类问题的某些方面取得进展。
至于逻辑,提醒他们不矛盾律:A != !A。 一件事情不可能同时是真的和假的。 我们花了太多的时间甚至没有尝试去思考。
Most people who don't think like geeks don't really WANT to think like geeks either.
But part of solving a problem is breaking it down into smaller parts, each of which is an easy problem to solve. If they can learn how to break up a problem into managable chunks, they'll be well on their way to at least improving some parts of solving a geek-like problems.
As for logic, remind them of the law of non-contradiction: A != !A. A thing cannot be true and false at the same time. We spend too much of our time not even trying to think straight.
我向大多数非程序员推荐数独和 Brain Age 等游戏。
I recommend Sudoku and games like Brain Age for most non-programmers.
我第一学期的编程考试不及格了大约3次,然后我在绝望中尝试了采用“编程”学习方法的在线课程。
它通过为一些更常见的(对你们来说非常简单)编程逻辑结构提供上下文和动机,帮助我理解编程(我相信),从而帮助我克服了“困难”。
之后,针对不同问题在纸上“运行”玩具程序几个小时的练习终于结束了我对这个主题的绝对困惑。
使用我使用的这种编程方法(同时放弃我的常规讲师)的免费 CS 入门课程的链接是:
http://chortle.ccsu.edu/CS151/cs151java.html
仍然被使用堆栈、队列和递归的考试级别问题所困扰(我们在课程中使用了 C,但我认为它没有归根结底确实很重要)。
最后,我没有选择计算机科学专业,因为考虑到我的技术水平,我可能会花很长时间(可能还要花 2 到 3 年)。
我小时候就应该关注那些益智书。 那时我更像是一个乐高极客 :)
CS 教练(那些只会说啊说的人)需要多一点耐心,我们中的一些人并不是很好的语言学习者。
顺便说一句,我们都不能成为伟大的作家,但这并不妨碍人们学习(或教人)如何写好文章。 我认为信息时代的计算机编程也是如此。
I had flunked first semester programming about 3 times,then I tried an online course employing "programmed" learning methods in desperation.
It helped me get over the "hump" by helping me understand programming (I believe) by providing the context and motivations for some of the more common (really simple to you folks) programming logic constructs.
Hours of practice "running" toy programs on paper for different problems afterwards finally ended my absolute confusion on this subject matter.
The link to the free, CS intro course employing this programmed approach that I had used (while ditching my regular lecturer) is :
http://chortle.ccsu.edu/CS151/cs151java.html
Still stumped though by exam level problems using stacks and queues and recursion (we used C in our courses but I think it didn't really matter in the final analysis).
In the end, I didn't bother with a CS major as I would have taken forever (probably 2 to 3 yrs more) given my skill level.
I should have paid attention to those puzzle books when I was little. I was more of a LEGO geek then :)
CS instructors (those who only talk and talk) need to be a little more patient, some of us folks aren't good verbal learners.
Parting thought, we all can't be be great writers, but that doesn't stop one from learning (or teaching one) how to write well. I think the same goes for computer programming in the information age.
人们总是可以通过实践来提高解决问题的能力,但(我认为)只是在一定程度上。 有些人永远不会这么想。 他们只是从出生起就没有这样的习惯。 我认为我们对自己的内在潜力没有太多的控制权,只能控制我们如何利用它。
People can always improve their problem solving ability with practice, but (imo) only to a degree. Some people will never think like that. They just weren't wired that way from birth. I don't think that we have a lot of control over our innate potential, just what we do with it.
我发现,如果你不断思考并总是尝试以一种简洁、有趣、优化、大、小、几乎任何方式解决难题,即使是愚蠢的小难题,那么你就能保持敏锐。 另外,阅读其他人的解决方案有助于指出您不会想到的事情,从长远来看,这些事情会给您提供可以应用于类似甚至不同情况的方法“工具箱”。
I've found that if you keep thinking and are always trying to solve puzzles, even the stupid little ones, in a neat, interesting, optimized, huge, small, pretty much any way, then you keep yourself sharp. Also reading other's solutions help point out things that you would not have thought of which in the long run give you this "tool box" of methods that could be applied in similar or even dissimilar situations.
我怀疑这种线路是遗传的,它更有可能是在童年时期在大脑中留下的社会印记。 有些孩子会做谜题,有些则不会,那些做很多谜题的孩子会准备得更好,但正如蜥蜴比尔提到的,我认为任何人都可以重新训练他们的大脑来解决抽象谜题。
I doubt the wiring is genetic, its more likely to be socially imprinted upon the brain during childhood. Some children do puzzles and others don't, those that do many puzzles will be better prepared, but as Bill the Lizard mentions I think that anyone can re-train their brain to abstract puzzle solving.
我不太擅长逻辑,我曾经记得我遇到一个问题,我想从数组中删除一些东西,有人过来告诉我“为什么你不创建一个新的但排除你想要的项目删除?”。 我感到非常羞愧,我的意思是,这个解决方案是完美的,毕竟,每种方法都需要迭代每个元素,为什么不简单地这样做并将它们复制到新数组中,但排除不需要的元素呢?
但回到问题,我推荐的一些事情是:
另一个真正提高我逻辑技能的练习是设置一个简单的编程任务,并且然后尝试用 3-5 种不同的方法来解决它。
I am not that good at logic, I once remember I had a problem where I wanted to remove something from an array, someone came and told me "why don't you just create a new one but excluding the items you want to remove?". I felt really ashamed, I mean, that solution is perfect, after all, every approach would need to iterate on every element, why not simply do that and copy these to a new array but excluding the unwanted ones?
But going back to the question, some of the things I recommend are:
Another exercise that really improved my logic skills was to set an easy programming task, and then try to solve it in 3-5 different ways.
这是我在网络上发现的最好的逻辑谬误网站之一。
逻辑谬误
我会向任何对语言的随意性感兴趣的人推荐这个网站。 网站上针对每种逻辑谬误的示例大部分都非常好,我保证您会学到一些东西。 一起转发吧
核磁共振
This is one of the best logical fallacy sites I have found on the web.
Logical Fallacies
I would recommend this site to anyone that has an interest in the casual nature of language. The examples on the site for each kind of logical fallacy are for the most part very good and I guarantee you will learn something. Forward it along.
nmr