上周研究网上招聘的岗位描述,并结合自己的经验与思考,将工作中的能力划分为3个方面:技术熟练、分析设计、管理。每个方面有不同的关键问题与提升方式,希望借此自勉,找到合理方向并努力提升。

技术熟练

我理解技术熟练这是最直接的一个方面,作为一个技术专家,对技术的熟练是必须的。

这个方面遇到的主要问题是:新技术层出不穷,永远学习不完。

我面对这个问题的思路分深度和广度说:

  • 深度上进一步有进一步的乐趣,不要担心学不完。平时遇到的问题要彻底弄清楚,至少要能说服自己不留下任何疑点。最好的实践是常常写总结。我计划的《nginx源码解析》系列就属于此方面。
  • 广度上理解新技术的核心原理与典型应用场景(或者是说解决的痛点问题)。例如之前我了解云计算OpenStack就没有精力在源码级别研究,甚至连实验环境都没有完整搭建,更多是看看官网介绍与读书也重点看前2章,能理解到它的价值与原理,细节上就没深入了,如果没有一个合适的应用场景(例如项目需要)我认为是很难熟悉一个技术的总总细节。而这些细节并不一定是了解新技术所必须的。

分析设计

技术熟练上往往能得到一个正确或相对业界主流的方案。而在实际运用中,需要结合需求与实际情况。此时我认为有一种分析设计能力是必须的。

开发者常常需要做出选择,有大有小,一个变量的名词到关键架构决策,无时无刻我们需要做选择下判断。

这个方面的主要问题是:场景复杂,没有完美方案。

我面对这个问题的思路:多比对、多交流、让选择有理有据。

结合实际的场景多交流比对,尽可能全面的考虑问题,全面考虑问题十分依赖经验的积累。经验的积累通过思考提炼,能形成一套方法原则,能抽象出来,那就了不起了。依靠经验的判断作用范围是有限的,总会有超出经验范围的事出现,依靠方法做判断,适用范围就大很多了,人的信心就出来了。能主动提炼出方法的人,也能不断改进方法。例如我不熟悉IOS开发,但我就是有自信,哪天需要我一定是可以胜任的。

所有的选择尽量有理有据,不因为自己的偏见做出错误的选择。学习到一个新技术,感觉手里有了把锤子,看什么都像钉子。而做分析设计时则更复杂,一个问题/场景,需要在各种各样的方案中来回比对,选择一个合适的答案。

管理

工作不可能只面对技术问题,人是一个更重要的方面。这里提到的管理并不仅是管理层的责任,同时也包含了个人的管理。具体的能力包括时间管理、任务管理、流程管理、质量管理、团队管理、沟通能力等等……

在《软技能》一书中提到过一种观念我认为是很有意思。“将自己想象成一个企业,把雇主当作你的软件开发企业的一个客户吧。很多真正的公司也只有一个大客户。”这个想法让工作变得积极主动,不再是一个被动的雇佣关系。

在这个方面理解的主要问题是:有太多东西不受控制。问题总是复杂多变,而人总是符合人性的。关注人,以人为本决不是一句空话。

而我很有限的经验告诉我需要:多读书、多思考、常常反思。真诚勤恳可能是唯一的正解,盲目自大、虚假终究会出问题。


资料索引

  • 《腾讯的技术价值观与技术人才修炼》https://mp.weixin.qq.com/s/Vn0eKvY5AU1DEOrxbOxABQ
  • 《软技能-代码之外的生存指南》https://book.douban.com/subject/26835090/