不仅仅是写代码,而是完成作品

近来有人问起,现在似乎真得变成了码农,日出而作,日落而息。整天不停的写代码,开发业务需求,周而复始,日子长了,感到厌倦。有时回想,应该在过去的某个时期我也曾陷入过这样的循环中,后来又是如何脱离的呢?

代码与缘由

这要回归到从写代码这件事上开始。写代码是因为有需求,需求来自业务的发展需要,需求经过产品经理再传递到程序员。

刚开始,作为一个新手程序员,不停的为各种需求写代码。开发完一个,接着又是下一个,生生不息,循环不止。一开始也许会感觉有些累,但并没有产生太多的厌倦。这是一个从不熟悉到熟悉再到熟练的过程,这里有太多的新东西可以去探索和尝试,让你在疲惫中依然获得了好奇心的满足,因此不会感觉厌倦。

但从不熟悉到熟练需要多久呢?现在成为专家的要求已经有了共识:一万小时的刻意练习。但达成熟练要不了那么久,也许两三年足以。有句俗语叫:条条大道通罗马。罗马,一个城市,包罗万象,对于程序员就像一个个需要完成的业务需求。几年过去,每一条通往罗马的大道都被你走过了,再去往罗马时,自然找不到新鲜感了,困倦油然而生。

继续在罗马的循环往复,已无法让你继续成长为专家。罗马也许在中世纪曾是一个伟大的城市,但时代在发展,未来会有更丰富的城市超越他。跳出循环的路无非就是走出熟悉的罗马,不再去走那条条通往罗马的大道,而是选择一条离开罗马的路,走向未知与未来。

在一万小时的刻意练习中,罗马已是过去的熟悉熟练区,离开罗马便是要进入下一个陌生的学习区。

产品与作品

写代码,开发需求无非都是为了完成产品。产品作为一个整体,包含了一份份零碎的需求和代码。

有时我们会把一个产品作为整体当作一件作品,但并非所有的产品都能称为作品。维基百科上对作品的定义是:

作品,亦称创作、创意、著作,是具有创作性,并且可以通过某种形式复制的成品。

从这个约定俗成的定义看,作品最重要的特质是:创作与创意。所以,只有包含了创意(作)性质的产品才能叫作品。那么像 iPhone 这样的商品就既是好产品也是好作品了。

那么对于程序而言呢?代码是作品么?可以是的,小到一段函数,一个类,大到一个服务,一个系统,在你编写程序时都可以把它们当作一件作品来完成。就像一本书是作品,书里的每一篇文章也是作品。

吴军曾在文章里写过:完成一件事,做到 50 分靠常识和直觉,做到 90 分要靠科学和技艺,而要做到 90 分以上则要靠艺术。我是认同这个观点的,完成作品的目标是 90 分以上,这是作品的特性决定的,因为创作就是艺术的核心所在。

如果写代码仅仅是完成需求,即便是完美无瑕的完成了需求,也只是 90 分的标准。经过了科学地学习和训练的程序员们,自然是超越了 50 分,但却还达不到 90 分。你想做到 90 分,也许需要一个比 90 分更高的标准。iPhone 作为一个 90 分以上的作品,就是 90 分的工程技术加上几分的艺术,相比差几分的同类,在市场上的价值和价格却是相距甚远。

为什么要把条条通往罗马的大道都要走完,甚至反复走。具体到编程写代码,无非就是不停的重构,打磨作品。成长的路上,写过的代码最终也许会烟消云散,但完成的作品会成为你点亮的勋章。

显性与隐性

梁宁以前写过一篇文章《在腾讯的第一堂产品课》,其中提到了产品的显性与隐性特征。显性的东西容易看到和体验到的,所以文中说到:

过分强调显性特性的,菜鸟之中的最初级。过去,我最怕的就是听谁说,我们要改版了,新版哪天…显性特性很重要,但是显性特性救不了你。把核心资源与时间,放在一次次优化显性特性上,基本上是互联网初级从业者的狂热症。

这是指产品的显性和隐性,初级的产品经理更容易关注到显性特征的体验变化和改进,但更高级的产品经理会关注和产品相关的服务、流程与成本等隐形特性。但产品经理关注的这些特性,无论是显性的还是隐性的,到了程序员这里的技术方案将全部是显性特性。

有个说法,要做好技术需要懂业务和产品,大体没什么问题。但需要提的细节是,是懂的方向。技术不需要了解业务产品的每一个显性特征,一个足够大的业务产品,有无数的显性特征细节,这些全部的细节可能分散在一群各自分工的产品经理们中。技术需要懂得是产品提供的核心服务和流程,并清晰地将其映射到技术的支撑能力与成本上。

另外,技术不仅仅需要支撑满足产品的全部显性和隐性服务特性,这些都是技术的显性服务特性。但技术还有自己的隐性服务特性,这一点恰恰也正是高级和资深技术或程序员需要重点关注的。所谓技术的隐性特性,通俗点就是程序员常说的非功能性需求,它的产生与来源都是源自程序和程序员本身。

用一段新算法实现的函数取代了旧函数,那么多余的旧函数就变成了负债而非资产,是需要去清理的。重构代码变得更简洁和优雅,可读性增强,节省了未来的维护成本。一个能同时服务一万人的程序实例,你知道你没法加十个实例就能简单变成能同时服务十万人的系统。这些都是技术冰山下的隐性特征,显性的错误会有测试、产品甚至最终用户来帮你纠正,但隐性的错误却很难有人能帮你发现并纠正。

一旦隐性的错误爆发,就像泰坦尼克号撞上了冰山,一切外显的繁华最终都将沉入海底。初中级的程序员都在关心能否完成这些显性的功能,而更高级的程序员则需要更多关注这些隐性的技术特征带来的风险和代价。

用正确的方式做正确的事,而那些隐藏在冰山下的正确的事,表现型的人是不愿做的,而进取型的人才会去做,得到的奖赏是自己的进步与成长。

大部分的技术“火灾”,都是隐性风险的爆发。一场大火过后,救火的英雄会站在聚光灯下,而你的系统隐藏于一片繁祥安宁的黑暗中。不深藏一点功与名,谁又愿意去推动这样一些默默无闻但正确的事情呢。

让正确的事情相继发生,你的成功或默于悄无声息,但你的失败却震于惊天动地。



写点文字,画点画儿,记录成长瞬间。

微信公众号「瞬息之间」,既然遇见,不如一起成长。

时间: 2024-10-20 10:48:11

不仅仅是写代码,而是完成作品的相关文章

CSDN日报20170404 ——《不不过写代码,而是完毕作品》

[程序人生]不不过写代码,而是完毕作品 作者:瞬息之间 近来有人问起,如今似乎真得变成了码农,日出而作,日落而息.整天不停的写代码,开发业务需求,周而复始,日子长了,感到厌倦. 有时回忆,应该在过去的某个时期我也曾陷入过这种循环中,后来又是怎样脱离的呢? [深度学习]使用Caffe进行手写数字识别运行流程解析 作者:fengbingchun 之前在 http://blog.csdn.net/fengbingchun/article/details/50987185 中仿照Caffe中的examp

[No.000008]发工资不仅仅是让你写代码的

这是我对团队每个新进员工说的第一件事情.这句话的意思是,我并不关心你是如何快速完成任务的,哪怕代码很差,只要它像救生艇通气门一样管用就行.这句话也是我最喜欢的座右铭之一. 这个说法其实很合理:我们的工作是思考客户提出的问题,然后制定解决方案.思考第一,代码第二,公司请我们的最终目的不是写代码,而是想出解决方案. 话粗理不粗. 付你薪水不是让你来思考的,也不是让你来写代码的,你的目的是交付产品.如果不能交付有效的产品给客户,那么你的知识,技能,态度,以及所有能让人成为高效程序员的特性又有什么意义呢

【腾讯Bugly干货分享】深入理解 ButterKnife,让你的程序学会写代码

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/578753c0c9da73584b025875 0.引子 话说我们做程序员的,都应该多少是个懒人,我们总是想办法驱使我们的电脑帮我们干活,所以我们学会了各式各样的语言来告诉电脑该做什么--尽管,他们有时候也会误会我们的意思. 突然有一天,我觉得有些代码其实,可以按照某种规则生成,但你又不能不写--不是所有的重复代码都可以通过重构并采用高端技术比如泛型来消除的--比如我最痛恨的代

40 岁了还在写代码,是一种幸福,还是一种悲哀?

天光,一檐停风聚天下闲士 半阁藏卷窃古今名家 马上就40了,依然在写代码,写各种代码,从C/C++写到object-c,从java写到lua,乐在其中,享受得很. 当然,我现在基本不是依靠写代码挣钱谋生,事实上,我也几乎也没有纯粹依赖过写代码谋生过.写代码只是一种乐趣,一种爱好. 当然,难道是写代码谋生就一定是痛苦的吗?也未必. 公司有两个同事,都是非常棒的程序员,也是成熟的架构师,一位是77年的,一位是78年的,他们主要的工作内容都是写代码,他们也都乐在其中,事实上,如果不出意外,他们能够在公

从前有一个程序员,成天写代码,后来,他屎了。。。

从前有一个程序员,成天写代码,后来,他屎了 1.一门可以靠手艺混饭的专业 你好,非常荣幸能够步入改变世界的软件开发行业,接下来我们聊点正经的.回首近7-8年来的时光,发现自己可能将要走向程序员这条道路的时候最早可以追溯到2008年高考完填写志愿,那时候分数所迫,二本学校的好专业都上不了,我就想有什么专业是可以不靠学校名声而靠自己努力成就一番霸业的?思来想去选择了–计算机,作为第二志愿...显然那时候会计这个专业更火一些. 入学一年以后我有了自己第一台笔记本电脑,然而第一个装上的应用程序居然就是魔

分享:40 岁了还在写代码,是一种幸福,还是一种悲哀?

马上就40了,依然在写代码,写各种代码,从C/C++写到object-c,从java写到lua,乐在其中,享受得很. 当然,我现在基本不是依靠写代码挣钱谋生,事实上,我也几乎也没有纯粹依赖过写代码谋生过.写代码只是一种乐趣,一种爱好. 当然,难道是写代码谋生就一定是痛苦的吗?也未必. 公司有两个同事,都是非常棒的程序员,也是成熟的架构师,一位是77年的,一位是78年的,他们主要的工作内容都是写代码,他们也都乐在其中,事实上,如果不出意外,他们能够在公司里继续留下一起合作,我想他们会一直写代码写到

转:我,一个写代码的

转自: http://blog.csdn.net/cenwenchu79/article/details/3978554 我,一个写代码的 写blog已经快两年了,起初仅仅是为了自己“备个案”,结果慢慢演变成为了“分享成瘾”.前几天一个朋友给我的blog留言,谈到希望在新年里能够看到的不仅仅是我对技术的分享,更希望能够看到对于技术学习.职业发展的规划.因此想到了写一点什么分享一下自己这些年的一点点“收获”,周星驰的喜剧之王里面说到他是一个演员(虽然被叫做跑龙套的),我想我,就一个写代码的. 爱这

用css以写代码形式画一个皮卡丘

前一阵子在某个大神的github上看到他用写代码的形式来完成一个皮卡丘,于是心血来潮花了半个小时,也完成了一个作品. 这其中涉及到的知识点也不是很复杂,就主要是css定位的知识居多,然后就是边框属性如何画形状. 在线浏览网址:css画皮卡丘(友情提示:请电脑访问,由于定位属性的问题,手机显示不是很美观!) 然后就是一步步拼凑成的,怎么说呢,按照鼻子,眼睛,脸,嘴以及舌头来画的. 效果截图如下所示: 代码很简单,如下: html代码: <div id="code"> <

微软展示Visual Studio实时共享功能:用户一起写代码

微软在Build 2018大会上展示了许许多多的功能,其中有一项就是Visual Studio实时共享功能,这项功能可以让用户在云上一起写代码.它适用于不同的操作系统和不同的开发人员环境,一个Team的成员可以在不同的演示文稿中看到完全一样的代码.而且,团队成员可以实时编辑彼此的代码,并且可以从新的Visual Studio环境中访问他们所需要的所有的依赖关系,这就不仅仅只是屏幕共享而已了,因为它们都可以与代码进行交互.Microsoft Visual Studio是美国微软公司的开发包工具系列