程序员为什么要持续学习(升级版)

简介:

为什么要终身学习,持续学习? 

为什么要终身学习,持续学习?中国人有一句老话叫,活到老,学到老。大概是说总有新的知识产生,需要持续学习。回到大龄程序员焦虑这个话题,学习仍然是破解的不二法门。

我们来看对于程序员要求的一些变化。在小公司的时候,可能一个人就把页面、java和数据库都干了,100人的公司都未必有dba,运维的活也将就能干。随着业务规模的发展,问题域的复杂度几何级数增长,分工呈现精细化方向。干活一个前端、一个后端、一个测试,可能还有交互,不然开不了工。精细化分工的副作用开始显现了,分工鸿沟阻碍了效能。于是我们搞了全栈---基础前端工作,研发同学可以学习、质量保障是研发自己的事情。作为2年前的研发工程师和现在的,需要学习的内容广度不同了。随着业务数据化、数据业务化的发展,搞开发不掌握一点大数据甚至AI的基础,也很难适应时代的需要。综上述,学习是一种能力,知识是可迁移的。

再聊一点big的视角。这2年流行一个词,叫VUCA。大概是宝洁公司(Procter & Gamble)首席运营官罗伯特·麦克唐纳(Robert McDonald)借用一个军事术语来描述这一新的商业世界格局:“这是一个 VUCA 的世界。”VUCA 指的是不稳定(volatile)、不确定(uncertain)、复杂(complex)、模糊(ambiguous)。

VUCA 的状态是这个世界组成的常态。比如美军比较easy的干掉了萨达姆政权,结果美军在后面缺吃尽了苦头,美国的军队伤亡每天都在增加,恐怖分子,游击部队隐藏在街头巷尾,随时可以发起进攻。在这种情况下美军部队指挥官不得不重新反思和调整他们的指挥系统。美军的指挥官把他们的反思和“学习”总结到《赋能》这本书中,其中“有改进结构,打造灵活强大的团队”,突破深井信息共享等方法。打造灵活强大的团队就体现了小前台和大中台的思想。

7bb6760d91dc8af68a4ac9f2bbab9c6c9e278913

舒适区与小步子原则

我们习惯在舒适区是自然的,有励志书籍就讲了,要跳出舒适区,挑战自我。舒服不好么?知乎有不少讨论,其中一个回答比较中肯。

我们为什么想跳出舒服圈?因为我们想成长,成长的动机来源于自己的追求和社会的期待]。例如,我想跳出总是宅在家里的舒服圈是因为我想增强自己适应社会的能力(自己的追求),或者也可能是你的爸爸妈妈希望你能提高交际能力(社会期待)。

我着重聊一下学习和跳出为什么是困难的,一是动力是否是自己;二是担心失败的焦虑,负面反馈。比如有人在朋友圈发减肥健身的照片,就可能有人在调侃A8腰不是这么减的!因此要做调整,应该小频度的尝试,快速反馈,通过    stepbystep拿到正面的反馈,逐步消除潜在的对挫折的畏惧。现在几乎所有的程序语言为啥一开头来一个[Hello World],就不无这样的考虑。

总结一下,我对新领域学习或者走出舒适区的观点就是小步跑原则和即时反馈原则。查了一下资料,原来行为主义心理学家F·斯金纳通过动物实验建立了操作行为主义的学习理论,并据此提出了程序教学论及其教学模式。其程序教学原则就包含积极反应原则、小步子原则、即时反馈原则等。

[—]型人才咋破

近年,关于人才模型提出了T型人才的说法。比如来自豆瓣的一篇文章这样说,“I”型人才是指在自己的专业领域有很深的专业水平,但是对于其他领域一无所知,这种知识结构在未来很容易被淘汰,因为外界的变化太快了,你现在的专业优势很可能成为你未来发展的包袱。

“T”型人才的知识结构才能适应现在多变的环境。首先,你有深度的专业领域背景,同时你也有很多横向跨领域的知识储备,这样不但让你有专业优势,更让你有跨界优势,当外界变化时,你可以进行知识迁移,顺应外界的变化。所以,我们需要成为“T”型人才。

link:https://www.douban.com/note/472969437/

讲得挺好,我也很认同,但最大的问题是[—]型人才,不是[I], 无特别精深的专长领域,凡事略懂一点。这个问题我大概也没有能给个好答案,尝试找到那个[I]是非常必要的,有适合面试评价"比较综合"可能是一个负向词汇。

从传统文化看学习

学习是一件有意思的事情。孔夫子说学而时习之,不亦乐乎!大意是说学到的东西有机会付诸于实践,这难道不是一件值得高兴的事情吗?这里面就蕴含了读书和实践的一个关系。

大卫张有一系列关于学习的论述,参见http://www.ituring.com.cn/article/28775。比如前3年效应、 德雷福斯模型模型、 刻意锻炼Deliberate practice、 ADKAR模型等。我如果不去他的blog看看,我不可能记得全这些模型的样子,也不知道什么时候会应用到(我就在考虑一个问题,能不能通过中国传统文化的经验来谈学习,本次就是一次探索求证之旅)。先看看大卫引用模型中的其在2个模型。

德雷福斯模型

德雷福斯模型是一种衡量人们工作方法和能力,反省并提高专业技能的层级模型。

它把新手到专家的技能阶段分成五个层级:

新手:新手需要指令清单。新手在该技能领域经验很少或者根本没有经验。这里提到的经验,指的是通过实施这项技术促进了思维的改变。

高级新手:高级新手不想要全局思维。一旦经过新手的历练,人们开始以高级新手的角度看待问题。高级新手能够开始多多少少地摆脱固定的规则。他们可以独自尝试任务,但仍难以解决问题。

胜任者:胜任者能够解决问题。你可能会看到,处于这一水平的人通常被认为“有主动性”和“足智多谋”。他们往往在团队中发挥领导作用(无论是否有正式的头衔) 。他们是团队里的好人,既可以指导新手,也不会经常骚扰专家。

精通者:精通者能够自我纠正。精通水平的从业者需要全局思维。他们将围绕这个技术,寻找并想了解更大的概念框架。对于过于简单化的信息,他们会非常沮丧。

专家:专家凭直觉工作。专家是各个领域知识和信息的主要来源。他们总是不断地寻找更好的方法和方式去做事。他们有丰富的经验,可以在恰当的情境中选取和应用这些经验。他们著书、写文章、做巡回演讲。

德雷福斯模型在《程序员的思维修炼》一书中有描述,作者也列出了一些诀窍。

  • 新手使用规则,专家使用直觉

  • 新手通过模仿和观察来学习

  • 专家要保持实践来维持专家水平

特别要注意的是不要在"高级新手"这个阶段停留太久或者止步不前,如图烧菜,好些人都会烧,或者按图索骥,也能总结经验,但数十年也仅为不得不烧的一种状态。

96f5001824dd672c26f52285eb9724877c7ce763

刻意锻炼Deliberate practice

首次提出“刻意练习”这个概念的是佛罗里达州立大学(Florida State University)心理学家 K. Anders Ericsson。这套练习方法的核心假设是,专家级水平是逐渐地练出来的,而有效进步的关键在于找到一系列的小任务让受训者按顺序完成。这些小任务必须是受训者正好不会做,但是又正好可以学习掌握的。完成这种练习要求受训者思想高度集中,这就与那些例行公事或者带娱乐色彩的练习完全不同。“刻意练习”的理论目前已经被广泛接受。

00bc07d72ec20b4663efdadfd77ca015163fa792

当谈到学习的时候,我脑袋里浮现了很多场景。

1、某个工程师用了2天时间,最后是因为一个配置的问题(此处会心一笑的人大有人在)--我跟这位同学说,你总结一下,他回答总结不了,因为这个问题最后是中间件团队去改的。----有时候学习机会就这样浪费了。

2、第2个故事,关于罚款的故事。开会迟到咋办,罚款!不按时交周报咋办,罚款!简单粗暴!--我们都是成年人,不能有更优雅的方式麽?管理学大师大卫张虽然不是罚款制度的公开倡导者,但是他也默默的支持了这一制度,因为它有效。这里面讲了一个非常朴素的道理,人类不期望被约束,同时自律是非常难的一个事情。为了维持罚款制度,我每周要观察大家发送周报的时间,我累不,非常累!---这里面有一个问题,为啥要去监督?

3、关于周报的故事,为什么要写周报先不展开了。反正以前一直要写。某一天我们说不写了,肯定就没人写;我们说可以写也可以不写,基本也没有人写。因为写成了一种负担,甚至是为主管写,那么不写也罢。我曾说过,与其记流水账,不如不写。提倡写写思考,比如本周处理了一个线上问题,难道没有任何想法,深度缺陷分析?

4、人家说处处留心皆学问,可我们往往却视而不见。曾经把我们团队的一些线上故障和洛一他们合作张贴出来,期望走过路过的兄弟们能在某日回首之际能看看,可惜半年过去了,找一研发同学问之,你知道xx组遇到了某个故障问题吗?-不知道;某某同学的周报不是提了这个事情吗?--看了,没注意;那么知道走廊上汇总了我们半年的所有线上故障吗?-不知道,没看。这里面就有一个问题,从哪里学习,风景到处都是,却缺乏技术的敏锐度和观察力!--“慢慢走,欣赏啊!” 这是朱光潜先生从美学角度的一个看法,异曲同工!

传统学习观

我们先看看古代人是如何谈论学习的,或者可以窥见学习的原则、方法和路径。

满招损,谦受益。(《大禹谟》)

知之为知之,不知为不知,是知也。《论语·为政》

什么意思呢?

这2则是说谦虚的,虚怀若谷。知道就知道,一旦被捧为专家、大牛能不能说自己[unknow],是衡量能否走得更远的一把尺子。

敏而好学,不耻下问。《论语·公冶长》

知而好学,然后能才。 ——荀子

这2则在说好学、好问的问题。问问题不丢人,关键在于如何问。

 反模式1:你对时局有何看法?

反模式2:因为编程语言争得面红耳赤!恨不能杀人!最近有国外新闻说代码规范涉及到杀人事件,不可不慎。

反模式3:你们家缓存用的什么,用啥机房好,凡是能度娘的都在问。

 徐昊说提个好问题,给个好答案。

我喜欢的提问模式是:对于xxx场景,我采用xxx方案,但是有xxx问题,我尝试xxx解决之,结果xxx;我考虑xxx,不知道其他人有何看法或者解法? ---一句话能把背景说清楚,结果直接问题xxx问题,有何解法,为了挖掘背景用了20分钟。和时间咋能做朋友呢?

 人类习惯按自己的经验提供答案,而提问者的场景和自己可能不一样,甚至差别很大。在提供答案的时候不宜过于武断,所谓拿着一把锤子就看到处都是钉子!

循序而渐进,熟读而精思。《程氏家塾读书分年日程·朱子读书法》

读书有三到,谓心到,眼到,口到。三到之中,心到最急,心既到矣,眼口岂不到乎?朱熹《训学斋规》

口而诵,心而惟,朝于斯,夕于斯。《三字经》

学而不思则罔、思而不学则殆 《论语·为政》

这几则说的是学思结合,并要循序渐进,无终南捷径。从何处学?现在的网络媒体、自媒体、群、浩瀚书海、无数技术大会、公司内网.....躺在哪里的叫信息( information),只有内化为自己的才是知识(knowledge)。涓涓细流,饮多少全凭心意。

我个人看周报的习惯是没有干货的略过,然后把这些信息和我们的规划、计划的关系在脑子里过一遍,或者在本子上画一画。

看周报的痛苦是某周是显微镜的细胞级问题,某周是放大镜级的问题,上周的问题无法从下周来提炼。当然我们推崇少些事务性周报,多做思考。一线TL要扎到现场,更少依赖事务性内容的汇报。

我特别留意兄弟团队犯了什么错,因为这个是千金难买的知识。还曾组织过对应的学习,也曾去代码版本管理软件比较前后2个版本的代码,最后发现是缺陷分析报告没有写到点子上,最致命的问题不是报告中那个。

这里特别多谈一句深度缺陷分析报告,太多的报告为了交差,检查问题的思路应调整为下一次这样的问题我们能不能一定规避。太多的报告的action是加强代码review。

12-13年从转账业务线到核心平台,老板跟我讲他们要向兄弟团队学习,敬畏资金。听多了也略烦:)但是我往心里去了,我在想新团队的生命线就是资金安全和稳定性。对于这部分知识我自己首先要进行掌握,我通过公司内部的2个分享平台,搜索关键字,读了几十份故障分析报告(现在基于安全性的要求,已经不能了解其他团队的了),并对其中好些分析进行解剖比如时序图,包括上面说的代码考古,后来我在团队做了关于并发设计的分享、资损防护的分享。

TL们和架构师也是用对应的敬畏之心做事,每一行代码做code review坚持下来不容易,因为他们本身有大量的业务需求讨论,出具架构方案方面的工作。

三人行,必有我 师焉,择其善者而从之,其不善者而改之。《论语·述而》

弟子不必不如师,师不必贤于弟子,闻道有先后,术业有专攻,如是而已。《师说》

这部分说的是术业专攻,谦虚谨慎。文人相轻,也有技术同类相轻的。

有人讲如果我的老板换成谁xx,我不服;

我只说一个道理,公司选择一个人做你的老板是肯定有考虑的,你有没有欣赏到呢?你是不是自己想的那么NB呢?如果是,怀才不遇!?--大卫张讲说,没有怀才不遇这件事!

从后端到前端、从c++到java、从应用系统到机器学习,从大数据到云计算,吾生有涯而知无涯,欣赏,开放、包容,很多地方都可以学!

学贵专,宁精勿杂,宁专勿多,不以泛滥为贤。

书富如入海,百货皆有。有之精力,不能兼收尽取,但得其所欲求者尔。故愿学者每次作一意求之。——苏轼

这里讲的突出专业,一专多能,肯定是学不完的。有一个叫牛新庄的专家专攻db2做到同时接多个银行的咨询,俨然是苏秦挂六国帅印,他的一个考量就是oracle已经这么多人了,我是不是搞点冷门呢!

对于应用系统研发知识要全面,也要有出众之处傍身。比如分析建模能力、高并发处理、数据库设计方面等等。始于平均,终于平淡,不可不慎!

总结一下,我的学习观:

一:胸怀宽广、谦虚向学

二:从信息的汪洋挑选知识

三:保持敏锐度,寻根究底、举一反三

四:学思结合、提炼归纳

五: 包容欣赏、术业专攻

六:一专多能、宁精勿杂

ps:在学习这件事情上,永远在路上,心怀敬畏,共勉!!!


原文发布时间为:2018-09-23

本文作者:右军

本文来自云栖社区合作伙伴“技术琐话”,了解相关信息可以关注“技术琐话

相关文章
|
6月前
|
算法 安全 程序员
分享刷题的个人经验!!!(特别高效)
分享刷题的个人经验!!!(特别高效)
46 0
|
7月前
|
算法 编译器 程序员
嵌入式C语言代码优化方案(深度好文,建议花时间研读并收藏)
嵌入式C语言代码优化方案(深度好文,建议花时间研读并收藏)
113 0
|
数据可视化 程序员 Docker
你在什么时候觉的自己的技术成长很快;低代码在实际开发中的效率到底怎么样;Docker 的优缺点有哪些|极客观点
你在什么时候觉的自己的技术成长很快;低代码在实际开发中的效率到底怎么样;Docker 的优缺点有哪些|极客观点
|
监控 安全 项目管理
如何写一个优质高效的网络项目实施方案?这篇文章值得收藏!
如何写一个优质高效的网络项目实施方案?这篇文章值得收藏!
236 0
|
缓存 前端开发 NoSQL
程序员该知道大型网站架构的发展历程吗?如何有效地增加服务器?
前面介绍了大型网站的业务需求和大致的工作原理,但是不能简单地理解为只要增加服务器就能把一个网站变成一个能应对大量用户的网站。 通过增加服务器来达到支持更多的用户是大型网站架构的目的。 本节简要介绍大型网站架构的发展,并介绍大型网站架构如何有效地增加服务器。 本节介绍的技术点只要了解即可,后续章节会有更详细的说明。 大型网站系统的内部是复杂的,一般是多种网站架构的混合(包括静态网站、动态网站和B/S架构网站等)。
|
程序员 开发工具 Android开发
我奇怪的安卓开发历程(内含本人不太成熟的技术观)(三)
半年的开发工作通过统计git的提交记录发现其实我提交行数最多的项目也就1228行:
|
前端开发 Android开发
我奇怪的安卓开发历程(内含本人不太成熟的技术观)(四)
工作一天下来,最大的收获便是我发现项目写了半年我还是不知道这是个啥架构的,通过几次和同事沟通交流,以及浏览许多介绍和实例MVP、MVVM架构的文章,还是不了了之,当然,不能否认的是同事认为这是MVP架构的项目,我也挺倾向这个观点。
|
存储 Android开发
我奇怪的安卓开发历程(内含本人不太成熟的技术观)(二)
初出茅庐的我在开发工作中成长,收获了许多,但其实也引出了一堆问题。
|
程序员
工作这么多年,你能向新人解释清到底什么是面向对象编程吗?(上)
工作这么多年,你能向新人解释清到底什么是面向对象编程吗?(上)
|
设计模式 算法 Java
工作这么多年,你能向新人解释清到底什么是面向对象编程吗?(下)
工作这么多年,你能向新人解释清到底什么是面向对象编程吗?(下)
工作这么多年,你能向新人解释清到底什么是面向对象编程吗?(下)