编程明明是程序员的工作,关学生什么事?

写在前面:

       我手里这个魔方,任何一个人都可以轻松地把它打乱,但要想把它复原,就不是每个人都能做到的了。我会还原魔方,而你不会,这能不能说明我比你聪明呢?并不能。

       还原一个三阶魔方是有特定的步骤的,目前最流行的还原方法叫 CFOP 法,就是先在底部完成一个十字(Cross),再分四组完成前两层(F2L),然后复原顶层块的颜色(OLL),最后复原顶层块的位置(PLL)。至于高阶魔方,则可以通过合并中心块和棱块把它变成一个三阶魔方,然后再用上面的方法复原。

       我会还原魔方,不过是因为我掌握了这套程序,而你还没有掌握,所以无法还原它,仅此而已。只要你愿意,完全可以通过各种渠道学到这套程序,把它装到你自己的脑子里,然后你就会还原魔方了。

Part.1

为什么要学习编程?

       编程的目的就是写出一个程序,那么我们就要先搞明白一个问题:啥是程序?

       程序,就是流程加顺序。以一首歌为例,歌词和乐谱其实都是程序,分别记录了歌曲的唱词和弹奏过程,音乐创作人把音乐写成歌词和乐谱,这就是程序。歌手按照歌词来唱,乐队根据乐谱来演奏,这就是在执行程序。而写歌词和记乐谱的过程,就是在编程。

       当你按照别人设计好的流程在一步一步执行时,你就是在被编程。比如我们参加一个旅游团,只能严格按照人家规定好的行程来,每一步都不能更改,这是被编程。只有当程序是我们自己设计的时,这才是在编程,比如计划一次自由行,详细安排出行计划中的每一步,先去哪后去哪,决定在哪吃、吃什么、住哪里,这就是编程。

       学习编程,就是为了让孩子们以后都能成为编程的人。

       有人问:程序我自己知道就行了,干嘛要写出来呢?

       首先,把程序写下来之后,你就不用再记忆整个流程中的全部细节了,只需要专注于执行。我们在学习一道新菜的做法时,都会先在网上或书本里找到食谱,然后照着流程一步步来做。只有非常熟悉的老手,才能只看一遍就掌握其中要点,然后不用看就能做。这样可以减轻我们大脑的压力,也会大大减少出错和遗忘的可能性。

       把程序写下来后还有个好处,就是你可以把这项原本需要自己完成的工作交给别人去做,从而把自己解放出来。我有个习惯,就是在每个岗位上都把自己的常规工作流程写成文档,随时可以交接给别人,可以让自己随时离开,而组织依然能正常运转。相反,很多人认为自己在一个岗位上是不可或缺的存在,这样就能说明自己很厉害。但我可不这么认为,如果这个岗位离了你就不转了,那么你不得累死?没人能接手你的工作,那你还有机会跳槽或升职么?

       人的价值,其实由他所掌握的程序决定。有的人装的程序多,有的人装得少;有的人装的程序高级,有的人装的程序低级。打个比方说,如果给你一台最新的顶配 iPhone,但不允许安装任何 APP,那这部手机就只能做类似打电话、发短信、看网页这样的简单功能,甚至还不如老式的功能机待机时间长、耐摔耐用,对吧?

       人是不可被复制的,但程序是可以被复制的。人是不靠谱的,而程序是靠谱的。人是不可改变的,但程序是可以改变的。如果一件事出了问题,找原因找到人头上,只能解决人,却不能解决问题。任何问题的根源都在程序上,只有修改了程序里的漏洞,才能真正解决问题。

       学习编程,就是要让孩子们理解上面这些道理。

       如果能把程序用机器能理解的语言写出来,就可以让机器去完成原本需要人去做的重复性工作,从而突破人类的体能极限,做到原本做不到的事情。

       再厉害的举重运动员,也不可能跟叉车比力气;再聪明的人类棋手,也不可能战胜充分训练过的人工智能。机器可以不吃不喝不睡 24 小时运转,不要工资不要福利不请假不偷懒不休息不发脾气,性能两三年就翻一倍,成本则降低一半,干活比人又快又便宜还靠谱。在跟机器竞争时,人类是永远处于劣势的。

       女性开始大规模进入社会工作有很多原因,而其中一个重要因素就是以洗衣机为代表的各种家用电器的普及,大大减轻了女性在家务劳动中所花的时间。中世纪一个典型的家庭妇女每天平均要花 4 个半小时在洗衣服上,正是洗衣机等电器的普及解放了女性的双手,这才让女性有足够的时间来投入工作。

       学习编程,就是要培养孩子们的计算思维,能发现哪些工作更适合让机器去做,也有能力写程序来完成这个任务。同样的事情如果能让机器做,就最好不要让人去做。即便只是把工作中的一部分交给机器,也能大大提升工作的效率并降低成本。

       有人又问:编程找专门的程序员不就行了吗?干嘛要让学生学呢?学编程能给孩子带来什么?

       要知道,我们正生活在一个即将、甚至已经由程序支配的世界。股票交易、地铁运行早已由程序接管,因为没有人能处理如此大的数据量,没有人能作出如此精准的操作,更没有人可以承担出错的责任;全自动流水线和机器人已经席卷全世界的制造工厂;我们每天拿出手机轻轻一点,百度地图就帮助你规划好了路线,QQ 音乐帮你识别出了马路上听到的音乐,今日头条推送了你最感兴趣的新闻,抖音刷出了你最爱看的视频……

       在电器时代来临之前,那怕是手表这样复杂的机械结构只要拆开了慢慢研究,总能明白其中的道理;像台灯和电风扇这样的简单电器,具备简单的初中物理学基础后,观察电路板也可以理解原理;然而在集成电路出现之后,就出现了一个不可观察的黑盒;互联网时代的软件和 APP,用户更是只能接触到操作交互界面,对界面后的服务器和运作逻辑完全一无所知;到了人工智能时代,我们会发现自己身边存在着无穷无尽的黑魔法,它们功能强大,简单易用……但是我们总是难以理解它们到底是怎么一回事。

       如果你不能理解这个世界,又谈何去改变世界呢?

       学习编程,就是要教孩子们更好地理解并改造我们生活在其中的这个世界,让他们能够在未来更好地生存下去。

Part.2

编程应该要学哪些东西?

       严格来说,编程只是计算机科学的一个分支罢了。其实全称应该叫计算机科学课。主要包括下面这三个方面的内容:

计算思维:解决问题、理解问题、创造(游戏、动画、工具……)

信息技术:原理探究、信息检索、具体使用

数字素养:数据思维(保存、分析、统计)、效率思维、安全意识(BUG、病毒、加密……)

       现在大多数信息技术课,其实是在培训学生使用几个典型的办公软件的使用,也就是 office 三件套、Flash、PS。说白了,就是把使用说明书往学生的脑子里装。然而,会按照教程使用软件,但并不理解其背后的原理,知其然不知其所以然!

       而学习编程则是要让学生明白:程序是怎么工作的?怎么编写程序来解决问题?程序出了问题怎么解决?

       在没有经验且找不到可用资料的情况下,学生应该能独立作出理性的判断,找到解决问题的方法。而不是凡事都要问百度,离开了网络什么都不会干。不是我们教给学生可以用什么工具通过什么步骤来解决问题,而是他在面对具体问题时会想到“有可能对应的工具”并有意识地去寻找。可以在一堆工具中进行选择,并能理解它们背后的基本原理,知道它们能做什么,不能做什么。当工具出问题时,有能力找到问题的原因并加以解决。在找到的工具不能满足需求的时候,有能力基于开源软件或通过插件和配置进行二次开发,并在必要的时候创造一个新的工具来完成任务……

       语言是死的,而思维是活的。在打好编程思维的基础,掌握了用搜索引擎查找资料、阅读官方文档、在社区求助的能力之后,就完全可以去自学任何一门编程语言。

       目前有不少编程课程,都把教学的重点放在了“记住解决这个问题的步骤”上,那么很可能最终学生记住了一堆题目的解法,但是遇到一个变种就不知道该怎么办了,因为他不知道这个解法是怎么得出来的,每个步骤为什么要这么做,而不能那么做。

       我认为更重要的是教给孩子们一套解决问题的方法论,也就是“解法”的解法,比如逐步 DEBUG(调试)找出程序的问题、通过“自底而上”“自顶向下”两种思路把大问题分解成小问题来解决……这些方法都可以用来解决任何领域的问题。

       未来需要的是拥抱变化、面向未来,能创造性地独立解决新的问题的人;只会按已有经验去解决旧问题的人,是没有竞争力的。我认为理想的编程学习 ,应该能培养出这样的人:

▏✪能系统性整理自己的逻辑,并有条理、无歧义地高效表达自己的想法;

▏✪能把一个复杂问题分解成简单的子问题,并分别解决;

▏✪能有效运用“试错、反思、迭代”循环,把失败与错误转化为成长的机会;

▏✪能认识到很多事不需要亲自去做,而是可以描述清楚之后交给别人去做;

▏✪能识别出哪些工作更适合由机器代替人来完成,并找出有效的解决方案;

▏✪能在不同的解决方案之间进行权衡,并找出最适合自己的那一种;

▏✪能理解日常所用软件和工具的基本原理,有能力判断它们能干什么、不能干什么。

       “我是一名从事了10年开发在退休边缘垂死挣扎的高龄程序员,最近我花了一些时间整理了一个完整的学习C语言、C++的路线,项目源码和工具。对于想学习C/C++的小伙伴而言,学习的氛围和志同道合的伙伴很重要,笔者推荐我专栏的C语言/C++编程爱好者的聚集地>>>C语言/C++进阶之路 - 专题 - !

       欢迎初学和进阶中的小伙伴。希望你也能凭自己的努力,成为下一个优秀的程序员。工作需要、感兴趣、为了入行、转行需要学习C/C++的伙伴可以一起学习!

       喜欢小编的记得动动您的小指点个关注哟!最后分享一张C/C++编程学习路线图给爱学习的小伙伴们~

你可能感兴趣的:(编程明明是程序员的工作,关学生什么事?)