池建强的公开课

讲讲咱互联网行业自己的故事

个人成长,观点,认知, 软技能

池建强 极客时间创始人、墨问西东创始人

第473期|梁士兴:学习编程,为什么我建议你一定要懂原理?

讲述:李佳 大小:7.42MB 时长:00:07:45
00:00
1.0×

你好,这里是卖桃者说。

我们之前在和一些用户交流的时候会发现,不少人带着满腔热血投入到编程学习中,但却苦于找不到适合自己的学习方法,学习进度缓慢,甚至会被复杂的理论知识给“劝退”。所以今天,我们就邀请到了美团研究员梁士兴,结合他的技术成长故事,和你聊聊关于编程学习的那些事儿。

梁士兴研究生毕业于北京航空航天大学,曾在 IBM 中国研发中心工作,2014 年加入美团,现任美团买菜的终端负责人,曾参与了美团大前端架构的演进过程。

对梁士兴来说,他的编程学习经历最早可以追溯至小学时期。那会儿他经常用小霸王学习机写代码,做一些简单的逻辑程序,比如出一些计算题,算完之后可以打分等等。在他看来,那个时期的编程学习其实玩的心态会多一些。

后来到了高中,真正拥有了属于自己的电脑之后,他开始系统地学习编程、参加信息学奥赛,并用 Visual Basic(VB)语言写了很多小工具。所以当年填报志愿的时候,他想都没想就选择了软件专业。

在梁士兴看来,编程是一门非常强调逻辑的学科,而且编程的思维模式也是强调因果关系和逻辑推理。比如,编程最基本的一个要求就是,你写的每一行代码都必须是可以解释的,不能说功能对了就行,你要清楚自己为什么这么写。如果你解释不通的话,那么它一定不是一个好代码。

2009 年,研究生毕业的梁士兴来到 IBM 中国研发中心工作,在那里,发生了一件对他职业生涯影响特别大的事情。当时,他还在 IBM 的 Lotus 部门工作,有一次,老板提出了个需求,想为 IBM 的 Office 格式开发一款手机阅读器,感兴趣的同事都可以来尝试下。他对这个项目非常感兴趣,利用业余时间完成了首个原型。于是他就这样阴差阳错地接触到了 iOS 开发,花大把的时间从 0 开始深入学习,并一直做到了现在。

现在再回过头看来,这是一次特别成功的专业调整,梁士兴也感慨道,这背后的关键就是“不要给自己设限”。一方面,时刻做好迎接新机会的准备,勇于尝试。另一方面,还是要多多培养自己的兴趣,当你对一件事物感兴趣的时候,学习的热情和积极性也会高一些。比如当时,他就基于自己的兴趣,利用业余时间在 Windows CE 上做了一款手机应用,这也为他后来转向 iOS 开发打下了基础。

在编程入门阶段学习中,兴趣二字也是非常重要的,尤其对于初学者来说更是如此。梁士兴认为,在编程入门阶段要以培养兴趣为主,比如,你可以利用编程来解决一些实际的问题,做一些有趣的小工具、小游戏等等。在这个阶段,你不需要把一些编程知识抠得特别深,如果一上来就深度钻研,会让自己产生特别大的学习压力,甚至会被枯燥的理论知识给劝退。

“如果反思大学的计算机教育,在这方面是值得改进的。典型的就是《计算机导论》这门课,按理来说这门课应该是帮大一新生入门的,但这门课程更像是一门劝退的课,它直接切入到了冯诺依曼结构,甚至还会用汇编语言来解释计算机执行程序的过程,可能你工作很多年都不会接触到这么深入的东西,完全不适合初学者去学习。”梁士兴也坦言,如果他在小学刚学习编程时,接触到的是这些枯燥的理论知识,那他大概率是学不下去的,未来也不大可能从事这个行业。相反,如果在早期阶段能够以培养兴趣为主,对于编程的入门学习会有非常大的帮助。

当然,这并不是说那些理论知识并不重要,只是说它们并不适合零基础的初学者。在梁士兴看来,如果你想深入地学习编程,想从事这个行业的话,一定要懂原理,一定要把大学课程里的那些理论知识深入研究明白。他甚至认为,判断一个人是否能做成技术专家,或者真正掌握一个东西,其中一个很重要的衡量标准就是看他是否真的理解技术背后的原理。每一个应用层的现象,都应该在原理层面有解释。这里的原理,通常对应为大学计算机课程中的操作系统、编译原理、数据库、计算机网络,等等。

至于为啥要懂原理,他是这么说的:“技术更迭飞快,可能今天还在用的某项技术,到了明天就没人用了,但有一样东西是不会变的,就是它们下面的原理。这些原理知识可以支撑你快速地做知识迁移。你在懂原理的前提下,可能只花几天时间就学会了一项新技能,不懂原理的话,花费的时间很可能是几个月,而且理解的深刻程度也是不一样的。

另一方面,当你懂了原理之后,对技术的理解和认知与原来也完全不是一个层次的。举个例子,如果你了解编译器,再去学习高级语言的话,那它在你眼里就不再是黑盒,你甚至可以去猜它背后是怎么实现的。”

从这个角度来看,大学书本里的那些原理知识非常重要,它能对你今后更深入的编程学习起到支撑作用,有这些原理基础,再去学习、理解应用层面的东西,效率也会非常地高。此外,这些原理知识也能帮助你增加技术判断力,支撑你更好地做技术选型。

除了培养兴趣和深入理解原理,编程学习还有一个非常重要的步骤是构建自己的知识体系,关于这一点,梁士兴也结合他的学习成长经历,分享了自己的一些经验。他认为,构建知识体系一个简单的方式是,先去网上找一些现成的知识图谱,挑和自己实际工作相关的那部分内容去逐个突破

刚开始的时候,要把深度和广度结合着去学习,既要保证自己能解决实际的问题,又要对不同的领域有一些基本的了解。之后,可以追求深度,在一个细分领域下做得更深入一些。

在梁士兴看来,技术的深度比广度更重要,深度可以支撑你成为技术专家,而广度其实够用就好。因为从大公司的角度来讲,分工会越来越细,这个时候专业人才会愈加凸显出他们的价值。即便你到了初创公司,前期什么都要会点,技术的广度一时占了上风,但当团队越来越成熟,技术越来越成熟时,也会逐步过渡到深度上去。

好,关于梁士兴的编程学习故事与经验,就先和你分享到这里,最后我们小结一下:

  • 编程学习,入门阶段要以培养兴趣为主,要利用编程来解决一些实际的问题;
  • 深入阶段,一定要懂原理,原理可以支撑你快速地做知识迁移;
  • 如果你想构建自己的知识体系,可以先从网上找一些知识图谱,前期将深度和广度结合着学,后期要在深度上下功夫。

最后做个小调查:关于编程学习,你认为最重要的是什么呢?欢迎在留言区一起交流。

卖桃者说,明天见。

(策划:夏天;编辑:夏天)