记录一个突发奇想。一个有趣但逻辑还不完善的思考方法论。
———-
代码就像人的容貌。
没过脑子优化就直接写出来的代码是素颜照,写好之后反复打磨过的代码是浓妆照。
为了把项目开源,在公开前先狠狠整理一遍代码,就相当于去正式场合之前精心打扮,盛装出场。
在为了验证想法,为了个人使用之类不公开的场合随手写出来的代码,就像回到家里不用上妆的和家人平平淡淡打打闹闹。不求出风头长脸,只求自己舒服。
当一个人上妆后会被人称赞时,说明她知道美的方向,并能够朝使自己更美丽的方向努力了。(比如注意保养?)
当一个人素颜也会被人称赞时,说明她是真的美了。这种美不浮夸(可能不会有完备的文档和注释),但足以服众。
———-
图文无关
我在工作中有幸遇到过一位”裸妆也很美”的大神,那是我的程序水平达到”知道自己很强”以来,第一次因为和别人的技术实力差距而感到震撼。
我可以做到模仿他的代码设计和注释厚度,但恐怕不会像他一样在项目等待他快速完成,而他也明知道这段底层代码今后除他以外几乎不可能有人碰的情况下,依然保持了如同开源项目一般高质量的代码结构设计和充足必要的注释。
在做截止日期比较近的任务时,我依然可以坚持给每一个函数和变量一个合理的命名,并尽可能避免同一段代码出现在多个地方,或者过长的函数体等等代码坏味道,除非是历史遗留原因。这些坚持在我看来根本不值一提,也没什么太大价值,但给10年前的我来看的话,这个水平”素颜颜值”也足以被称为”大神”。
“大神”不是一个绝对的评价,它只是说明我们之间有着遥远的距离。现在的我已经成为了10年前的我眼中的”大神”,希望接下来,5年后的我能成为现在的我眼中的”大神”。
但如果只是这样一说,我还是很难具体了解我5年后到底要做到什么程度才算达成目标,所以参考那位震撼了我的大神,再加上一些我个人在技术方向上的追求,列出我对”5年后的我”的期望:
1. 平时习惯性写注释,认真起来能写出商业工程级别的严谨注释。
2. 写1w行左右规模的单一功能模块时,有自己熟悉到伸手就来的框架设计。为此,希望能写至少5个1w行以上规模的模块的经验。
3. 有从头到尾一个人完成简单的网站前后端开发和底线级别商业网站页面排版布局的能力,尤其需要自动化测试、项目收尾和上线运营部分的经验。
不是徒手简单搭起来就行,要的是商业级的完成度。至少包括:
要有开发人员增加以后立刻就能扩充为一个团队开发项目的清晰功能划分。
新人加入时能快速搭建环境的自动化构建,辅以简单的构建指导文档。
后端要能够自动化测试,在代码规模膨胀之后,依然能够依靠便利的回归测试,进行各种影响范围巨大的代码变更。
有成熟的log管理方式。
4. 有至少两个自己主导程序开发的小型游戏项目上线。
不管是 app store / google play, 还是steam, 甚至 comike 都可以。
嗯,说实在的,就算现在有一个人向我展示了上述全部能力,我可能也不会觉得这个人是大神,至少不会被震撼。
震撼这个感觉,还需要一点偶然性。
如果是一个人不经意间流露出高超的程序能力被我察觉到,之后我搜索这个人的履历,自己发现了这个人的各项能力的话,才会更震撼一些。反正是有点主观要素在里面的。
不管怎样,为了尽快成为一个能震撼到2017年的我的人,努力的脚步不能停。而且要加速,更要有计划!
哈哈,这篇文章的方向,和我现在思考的方向是恰恰相反的。
我先描述下自己对Kira君的理想代码的大致理解:
1:代码规范好,注释充分严谨,空格换行大小写,文件分类合理美观。
2:代码结构性好,有良好的设计模式,API,耦合度适度,不冗余且可便于充分扩展。
3:其他的什么大家都懂的扩展性啊可维护性啊等等吧。
其中第二三条不好自吹,第一条我一贯是做的比较好的,github上kira也可以看看代码,(如果用VS去看可能效果会更好),然而我发现没虾米用……没人下载也没人有兴趣去研究更没人去维护,为什么呢?是我代码注释不足规范不好么?不是…真正原因是根本没用。它提供的功能有更好的解决方案,没人有兴趣花费代价在我这份代码上,针对性太弱。
而我下载过一些知名的库,咱就说我昨天刚搞的一个openssl,这个可以说是非常出名了,已经几乎是标准库了。然后呢?先不说代码质量,你下载看看,连编译都要花费N久,里面的代码也是凌乱不堪,别说注释了,结构乱到看不懂。好吧,这个可能还是远了点,老版的MFC,STL库都可以看,有几个是容易学习的?
我举例倒不是说我们应该去写一些恶心的难以理解的代码,毕竟这东西尽量还是有个好习惯,对于提升自己功力以及和同事配合都有好处,但我依然认为重心不能在这里。
代码第一要务是“有用”,第二要务是“好用”,第三才是“好学好理解好看舒服”。
说到“有用”,估计很多程序员会笑话,这是肯定的啊,交出去的代码必然(能编译/能解释)能运行的,也肯定可以运行出正确的结果嘛。但真的经历过不同的平台不同的运行环境么?处理了不同实际环境的业务之后,我们可能会发现没那么自信了。
一个技术尝试或突破比较容易,出来的代码也很美;但真商业化了,那份代码通常就丑陋的要命。我们可能需要大量的时间去重构,为了好看那么一点点。时间就这么进去了,最终我们依然可以看到很多补丁的痕迹。一个从军营里辛苦训练了十年的战士,和上战场搏命三年回来的战士,毫无疑问前者的动作准确优雅有力,而后者的动作多半会很不美观奇怪,但后者才是活路。我是相信这一点的。
于是我慢慢知道了自己和那些流行的代码的区别,它们身上丑陋的补丁真的比我的代码多,但那才是真正的价值的痕迹。
其他一些说法建议就是虽然我有很强的强迫症和洁癖,之前的代码也特别讨厌做第三方依赖,但现在我还是改变了这种想法,宁可自己时刻处于矛盾中,也在努力去尝试去使用别人的代码。没错,个人能力不足,还需要学习。
偶尔也和一些open source界的“大牛”沟通过,其实除了那些身上背了成吨的光环的资深老爷子,大部分人的出名,也多是运气。是的,写了20个库,结果有一个正好满足了用户的需求,火了,大量batch,好吧,那就专心重构这一个,当然,这和他们有非常优秀的功底密不可分,不仅仅是运气了。cocos2d也好,unity也好,都是这样,可以看看他们的发家史。
把精力都放在代码结构设计模式之类的地方,在我看来是浓妆艳抹,我也是非常不喜欢的。
文章里我想说的主要是,自已在不额外花费精力的情况下,像条件反射一样能自动维持的代码的整洁程度,是最让我觉得漂亮的。
这其实有点矛盾,就像我又喜欢看起来漂亮的姑娘,又不喜欢那种把精力都放在打扮上的姑娘。这种对素颜美的追求,可以说是一种过于苛刻的审美,只适用于我,不符合普世价值。
很多作者和作品都是在机缘巧合下成为牛人和经典的,但他们也付出了相当的努力,这一点我也非常赞同。他们在代码质量上付出的努力使他们的库健壮,但同时,他们在吸引其他人来使用他们的库这一推广方面付出的努力使他们的库变得流行。
如果你写的程序本来的目标是成为一个流行的库,那主要精力应该放在如何让人愿意用我的库,美化到api接口处即可。如果是想自我满足自我提升,那把自己最在意的代码设计做好是最能达到目的的。
笃志的项目在github没人用,可能是因为你的项目属于95%为了自我满足自我提升,5%是想如果可能的话让它成为流行的库也不错。在吸引其他人使用你的库的宣传和教程方面投入的精力非常少,甚至你自己也不继续维护了,那吸引到的愿意去学习一个没有任何商业应用成果也早已无人维护的复杂大型库的人自然也就很少甚至没有了。我觉得这很正常,也很公平。
你说的很好,我非常赞同。
汗…
我觉得震撼有三种可能:
1.一个新颖的想法或观点,“我怎么没想到呢!?”;
2.反差萌,“这个女歌手唱的真好听,来搜搜照片——竟然是个爷们儿!”
3.默默无闻后突然的爆发,比如美国游泳运动员菲尔普斯。
但震撼只能震撼别人,自己震撼自己难了点儿。比如我们一贯优秀的kira, 作出成绩你自己可能也觉得是水到渠成罢了。就像你文中说的,代码美化和规范化,其实都是养成良好习惯的结果,习惯成自然。
不管怎样,有努力的方向就好,加油!
震撼自己确实只能是说说的,我对自己的成就总是无法很好的认同,自己做点什么都觉得没什什么了不起。
但有时候冷静下来想想,我的某些方面已经是同龄人中万中无一的了,总是过分自卑实在没有必要。
希望今后能在社交健身之类我的弱项上有所提高,进而提高自我认同。
要是能有你一半自信,我的人生都能比现在绚烂不知道多少倍了=_=
Wonderful.我的空间又被163封禁了,连原因现在都不给了~~
Nice,继百度之后,网易终于也开始文字狱了,某些人的智商和手段实在是越来越让人担忧了。
该听Kira的早点搬家,希望亡羊补牢为时未晚。
哈哈,我果然是懒货= =不火烧眉毛不干活啊~~
你的网易空间我还可以打开呀,我还特意强制刷新了一下确定不是缓存的关系…
你说的封禁是指什么?
刚刚投诉了,然后被开启了。但是丝毫不安心了,感觉时刻被监控= =
……呃,Kira为什么会在凌晨3点还在网上
项目组放假旅游,我没去,就变成单纯的假期了。