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

结束语 | 少做事,才能更有效地工作

结束语 | 少做事,才能更有效地工作-极客时间

结束语 | 少做事,才能更有效地工作

讲述:郑晔

时长09:54大小9.05M

你好,我是郑晔。
在这个专栏里,我讲过很多东西,几乎涉及到软件开发的方方面面,但有一个重要的方面,我却从来没有说过,那就是算法。
因为我一直把它当做不言而喻的基本功,认为每个程序员都应该掌握。在我们专栏的结束语中,我就用这个没有涉及过的话题来开篇吧!

算法的差异

排序算法是每个程序员都会学到的内容,大家对各种算法也是如数家珍:插入排序、冒泡排序、归并排序、堆排序、快速排序等等。我们也知道各个算法的复杂度,比如,插入排序是 O(n^2),快速排序平均情况下是 O(nlogn)等等。
你有没有想过一个问题,不同算法的复杂度本质差别到底是什么呢?我们就以插入排序和快速排序为例,为什么快速排序要比插入排序快呢?
我不打算做算法分析,直接公布答案:因为做比较的次数少。为什么同样的排序,比较次数会有差异呢?因为插入排序每次循环只关注当前的目标,循环之间没有关系,而快速排序在做不同划分时,上一次的结果对下一次有助力,因此它省下了不少的比较次数。
明白了这个道理,再来看所谓的算法优化,其实就是尽可能利用已知的信息,少做不必要的事。
再来看一个常见的面试题,给你一堆数,找出前 100 个。很多人直觉就会想到排序,然后选出前 100 个。这种做法固然可行,但一定是做多了,因为这里需要的是找出前 100 个数,而不是要 100 个有序的数字,更不是要所有的数都有序。
说到这里,你就知道了,只要把数据划分开就好,并不需要排序,如果划分点不是第 100 个元素,就向着 100 所在的方向继续划分就好。
计算机是最擅长处理繁琐重复工作的,即便如此,我们依然要做算法优化,原因是当数据规模大到一定程度时,不同复杂度的算法差别就非常明显了。算法没用好,计算机硬件再好,也是徒劳的。
有一则《计算机程序设计艺术》作者高德纳(Donald Knuth)的轶事,他年轻时参加算法大赛,用最差的系统击败了诸多对手,拿到算法执行效率的冠军,凭借的就是其强大的算法优化功力。
对于计算机,算法尚且如此重要,我们面对工作时何尝不是如此呢!

有效工作

《10x 程序员工作法》,也许有的同学最初看到这个标题就急急加入了,以为会从这个专栏中学习到一些“以一抵十”的编程技法,对不起,我彻底让你失望了。我非但没讲太多编程的技法,甚至还从各种角度劝你少写代码:无论是向产品经理提问题,还是让你在前面多考虑设计。
难道不是做得越多才越高效吗?
插入排序并不会因为干的活多,就比快速排序得到更高的评价,因为它们比的是谁排得快。工作效率高,不是因为代码写得多,而是有效工作做得多。
如果 CPU 都被无效指令占据了,哪有时间执行有效指令呢?即使你很忙碌,但工作进展依然是收效甚微,因为无效工作占据了你太多的大脑,让你不能聚焦在正经事上,当然就是效率不高了。
其实,这个专栏的内容在我脑子里已经盘旋很多年了。不过,即便在专栏筹备期,我已经备了很多篇稿子之后,我依然没有找到一个准确的说法能够描绘内心的想法。
我想过“程序员的职业素养”,但似乎这会让专栏朝着职场行动指南的方向努力;我想过“高效工作”,但实际上我也不打算讨论那些工作技巧。直到上线日期临近,我的编辑实在受不了我的拖延,坐下来与我交流了很久,我才终于找到了内心的那个词:有效。
我在这个专栏真正探讨的主题是,有效工作。
有效工作,需要我们把力量聚焦到正确的地方,做本质复杂度(Essential Complexity)的事情,少做无意义的事情。
我曾经在一个大公司做咨询,按照他们的统计,线上 60% 的代码从来没有运行过。我们都知道,一多半的代码增加的可不只是一多半的工作量,团队可能需要的是几倍甚至几十倍的心力去维护它。
当然,有效工作最终没有成为这个专栏的名字,而用了更有个性的《10x 程序员工作法》。这个名字也不错,因为在我看来,很多程序员做的是负功,比如,写那 60% 代码的程序员。只要能做到有效工作,效率自然会高出业界平均水平很多。
怎么才能有效工作呢?我在专栏中已经给你讲了很多,小结一下就是:
拓展自己的上下文,看到真正的目标,更好地对准靶子,比如,多了解用户,才不至于做错了方向;站在公司的层面上,才知道哪个任务优先级更高;站在行业的角度,而不局限于只在公司内成为高手,等等。
去掉不必要的内容,减少浪费,比如,花时间分析需求,不做非必要的功能;花时间做好领域设计,别围着特定技术打转;花时间做好自动化,把精力集中在编码上,等等。
要想有效工作,有两点非常重要。一方面,意识上要注意自己工作中无效的部分。这就像一个开关,拨过去就好了。所以,读这个专栏,有人常有恍然大悟的感觉,也有人觉得很简单。
很多时候,你只是不知道,就像我在专栏中提到,要问产品经理问题,这是很多人没想过的。每篇文章后面的那一句总结,就是这样的开关,拨过去就好。
另一方面,要构建自己关于软件开发的知识体系,这是要花时间积累的。在这个专栏中,我给你讲了很多最佳实践,就是让你知道,在某些方面,有人已经做得很好了,花时间学习,比自己从头摸索好很多。
这就像所有的数学公式一样,理论上你都可以自行推导,但肯定不如从教科书上学得快。

藏经阁目录

虽然我讲了这么多内容,但实际上,因为篇幅的关系,这只是冰山一角。其实,我给你讲的这部分内容并不是具体的知识,而是告诉了你哪些东西要去学习,给了你一张学习地图,把各种知识贯串了起来。
我曾与朋友打趣道,我的专栏实际上是藏经阁的目录,真正的经书还要等你自己去参悟。只不过,有一个人把这些经书之间的知识连接给你补齐了。这些连接恰恰是在学习相关内容时,让我苦思冥想许久的。
大约一年前(2018 年 4 月),极客时间编辑找到我,问我是否有兴趣在极客时间开个专栏,作为“得到”重度用户的我,一直对知识服务很感兴趣。有这样的机会让我体验,我当然想试试,甚至最初给自己定下了写 100 篇的宏伟计划。
真正开始写,我才知道,在繁忙的日常工作之余,坚持写作还是一件很有挑战的事,今天看来,100 篇的目标显得那么无知无畏。
不过,也正是因为压缩到一半左右的篇幅,在专栏后面的部分,我才极大地提高了知识密度,比如,微服务和 DDD,这两个可以分别写成一个系列内容的话题,我用一篇文章就将其精华和知识脉络提炼呈现了出来。
因为我想尽我所能,帮助大家构建起一个软件开发的知识体系,让你在未来遇到问题时,知道可以在哪个方面进一步加强。希望这个专栏真的起到帮你理清思路,答疑解惑的作用。
还记得我在开篇词中的最后一段话吗?
也许在这个专栏的最后,你发现自己并不认同我的原则,却能够用自己的原则来与我探讨,那么,恭喜你,因为那是最美妙的事情!
不知道你是否形成了自己的原则呢?欢迎与大家分享。因为它代表着你已经形成了自己的知识体系。与我讲了些什么相比,你学到了什么才是一件更重要的事。
希望在学习了这个专栏之后,你可以用自己的工作原则做更多本质复杂度的事情,减少无意义的时间消耗。
其实,这个专栏的最大收益人是我自己,感谢这次的专栏之旅,我终于强行治疗了我的拖延症,把自己对于有效工作的思考完整地整理了出来,那些在脑子里模糊的印象现在终于有了一个完整的体系。这个体系就是我在专栏里提到的工作原则,现在我可以更好地表达自己的想法了。
不过,这个专栏对我而言也是有遗憾的。因为我想表达的内容很多,给大家打开更多大门的同时,也给很多同学留下了更多的疑问。
有些同学期待在某个方面再深入细节地讲一下,比如,DDD,那可是值得再写一个专栏的主题。限于这个专栏的主题和篇幅关系,我没办法深入展开,只能对大家说声抱歉了。
如果以后有机会,我会再来与你分享我对软件开发的理解,这次的《10x 程序员工作法》之旅就暂告一段落了!
再见!
分享给需要的人,Ta购买本课程,你将得20
生成海报并分享

赞 29

提建议

上一篇
总复习 | 重新来“看书”
下一篇
第二季回归 | 我带着软件设计课回来了!
unpreview
 写留言

精选留言(69)

  • 西西弗与卡夫卡
    2019-04-29
    真正的效率,来自少做乃至不做无价值的事。感谢郑老师

    作者回复: 感谢你一路以来的补充!

    共 2 条评论
    45
  • bright star
    2020-02-12
    郑老师您好 我现在在微软西雅图工作。自从学习了您的10X工作法,我的工作效率得到极大提升,学完半年就顺利升级到了Senior SDE 衷心感谢您的无私奉献!

    作者回复: 很高兴看到你的成长,也可以把你的收获分享给更多的小伙伴!

    15
  • 程李文华
    2020-04-21
    听了第五遍,反复迭代了自己好几回合。上次有这感觉是听得到施展老师的中国史纲,如今郑晔老师的程序员史纲让自己走好接下来的路有了新格局。师父领进门 修行在个人。我辈中人,需持续发力。感谢郑晔老师倾囊相授。

    作者回复: 你能学五遍,我不得不佩服一下。你的努力让觉得自己的付出是值得的。

    11
  • 微思
    2019-04-29
    👍
    9
  • spark
    2019-06-25
    感谢郑老师。郑老师是天才;每个程序员都应该订阅该课程

    作者回复: 过誉了,欢迎把它推荐给更多的同事和朋友。

    6
  • yu
    2019-04-29
    感謝老師,這些講堂雖然不多,但貫策了一般程序員,或者說這個時代工作的要領,也就與吳軍老師說的,「學會做減法」,才有可能在有限的人生,實現更多的理想。

    作者回复: 同是吴军老师的读者,这个专栏中的一些思想就是受到了吴军老师的影响。

    5
  • 公号-技术夜未眠
    2019-05-03
    期待老师开辟DDD的专栏!期待est!
    5
  • 墨灵
    2020-03-20
    这个是目前我在极客时间收获最大的专栏了。

    作者回复: 欢迎把你的收获分享给更多的人。

    3
  • 初心
    2019-04-29
    感谢老师,受益颇多,虽然没有持续学习,但是还是不断,反复学习。特别期待老师接下来的大作
    3
  • AlanP
    2019-04-29
    感谢郑老师,一直追到了最后,收获良多。结束语中您关于算法本质让我耳目一新,仔细一想确实如此,除了排序算法,字符串匹配中的KMP也是这样的。目前在疯狂补算法知识、刷题,期待秋招能拿到好offer,等正式工作后再深刻践行这些最佳实践,期望着能快速成长。
    3
  • K战神
    2019-06-01
    我想说,这个专栏是可能目前最被低估的一个专栏,里面的知识精简干练容易理解并时不时来点恍然大悟。 这个专栏真是太贴地气了

    作者回复: 欢迎推荐给更多的朋友!

    2
  • 六维
    2019-04-29
    谢谢郑老师。 一段历程结束也是另一段历程的开始。最近又完成了typescript协议生成,提高了客户端的开发效率,自动化算是又进了一步。

    作者回复: 向前一分,有一分的欢喜。

    2
  • 风羽星泉
    2019-04-29
    感谢老师,期待再见
    2
  • toosheep
    2019-04-29
    受益颇多,谢谢老师,也谢谢极客时间,期待老师的下一个专栏!
    2
  • Y024
    2019-04-29
    感谢老师,练功房见:)
    2
  • Harvey
    2020-11-28
    老师您好: 请教一个问题,不清楚你说的T型人才中的深度,不知道该选哪一个领域,能否提供一点建议? 我的背景:工作8年的JAVA高级程序员,一线城市 曾在二线互联网公司,苦恼现在没有特别擅长的领域,学的都比较广但不精通。当然也想过 通过在行APP 找一些专家咨询一下,但没有找到合适的。于是在得到app学习一些通识课程,学习吴军、梁宁的课程。 非常赞同老师说的少做事,听吴军老师的课程也说明了这一点的重要性,不做伪工作,做减法,做那些对公司,对团队利益最大化的事情,即使不能也要参与其中。
    展开

    作者回复: 每个人都有自己喜欢的点,一般来说,只有你喜欢,才会在其中大量的投入时间。像我自己就比较喜欢琢磨怎么做好软件,所以,在里面投入了大量的思考。专家技能需要深入,只有喜欢了,深入才不乏味。 如果你还没找到自己的专家技能,不妨先把自己喜欢的技术罗列一下,看看哪些是你有机会深入的。

    1
  • 三生
    2020-09-19
    上班发现很多事情明明可能只需要很少的时间即可完成,但却花了大批的时间,有效的工作只是占花了大部分时间的一小部分。 感谢老师带我们看见了这么多工作以及软件流程等最佳实践,提高有效工作率。

    作者回复: 能提高一点效率,对工作都是有帮助的。

    1
  • 小柒
    2019-11-28
    感谢老师!
    1
  • 极客时间工程师1
    2019-09-07
    谢谢老师,您辛苦了

    作者回复: 一起努力!

    1
  • lyning
    2019-06-24
    就缺一张思维导图,把全局的知识点都梳理梳理,不过没关系,把这个任务交给读者更好,我这段时间就想做这么一件事
    共 1 条评论
    1