极客时间已完结课程限时免费阅读

24 | 并行:工作与学习

24 | 并行:工作与学习-极客时间

24 | 并行:工作与学习

讲述:刘飞

时长13:04大小5.98M

在工作中,你应该碰到过一些这样的情况,有同事工作的时间不短,经常加班加点,工作也很勤勉,但每每晋升时却碰壁了。你可能还会为其打抱不平过。难道这真的只是不公平或者运气不佳吗?
其实这种情况,隐藏在背后更深层次的原因是:工作陷入了循环与重复,从此停止了成长。
那么,你该如何在工作的同时,保持学习,并持续成长与进阶呢?我想,可以先从分析“程序员的工作本质是什么”开始着手。

工作

程序员的主要工作是:编程,产出代码,完成需求,交付程序系统。
程序员按其工作技能和经验,大体又分为三个阶段:初级、中级和高级。这三个级别的程序员的主要工作都是编程与产出代码,产出代码的数量也许相差不大,但产出的代码属性就可能有明显差别。
什么是代码属性?它包括资产与负债两类。由大量初级程序员产出的代码并以此构建的软件系统,如果最终能完成交付,那么很可能资产和负债性基本持平。这是很多早期创业公司产出代码的属性特征,因为创业公司早期缺乏资金和足够的知名度,难以吸引到又多又好的中、高级程序员加入。
这样的代码构建的系统多属于勉强满足业务需要,虽看不出明显的 Bug,但一遇到特殊情况就容易宕机。整个系统虽然勉强能支撑公司运营,但其中欠下了大量的技术债;先活下来,未来再来慢慢还。
若是完成了一个债务比资产还大的系统,会是个什么样的情况呢?那这就是一个还存在明显 Bug 的系统,是基本无法完成交付和上线的。
因此,现在互联网行业创业团队的主流做法,都是先完成一个资产和负债刚好过平衡点的系统,发布上线,接受反馈,再快速迭代,最后在迭代中不断地提升其资产性,降低其负债性。
这样的方式在行业里有一个实践的榜样:Facebook。它还有一句著名的标语:
Done is better than perfect.
比完美更重要的是先完成。
但如果你仅停留于此,那工作就永远在完成,并不会走向完美。而且,工作的内容还会不断地重复,让你从此陷入成长的停滞区。
从初、中级走向高级程序员,就不仅仅是交付代码,完成工作,还要有后续的更高要求。如:达成品质、优化效率。而在不断晋级的路上,跨越的门槛就在于此,很多人比较容易被卡在不断地在完成工作,但却没有去反思、沉淀、迭代并改进,导致一直停留在了不断重复的怪圈之中。
程序员,工作以产出代码为主,从初级到高级,代码的负债属性逐步降低,资产属性不断提升,最终成为高品质的个人贡献者。而从完成到追求品质和完美的路上,不仅仅是靠工作实践的经验积累,还需要有意识地持续学习。

学习

持续学习,是让你突破不断循环怪圈的不二法门。
在工作中,我一直有观察到一个现象,很多人因为离开学校后,工作任务多,压力大,从此就停止了系统地学习。在《浪潮之巅》一书中,吴军写道:
国内: 小时候努力,到大学后就不努力了。 
 
国外: 到大学后才开始努力,很快就超过国内学生。
吴军这对比国内外的教育,也反映了我们教育中作为学生的一种心态,觉得毕业了,离开学校后就不需要多努力学习了。但目前程序员这个职业所面临的技术发展和更迭远超其他行业,你即便只是为了能够保质保量地完成任务,也需要保持持续学习的节奏。
现如今是个信息爆炸与知识过载时代,所以学习必须要有选择性。
我读大学那阵儿,学程序期间喜欢电脑,就爱帮同学人肉组装(DIY)个机什么的,而且还反复折腾安装操作系统。那时的 Windows 系统的特点之一就是越用越慢,一年半载就需要重装一次,所以可没少反复和折腾,分散了不少我的时间和精力,原本以为能主动学到新东西,但结果发现其实都是被动的。所以,学习还是要聚焦和主动选择,毕竟你的精力和时间都是有限的。
而有选择性的学习就需要找出真正与你近期规划有关的学习路径。
假如你工作入职后公司使用 Java 为主要开发语言,而大学里你一直学习使用 C 或 C++ 编程练习,这里再假设你对计算机相关的基础性学科和知识掌握良好,比如:操作系统、数据库、网络、组成原理、编译原理、算法基础、数据结构等等。那么为了更好地完成工作任务,就需要你先主动学习 Java 编程语言、开发框架等编程技术相关的知识。
而对于学习语言本身我觉得最高效的方法就是看一本该领域的经典入门书。比如,对于 Java 就是《Java 核心技术》或《Java 编程思想》,这是我称之为第一维度的书,聚焦于一个技术领域并讲得透彻清晰
在有了该语言的一些实际编程和工程经验后,就可以看一些该领域第二维度的书,比如:《Effective Java》《UNIX 编程艺术》等,这些是聚焦于特定领域经验总结型的书,这类书最有价值的地方是其聚焦于领域的思想和思路
如果过早地看这类书反而没什么帮助,甚至还会可能造成误解与困扰。例如,我看豆瓣上关于《UNIX 编程艺术》的书评,有这么一条:“很多例子和概念已经成了古董,当历史书看,无所获。”这显然就是过早接触了第二维度的书,却预期得到第一维度的收获,自然无所获了。
而另外一些技能,像 Java 开发工作需要大量使用的开源框架又该如何学习?张铁蕾曾写过一篇《技术的正宗与野路子》,其中介绍了如何用真正 “正宗” 的方式去学习并快速掌握这些层出不穷的开源新框架和技术。
这里就借用原文里的一张图(重新按统一风格绘制了下),每一项开源框架或技术相关的学习资料可以组织成下面这张金字塔形的结构图。
技术学习资料的层次结构示例图
Tutorial(指南) 和 API Reference(应用编程接口参考) 层次的信息资料能帮助你快速上手开发,而 Spec(技术规范)和 Code(源代码)会帮助你深刻地理解这门技术。而其他相关的技术书籍和文章其实是作为一种补充阅读,好的技术书籍和文章应该有官方资料中未涵盖的特定经验或实践才算值得一读。
张铁蕾在文中如是说:
每当我们接触一项新技术的时候,都要把手头的资料按照类似这样的一个金字塔结构进行分类。如果我们阅读了一些技术博客和技术书籍,那么也要清楚地知道它们涉及到的是金字塔中的哪些部分。
我深以为然,关于技术学习我们不能简单地蜻蜓点水、复制粘贴、拿来主义,应是去建立你的知识 “金字塔”,形成体系结构,而每次的学习实践都是在不断完善你的 “金字塔”。至于更多技术性学习的细节,若你感兴趣的话,也可以去看看那篇文章。

路径

保持学习,不断成长,工作也许还在重复,但成长却在迭代上升,然后才会有机会面临更多可选择的路径。
程序员在攀登职场阶梯的道路上,走过了高级,后面还会有好些分叉路线。比如,转到脱离技术的纯管理岗或者技术管理岗。技术主管或架构师某种意义上都属于技术管理岗,不懂技术是做不了这两个角色的;或者继续沿着深度领域走,成为细分领域专家。
这后面哪条路适合你呢?你是随大流,还是自己认真思考和决定?这是做选择题。如果一生要工作三十多年,前十年你多在做解答题,解决一个又一个问题。那么在大约走过这三分之一后,你就会开始做越来越多的选择题。为什么呢?因为一开始可能没有太多可供你选择的机会。而后续做好选择题,则需要大量学习,还需要不断地试错。
面对怎么选路的问题,我近些年学习的收获是这样的:选择走最适合实现个人价值的路。这就是我的基础选择价值观。程序员的个人价值该怎么实现?该如何最大化?程序员作为个人贡献者,到了一定的熟练阶段,产出基本就稳定了,而技能的成长却呈现对数曲线的增长特征。
任何一个你所尝试提升的事情都有一个增长曲线,这个曲线有两种形态:
对数增长形态:这种类型在初期增长很快,但随后进展就越发困难;
指数增长形态:这种类型在初期增长很慢,但存在积累的复利效应。
增长要么是对数形态,要么是指数形态,很少有线性的。
对数增长也意味着更容易退步,因为起步阶段是如此陡峭(见对数曲线示例图)。比如,学习一门新的技能,不持续去应用,很快就忘了,退回原点。那你应该如何应对这种“窘况”呢?我建议你在起初的高增长阶段,学习和工作的关注点需放在养成长期习惯上,因为虽然开始增长很快,但需要小心一旦停止努力它可能会向下滑落,所以一定要慎之又慎,坚持形成自己的习惯和节奏。
对数增长曲线示例
而指数增长则意味着存在一个拐点的 “突变” 时刻。很多人期望线性增长,但实际却是按指数增长的,这让许多人在拐点发生前就放弃了。比如,写作,在呈指数增长的领域内,到处都是半途而废者。所以,做本质是指数增长曲线的事情时,柔韧且持久的思维模式是关键。
指数增长曲线示例
工作多年后,技能的增长就又进入了对数的平缓区域,通常其回报呈现递减趋势。也就是说你在其上花的功夫越来越多,但你感到越来越难产生洞察以获得新的收益。其难处在于找到新的突破点,重新回到曲线陡峭上升的部分。
这就是所谓成长的瓶颈,你要学会应用指数增长的方法,找到价值贡献的放大器。作为程序员,你有可能很幸运地编写服务于数千万或数亿人的软件服务,这是产品自带的价值放大器。这样同是写一份代码,你的价值就是要比别人大很多。而转管理者或架构师,这些角色无非都是自带杠杆因子的,所以也有价值放大的作用。但个人能否适应得了这样的角色转换,又是另一回事了。
拉姆·查兰有本书叫《领导梯队》,书里把人才潜能分成三种:熟练潜能、成长潜能和转型潜能。原书对这三点做了详细的特征描述,我简单提炼下主要特点:
熟练潜能:关注当前专业领域且十分熟练,但没有显示出在开发新能力上的努力,竭力维持现有技能。
成长潜能:按需开发新能力,显示出高于当前层级要求的其他技能,如:专业、管理、领导。
转型潜能:持续有规律地开发新能力,追求跨层级的挑战和机会,展现雄心壮志。
人力资源管理中的高潜人才盘点,基本就来自这套模型,主要就是识别出这三类潜能人才。“熟练潜能” 已是我们这行对学习的最低要求,在程序员这个技术日新月异的行业里,维持现有技能确实已经让不少人感觉很竭力了。
那你拥有怎样的潜能呢?它不一定都是天赋,可能也是选择。
成长这条路从来都不是笔直的,你的“奔跑速度”也不会一直是匀速的。在每一个拐弯处,都应减速,思考,学习,然后再加速,进步。
到此我总结下今天的分享:
程序员的工作形式是编程产出代码,本质是完成需求,交付系统;但在工作中容易陷入不断完成的循环怪圈,要打破它,就需要你持续学习并有意识地关注交付代码的品质和属性,一方面提升了交付质量,另一方面也获得了个人成长。
而学习的路在时间上是永远持续的,在空间上也是有路径的;有效的学习需要你关注学习曲线的变化,遵循有体系的技术学习框架,匹配适合当前阶段的学习资源。
最后,关于工作和学习,有人总感觉有些冲突,忙起来就没时间学了。那你是怎么看待这件事呢?欢迎留言分享你的观点,我们一起探讨。
分享给需要的人,Ta购买本课程,你将得20
生成海报并分享

赞 10

提建议

上一篇
23 | 转化:能力与输出
下一篇
25 | 时间:塑造基石习惯(上)——感知与测量
unpreview
 写留言

精选留言(23)

  • 燕羽阳
    2018-09-27
    没时间只是表象。 实质可能是: 1.没把事情列优先级,大量低优先级事情侵占了时间 2.没列计划,想到什么做什么。表现为:一段时间很多事情做,一段时间不知道做什么。需要列出短期,中期,长期的目标和计划 3.用忙碌来来掩盖自己思想的懒惰,不愿去思考和总结经验。用句时髦的话就是:用战术的勤奋去掩盖自己战略的懒惰
    展开

    作者回复: 还有句话是:多数人为了逃避真正的思考愿意做任何事情😏

    共 2 条评论
    30
  • 石头
    2018-10-23
    隔壁专栏的耗子叔,有段时间每天工作12小时,这样的情况每天还坚持学习半个小时,用一年时间看完了《TCP/IP详解》与《UNIX高级编程》。 想成为高手,那么,再忙的情况下,也要坚持学习!!!

    作者回复: 嗯,坚持从量变到质变

    17
  • 搬砖维持生活
    2018-09-26
    即使再忙,也会抽空看书夯实基础。成长是自己的事情,不能怪没有时间!

    作者回复: 对

    17
  • 冯选刚
    2018-09-27
    在忙也是有时间的,睡觉前十分钟完全可以看一篇帖子,主要还是一个学习习惯,和自我驱动力。能不能成为一个优秀的人,往往要看那些零碎的时间用来干嘛了,毕竟刷抖音微博确实比看技术文章要爽的多。

    作者回复: 😄克制

    7
  • Aliliin
    2018-09-27
    看书学习总会分神。看视频学习总是照着写(很费时间),过后就又忘了。

    作者回复: 嗯,看来还需要再优化下方法😏

    5
  • sunny
    2018-09-26
    白天工作,晚上回去看视频学习。

    作者回复: 我看视频学习容易走神😂

    共 2 条评论
    5
  • 2018-09-26
    讲的很好,这个问题是我现在需要面对的,我相信也是众多同行需要面对的,尤其是在加班成风的公司里。 但是不成长那就完了,在末位淘汰的公司里更是如此。怎么成长就看个人的方式了,将每一件事情都做好,做到极致也是一种方式;持续不断的学习,对于使用的东西知其然知其所以然也是一种方式;总之不给他人找麻烦又能为他人提供价值,才能体现自己的价值。这些轻描淡写容易,实际做到并不容易。 我现在早晨先学会,开完早会再关注工作上的事情。
    展开

    作者回复: 恩,我也是早晚学🤝

    5
  • 知知🥗🦜🍋🍋
    2020-06-16
    胡老师,请问一下,我是一名初级java程序员。 在写项目过程中,遇到很多好的设计模式,或者是spring比较典型的写法。我只会拿来用但是不知道为什么要这么写,或下次让我自己写我也写不出来。所以每次我在写前会把代码彻底吃懂再去写,但是会耗费很多时间。看了您之前的课,说对于初级程序员,做比计划更重要。我觉得我的做法错了,因为有时候过于要求完美反而达不成任务。所以我打算在休息时好好研究,研究他的结构与各种实际模式的写法,或者是spring的具体用法。工作时就去完成任务。在课下时间,我打算自己写blog去总结。作为一个初级程序员,我觉得去学什么书籍还不如把项目吃透。但是我有些问题。1.如何叫吃透一个项目,怎么去吃透呢。2.如何平衡工作与课下学习的比例呢。3,因为我有时候想去在blog里面记录,我就会copy,paste程序,或者打一遍,但是有时候过于依赖形式本身,可能写了但是还是没有真的掌握用法,因为缺少了实践本身,请问这该怎么办呢。 谢谢您的解答,这个问题困扰我很久了。十分期待您的解答。
    展开

    作者回复: 回顾我自己的经历,你的问题是成长的共性问题,刚进入一个领域不久,想吃透的东西太多困惑也会太多。工作中的问题就是学习要吃透的目标,没有什么需要特别平衡,学习不就是增了解决工作实践的问题。实践问题很多,一个一个来具体分析解决,没有什么方法论能帮你快速顿悟就上一个台阶的

    共 2 条评论
    4
  • 一杯清泉
    2018-12-23
    在我的工作中,如果任务时间很紧基本上就是忙起来没时间学习了,这时候回记录下来哪些难点,哪些需要注意的地方,如果时间比较宽裕,我会多尝试一些方法解决一个比较核心的问题,尽量尝试一些新的东西,等忙的差不多了,会再优化代码,充分自测,之后这个版本快结束时候,就会看看之前记录的心得或者难点,整理成笔记!

    作者回复: 你这习惯已经相当好啦,赞👍

    3
  • Cest La Vie🤩
    2018-10-27
    应该把学习融入到工作中

    作者回复: 相辅相成😊

    3
  • L
    2018-10-08
    一直保持学习,但是学完工作用不上很快就忘记。死循环~

    作者回复: 忘了也可能发挥作用,因为学习的过程可能已经改变了你的思维

    3
  • third
    2018-09-28
    心得如下 1.代码属性-资产和负债 2.精益创业,做个最小可用品,然后慢慢改 3.终身学习,早做早受益 4.基础知识,操作系统、数据库、网络、组成原理、编译原理、算法基础、数据结构等等。 4.读书维度, 5.第一维度-经典入门书 第二维度-聚焦于特定领域经验总结型的书 6.少做对数增长曲线 多做指数增长曲线 有些时候,不是我们厉害,而是时间,时间帮我们打败了那些人
    展开
    3
  • 风月平分
    2018-09-26
    老师您好,做iOS开发两年多了。感觉遇到了瓶颈。想在iOS这棵树上进行技能延展,感觉找不到方向。老师给解个惑。

    作者回复: 两年不长啊,再沉下来多做几年吧。可能你做的应用不复杂?那就考虑下一个超级App需要面对哪些问题,你都有答案吗?

    3
  • JohnT3e
    2018-09-26
    工作很忙时,一般我会找出工作中一两个点,分析这几个点需要改进和优化的地方,要么结合之前学习到的新知识或者方法尝试优化和改进,将知识实践落地;要么总结场景和需求作为下面学习的内容并反思自身知识体系的缺失之处。

    作者回复: 日积跬步,以致千里。都是一点点来的

    2
  • Geek_8c9d87
    2023-02-13 来自甘肃
    总觉: 程序员的工作很容易陷入一个死循环,每天都是cv大法,要打破这种局面就要持续学习,有些技能是指数形式有些技能是对数形式,指数形式前期慢后期有爆发性的提高,指数形式前期快后期可能进入瓶颈区,走不出瓶颈就只能原地踏步,在学习的时候我们要有选择性的去学习,针对什么阶段学习什么样的内容。当然在这个信息爆炸的时代,最重要的还是要想清楚自己以后要做什么样的人,从而去为止努力,相信自己量变终会引起质变,加油!
    展开
  • Ripper
    2019-06-12
    所谓太忙没时间做,很多情况下,潜台词就是这件事情没那么重要,都是说辞。。。 😆
    1
  • metalmac.kyle
    2018-09-27
    感谢作者的持续分享!这一期金字塔学习模型和人才潜能的观点非常值得学习,很有感悟,随着工作的积累愈发觉得构建自己牢固的知识体系网络何其重要,由术转道!

    作者回复: 🤝^_^

    1
  • 邱联琼
    2022-05-06
    选择走最适合实现个人价值的路, 深受启发!
  • 未来小娃
    2021-09-30
    碎片化时间体系化学习
  • geek_arong2048
    2021-07-31
    每天学习一点点,进步一点点