程序员的价值观(摘自凤凰架构)
聊完编程与程序员、架构师、管理者的发展,我们再来探讨两个程序员价值观方面的问题:
- 在工作中所需要的知识技能,自己并不感兴趣,该怎么办?
- 在工作中接触不到的知识技能,是否有必要专门去了解、学习,乃至刻意锻炼?
工作的职责与自己感兴趣的方向一致、与自己知识体系缺失形成互补,这样的机会可遇不可求。今天的软件业已高度成熟,分工日益细致,对于多数人来说,聚焦在少数几个点上拧螺丝是常态,能够在广袤的舞台上造火箭才是特例。所以,上面两个问题不一定是每位同学都认真思考过,但我相信它应该是每位程序员都实际遇到过的,譬如以下这位同学在课程第一篇中的提问,是否在你的职业生涯中的某个时刻,有过相似的感受?
周老师,想了解一下你之前是怎样从业务往架构转型的? 我是工作两年的小白,一直都很想学习架构方面的课程,但是由于工作全是业务逻辑,而且是极其复杂繁琐的业务,每天都是对着协议研究业务实现,感觉自己都困在业务里面无法自拔。
人生苦短,光阴易逝,把有限的时间和精力投入到对自己最有价值的方向上显得尤为关键,多数人都能接受“选择永远比努力更重要”的观点,但进一步问什么才是好的选择时,就只有少数人能对自己学习的知识技能、从事的工作方向做出定量的价值判断。这里我以上面提问为例,拿出自己的判断模型,供你参考:
价值 = (技能收益 + 知识收益) × 提升空间 / 投入成本
- 技能收益:问题里“每天都是对着协议研究业务实现”就属于典型的技能,它往往代表着直接收益。一项每天工作都要用到的技能,无论你是否感有趣,都值得花一些时间精力去掌握,它至少对短期利益起到了明确的支撑作用;反之,永远都不会派上用场的屠龙术,再高大上也是水月镜花。
正视技能收益的意义在于避免自己变得过度浮躁,以“兴趣不合”、“发展不符”为借口去过度挑剔。我也提倡兴趣驱动,提倡快乐工作,但不设前提条件的兴趣驱动就未免太过“凡尔赛”了,首先在社会中务实地生存,不涉及是否快乐,先把本分工作做对做好,再追求兴趣选择和机遇发展,这才是对多数人的最大的公平。 - 知识收益:问题里“架构方面的课程”有不少都属于知识,知识的收益往往是间接的,最终会体现在缩减模型中的“投入成本”因素,即降低认知负荷(Cognitive Load)上。世界上鲜有“烟囱式”的专业人才,专才的知识体系基本还是“金字塔式”的,在领域里能够显著超过他人高度的前提条件,往往便是拥有着超过他人的知识广度。具体到软件开发中,像计算机体系结构、编译原理、操作系统原理等原理性的知识,对于不写编译器、不开发操作系统的程序员,在实践中几乎找不到直接的应用场景的,但它们毫无疑问是程序员知识体系的基石,是许多实用技能和常见工具溯源的归宿。
花费一定成本去学习这类知识,目的是要将自己的知识点筑成体系,将大量的不同的零散的知识点、通过内化、存储、整理、归档、输出等方式组合起来,以点成线、以线成面,最终形成系统的、有序的、清晰的脉络结构,这就是知识体系。程序员是需要终身学习的群体,当新的信息输入时,如果能在知识体系中快速找到它应该安放的位置,定位它的问题与解题空间,找到它与其他知识点的关联关系,那你接受新信息的认知负荷就降低了,通俗地讲,你就有了比别人更高的学习效率,更敏锐的技术触觉。 - 提升空间:如果一项工作对你来说是个全新的领域,甚至能称为是一项挑战,那风险的背后往往也蕴含有更高的收益。但我将提升空间归入到价值判断的因素之中,更重要的目的是为了规避舒适区的陷阱。人性会在持续的颓废时发出示警,却容易被无效的努力所欺骗。去做已经完全得心应手的事情,不耗费什么精力,不会觉得痛苦困难,如果把它当作打游戏看电影般的娱乐消遣,放松自己是合适的,但不应该再指望从中追求什么价值。
没有价值,是因为提升空间是可以下降至零,但投入成本不可能为零,因为成本中不仅包括精力,还包括时间,花时间重复去做已经完全熟练的事情,相当于计算分子为零的算式,结果必然是没有价值的。 - 投入成本:在这门架构课程中,我经常讲的一个词是“权衡”,经常说的一句话是“凡事不能只讲收益不谈成本”,在我的价值模型里,收益大小也是必须在确定的成本下才有衡量比较的意义。这里的成本,既包括你花费的时间、金钱与机会,也包括你投入的知识、精神与毅力。
强调投入成本,是希望你不要去钻牛角尖,如果一项知识或技能,你学习起来非常吃力,花费大力气弄懂之后过一段时间却又会迅速遗忘掉,这很可能是因为你既没有实际应用它的场景,知识体系中也没有建立好掌握它的稳固的前置基础。这种就属于你目前还拿不动的东西,不妨趁早放手,先做好减法,才能做好加法;也不必觉得可惜,如果它对你来说是必要的,一定还会再次出现,想躲也躲不掉。
以上便是我的价值判断模型,每个人都应该有属于自己的价值观,你可以参考,却不必与谁的一致;也并不是提倡凡事将价值判断当作公式去进行计算,而是希望你能养成一种类似的思维习惯