一年前,我在草稿箱里面写了这篇文章的开头,那时的我正在为工作而烦闷,却一筹莫展。 最近在读《人人都是产品设计师》,其中提到了「产品经理」和「项目经理」的区别, 又引发了我一些思考,我决定把这篇文章重新写完。
这篇文章准备讨论普通程序员在工作中容易滋生的错误,以及解决的方法。
传统意义上,大家会提倡「不能光想,还要去做」,即强调行动力的重要性。 而在实际工作中,大部分人都不缺乏这个行动力,反而缺少对自己工作的思考。 比如我为什么要这么做?有没有更优美的办法?能不能通过自动化减少工作强度? 流程是否可以改善?
我和产品
在聊上面几个问题之前,我先确定一个既有现实:「每个程序员都曾经是产品经理」。 诸位是否还记得当年在学校里面学习时候,应该都做过 XX 管理系统吧, 那时候我们也许单枪匹马,也许结对组团去完成「项目」:获取需求,设计系统和 撰写代码,在这些工作中,我们首先担任的就是产品经理一职。
我还清晰的记得大二时候我用 SSH 模仿了一个百度贴吧系统,现在看来,也就是个 CRUD 级别的粗糙作品,用 RoR 花几天时间就可以达到那时候两个月的完成度。 虽然粗糙,但那时候我不仅仅是程序员,还负责了整个「产品」的信息架构, 用户体验设计,系统结构设计。 虽然作品很是幼稚,但也充分证明了,我在里面起到的作用远不止程序员。
那种自己亲手实现的第一个系统的那种欣喜,很久没有过了。
PS:我完成这个系统过程中,发现项目进行中的交流不畅,系统的臃肿。 请教老师之后,开始学习《UML 与模式设计》和《重构》, 当时也像模像样地花了一些时间写用例和各种图。
残酷的现实
工作后,码农们进入自己的工作岗位,按部就班的工作。 很多人开始丧失自己对产品的归属感,这也许和工作环境有关。
我任职的上一家公司,有一种「代工」模式,上游提出定制任务,下游完成它。 每支任务都是独立的个体,在大产品上进行个性化定制,下游无法看到全貌, 甚至连自己完成的任务,如何在客户那里起作用都无法得知。久而久之, 必然将自己当作一个代码机器,只知完成任务,而对产品没有归属感。 尽管团队建设仍在进行,但是仅有的「团队归属感」还不够。
有些公司属于项目型公司,特别是中小型公司,领导靠各种办法接到项目订单, 然后项目组立项开始工作。整个项目过程中也有完善的需求分析、系统设计等必要流程, 程序员也能充分或不充分地参与到整个过程中。但项目式开发会存在一次性的问题, 整个项目生命周期很短,最怕出现「能用就行,反正一次开发就完事了」的想法。 这种想法会在高层只求有钱赚,中层只求维稳,底层只求工资时候出现。
最佳的情况是做产品,尤其是互联网产品,产品生命周期长,快速开发,持续改进, 改进的结果能得到直接的反映。还有比这个更振奋人心的么? 代码的价值可以迅速转变成商业价值。
几个特征可以反映出程序员开始被「残酷的现实」所征服,即我所说的只做不想:
- 不了解同事在做什么:对团队漠不关心
- 不看文档就下手:懒,怕麻烦,看现有代码而不追「求最佳实践」
- 不尝试使用新技术,害怕引入新特性
- Ctrl + C / Ctrl +V:只知道复制代码,而不进行重构和优化
- 字符串拼接:只想尽快完成任务,而不顾代码质量
出现这些症状时候,团队管理人就需要警惕了,产品的质量会受到严重影响。 我没有在互联网公司干过,所属的行业一直是传统软件公司, 就我周围的情况来看,这种情况出现的频率很高。
三观中的价值观
既然每个程序员都曾经亲手打造过自己的产品, 那怎么会有人在步入工作岗位后就失去去产品的归属感? 在我看来,这属于三观中的价值观迷失了方向。
我相信每个人都渴望创造价值,渴望被认同。 我很庆幸我是个程序员,这个职位相比传统的技术人员,更像个艺术家。 我们一直在创造艺术品,用自己的键盘。每每想到自己撰写的代码不仅仅只是代码, 还有更多的商业价值,会被千千万万的用户所使用,内心会涌上一种愉悦。
工作并不仅仅为了挣钱,还是一种自我价值实现极佳途径, 这种自我实现之后的愉悦程度会远远高于到手的薪水所带来的。 马斯洛人类需求层次中最高级的两种即「尊重」和「自我实现」, 这一切只要靠手中的键盘就可以达成。
这东西不能多说,多说了就成了向别人灌输「成功学」,还是靠自己慢慢感悟。 但愿大家不要被现实的压力磨平了心中的价值观。 最不济,人总会渴望金钱、渴望成功吧,做好产品,好好工作,就能加薪升职!
好的产品对我们的帮助会远远大于我们对产品的帮助 - 《人人都是产品经理》
怎么做
最简单的方法莫过于寻找一个好环境:好老板、好团队、好公司。 老板有眼力、魄力和财力,团队尊重个人、营造团队氛围, 公司虽然最终还是以盈利为目标,但有自己的公司文化。
这种公司是有的,行业内的 Google / Facebook / Github 都是这种类型的公司。 但这种公司人才筛选极为严格,普通程序员很难进入。
在与之相反极端的情况下,可以尝试以下的方法,帮助自己进行提升,完善产品:
- 在自己控制的小范围内做到最好,每人都有自己能够控制的资源,权限大小不同而已。 就算无法影响别人,也要保证自己的产出质量
- 尝试影响团队:比如给主管推荐新的技术,发现当前产品问题向相关人员提出, 给团队宣传技术上的最佳实践
- 阅读:如果团队无法提供相关培训,就需要自己进行额外的阅读,内容可以是书籍 也可以是网上订阅的信息源(产品论坛、个人博客)
- 参与社区项目:很多社区开源项目的质量很高,可以尝试加入他们, 未必是作为程序员加入,也可以是运营、推广、产品设计等等。
- 参与本地行业社区活动:线下活动可以开阔自己的视野,结交志同道合的朋友
人生短短数十载,Live With Passion。
原文链接: 想和做 | Log4D
3a1ff193cee606bd1e2ea554a16353ee
欢迎关注我的微信公众号:窥豹