程序员的精神分裂——扮演上帝和木匠编程可谓是一项纯脑力劳动,程序员们专注于代码,并用它构建起一个虚幻的世界。
而这个虚幻世界可以不大,但世界范围内的每一个细节都要足够夯实,甚至是里边的一块砖都要实实在在地被考虑和实现。
所以在编程的过程中,各位猿们往往是一个脑袋,两种身份!
于是乎,程序员在构建世界的时候,出现了一种独特的精神分裂现象:起初他像个上帝一样开天辟地,指点江山,甚是过瘾,我们就叫它上帝模式。
可是一旦框架搭建完成,规则制定完毕,世界里被构建的每一个物种或者建筑都要细细地一笔一笔雕刻完成,极度辛苦,我们就称它为木匠模式。
正是因为这两种身份的思考方式差异巨大,心情差异也巨大,经常来回切换,不得不让我们猿们感到“精神分裂”。
那你什么时候做上帝又什么时候做木匠呢?
“上帝模式”,听名字就觉得很高大上,其实他离大家并不远。最普通的,当你在设计类的封装和继承时,你已经在和上帝打交道了。
程序员当上帝的时候,在干什么呢?
处于上帝模式的时候,程序员似乎在充当一个造物者,是他们最有成就感的时候,能极大地感受到编程的乐趣。
上帝模式干的最主要的工作是,如何把代码更高效地组织起来。把小的东西组合成大的,添加简单的东西慢慢变复杂,让静的东西变动。
上帝模式中有几个技术层次。
最底层是类(或结构体)的封装和继承设计,还有流程设计。
建立在这之上呢,有各种设计模式。
很多人以为设计模式就顶天了,其实上面还可能有架构模式,就是大家经常用的各种框架。
而架构模式之上,还要考虑到物理架构,到底跑在哪些机器之上。
上帝模式的特点如下。
技术发展不会那么快。木匠模式的技术,变化周期大概一两年。而上帝模式的技术,变化周期大概是 10 年、20 年甚至更长。这对大龄程序员是个好消息,因为有充足的时间去消化新技术。
它的知识点比较散,比较虚,让你列出来吧,又没那么好归纳。其中设计模式和架构模式前人已经总结得非常好了。但除此之外,还有好多技巧比较散,不是那么好把握。很多选择只能是具体问题具体分析。
由于应用场景不一样,好坏的标准很难精确,所以最后每个人的领悟可能会不一样。
即使有提高,但效果不会立竿见影,还需要长期的磨练和检验。
积极活跃的技术分享者相对少。
虽然上帝模式的技术,是每个程序员应该追求的目标。不过,这个过程不仅需要持续地尝试,更需要自己的思考和总结。
以上步骤,反复历练,你定会悟到属于自己的东西。
产品设计原本不是一个独立的工种,起初是程序员自己兼着干。
21 世纪初,随着互联网的迅猛发展,产品设计作为一个专门的细分行业横空出世了。但就是这么一个不经意的不起眼的行业细分,让程序员在上帝模式中退避三舍,这就值得我们好好聊聊了。
在上帝模式中,还有一个很重要的模块,因为它比较特殊,不涉及编程,但是其重要性不亚于任何代码的架构设计,这就是产品设计。
从事产品设计的人,即便不管人,也一般称为“产品经理”。如果程序员想当经理,那么转产品设计是个很好的途径,只要转过去,就变成了“经理”。
在多次和产品经理打交道的过程中,你可能对产品设计的重要性深有体会。比如,遇到原有设计难以使用的情况,产品经理通过更改用户操作的流程,大大降低了难度。也遇到过本来挺简单的事,产品经理为了满足一个小需求而大大增加了难度,导致整个系统架构变得很复杂。
如今,很多程序员对产品设计者有着不同程度的误解。
首先,误解他们就是负责产品的界面设计的。
但情况远不止如此,你得懂交互吧?你得懂视觉吧?还得懂市场吧?拿产品经理自己的话来说:产品设计的首要职责是决策该做什么,不该做什么?要达到的指标是什么?如何拆分优先级并落地?上线后的效果跟进以及之后的迭代优化等。界面呢,只是最终的一个呈现。背后的逻辑和思考才是最耗时、最考验人的。
其次,误解他们的工作内容至少比编程更容易、更简单。
实际上不是这样的,产品设计更需要经验和灵感。初级程序员写出来的烂代码,只要能运行,用户是不知道的。但产品设计者一旦弄出一个糟糕的设计,其欠缺之处用户会一目了然,这是躲不掉的。
而且产品经理也要不断地去沟通和反复修改自己的设计,这不比程序员调试代码更容易。
自从产品经理这个角色诞生以来,他们和程序员的关系变得非常微妙。
在产品设计者的眼里,程序员就是将他们脑子里的设计化为实物的劳动力而已。程序员是受他们间接指挥的,每一个细节设计都是对程序员的命令。
产品设计者比程序员掌握更多的信息。产品或项目的规划进展以及其中各种幕后的曲折和妥协,程序员可能都无从知道。此外,产品设计者思考的角度也处于程序员的前面。例如,针对用户的需求,或者用户不知道自己有这方面的潜在需求,产品经理会首先将这些东西具体化,程序员得到的是最终的决定。
因此,产品经理和程序员在慢慢的长期博弈中,很自然就占领了主导权。随着产品经理这个角色的出现,他们实际上瓜分了相当一部分程序员处于上帝模式中的工作。反过来讲,这无形中让程序员把更多的精力放在木匠模式的工作中,同时也降低了资深程序员的价值。
这听起来着实让人沮丧,幸好事情还远没有到悲观的程度。
和 IT 相结合的行业是很广的,并不是每个行业都有必要请产品经理。实际上,很多产品设计还是由资深程序员兼任的。
对于上层的应用软件来讲,也就是对广大用户提供操作界面的程序,其产品设计是非常重要的,好的设计能让编程架构事半功倍。但软件领域也是很广的,并不是所有软件都是直接面向普通大众用户的。例如,在数据挖掘系统中,产品经理基本退化到“项目管理”的功能了,最主要的驱动力还是程序员自己。
而每个程序员也应该具有产品经理的思维。程序员作为第一手的用户,如果多花点心思去体验,理应对该产品有最深的理解。所以,如果发现界面设计的问题,应该勇于发表自己的看法。
但请注意:一定要站在用户体验的角度去和产品经理争论,这样才能占领制高点。切不可直接站在实现难度的角度去争论,这是大忌讳!尤其是双方刚合作处于磨合期时,对方搞不清楚到底是真的实现困难,还是你技术能力不行。
程序员在木匠模式下,处理的是最细节、最琐碎、最具体的实现,每行代码都一丝不苟地完成,还要确保它们没有 bug。
在编程中,大多程序员大部分时候是做木匠,扮演上帝的时间其实挺少的。可见,木匠的工作效率对于当前整个项目的开发效率是决定性的。
虽然长期来看,上帝比木匠更重要。但每次轮到当下,木匠又比上帝更重要。
那么,如何才能成为一个高效的木匠呢?
中华民族 2000 年的历史告诉我们:想要致富,必须勤勤恳恳,没什么捷径可走。而程序员的木匠模式能力的积累,也是这样的,没有捷径可走。
随着互联网的普及,各种木匠模式的资料也得到极大发展,很多资料规整得更好,容易搜到,容易看懂。除非特别前沿的技术,否则针对一般具体问题,你都能比较容易地找到相关信息。尤其是开源代码的流行,更能直接帮助初学者去提高,去积累。所以,现在的初级程序员比前辈要幸福,上手更容易。
随着时代的发展,木匠模式的门槛越来越低,也意味着竞争压力也越大。虽然门槛低,容易学,但并不意味着做木匠很幸福。长期看,木匠很被动,因为木匠们所积累的知识点,隔三差五可能被清零。针对这个特点,刚毕业的程序员会觉得很爽,因为刚毕业就和工作 10 年的人面对差不多一样的处境。而工作 10 年的人就觉得很受伤,经常被逼着反思要不要继续程序员生涯。
上帝的生存很优雅,虽然他的工作内容也在进化,但进化的时间轴要慢许多。木匠的使用工具进化很快,稍一懈怠,学习速度就可能赶不上新的变化。你必须认识到:一个程序员若想依靠纯技术而体面地度过漫长的中年危机,必须在上帝模式中有充足的积累。
所以各位猿们加油吧!
本周小编在次力荐这本《代码里的世界观》,深受大家欢迎!
作者余叶老师是现任 IBM 的架构师,这是他对自己 13 年编程生涯的总结和思考。没有浮夸的大道理,都是平时工作中积累下的硬核经验。除了上帝模式和木匠模式之外,余叶老师也在书中谈到,程序员如何在技术成长道路上打怪升级,以及程序员的中年危机如何度过等热门话题。
小伙伴留言说说,你现在处在什么模式?上帝模式还是木匠模式?
如果你觉得这两个模式不足以形容你,那么你会给现在自己所处的状态取个什么名字呢?
极客时间商城,只为程序员精选
更多好书请戳
1、头条易读遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2、本文内容来自“InfoQ”微信公众号,文章版权归InfoQ公众号所有。