尚未入职的时候我就会想,这篇文章的标题会是怎样,一年?两年?更短,或者更长。尘埃落定,虽只有大半年的时间,四舍五入下,还是写成了一年。2016 年中,彼时尚未毕业,也尚未入职,耳闻一些消息,写下了怀着被抛弃的恐惧在奋斗中前行;现在看来,也不过是人云亦云罢了。我读书少,却也是发自内心的敬佩公司和团队;这是一个伟大的公司,有着一致的目标与坚韧的团队,能成他人不能之事。不过其模式确实也难以复制,特别是对于初创团队,某些优秀的特性反而会是致命毒药。
入职之前,断断续续也有个几年不成气候的数十人的创业型技术团队协调经验,也算是带着许多的疑问与求教的心加入;大半年下来,印象或者说感悟最深的,当属“研发效能”与“组织气氛”这两个词。不同公司的模式,价值观可能是截然不同的,个人浅见,菊场能够以其强力的目标管理与组织气氛,磨平棱角,将不同能力、背景的人绑合在一起,形成强大战斗力。而一些公司则是会更强调选择合适的人,充分发挥个人的主观能动性,最终形成快速突击的能力。汝之蜜糖,彼之砒霜,不同背景、能力、想法的人的最佳选择自然也是不一样的,适合的场所也是不一样;对于大部分普通人而言,尽量让自己顺势而行,莫逆流而上。
技术人员可能会陷入自己的理想国,从四年前初创团队开始,不断地与真实进行磨合,认识到世界,或者说是人的多样性。很多时候并无法做最好的选择,只能做最合适的选择;存在即有其合理性,面对现实,忠于理想,命运还是要掌握在自己手里。
研发效能是广泛而又直观的概念,笔者目前以该词来度量某个研发团队的真实价值,在下文有详细阐述。而组织气氛,却是笔者之前尚未认真考虑或面对过的;从学校里出来,没经历过正规军,可能会觉得大家每天开开心心就足够了。与经历过物质较为匮乏年代的 80 后相比,对于 90 后一代管理的复杂性也在不断增加;物质生活的相对富裕使得并不能简单的物质激励就能解决一切问题,我们可能会考虑个人的兴趣,考虑未来的空间等等。这也就意味着针对合适的岗位,招聘合适的人也愈发困难;才不配位,对团队与个人都有压力,太多优秀则又难以安定,往往也会给团队带来噪音,使得难以力出一孔。从工作本身,无论喜欢或者排斥,干好本职工作都应该是程序员的基本素养。我也看到了些许因为环境的不合适,或者期望落空导致的消极与抵抗,不利于自己,也不利于团队。人生苦短,及时发泄,不喜欢就转换方向,何必怨天尤人,即委屈了自己,也委屈了他人。
时间尚短,感慨不多,本文也聊为注脚,提醒自己莫忘所得。下文是笔者的 Awesome Coder 的导读语,加在此处也作为笔者对于研发效能的浅述。
在这个知识爆炸与终身学习/碎片化学习为主的时代,我们面临的问题之一就是如何进行有效学习,不仅能有效平衡广度与深度,并且能真正的积淀下来,提升自己的研发效能。笔者个人浅论,技术能力的培养主要分为三个方面:知识广度,编程能力与知识深度。
所谓知识广度,即是为实际问题选择合适的解决方案的能力,广义来说也是眼界与格局的表现。它并不拘泥于某个技术方向或者行业领域,而需要对传统/流行的各类语言、工具、框架、库、服务等有一定的认识;能够明晰各个方案的优劣,并在较高的层次(High Level)描述相关原理。知识广度的拓展与保持需要建立在庞大的阅读量与知识沉淀能力上,笔者习惯利用碎片时间浏览 HN, Reddit, Medium, Twitter 来了解资讯文章,在维护 Frontend Weekly, 每周阅读清单与前端开发周报的过程中也不断强迫自己去阅读与探究。另一方面,笔者坚定地即认为,唯有建立符合自己认知方式的知识图谱,才能有效地沉淀知识,明晰知识边界并进行不断地探索。上车伊始,笔者即致力于构建自己的 MindMap, IT 技术图谱与知识架构,并在数年来不断维护与刷新;同时,笔者将日常阅读、学习与实践中发掘的优秀的资料,按照知识图谱中定义的各个领域的知识体系分门别类地存放在 Awesome Links : Guide to Galaxy 中,以方便快速地检索与查找。
知识广度的拓展也并非一蹴而就之事,需得循序渐进,从初窥门径,到登堂入室,最后融会贯通;笔者这几年技术视野与能力的变迁,亦可以参考仓库中的 TechRoad, 技术之路系列文章。另一方面,乱花渐欲迷人眼,太多的碎片化知识反而会使人迷失方向;此时便需要不断阅读 Awesome-CS-Books-Warehouse 中收录的优秀书籍/系列。
所谓编程能力,其外在表现之一即是能够随时随地用合适的语言无阻塞地实现某些功能需求,对于常见的语法,接口,算法,设计模式等能够做到心随意动,信手拈来。编程能力是提升研发效能的重要保障,于笔者而言也是毕生应该追求的目标与爱好之一。笔者的编程能力较弱,日常开发,特别是在多语言多框架并用的场景下,往往会需要不断地中断,查找以继续工作,也是令我颇为苦恼。笔者目前是致力于完善 Awesome Cheatsheet: 语法速览, 实践备忘,从零到一,上手即用,对于日常开发中用到的相关知识的备忘录/清单进行总结, 快速掌握或者回顾某个语言/框架/工具的语法或使用要点。同时将常用的,有借鉴或者锻炼价值的代码片,沉淀到 coding-snippets: Code Snippets, DataStructure, Algorithm and DesignPattern Implementations for Several Programming Language, Web, etc. 中。
所谓知识深度,即是能够对某个方面做到深入了解,并且达到融会贯通,洞若观火,可以随心所欲地加以扩展、优化、创新等改造或变换。这方面则更加的见仁见智,不同的领域与方向对于深度的定义与挖掘方向也是千差万别。笔者自知能力有限,也不敢妄加评判,根据自己浅薄的认知将常见的工程师成长路径总结在了 RoadMap, 成长路线图 中,此外若有兴趣可以前往笔者的 Github 笔记仓库浏览指正某些领域的浅薄探究。
感谢,菊场;你好,未来几年的伙伴们。