近期,ONES 得到 36 氪、21 世纪商业评论、创业邦、钛媒体等十几家权威媒体的认可,获授多项荣誉,亦被数家媒体评为「准独角兽」。
基于 ONES 突出的技术能力,12 月 22 日晚,面向 IT 领域的知识平台「极客时间」连线 ONES 联合创始人兼 CTO 冯斌,就「从一线工程师到准独角兽 CTO」的话题进行交流,尤其聚焦于终身学习的心法和方法。
以下是冯斌在直播中的部分内容。
锻炼基本功
在 2008 年大学毕业后,我进入金山软件工作。有一段时间,我的技术栈主要在 Java 这一层,都在做 Java 的后端,主要是和数据分析、自动化有关。当时在金山毒霸有一个内部创业项目,主要和手机端有关。我想体验移动互联网的新技术,于是我就参与,开始转向在安卓上开发,这款产品当时名叫「金山手机卫士」,主打和清理、系统优化相关的功能。
从 2008 年到 2011 年,在金山工作的三年里,我练就了很扎实的基本功。因为我当时主要用到的是 Java 这个语言,Java 的很多编程概念,让我学会怎样把事物分析清楚。而且,当时我身边的同事、导师,之前都是参与过 WPS 开发的,他们的 C++ 编程功底非常强,包括面向对象编程如何做抽象,如何隔离复杂度,等等。
我身边有这么强的技术人才,耳濡目染之下,我整个的编程习惯、对语言的理解、对技术的理解等方面都在那段时间打下了很好的基础。
甚至我后来做一些相关架构的时候,回头找到之前的同事,或者回想起来当时讨论到的很多观点,十几年过去了,依然找到很多闪光点和价值。
作为一线程序员而言,基本功的积累贯穿着职业生涯,我的基本功在那两三年里得到了快速积累,这对于后来的成长是非常重要的。
追求心流状态
工作了两三年之后,我遇上了学习的瓶颈期。在半年的时间里,我的技术好像都没有太多长进。这时候,我开始觉得必须要去定一个目标。这个目标,必须是可以分解、可以拆解的状态。
例如,如果想成为一名架构师,那么,成为架构师需要具备的能力拆分开来,会有八项,每一项里面可能又分为一些子项,这些子项可能最终会指向到一些文章,或者说某一本书、某一个内容某一个专栏。这么分解下来,这个目标才是一个可执行的状态。
定了目标后,我之所以能坚持下来,很多时候是因为兴趣。我觉得兴趣是可以被创造的,而这个创造的过程更多是一个寻找的过程。
当兴趣驱动的时候,你会忘掉时间,这个是一种心流的状态。当你忘掉了时间、饭也可以不吃,这个时候你是最能坚持的,注意力也是最集中的,所以,一定要找到进入自己心流状态的方法。
每一个人肯定都有这个状态,至少在打游戏的时候肯定是有的,不知不觉就已经到晚上了,是吧?那我们在工作、学习的时候,到底是哪些内容可以让我们进入心流状态,可能每个人都不一样,要寻找自己的心流状态。一旦有心流状态,就能坚持很长时间。目标的作用是让我们长远地去看,更多地向着相对正确的方向持续前进,但实现目标过程中的专注度要靠心流来解决。
往底层学习
当你熟悉一门技术后,并不是学习的结束,而是另一个开始。再锋利的武器也会随着时间逐渐钝化,具体到软件开发行业本身,每隔 7 到 8 年,软件工程师们面向的编程平台、对应的技术、硬件、用户的场景都会大不一样,每一个技术栈都有其擅长和局限的地方,具体流行的技术很可能会不断变化,这就是工程师们常说的「技术过期很快」、「需要不断学习」的直接原因。但当我们细细思考这些变化,有很多是几十年不变的底层逻辑,这些知识也叫「基本功」或「计算机基础」。
在十多年的工作经历中,在面试或培养团队时,我时常能听到这样的学习规划:“我现在对 A 语言比较熟悉了,我计划学习 B 语言,拓宽自己技术视野”。在我看来,这种做法比较低效,当你熟练掌握一门的技术后,接下来应该学习的只有两种知识:一种是能使你工作效率有明显提升的,例如从 Objective-C 到 Swift;另一种则是比当前层次更底层的知识,如使用了几十年的算法、网络协议、操作系统、数据库原理等基本功。而后者是你花费大部分时间的地方,因为应用层的具体细化一般是比较明确可现学现用。
如果你当前掌握的语言不是像 Javascript ES5 这类设计相对不完善的语言,那下一门最应该学习的语言,是 C/C++,不是为了学习其语法本身,是为了通过它了解计算机系统的底层设计。
计算机的底层知识之所以数十年不过时,是因为计算过程中需要解决的基本问题没有变化(在可遇见的未来,量子计算的场景可能会大幅度更新计算的底层方法),例如当大家深入学习内存并发模型和分布式系统时,会发现这与 CPU 多核协同的场景有很多类似的地方。
学习的三个阶段:守,破,离
当大概知道了某个领域的整体后,接下来是如何学习并内化为自己的能力,这也是我们常说的「学习能力」。「守破离」的概念源自日本剑道的学习方法,很好地总结了学习的一般规律。
守:模仿学习现有体系的具体做法。对于初学者,通过模仿现有体系、现有的成功经验,可快速提升能力,在这个过程中,心态要沉稳专注,先将自己心中新想法存下来,理解熟悉整个体系后再做创新。
破:根据实际情况在现在体系上做创新。这个阶段你已经对体系比较熟悉,也有足够的实践经验,越来越能理解体系背后的原理,这时根据实际场景,思考现有体系中的不足之处,并做出创新与改进,在我的日常工作中,常常会借用其他体系中的某些细节完善当前体系,不断尝试,获取反馈,积累新知识。
离:脱离形式,深刻理解底层原理,必要时开创新体系。对于不断变化的环境,现在体系的具体做法很难一直保持最好的效果,但其背后原理的保质期则长得多,就如同 Scrum 与敏捷原则,编程语言与编程范式等的关系一样。这时候可以将新的实践和现有的多种体系进行融合,变成新的体系。
从经验来看,我们经常遇到两种学习误区:要么一直停在「守」的阶段,要么是跳过了「守」的阶段,花很多时间在实践自己的想法,踩前人已经踩过的坑,而效果不好。
找到自己的 80 分
我将整个学习的过程中分成三个区。第一个区是「舒适区」,也就是我们已经懂了的部分内容,学习起来没难度;第二个区域叫「恐慌区」,学习的东西就像天书一样,难于上青天。这两个区都不是可以让我们收获知识的,我们一定要进入「学习区」里面。
那么,什么叫「学习区」呢?
打个比方,我给正在上小学的女儿一份卷子,如果她随时能做到 100 分,就会感觉很舒服,再让她做同一份卷子时,她会觉得无聊,就是所谓的「舒适区」了。
而如果我给她的那份卷子,她只能做 60 分,她会完全接受不了,这就让她进入了「恐慌区」。
所以,如果她的卷子得分是大概 80 来分,这个情况下,她是会愿意去看那些做错了的题目的。因为,大部分题她做得对,又有少量的是做错的,能鼓励她继续做好,这使得学习处于相对平衡的一个状态,可谓「学习区」。
所以,在学习的过程中,我觉得每个人要找到自己的 80 分。有些内容你看懂了,让你愿意看下去,然后同时你在看这个过程当中也能碰到一些陌生的东西,让自己钻研下去。
而且,要在自己的兴趣中找到「学习区」才能培养起来。这个过程是一边遇到挫折、一边受到鼓励的状态。举个例子,如果你觉得阅读《TCP/IP 详解》太难了,那不妨放一下,换一本《图解 TCP/IP》,里面的图很生动,可以帮助我们调整到「学习区」的状态。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。