44 | 完成作品:理想与现实
下载APP
关闭
渠道合作
推荐作者
44 | 完成作品:理想与现实
2018-11-12 胡峰 来自北京
《程序员进阶攻略》
课程介绍
讲述:刘飞
时长09:30大小4.35M
有时工作久了,会陷入这样一种状态中,整天不停地写代码,开发业务需求,周而复始,日子长了,自然觉着厌倦,感到似乎真的有点像 “码农” 了,日出而作,月落而息。在过去的某个时期,我应该也陷入过这样的循环之中,后来又是如何脱离的呢?
困境:代码与罗马
陷入这样一种写代码的 “困境”,还是要回归到写代码这件事本身上。
写代码是因为有需求,需求来自业务的发展需要,经过产品经理再传递到程序员。刚开始,作为一个新手程序员,不停地为各种需求写代码。开发完一个,接着又是下一个,生生不息,循环不止。
一开始也许会感觉有些累,但并没有产生太多的厌倦。这是一个从不熟悉到熟悉再到熟练的过程,这里有太多的新东西可以去探索和尝试,让你在疲惫中依然能获得了好奇心的满足和成长的快感,因此不会感觉厌倦。
那技能从不熟悉到熟练需要多久呢?现在成为专家的要求已经有了共识:一万小时的刻意练习。但达成熟练要不了那么久,也许两三年足矣。有句俗语叫:“条条大道通罗马”。罗马,一座城市,包罗万象,类比到程序员这里就像一个个需要完成的业务需求。几年过去,每一条通往“罗马”的大道都被你走过了,再去往“罗马”时,自然找不到新鲜感了,困倦油然而生。
继续停留在通往“罗马”的循环往复中,已无法让你继续成长为专家。而要想跳出这循环往复的路,无非就是不再去走那熟悉的条条通往“罗马”的大道,而是选择一条离开“罗马”的路,走出去,走向未知与未来。
在一万小时的刻意练习中,“罗马”已逐渐成为过去的熟悉、熟练区,而离开“罗马”便是要进入下一个陌生的学习区。但也许还会有一种 “现实” 的困境让你不得不继续走向当前的“罗马”,那么这时就不妨换一个视角:既已对通往当前“罗马”的所有路都了然于胸,闭眼可达,那就仔细观察了解现在“罗马”的构成与运作机制,也许将来有机会去创造属于自己的“罗马”。
从走向“罗马”到创造属于你的“罗马”,这里你的 “罗马”,就是你的作品。
理想:作品与创作
也许条条通往罗马的大道,堆砌罗马的砖石,有些已经消失在历史的尘埃中,但罗马作为一个时代和历史的作品,留了下来。
今天我们再看什么是作品?维基百科上对“作品”的定义是:
作品,亦称创作、创意、著作,是具有创作性,并且可以通过某种形式复制的成品。
从这个定义来看,作品最重要的特质是:创作与创意。所以,只有包含了创意和创作性质的事物才能叫作品。那对于程序而言,怎样才算作品?你从网上复制来一段代码,解决一个问题,这不是创作,也不会成为你的作品。
代码作品,可以小到一段函数、一个类,大到一个库或框架、一个服务,甚至一个系统。但打磨代码作品的方式,应该是定期对自己写完的代码进行沉淀、梳理和规整,提取可复用的功能,同样的功能只写一次,形成自己专属的编码脚手架和代码库。在以后的学习实践中定期反思,不断优化其效率和品质。
当你再碰到类似功能的实现时,能直接复用库就复用库,不能直接复用的就在脚手架代码上进行扩展,后续的重心就放在了优化实现思路上。这样日积月累下来,你的程序思维和能力才会变得科学、高效,而且产生积累效应。最终,这些留下的代码库或脚手架都成为了你的作品。
不过,同是作品,却有高下之分。吴军老师曾在文章里写过:“完成一件事,做到 50 分靠直觉和经验,做到 90 分要靠科学和技艺,而要做到 90 分以上则要靠艺术。”我是认同这个观点的,而且我们完成作品的目标应是 90 分以上,这是作品的特性决定的,因为创作就是艺术的核心所在。
到了 90 分或以上的作品,也许分数相差无几,但市场价值却可能差异巨大。iPhone 就是一个很好的例子,它当是一件 90 分以上的作品,90 分的工程技术加上几分的艺术,相比差几分的同类,在市场上的价值和价格却是遥遥领先。
作品,是创作的,创作是需要设计的,而设计是需要品味的,正如《黑客与画家》一书里所说:
优秀作品的秘诀就是:非常严格的品味,再加上实现这种品味的能力。
大多数做出优美成果的人好像只是为了修正他们眼中丑陋的东西。
也许,我们可以先从感知和修正代码中丑陋的东西来训练这样的品味和能力。
而完成作品的收益是什么?理想的情况下,也许我们期待直接从作品中获得经济收益,但这并不容易。十九世纪,有一名画家,一生作画数千幅,但只卖出过一幅,换回了四百法郎,这名画家就是梵·高。
梵·高的例子比较极端,他的作品都是 90 分以上的,但在直接换取收益方面依然困难。而对于你来说,今天的作品虽不一定能立刻给你带来经济收益,但在你打磨作品的过程中,把“条条通往罗马的大道”都走完了,甚至还反复走试图找到更优化的路线,这会让你掌握系统化的知识和体系化的能力,同时还会让你的作品变得更值钱。你可以想象这样一个场景:当你给别人介绍自己时,只需要介绍自己的作品,而不再需要介绍自己的技能。
成长的路上,写过的代码最终也许会烟消云散,但完成的作品会成为你点亮的勋章。
现实:产品与特性
作品要实现直接的经济收益,必须还要走完从作品到产品之路。
产品,是指能够供给市场,被人们使用和消费,并能满足人们某种需求的任何东西,包括有形的物品,无形的服务、组织、观念或它们的组合。现实情况是,大部分时候我们的代码作品,都是存在于产品之中的,所以你需要关注包含了你的代码作品的更大范围的产品及其特性。
如果产品无法获得市场的价值认同,技术作品自然也就埋没其中了。
有个说法是:要做好技术需要懂业务和产品。这大体没什么问题,但需要提到的细节是懂的方向。技术不需要了解业务产品的每一个显性特征,一个足够大的业务产品,有无数的显性特征细节,这些全部的细节可能分散在一群各自分工的产品经理们中。所以应该说,技术需要懂的是产品提供的核心服务和流程,并清晰地将其映射到技术的支撑能力与成本上。
另外,技术不仅仅需要支撑满足产品的全部显性和隐性服务特性,这些对于技术都相当于显性服务特性。而技术还有自己的隐性服务特性,这一点恰恰也正是高级和资深程序员需要重点关注的。所谓技术的隐性特性,通俗点就是程序员常说的非功能性需求,它的产生与来源都是源自程序和程序员本身。
用一段新算法实现的函数取代了旧函数,那么多余的旧函数就变成了负债而非资产,是需要去清理的。重构代码变得更简洁和优雅,可读性增强,节省了未来的维护成本。一个能同时服务一万人的程序实例,你知道你没法加十个实例就能简单变成能同时服务十万人的系统。这些都是技术冰山下的隐性特征,显性的错误会有测试、产品甚至最终用户来帮你纠正,但隐性的错误却很难有人能及时帮你发现并纠正。
产品的显性特性就如泰坦尼克号,而技术的隐性特性则是泰坦尼克号撞上冰山后的反应。一旦隐性的错误爆发,就像泰坦尼克号撞上了冰山,一切外显的繁华最终都将沉入海底。
技术从特性到作品,去支撑产品的体验与服务,这是一条更现实的技术作品实现价值的路。
从反复写代码实现需求的重复困境中,到打磨作品实现价值的理想,再回归产品化的现实之路。
代码,有些人写着写着,就成了 “码农”;有些人写着写着,就成了作者;还有些人写着写着,就改变了你、我的生活。那你想成为哪一类人呢?
分享给需要的人,Ta购买本课程,你将得20元
生成海报并分享
赞 8
提建议
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
上一篇
43 | 无法实现:困扰与反思
下一篇
45 | 代码评审:寄望与哀伤
精选留言(17)
- 艾尔欧唯伊2018-11-12就是要跳出舒适区。。。好难啊
作者回复: 一次不要跳出太远,渐进式扩张
6 - HellloWorld2018-11-18峰哥,自己是Java程序员,已经工作3年,感觉自己目前能顺利熟练的完成业务要求,但是还是不能提取自己的代码库和手脚架,而且很多时候工作都是有截止日期的,感觉在截止日期之前完成功能通过测试就不错了,也没有时间和耐心去做额外的其他事情。请问这种情况如何改善自己,如何拥有自己的作品?
作者回复: 工作评估中把重构和技术债要考虑进去,截止日期也需要开发来评估吧?
4 - 钱2018-11-16伟大的人谁不想成为呢?这个要看个人的努力和历史的进程啦!凡事皆有代价,看自己愿付几何?能付几何?4
- javaadu2019-12-15沉淀工具类和脚手架 沉淀常用的命令 沉淀之前用过的技术方案 选择或参与伟大产品的建设,让其为自己的能力做证明2
- xufeng2022-07-26喜欢这句:成长的路上,写过的代码最终也许会烟消云散,但完成的作品会成为你点亮的勋章。1
- 汪玉斌2019-03-28胡老师提到的困境感同身受
作者回复: 我也被困过,都经历过^_^
1 - CrazyCodes2019-02-26我已冒着风险,跳出了舒适区,来到一家996的公司,但我不后悔
作者回复: 加油💪
1 - third2018-12-15困境 从不熟悉到熟悉,在到熟练,再到无聊。 作品 这时候要想办法创造你的作品。专属于自己的东西,而且在不断打磨 中 完成一件事,50分靠直觉和经验,90分靠科学和技艺,90分以上靠艺术。 90分以上的作品,分数相差无几,但是市场价值却相差千差万别。 产品 作品实现经济价值。 能够深入理解,产品的核心服务和流程,并且保证支持和控制成本。 同时应该注意隐性成本展开1
- 寇云2018-11-22自己面对这个问题的时候,总是以代码洁癖,完美设计自居。当自己的认知有限的时候,觉得十分自己达到九分就沾沾自喜,殊不知,在其他玩家是百分制。 现在更多快速实现,前路有前路的旖旎。大家都不是踩着问题,向前奔跑。
作者回复: 现实没有那么一尘不染,跑上一阵,拍拍尘土又继续上路😄
1 - HellloWorld2018-11-19这个建议的确很好,以后要换种方式了要考虑重构和技术债,之前都仅仅是考虑功能实现层面,感谢!1
- 李毅科2021-05-27正在写一个商城系统,前后端都自己做,算是这么多年的一个总结,想转型java做后端,但商城系统还没写好,是否要放弃爬商城系统这座山呢,还是去爬java后端这座山
- Sch0ng2021-02-26写的代码可能会随时间被埋没,但是完成的作品会成为你点亮的勋章。 完成作品其实也是完成一个闭环,只有闭环才有成长。 有作品才有光环,才能体现你的价值,才是你讨价还价的本钱。
- kevin2019-07-15从写代码到写作品过度
- 杨晓维2019-07-03正在最初的阶段,看了老师的文章,感觉前方的道阻且长,但是方向很清楚,感谢
作者回复: 🤝^_^
- LieBrother2018-12-25刚走到了熟悉这个点,没法祈求企业永远给我们学习的机会,我们自己也要脱离开企业,创造出自己在这个社会的价值
- 梅子黄时雨2018-12-18我要成为后者。
作者回复: 👍
- 亚林2018-12-12有愿才有力
作者回复: 愿力是最强大的力量😄