“编程一点都不难,它只是和你十几年来在学校受的教育格格不入而已。”第一次看到这句话,是在知乎问题“编程究竟难在哪里?”里一位名叫
invalids的高赞回答。与也是这两年才开始半路学编程的我,所感所悟不谋而合。所以今天站在前人的肩膀上,我想和大家好好聊聊“编程究竟难在哪?”这件事。一、难在我们从未接受过解决问题的训练
从小到大,我们受到的教育终极目的是有一个:考取理想的学校。每一张张考卷都是一个个堆砌起来的知识点:三角函数,解析几何,数列,函数………
这么多知识点,你需要做的是背下它们,或者说得更高级一点,理解它们。
即便是强调思辨和分析的“文科类”,也可以靠死记硬背答题模板拿分,就连作文都要有统一的标准。
Java开发我记得有一年考试,题目是对冰心的一首小诗写评论:
“墙角的花,当你孤芳自赏的时候,世界就变小了。”
出题老师原意是让大家批判孤芳自赏,但有同学偏偏赞美孤芳自赏,赞美这种洁身自好的精神。而这种文章要一律判作不及格。
年纪尚小的我们甚至都来不及怀疑“为什么这个学生说得没有道理?为什么所有的人都只能有一样的价值观呢?”因为千万军挤独木桥,保险起见的我们只需要按照所理解下来的知识,将一块块碎片,根据正确而万能的模板拼好,才容易拿下满分。
我们非常擅长理解和记忆,并井井有条地套公式。
这一切,到了学编程这里,统统不奏效。
我大一的时候刚开始接触C语言,非常痛苦。那会儿,没有任何计算机基础,编程语法大多靠背——C++语法、操作系统各项定义、计算机网络各种协议、常量、作用域、多态……
身边不少同学也这样,“高考精神”还深深印烙在骨子里,我们都认为学习一门编程语言最重要的就是掌握其语法,所以为了将语法烂熟于心,最直接的方法就是记忆。
结果可想而知,即便拿了相应的学分,没有人敢说自己会编程。
我们接受了十几年的应试教育,为了最大化公平,考试必须有一套清晰的标准。正是如此,我们更看中重应试技巧而非知识本身,学习变成了追求标准答案,求知变成了死记硬背。
绝大部分人,难以形成系统的学习方法论的意识,以至于很多人一旦脱离试卷,在社会中面对实际问题的时候,完全没有一套行之有效的方法论支撑其解决问题。
而编程的核心,不是编程,不是语法,甚至不是算法或数据结构本身,恰恰是如何分解问题——发现规律建立解决问题模型,映射到合适的数据结构和算法上,最后才根据算法写程序实现。
基于此,卡耐基梅隆大学计算机的一名华裔教授提出「编程思维」这个概念。
他定义编程思维——能够把现实生活中的复杂问题,逐步拆分成可理解的小问题。
1、De