学生心态与产品演进之路

对于工作稳定的开发者而言,我们每天大多数时间都是在做着我们熟悉的事情。一个又一个不同的业务丢过来,我们却基本上总是使用着我们早已熟悉的技术栈。很多技术先驱们提倡开发者要学会远离自己的 comfort zone,学习一些新的我们所不曾了解的东西。是的,一个没有更高技术追求的开发者很难长久的在技术这条路上走得长远,更是难以达到一定的技术高度。

选择了开发者这条职业之路,也就同时意味着这将是一条不断学习新知的道路。这篇文章将指出一个已经对自己常用的技术栈熟知的开发者,在学习新知的过程中可能会遇到的一个典型的问题。也许这个问题不仅仅是针对开发者,任何一个对自己常接触的业务领域技能熟知的职业人,在接触到新的知识领域时,都有可能会遇到这样的问题。

作为开发者,一个典型的场景就是我们需要在已有技术知识的基础上学习一些新的技术。你可能需要学习一个新框架如何使用、一个第三方服务的 API 如何合理的调用,更甚者,你可能得从后端开发转到前端开发、从移动端开发转到后端开发等等。在学习新东西的过程中,我发现我们极易犯一个心态上的错误——即不能正确的以一个小白的心态来学习新的知识。

这样说可能对开发者而言有失公允,实际情况可能是,我们会主动的使用我们已经掌握的知识作为参考和背景知识来辅助学习新的知识,这其实是一件很自然也很正确的事情。然而,不知道有没有人有这样的感觉,一个已经有一定使用某一框架开发经验的程序员,与一个毫无开发经验的毕业生,同时学习另一个新的框架来实现一个不算太有难度的业务,往往那个毕业生可以先交出成品。当然,这件事不尽然,但确实有这样的情况发生。表面上,似乎已有的开发经验成为了我们学习新知的负担,真的是这样吗?

造成这种现象的原因我觉得可能有以下几种:

1. 可能你并没有真正打心底里认同这门新的技术。

你可能一开始只是听别人说,有些好奇,于是尝试着去了解这门新的技术,然而发现它并没有你想像的那么好,很多指导思想十分陈旧,使用起来也不是那么的优雅。情况可能真的就如你想的那样,也许你已经掌握的技术确实比这门新技术设计上要先进一些,但我觉得另一种概率更大的可能是你还没有真正体会到这门新技术的精髓。它可能表面上看起来有一些蠢,和你已有的认知有一些出入,但你不妨再耐心一些,深入进去,多问一些为什么,了解这门技术这样设计的真正动因,当你真正开始认同这门新技术的时候,你可能就真正打开了另一个新世界的大门了。

我之所以说「你可能还没有真正了解新技术的精髓」这种情况的概率更大的原因是,我们在已有技术的基础上,往往能一眼分辨出比这种技术设计更丑陋的技术有哪些,却不能立马分辨出比这种技术设计更优秀的优秀之处在哪里,这是我们所掌握的编程思想所决定的。既然是能诱使你好奇去尝试学习使用的技术,我想一般应该是设计更先进的技术吧。

当然,你也可能完全是因为团队或上级要求,去学习一门新的技术,如果这门技术的确比你已经掌握的技术设计上更糟糕(或者技术社区中确实大部分人都这样认为),那确实挺难打心底里去认同的。这种情况我建议你好好准备准备,充分了解这门新技术比你掌握的技术差在哪里,然后跟团队的技术 Leader 好好谈谈,争取策反他吧。

2. 你对自己的代码质量要求太高了。

这种情况可能更普遍。对于大多数摆正心态的有经验的程序员而言,并不是他们没有认真学习新的知识,而往往是他们对自己的代码质量要求太高。

我们在已有的知识积累中沉淀出了一些做任何类型开发都需要了解的一些知识,并内化到了自己的知识体系中,比如一些软件工程的思想、一些常用的设计模式等,这些经典的思想限制着我们不愿意写出太烂的代码。我们总是想着我们的代码分层良好、复用程度高、易于后期维护、易于扩展、安全性更好等等,然而此时我们对具体的新技术的掌握还并不允许我们写出这个技术领域符合这些通用技术思想要求的代码。这种具体的技术可能是一门新的语言,你在对这种语言的语法都还不熟悉的情况下,是不可能写出高质量的代码的。然而犹如一张白纸的应届生是不会有这样的顾虑的,能够实现功能可能对他们就已经一种全新的尝试了,所以他们往往可能能更快的做出一个成形的东西来。

这可以说是一种「了解得更多的烦恼」,我们唯一能做的就是摆正心态,再脚踏实地一些,不要还没学会走路就企图要跑。新技术在你还没掌握之前对你而言它就是新的。如果你以前用你已经了解过的技术随随便便就能写出高质量的代码,那么在这个全新的领域里,我们还是得从一行行的烂代码开始积累起。

另外需要说明的是,原有的经验积累并不是毫无用处的,我们正是因为了解我们写出的新代码的缺陷可能在哪些地方,我们才能更加明确我们改进的方向。如果要比较谁能把工程代码写得(或改进得)更好,那我想应届生们是断然比不过有经验的老程序员们的。其次,一些其他的软技能,比如查找资料的能力、借助互联网解决问题的能力、对 Bug 可能原因的敏感度等等,这些也是宝贵经验带来的财富。

其实做产品也很容易犯这样类似的错误。

一些没有经验的产品经理或者做自己 Side Project 的程序员,往往一开始就把自己的产品构思得很好,并且企图第一版就把功能做得很完美。这样的想法能好,但是太不现实。「罗马不是一天建成的」,任何伟大的产品也是从一点一滴琐碎的改进中积累来的。一开始,它们可能很烂,性能差、页面分布不合理,甚至有明显的 Bug 等等,但经过不断的迭代与打磨,慢慢的它才会变得优秀、变得无可替代、变得不可或缺。尤其是在这样一个互联网浪潮下,任何的机会都经不起犹豫和等待,一个一开始就追求完美的产品,等不到出生,就已经死了。

说了这么多(甚至个人觉得好像有点儿鸡汤味儿……),其实总结起来也就还是乔布斯的那句话:

Stay hungry, stay foolish.

不仅仅是在行动上,更是在心态和产品设计理念上,用这句话来武装自己。保持学生心态,一点一滴脚踏实地的积累和迭代,才能调和出不一样的色彩。