和你一起终身成长,这里是曼巴笔记!
昨天意外发现一种情况:编程时,假如你上一步代码输入正确,哪怕你下一步代码编译不当,但只要这些代码有意义,能被识别,系统就不会提示错误,会正常运行这道程序。比如,在运行for循环语句时,下一行的print需要空格,才能正常运行。假如你只循环一次,忘记在print之前加空格,那么程序会提示错误,但如果你是运行多个循环,那么只要你第一次输入print时空格,下一行的print忘记空格,只要这一行的代码没错,能被系统识别,系统就会运行,但不会运行循环,导致最终结果和预期不同。这让我很惊讶,昨天之前我还一直觉得计算机程序不会出错,会发现所有错误。这个经历告诉我,再严谨的程序也会存在疏漏,计算机程序不是程序员肚子里的蛔虫,无法理解人的全部想法,Ta只能通过代码判别错误与否。如果错误本身符合规则哪怕实际是"错"的,也会运行,导致后续重复出现更多类似错误。这让我深受触动。
通常情况下,我们做完一项工作,都会反复检查,为提高效率,往往会优先检查那些常犯的错误,如果没有发现这类错误,大概率不会出问题,我们的检查就会终止,但事后往往会出现一些意外情况,增加我们的工作负担。比如,编译代码时,一般人不会想到是自己少按一下空格,因为这就是大拇指动一下的事,自己肯定不会犯这种低级错误,所以会优先检查其它错误。找了半天,发现都没有错误,才可能意识到是这类小错误,但已经浪费不少时间。记得昨天自己学习for循环时,一开始都会忘记空格,自己优先想到的是代码输入错误,于是重新输入代码,结果花费十几分钟才意识到是可能是空格的问题,要知道我每天学习编程的时间只有一个小时,这让我痛心不已。
与此同时,我也意识到,这十几分钟花得不冤,这个错误让我明白:失败往往来源于一些微不足道的小问题。华尔街曾经有一家巨头公司,由于操作员发送信息时漏了一台计算机,导致信息未能及时发送,最终公司损失了几十亿。现在我还只是一名初学者,错误的代价无非是让我付出更多时间,但假如我是一名工程师,忽视这类错误,可能会让我面临不可挽回的局面。
通过这件事,我得到一个教训——没有错误不代表一定正确。上文提到,后续的代码都没有错误,但实际和我的初衷已经背离,所以结果就只能呵呵。成人社会都喜欢讲究得失,不论对错,习惯于用得失去评判任何事。因此,多数人的标准是:读书短期内无法受益,因而不值得去读,这件事并没有错。但等到真正需要的时候,他们才会发现这时除了感叹“书到用时方恨少”之外,只能跺脚。至今我依然后悔大学毕业以后把所有书论斤卖掉,当时觉得这是它们唯一的价值,这样做并没有错,但现在每次想起都痛心不已,忍不住跺脚。
最后,我觉得不能过分相信他人或者依赖他物,要学会靠自己。上面错误的产生,也是因为我过分相信程序,太依赖程序的辩错功能,我觉得Ta很严谨,不会出错,基于这份信任和依赖,使我忽略一些细节。许多学生一开始都会抱怨,每次遇到不懂的问题,去请教老师,老师总喜欢引导自己思考,却从来不愿意直接告诉自己答案,让自己照着抄,相比于前者,后者不是容易的多?那样自己也能有更多的时间玩耍,老师也更加省事不是?直到考试时,他们才能才能真正体会到这种教学的好处,庆幸自己没有把心理的抱怨说出来,庆幸自己有一个好老师,因而自己从老师那里学到的是方法而非答案,也没有因此形成不思考的习惯。现实中总有一些孩子是不幸的,因为他们身边总会存在一些人,看到他抓耳挠腮地想5+6等于几的时候,总忍不住告诉他答案,但就是这份冲动,直接断绝了他独立思考的可能,也比他人少了一分学习的乐趣,因为自己吃苹果和看着他人吃苹果然后告诉自己很好吃,感受是不一样的,前者是享受而后者是折磨。包括很多小孩学走路,家长如果能够“狠心”,在孩子摔倒时,鼓励他们自己站起来,而非第一时间过去扶,往往孩子能够学得更快。而多数情况是,一看到孩子因摔倒而哭闹,家长都会第一时间过去扶,慢慢地孩子就形成依赖,只要摔倒第一时间就开始哭闹,因为总会有人过来。长大了遇到问题也是如此,小时的经历告诉他们“会哭的娃有奶喝”,遇到问题就哭闹,从未想过自己解决,慢慢地就变成了永远长不大的“巨婴”。
题图摄影:Tumisu
题图授权基于:CCO协议
【惊喜一刻】
第一次尝试隔天修改文章,发现了很多不足之处,也体会到诸多惊喜,当然也忍不住吐槽——昨天的自己咋就这么笨,这大概就是成长的喜悦吧!(PS:如果你不满意现在的自己,不妨抽时间想想之前的自己,相信你会有惊喜。)
网友评论