防止断更 请务必加首发微信:1716143665
关闭
讲堂
客户端下载
兑换中心
企业版
渠道合作
推荐作者

开篇词 | 程序员解决的问题,大多不是程序问题

2018-12-24 郑晔(加微信:642945106 发送“赠送”领取赠送精品课程 发数字“2”获取众筹列表。)
10x程序员工作法
进入课程

讲述:郑晔(加微信:642945106 发送“赠送”领取赠送精品课程 发数字“2”获取众筹列表。)

时长07:04大小6.49M

你好!我是郑晔,一个程序员。

很多人都说,程序员很辛苦,与这个角色联系在一起的词儿,通常是忙碌、加班、熬夜等。

作为程序员,我们将其看作一个值得全情投入的职业,希望能够把精力放在设计算法、改进设计、优化系统这些具有创造性与成就感的本职工作上。

但现实情况却是,许多人因为一些“意外”,陷入了无休止的忙碌,比如:

  • 你辛辛苦苦写的代码还没上线,产品经理就告诉你需求变了;
  • 你拼命加班只因错估了工作量,自己造的“孽”,含着泪也要搞定;
  • 你累死累活做出来的东西和要求不符,只能从头再来;
  • 你大面积地修改代码只是因为设计糟糕,无法适应新的需求变化;
  • ……

诸如此类,不胜枚举。我们很辛苦,但耗费我们大量时间和精力去应付的工作,并不是技术工作,反而是这些看似很“不值当”的事儿。

为什么会这样?

软件行业里有一本名著叫《人月神话》,其中提到两个非常重要的概念:本质复杂度(Essential Complexity)和偶然复杂度(Accident Complexity)。

简单来说,本质复杂度就是解决一个问题时,无论怎么做都必须要做的事,而偶然复杂度是因为选用的做事方法不当,而导致要多做的事。

比如你要做一个网站,网站的内容是你无论如何都要写的,这就是“本质复杂度”。而如果今天你还在用汇编写一个网站,效率是不可能高起来的,因为你选错了工具。这类选错方法或工具而引发的问题就是“偶然复杂度”。

作为一个在软件行业奋斗了近二十年的程序员,我深刻意识到一个遗憾的事实:大部分程序员忙碌解决的问题,都不是程序问题,而是由偶然复杂度导致的问题。

换句话说,只要选择了正确的做事方法,减少偶然复杂度带来的工作量,软件开发是可以有条不紊进行的。

如何减少偶然复杂度引发的问题,让软件开发工作有序、高效地进行,这正是我希望通过这个专栏帮你解决的问题。

许多人工作做事主要依靠直觉,在这个科学越发昌明的时代,我们清楚地看到,人类的直觉常常是错的,就像古人凭直觉认为大地是平的一样。

软件开发也不例外,如果你不曾在做软件这件事上有过学习和思考,形成一套高效的工作方法,只是凭直觉行事,在真实世界中往往会举步维艰。

幸运的是,总会有不同的人在不同的方向上探索不同的做法,一旦通过真实世界的验证,就会沉淀出可供行业直接应用的最佳实践(Best Practice)。

在软件行业中,这样能够提升工作效率的最佳实践已经有很多,但是,学习掌握这些最佳实践是有难度的,其根源就在于,很难找到这些实践彼此间的内在联系。

直觉大多是错误的,最佳实践又多而琐碎,所以在这个专栏中,我会尝试给你提供一个思考框架,帮你在遇到问题时梳理自己真正要做的事情。围绕着这个框架,我还会给你一些原则。

这些原则,是我从软件行业的诸多软件开发最佳实践中总结出来的,也是我如今在工作中所坚持的。这些原则就是一条主线,将各种最佳实践贯穿起来。

这些原则不多,总结起来就四个:

  • 以终为始;
  • 任务分解;
  • 沟通反馈;
  • 自动化。

也许看到这四个原则的名字,你会不以为然,这些说法你在很多地方都看到过,但我想与你分享的内容可能与你想的并不完全一致。

比如:你以为的“终”可能不是终,因为你只是站在自己的角度;你以为自己做了任务分解,在我看来,可能还不够,因为我希望你能够做到微操作;你以为的沟通反馈就是说话聊天,我想告诉你很多技术实践的存在也是为了沟通反馈;你以为自动化就是写代码,我会告诉你,有时候不写代码而解决问题,可能才是一个好方案。

在我看来,想要将精力聚焦在本质复杂度上,提高工作效率,摆脱直觉的束缚,只要掌握上面的四个原则就可以了。

或许你此时会问,这些原则很难吧?其实并不难,在探讨这个专栏的内容时,我的编辑作为软件开发的局外人,经常发出感叹:“这事真的就这么简单吗?这不就是正常做事应该有的逻辑吗?”

是的,就是这样简单,但大多数人没有这样做,因为这些原则在实际工作中很可能是反直觉的。只要打破思维误区,你的整个人都会变得不一样。

下面是整个专栏的目录,我希望能帮助你回答,或者厘清一些开发过程中,曾经遇到,又未曾深入的问题。

当我们详谈这些原则时,我会给你讲述一些最佳实践,让你看到这些原则是如何应用于不同的实践中的。希望我对这些实践的理解成为你的知识地图,让你拥有继续探索的方向。

我做这个专栏的原则是“授人以鱼,不如授人以渔”。我希望你很好地理解这些原则,掌握高效工作的方法。至于最佳实践,你可以自行决定,是直接采纳还是曲线救国更为合适。

介绍一下我自己,我是郑晔,目前在火币网担任首席架构师,写过代码、带过团队、做过咨询,创过业,还维护着一个拿过 Oracle Duke 选择奖的开源项目 Moco,至今仍然在编程一线写着代码。

很长时间里,我一直对如何做好软件充满了好奇,了解过各种技术以及开发方法。做咨询的经历让我有机会见识到不同公司面临的问题;带团队的时候,我也看到很多小兄弟因为不会工作,虽然很努力却收效甚微;而我自己菜鸟时期的笨拙依然是历历在目。

在我看来,所有做软件的人能力都很强,这些问题都只是因为不会工作造成的,但更可怕的是,许多人深陷泥潭而不自知。

在这些年的工作里,我一遍又一遍给别人讲如何工作,逐渐总结出一套自己的工作原则,如今呈现在你面前的就是我这些年思考的总结。

我不指望所有人都能从这个专栏受益,我只想把这个专栏写给那些愿意成长的人。我只是来做一次信息分享,分享一些思考,分享一些做法,希望可以将你从常见的思维误区中带出来。

也许在这个专栏的最后,你发现自己并不认同我的原则,却能够用自己的原则来与我探讨,那么,恭喜你,因为那是最美妙的事情!

© 加微信:642945106 发送“赠送”领取赠送精品课程 发数字“2”获取众筹列表。
下一篇
01 | 10x程序员是如何思考的?
 写留言

1716143665 拼课微信(45)

  • 风含叶
    2018-12-24
    16
    老师:
    您好!
    已经购买了这堂课程。同时想咨询一下:
    我是一只,刚刚工作一年多的本科生。现在在一家500人左右的公司工作。工作中充当研发+技术支持的角色。事情总是被突然打断。请问您可以简单说一下 您的一些建议吗?谢谢。
    展开
  • AlphaGao
    2018-12-25
    10
    直觉在某种程度上也是很重要的吧,不是很多专家都是很依赖直觉的么
    展开

    作者回复: 这是一个好问题,这种说法混淆了直觉和洞见两件事。直觉是本能的,无需积累,而洞见是溯因推理(Abductive Reasoning),需要前期进行大量的积累之后,从中发现模式,方能形成洞见。

    打个比方,同样的思念,可以说,衣带渐宽终不悔,为伊消得人憔悴,也可以说,我想死你了。二者看上去差不多,但境界有差异。

  • 水有罔象
    2018-12-24
    9
    期待
    展开
  • 爬虫也疯狂
    2018-12-24
    7
    感觉我才大一好像买早了,不过还是希望大佬们多多指教,以后少走弯路
    展开
  • felix
    2018-12-26
    6
    这个专栏太棒了,不客气地说,跟我十年工作之后的体会一模一样。平常我也是跟团队教导这四个原则。
    努力很重要,方向和方法更重要。我们要付出至少90%的努力,同时达到120%的效果。

    作者回复: 欢迎你把自己的经验也分享给大家

  • 二木又土
    2019-01-08
    3
    请教下,对于一个明确的技术点,优秀的程序员仿佛能更快的找到解决方案,而且往往就是最佳实践,这是什么原因?从技术点角度讲,它并不需要掌握其他相关知识…
    展开

    作者回复: 你把结果当成了原因,优秀的程序员能够快速解决问题,是因为它已经做了大量积累,有自己的知识体系,任何领域想做到一定的水准都需要刻意练习,而且是大量的刻意练习。

    刻意练习,是一个重要的概念,我本打算在这个专栏里讲一下,后来由于主题的关系,暂时拿掉了,看后面是不是有机会专门加餐讲一次。

  • Monday
    2018-12-31
    3
    我目前就是工作效率很低的0.15*程序员。
    做事经常确实方法论,蒙着头一顿猛搞,为做而做。
    希望通过本课程至少达到5*程序员目标,希望自己能够有清晰的思维,谢谢老师
  • helloworld
    2019-02-15
    2
    希望通过本专栏能对自己的整体能力有一个小小的提升!为什说小呢?因为改变自己既有的行为习惯和思考习惯不是一蹴而就的事情,需要自己真正领悟了后才能从打心眼里付诸行动。
    展开

    作者回复: 每天找到一点可以改变的地方,慢慢来。

  • davidce
    2019-01-09
    2
    t.cn/EGeYlAA,一个讲本质复杂度和偶然复杂度的视频
    展开

    作者回复: 多谢推荐!

  • 妮可
    2018-12-24
    2
    作为开发,要谈需求,写需求,以及日常业务数据处理,有的时候还要充当客服,确实有点迷茫。希望能通过学习大佬的经验,回到开发本质上,提升工作效率。期待(๑˙ー˙๑)
    展开

    作者回复: 跨角色是件好事,会让你有更多的视角,这是我鼓励很多人去尝试的。只要把握住自己的核心能力,不断提升就好。

  • 唐堂@贝壳...
    2018-12-24
    2
    期待后续文章~解放自己的劳动生产力
    展开
  • it-spurs
    2019-02-17
    1
    购买了课程,学完了目前更新过的所有课程,除了测试这块,比较难推动,其他的基本都原来都践行,或者正在准备在落实。非常有用的课程,个人觉得,比看JAVA或者微服务的一个专栏,更容易学进去,也更有直接的收获,也更迫切需要。技术类课程到处都是,不花钱也可以找到,但是对于程序员的效率提升,整体能力的提升的课程较少,我之前也是一直觉得程序员就是写代码,但是新公司半年的加班告诉我,写代码成本太高,客户,产品经理一句话就可能让你多加几天班,但做出的功能却在业务上并未带来多少意义。我们不是执行指令的机器,也讨厌客户说的那句,你们只管写代码就好了,不要总是提什么拆分任务评估工时,跟她讲条件。按刘慈欣整理定律的方式来整理客户和开发的经验:1.甲方永远觉得付了钱,让乙方多干活也理所当然。2.开发时间是比较难评估的,一定要预留缓冲时间,即使多出来时间,也可以用来优化。3。技术是硬知识,独立思考和沟通,个人管理与项目管理是软知识,软知识是我所欠缺的,有更好的软知识可以事半功倍,可以处理各个上下文的问题。还有最直接的,把甲方拍大腿想的需求推掉,至少晚上更有时间去学习那些技术。
    展开

    作者回复: 我希望专栏的读者在学过之后,遇到事情开始动脑想想为什么和怎么做,你的回复让我觉得我的初衷达成了。

  • 王小勃
    2018-12-28
    1
    打卡
    展开
  • 杨溢
    2018-12-24
    1
    已购买,坐等大佬更新
    展开
  • Panda
    2018-12-24
    1
    码出高效
    展开
  • One day
    2019-05-07
    总感觉漏掉了什么,重读一次或许别有一番风味
    展开

    作者回复: 常读常新

  • K战神
    2019-04-15
    以前看了多次这个专栏,感觉没啥用吧。但是今天看了看里面的一篇文章,发现都是干货。都是很接地气的实战经验。也有很多自己工作中的痛点。现阶段正处于刚刚转管理的纠结和各种水土不服过程中。很多工作知道还可以做得更好。但是就是没有一套有效的方法或者从根上心态就不对等等很多这样的问题。希望可以通过这个专栏,将心态和工作经验适当的总结和移植看看效果。
    展开

    作者回复: 多谢你发现了这个专栏有用之处,希望它可以帮助到你。

  • 火山飘雪
    2019-04-14
    老师,你好!你说古人是凭直觉,说地是平的,方的,这是不正确的,在古天文学家张衡的《灵宪》已经说明了地是圆的。并且古人并不是通过平直觉或想象就妄下结论的。不要感觉现在人就比古人聪明。
    展开

    作者回复: 多谢提醒,准确地说,人习惯于用直觉,与古今无关,这是一种节省能量的做法,但不适合处理复杂事物。

  • 北风一叶
    2019-04-01
    貌似是这样,很多时候都在为之前的考虑不清楚而买单
    展开
  • Max
    2019-03-29
    要做工程师,拒绝做码农……今天开始打卡,跟着老师走正道😉
    展开

    作者回复: 欢迎加入!

收藏