编程学的是什么?
当你的朋友知道你会编程后,最可能会问到你的三个问题,
1、你会修电脑吗?
2、学编程是不是必须英语好?
3、学编程是不是必须数学好?
回答,
1、你每天用的电脑主要分为两个部分。一种是你看的见摸得着的,叫硬件,例如手机,主机,显示屏,键盘和鼠标。另一种是你电脑中运行的程序,叫软件,例如微信,Office,360和IE。
编程就是利用一种计算机语言开发出一种软件,帮助你解决问题。因此你的硬件坏了他不一定会修,不是他开发的软件出问题,他也无能为力。当然,大部分懂编程的人,利用google也能解决大部分电脑问题。
2、世界上有多种不同的编程语言,就像世界上有多种不同的人类语言,类似于英语、日语、韩语,这些人类语言的作用是进行人与人之间的交流,编程语言的作用就是进行人与计算机之间的交流。
学习一门编程言语就像是学习一门外语,你需要学习它的语法规则,记住他的单词(计算机术语叫关键字或者标识符)。编程语言需要记住的单词比人类语言的少很多,例如我使用时间最长的Java语言,总共只有50多个单词,而真正常用的只有十几个。
只是碰巧主要发明计算机和编程语言的大都不是中国人而是美国人,英文就成为他们最好的选择。与学习人类语言需要背几千个单词相比,学习编程语言需要背的单词可以忽略不计。但是英文好确实可以帮助你学习的更好,这个问题不光是学习编程,因为科技方面最新的资料大都是英文的。
3、这个问题就有点像是在问去超市做收银员是不是必须数学好。做超市的收银员你必须懂如何结账,但是不需要你自己拿着纸笔去计算。
那么,编程学的是什么?
编程学的,是一种解决问题的思考方式。
其中,最核心是两种思维方式。
第一,分解问题。
在你遇到一个解决不了的大问题时,可以将它分解成若干个小问题,如果这些小问题依旧无法解决,还可以继续分解成若干个更小的问题,直到不需要分解你就可以解决它。
这就好比一个人问你,如何将一头大象放进冰箱?
你可以把这个大问题分解成三个小问题,第一步,如何打开冰箱门?第二步,如何把大象装进去?第三步,如何关上冰箱门?第一步的小问题你还可以进一步考虑,是否冰箱门上有锁,如何打开锁?第二步的问题也可以进一步考虑,是用人抬进去还是用车拉进去?
第二,归纳总结。
在你解决问题的过程中,你会发现有很多问题的解决方式是一样的,这时你可以将它变成一个通用的方法,再遇到类似的问题,你就能拿来直接使用。
当你解决如何将大象放进冰箱之后,有人再问你如何将小狗放进笼子里,你同样可以利用放大象的三个步骤来完成,只是大象换成了小狗,冰箱换成了笼子。
除了解决问题的方式可以重复使用,问题中描述的对象也可以归纳成一个抽象的对象来重复使用。不同的问题对象,只是其中的某些属性和状态发生了改变。
例如,前面的两个问题可以归纳为,如何将一个动物装进一个物体中?当你再遇到一个新问题,如何将一个蛋糕装进一个盒子里?又可以将刚刚的问题归纳为,如何将一个物体装进另一个物体中?如果需要装的物体不再是一个,那又可以变成,如何将多个物体装进另一个物体中?
不管被装的是大象、小狗还是蛋糕,不管装他们的是冰箱、笼子还是盒子,不同的只是它们的大小、重量或者数量这些具体的属性和参数。
在编程中对上面说的归纳总结有一个专有名词,叫抽象,就是指从具体问题中,提取出具有共性的模式,再使用通用的解决方法加以处理。
听到这里,如果你是一个熟悉数学的人,一定会觉得学编程和学数学很相似,分解问题就像是解题步骤,归纳总结就像是抽象的数学公式。实际上,这两者学习的都是逻辑推理中的归纳和演绎。
除了相似,学编程和学数学有什么不同?
当你在学习数学的过程中,除了学习逻辑推理能力,还有另外一种能力占据了你学习的绝大部分时间,那就是学习计算能力。
从小学的个位数加减法、九九乘法口诀表,到大学的矩阵运算、微积分,你需要花大量的时间来练习如何计算,随着计算难度的增加,计算的精准度必然会降低,时间会变长。
这就像是,你为了毕业之后能比别人走的更远跑的更快,每天不断练习跑步,短跑长跑接力跑,获得各种比赛的奖牌。到了毕业那天,当你走出校园突然发现,原来外面没有人在跑步,所有人都是在开车。
那应该如何去解决计算问题?
答案是使用计算机,因为计算机最初就是一种为了弥补人计算能力差而发明的工具,作用类似于中国古代的算盘,不过速度更快,精确度更高。你学会使用计算机,也就是学会使用工具,通过工具再来帮助自己解决遇到的问题。
可当你遇到的问题没有现成的工具时,你应该怎么办?
答案是,通过编程来自己创造工具,这也是学习编程和学习数学另一个最大的区别。编程不仅仅是一种学习逻辑思维的方式,还是一种创造工具,表达自我的方式。
另外,还有一种非常好的能够帮助你梳理问题的工具,思维导图。通过思维导图梳理出的逻辑步骤,就相当于编程过程中所写的伪代码。
学编程的过程中,除了可以学习上面说的两种思维方式之外,还会学到另外一种重要的能力,错误调试(Debug)。
在你真正去解决一个问题时,无论你自认为自己的解决方案有多完美,99%的可能性都会出现预料之外的情况。可以说,编程的过程基本就是错误调试的过程,你通过不断运行程序得到反馈,再一点一点修正它,直到最终的结果完全符合自己的预期。
错误调试就像是费曼学习法,既简单又高效,通过不管输出,来发现自己的认知不足,从而不断的改进自己。这也像是生物进化的过程,遗传和试错。
除了上面说到内容,还在B站上发现两个不错的视频,解释了编程学什么。


不光少儿应该学编程,实际上所有的脑力劳动者都应该学编程,原因很简单,通过编程解放脑力,提高生产力。
少儿编程和其他培训一样,很难在短期内看到成效,为了满足家长的获得感,可能就不再以训练思维为目标,而是让你学会复制粘贴,立马就可以做出成果,缺少了中间最重要的思考过程。
这就像是,想要获得高分,最快速最有效的方式是,自己出题、自己考试、自己评卷,学会了这三点,你也就学会了招投标的所有内容。
这周有一个朋友给我发来一篇过去推送的文章和上周推送的图片,告诉我不能用图片来糊弄人,要坚持像以前一样写一些有思考有深度的文章(糊弄是有,但图片本身思考和深度也是具备的,只是太抽象了,只有我自己能够理解)。
接受她的批评,所以写了今天这篇文章。这也是我想了很久的一个问题,学编程究竟应该学什么?虽然答案到目前还没有完全想清楚,至少有了一个框架,现在需要往里面填内容,然后再不断试错,根据反馈进行改进。因此,也决定试着做一套Scratch的视频教程,到时欢迎大家提出各种意见,帮助我改进,因为教育从来都不是一个人的事。
我独自渐行渐远,膝下多了个少年
少年一天天长大,有一天要离开家
看他背影的成长,看他坚持与回望
我知道有一天,我会笑着对他说
生活不止眼前的苟且,还有诗和远方的田野
你赤手空拳来到人世间,为找到那片海不顾一切
0条留言