学编程还是学计算机科学的思考方式?

Jul 28, 2017

Allen Downey在他的书Think python第一章就强调:此书目的是教你像计算科学家一样思考。什么是计算机科学家的思考方式?他举三个例子说明。1. 像数学家,用规范语言表达思想;2. 像工程师,组装系统权衡利弊;3. 像科学家,观察行为验证假设。我好奇,关于这个问题,其他人是怎么定义的呢?于是就Google了一下。不看不知道,一看吓一跳。不明觉厉,说的就是这种感觉。

信息话头

  1. 这里是wikipedia对computational thinking的定义。

    没细读,摘出那张太极图,贴在anki条目里了。

  2. 这里有给所有人的关于计算机化思考的pdf。

  3. Quora里还有人问:解决问题时,计算机科学家和计算机编程者有什么不同?回答有:

    • 计算机科学家不会暴力解决问题,或不满足于暴力解决。
    • 计算机科学家知道什么问题暂时不可解,而编程者会一直不放弃。
    • 编程者会很快鼓捣出来一段代码,帮助用户改善一部分生活。
    • 科学家关心算法的证明是不是优雅,而不是算法的实施是否漂亮。
  4. 我通读了这篇文章,Don’t Just Learn to Code, Learn How to Think Like a Computer Scientist,它讲清了to code和to think的关系,可以帮我面试的时候回答学习路径问题。里面关键文章的链接,也值得一看。

  5. Quora这个帖子里,有人问学了优雅的算法,觉得挺好,但是怎么能自己想到新的算法呢?问答质量超级高。

迎接挑战

今天我肤浅地通读了上面Quora帖子中,Sam King的回答。这里是它在个人博客里的复制:How to Think Like a Computer Scientist

他这个观点很触动我:与其要知道计算机科学家怎么想?不如迎接他们一样的挑战。

每一条挑战,都有比较具体的建议和窗口。

误导大众

Maybe Not Everybody Should Learn to Code这篇文章骂得好。

布什和奥巴马都跳出来鼓动:人人都要学编程。作为一个严肃程序员,Chase Felker表示担忧:那不是噩梦么。

有个比方挺有意思。你读了费曼的书,感到物理学好神奇,但是大多数人不会去努力成为物理学家。然而,在编程方面,从欣赏到实作之间的鸿沟可没有那么大。第一天上手python,就可以做出真正的东西。然后,教育步伐继续前进,你会看到几乎是一座“荒野西方世界”(查注:2007年开园两个月即关门至今)从文化和实体意义上都建起来了。

计算机领域,不像其他科学,它只认你的程序作品,而不是看你打扫的实验室的主任名气有多大。但是这种缺乏权威的状态,也让社会上任何人都可以自封为老师,向不知批判的学生散播没大意义的东西。据说在他们那里,已经有专家撰文出来抱怨,有些求职者,过高估计了他们的信用,所以面试就不拉家常,从难题问起,节省时间。这里的关键在于:他们不知道他们不知道,所以某种自信很容易获得。这篇2013年8月的文章说的就是当下我们的全栈营啊。

文末,他的建议是:你先有个主要问题要解决,而编程对此有帮助,因此来学编程。我们不需要每个人都能编程,我们需要每个人都会思考。

上下求索

YEVGENIY BRIKMAN的文章Don’t learn to code. Learn to think.好大气。

世界确实到处都是程序,将来真的是数据至上。你怕了?想跟上?先看看前面的路,又长又远。

什么是计算机科学?包含哪些方面?

什么是编程?学编程有什么好处?

我们要搞清楚编程和思考的区别,然后才能正确提出问题。

不是问:布隆伯格哪天一觉醒来会了java,对他那天当纽约市长的工作有什么帮助?

而是问:如果布隆伯格学了编程,并因此更有逻辑性,掌握了一种新的解决问题的策略,总之提高了思维水平,这会让他工作更出色吗?

答案是显然的。

怎么做?镇静镇静:路漫漫其修远兮,你需上下而求索。文末的课程和组织,都有很大影响力。而这些,我过去都没听说过,汗。

以上,2017-07-28更新。题目2017-07-26起头。