最近耗子叔去世了,翻了翻他的博客,最近在看一些“程序人生”相关主题的博客或视频。耗子叔是一个精力充沛,纯粹的技术人,时刻保持对新技术的追求和学习。他对技术的态度,对程序员职业生涯的发展的建议让我很受启发。
挑战无处不在 说到了大部分人的现状,不热爱思考,觉得需要自己去做某某事情才能让自己成长有挑战,诚然,工作中能够做有对应的成长当然是最好的,但是并不是每个人都有这种机会,在没有这种机会的时候,怎么去保持自己的成长和思考,去做“架构推演”,如果是“我”应该怎么去设计这个东西。
我们需要专职的 QA 吗 这个让我非常的反思现在的现状,之前我问过一些团队的同学,几乎没有人做 e2e 测试和单测,包括我。这个问题根源就是在公司中的开发流程的问题,公司更希望有人有专门的职责去干测试,而不是软件开发去干测试,在一个业务团队中,测试是有专门的人去做的。当然在那些架构团队中,可能有专门的测试,但程序员是一定要写单测的。但是在业务团队,不写 e2e 和单测的情况就很常见了。我看了这篇文章后,深有感触,一个合格的“RD”,也要掌握全面的测试能力,这样才能对自己的项目的质量有依据的把控。而不是觉得,“我写的代码,能有 bug?是不是你的机器有问题,我电脑上是好的呀”。
优秀程序员的十个习惯 程序员更应该拥有广阔的视野,不狭隘的见解,不拘泥于当前技术栈的思考,工具本身适用的场景不同,合适的时候学习和使用某些工具才是正解,不要偏执的看某些工具,虽然你不喜好,但用一用才有资格去评鉴。不过这篇文章让我看的想去学习一下 vim , 之前一直觉得成本很高就没有去学。
再谈“我是怎么招聘程序员的” 这个文章很有意思,表面上说的是招聘,实际上说的是一个人的能力成长的鉴别方式。
分为操作,知识,经验,能力。
操作是某个人能够使用的技术,比如你会用一些 nodejs 框架,例如:eggjs,nestjs,你知道中间件是什么,洋葱模型是什么,IOC、DI 是什么,怎么实现,一般用来干什么,这些都是操作。
知识是对某个技术的深入理解,这个技术可以是手上正在使用的技术,例如:eggjs 和 nestjs 的模式的不同,优缺点比较,在对应的 golang、java 中有没有对应的模式,nestjs 是怎么产生的,借鉴了他们的生态怎么样,和 node 相比相关的 orm 有哪些生态,为什么有这些生态,他们诞生的背景,历史原因。这些都是知识。看待一门技术,先在顶部摸索一下,知道现代有哪些工具,然后 drilling 下去,看看从历史上,为什么会出现这门技术,当时的背景是什么,这样才能有一个全局全面的认识。当然,也可以是底层的无语言的技术。
经验是一个人的经历,更多时候是对知识的使用,以及在特定场景下遇到什么性能瓶颈,bug。是对操作和知识的使用和反思,是对他人的经验的模仿、交流和总结。这一部分主要是随着年龄和经历的增长而增长的。
能力是一个人当前的思想境界,但是一个人的思想境界其实在早期的时候就被定义了,这个描述了一个人做事情的态度、性能、思路、行为、风格、热情、想法。大部分人在上了年龄了后,很难有改变。只要有能力,那么上述三个东西对这个人来讲只是时间问题。对于一个新手,上述三个都有限,但并不能意味着他不行,但对于老手的话,不行就是能力不行。你可能暂时怀才不遇,但我不相信你长期怀才不遇,如果是的话, 那么你必然些问题其让你的能力发挥不出来。而此时,“没有经历过”只会是你“没有能力”的一个借口。这句话我还是很认同的。
当然耗子叔有太多的文章和思想没有在这里分享了,以前只是在 twitter 上看到一个活跃的中年人经常分享一些自己的见解。我也是才入行不久,所以很可惜没有过多关注,直到他去世了我才去了解他的博客,他的思想。
这个是最近在 b 站 看到的一个系列,作者好像是一个字节的 ld,不过这都不重要。我觉得如果是我刚毕业的时候看到,能给我带来更大的感触,不过也不一定,可能只有到现在的境地才能有这种感触吧。
up 主对新人程序员进行了一些成长的建议,让我进行了一些反思,现在我还处于练气和筑基期,怎么做才能对自己的长期成长有帮助?
看了视频后,有些点,比如选好业务(团队)、遇到好的师傅。好的业务会带来高的人才密度,高的人才密度会给初期带来更好的职业习惯。
不过可惜的是,我的职业生涯的初期(可以说过了一半了吧...),没有遇到一个很好的师傅,给我建议的更多是比较高 level 的学长和 ld,对我来讲可能有些太远了。在技术上主要是和同辈的朋友进行交流为主,这一点只能通过看开源项目来弥补了。
在筑基期后,职业发展和技术功底的建设是更重要的事情
职业发展必须谈的一点是,业务上作为团队的主力输出,高质高效交付(本职工作),如果上述做不到就别谈了。然后才是超预期的产出(团队资源和所有人发展诉求的矛盾),交代的事能否做到 100 分,怎么去看 100 分这个事,有人专门给你挑刺,是否挑的出刺?这个是一个很好的思考角度。
交代之外的事情能做什么,这里就是当一个有心人,有问题,抱怨解决不了,看怎么解决,真正形成一个有效解法,去解决这些问题,这就是个超预期的事情。
职业发展之后,需要进行一个技术功底的扎实提升。以前一直在想一个事情,越来越多的知识,新出的也很多,怎么才能学习得过来呢?成熟的领域,会出现一些 all in one 的经典书籍,一些前人的经验和概念。这个时候阅读这些经典的作品就行,能让 level 快速升到一个比较高的境地。之后应该更多的是面向 5 年甚至更久的时间去学习,切忌别贪快、贪心。不应该走马观花的了解新技术就足够了,对程序设计、系统的这些基础的东西进行深入的学习。这才是职业生涯长期发展的根本。
总之,这个 up 主的建议非常的不错,我现在也是在这个阶段,希望能够在这个阶段做好一些事情,更沉下心来专注一些。
CoolShell Further Readings
> 优秀程序员的十个习惯-2009-03-22
> 程序员技术练级攻略 - 2011-07-18
> 简明 VIM 练级攻略 - 2011-09-07
> VIM 大冒险 - 2012-04-26
> 我们需要专职的 QA 吗 - 2012-04-11
> 挑战无处不在 - 2012-04-17
> 对技术的态度 - 2012-08-16
> 软件开发的“三重门” - 2012-01-30
> 我是怎么招聘程序员的 - 2009-12-02
> 再谈“我是怎么招聘程序员的”(上) - 2011-04-20
> 再谈“我是怎么招聘程序员的”(下) - 2011-04-20