专栏名称: InfoQ
有内容的技术社区媒体。
分享
今天看啥  ›  专栏  ›  公众号  ›  InfoQ

程序员的精神分裂——扮演上帝和木匠

InfoQ  · 公众号  · 科技媒体  · 2019-04-12 17:50

程序员的精神分裂——扮演上帝和木匠编程可谓是一项纯脑力劳动,程序员们专注于代码,并用它构建起一个虚幻的世界。

而这个虚幻世界可以不大,但世界范围内的每一个细节都要足够夯实,甚至是里边的一块砖都要实实在在地被考虑和实现。

所以在编程的过程中,各位猿们往往是一个脑袋,两种身份!

于是乎,程序员在构建世界的时候,出现了一种独特的精神分裂现象:起初他像个上帝一样开天辟地,指点江山,甚是过瘾,我们就叫它上帝模式。

可是一旦框架搭建完成,规则制定完毕,世界里被构建的每一个物种或者建筑都要细细地一笔一笔雕刻完成,极度辛苦,我们就称它为木匠模式。

正是因为这两种身份的思考方式差异巨大,心情差异也巨大,经常来回切换,不得不让我们猿们感到“精神分裂”。

那你什么时候做上帝又什么时候做木匠呢?

01 上帝模式:开天辟地,指点江山

“上帝模式”,听名字就觉得很高大上,其实他离大家并不远。最普通的,当你在设计类的封装和继承时,你已经在和上帝打交道了。

程序员当上帝的时候,在干什么呢?

处于上帝模式的时候,程序员似乎在充当一个造物者,是他们最有成就感的时候,能极大地感受到编程的乐趣。

上帝模式干的最主要的工作是,如何把代码更高效地组织起来。把小的东西组合成大的,添加简单的东西慢慢变复杂,让静的东西变动。

上帝模式中有几个技术层次。

  • 最底层是类(或结构体)的封装和继承设计,还有流程设计。

  • 建立在这之上呢,有各种设计模式。

  • 很多人以为设计模式就顶天了,其实上面还可能有架构模式,就是大家经常用的各种框架。

  • 而架构模式之上,还要考虑到物理架构,到底跑在哪些机器之上。

上帝模式的特点如下。

  • 技术发展不会那么快。木匠模式的技术,变化周期大概一两年。而上帝模式的技术,变化周期大概是 10 年、20 年甚至更长。这对大龄程序员是个好消息,因为有充足的时间去消化新技术。

  • 它的知识点比较散,比较虚,让你列出来吧,又没那么好归纳。其中设计模式和架构模式前人已经总结得非常好了。但除此之外,还有好多技巧比较散,不是那么好把握。很多选择只能是具体问题具体分析。

  • 由于应用场景不一样,好坏的标准很难精确,所以最后每个人的领悟可能会不一样。

  • 即使有提高,但效果不会立竿见影,还需要长期的磨练和检验。

  • 积极活跃的技术分享者相对少。

虽然上帝模式的技术,是每个程序员应该追求的目标。不过,这个过程不仅需要持续地尝试,更需要自己的思考和总结。

   while(持续努力){
                  尝试;
                  修改;
                  思考;
                  总结;
}

以上步骤,反复历练,你定会悟到属于自己的东西。

和产品设计的争夺

产品设计原本不是一个独立的工种,起初是程序员自己兼着干。

21 世纪初,随着互联网的迅猛发展,产品设计作为一个专门的细分行业横空出世了。但就是这么一个不经意的不起眼的行业细分,让程序员在上帝模式中退避三舍,这就值得我们好好聊聊了。

上帝模式中的产品设计

在上帝模式中,还有一个很重要的模块,因为它比较特殊,不涉及编程,但是其重要性不亚于任何代码的架构设计,这就是产品设计。

从事产品设计的人,即便不管人,也一般称为“产品经理”。如果程序员想当经理,那么转产品设计是个很好的途径,只要转过去,就变成了“经理”。

在多次和产品经理打交道的过程中,你可能对产品设计的重要性深有体会。比如,遇到原有设计难以使用的情况,产品经理通过更改用户操作的流程,大大降低了难度。也遇到过本来挺简单的事,产品经理为了满足一个小需求而大大增加了难度,导致整个系统架构变得很复杂。

如今,很多程序员对产品设计者有着不同程度的误解。

首先,误解他们就是负责产品的界面设计的。

但情况远不止如此,你得懂交互吧?你得懂视觉吧?还得懂市场吧?拿产品经理自己的话来说:产品设计的首要职责是决策该做什么,不该做什么?要达到的指标是什么?如何拆分优先级并落地?上线后的效果跟进以及之后的迭代优化等。界面呢,只是最终的一个呈现。背后的逻辑和思考才是最耗时、最考验人的。

其次,误解他们的工作内容至少比编程更容易、更简单。

实际上不是这样的,产品设计更需要经验和灵感。初级程序员写出来的烂代码,只要能运行,用户是不知道的。但产品设计者一旦弄出一个糟糕的设计,其欠缺之处用户会一目了然,这是躲不掉的。

而且产品经理也要不断地去沟通和反复修改自己的设计,这不比程序员调试代码更容易。

程序员和产品设计者的关系

自从产品经理这个角色诞生以来,他们和程序员的关系变得非常微妙。

在产品设计者的眼里,程序员就是将他们脑子里的设计化为实物的劳动力而已。程序员是受他们间接指挥的,每一个细节设计都是对程序员的命令。

产品设计者比程序员掌握更多的信息。产品或项目的规划进展以及其中各种幕后的曲折和妥协,程序员可能都无从知道。此外,产品设计者思考的角度也处于程序员的前面。例如,针对用户的需求,或者用户不知道自己有这方面的潜在需求,产品经理会首先将这些东西具体化,程序员得到的是最终的决定。

因此,产品经理和程序员在慢慢的长期博弈中,很自然就占领了主导权。随着产品经理这个角色的出现,他们实际上瓜分了相当一部分程序员处于上帝模式中的工作。反过来讲,这无形中让程序员把更多的精力放在木匠模式的工作中,同时也降低了资深程序员的价值。

这听起来着实让人沮丧,幸好事情还远没有到悲观的程度。

  • 和 IT 相结合的行业是很广的,并不是每个行业都有必要请产品经理。实际上,很多产品设计还是由资深程序员兼任的。

  • 对于上层的应用软件来讲,也就是对广大用户提供操作界面的程序,其产品设计是非常重要的,好的设计能让编程架构事半功倍。但软件领域也是很广的,并不是所有软件都是直接面向普通大众用户的。例如,在数据挖掘系统中,产品经理基本退化到“项目管理”的功能了,最主要的驱动力还是程序员自己。

而每个程序员也应该具有产品经理的思维。程序员作为第一手的用户,如果多花点心思去体验,理应对该产品有最深的理解。所以,如果发现界面设计的问题,应该勇于发表自己的看法。

但请注意:一定要站在用户体验的角度去和产品经理争论,这样才能占领制高点。切不可直接站在实现难度的角度去争论,这是大忌讳!尤其是双方刚合作处于磨合期时,对方搞不清楚到底是真的实现困难,还是你技术能力不行。

02 木匠模式:致富只有勤劳一条路 

程序员在木匠模式下,处理的是最细节、最琐碎、最具体的实现,每行代码都一丝不苟地完成,还要确保它们没有 bug。

在编程中,大多程序员大部分时候是做木匠,扮演上帝的时间其实挺少的。可见,木匠的工作效率对于当前整个项目的开发效率是决定性的。

虽然长期来看,上帝比木匠更重要。但每次轮到当下,木匠又比上帝更重要。

那么,如何才能成为一个高效的木匠呢?

中华民族 2000 年的历史告诉我们:想要致富,必须勤勤恳恳,没什么捷径可走。而程序员的木匠模式能力的积累,也是这样的,没有捷径可走。

随着互联网的普及,各种木匠模式的资料也得到极大发展,很多资料规整得更好,容易搜到,容易看懂。除非特别前沿的技术,否则针对一般具体问题,你都能比较容易地找到相关信息。尤其是开源代码的流行,更能直接帮助初学者去提高,去积累。所以,现在的初级程序员比前辈要幸福,上手更容易。

随着时代的发展,木匠模式的门槛越来越低,也意味着竞争压力也越大。虽然门槛低,容易学,但并不意味着做木匠很幸福。长期看,木匠很被动,因为木匠们所积累的知识点,隔三差五可能被清零。针对这个特点,刚毕业的程序员会觉得很爽,因为刚毕业就和工作 10 年的人面对差不多一样的处境。而工作 10 年的人就觉得很受伤,经常被逼着反思要不要继续程序员生涯。

上帝的生存很优雅,虽然他的工作内容也在进化,但进化的时间轴要慢许多。木匠的使用工具进化很快,稍一懈怠,学习速度就可能赶不上新的变化。你必须认识到:一个程序员若想依靠纯技术而体面地度过漫长的中年危机,必须在上帝模式中有充足的积累。

所以各位猿们加油吧!


本周小编在次力荐这本《代码里的世界观》,深受大家欢迎!

作者余叶老师是现任 IBM 的架构师,这是他对自己 13 年编程生涯的总结和思考。没有浮夸的大道理,都是平时工作中积累下的硬核经验。除了上帝模式和木匠模式之外,余叶老师也在书中谈到,程序员如何在技术成长道路上打怪升级,以及程序员的中年危机如何度过等热门话题。

文末畅聊

小伙伴留言说说,你现在处在什么模式?上帝模式还是木匠模式?

如果你觉得这两个模式不足以形容你,那么你会给现在自己所处的状态取个什么名字呢?

极客时间商城,只为程序员精选

更多好书请戳👇阅读原文


今天看啥 -
本文地址:http://www.jintiankansha.me/t/WDEqEdkKEV