一个代码重写问题
最近我又开始修改英语轻松读,准备加入一个很多用户提出的需求,就是提供一个本地字典,降低查询网络字典带来的延迟。
这并不是一个很难的修改。服务器端,网络字典的代码也是我写的,用Golang写的,按照一样的逻辑,写一个Swift版本几分钟的事情。但是这件事情折腾了我两个星期。
因为查本地字典很简单,但是从现有的查字典UI加入这个功能却非常困难。现在的查字典UI是少爷写的,叫做DictView,核心代码是一个叫做DictConetnt的View。然后用一种我看不太懂的模式Presenting显示出来,而查询词和查出来的结果用一个我也看不懂的DictData结构传进来。
我要加一个本地字典功能本身不难,但是少爷原有的这段逻辑怎么加入这段代码就超级复杂了。我需要考虑用户是否是会员,只有会员才有查询本地字典,节约时间的资格,按照少爷的架构,我在哪里判断用户是会员,变得超级复杂。
我开始在DictView里面加入判断,然后,发现仅在这里加入判断不够,DictConetnt里面也要判断,按钮也需要根据是否是会员显示不同的按钮。然而,怎么在调用DictData的queryword方法的时候,也加入会员判断呢?
超级复杂,其实实现类似的功能的UI,我自己做了几个了,都没有少爷的这逻辑这么绕。我就给少爷发消息,问他,这段代码这么那么绕?
少爷说,那时候也是刚学SwiftUI的时候,如何实现一个功能的具体做法比较不熟悉。而且当时也是着急写,所以那段可能写的有点乱。
我一直觉得少爷比较靠谱,但是确实有些代码我觉得可读性和可维护性也没有那么好。但是如果他自己来修改倒是不难,加了功能以后,他可能也会把结构扩展好。
但是这套思路是他的思路,我看懂就都头疼了。虽然加一些其他的功能的时候,我可以不去思考他的整体思路,但是这次这个功能,看似简单,但是不穿透他全部的代码,根本不好加。
于是本来就几行的代码,始终加不进去。
直到昨天,我才拍了下头,我就算重新写一个DictView,用一套新的逻辑来实现这些功能,也花不了一天,为了不彻底重写,我已经浪费了一个星期了。
为什么不直接重写呢?
因为我们的脑子里面总有很多原则,某条原则是,如果这个代码可以用尽量不重写。这算是沉没成本,重新写了就要付出新的成本。
然而有时候,为了绕过重写,我已经付出了数倍重写的代价,我为什么不重写呢?
这其实是思维里面的一个常见的问题,惯性思维,一般情况下,重写的成本高于维护老代码的成本。这同时也是另外一个常见的思维问题,局部优化和整体优化的问题。从局部的思路去考虑这个问题,重写加入了很多新的代码,从整体进度来看,重写花点时间,但是降低了代码复杂度,提高了维护性,还提高了开发效率。为什么不重写呢?
所以,我重写了这段代码。现在问题解决了。
最近接受的采访
前两天的文章,我提到了我接受了科技慢半拍播客的采访,而且回顾了我的技术选择路线和个人成长路线。这个采访已经上线了上半集,欢迎大家在小宇宙或者其他播客客户端上关注“科技慢半拍”收听。
主持人lan言年纪跟我相仿,也是一个资深开发者,很会问问题,跟他聊的很高兴,也引发了我很多思考。下面是这期节目的提纲(上集):
- 01:42 Tiny的近况如何?
- 04:45 第一份工作
- 07:36 Blog帮助Tiny打开北京的大门
- 09:39 编程的爱好驱动了职业选择
- 14:52 如何开始科技写作的?
- 18:38 早期互联网行业的发展状态
- 32:08 很早接触了iOS开发
- 35:21 什么是学习型人格?
- 38:41 如何管理自己的时间?
但是上篇文章后面,有人留言说,“你成就这么少,为什么总是接受采访啊,翻来覆去就那么点事…炒冷饭没意思”:
也不由的引发了我的思考,他说得对么?当然对,我的成就当然不多,至少我自己很不满足,目前我最在乎的就是油管的收入和英语轻松读的收入,这些都寥寥无几。
但是他说的对么?当然也不对。他的话,带有一种常见的误导。似乎只有天下无双的成就才能共享,才能分享知识和经验。那么社会这么进步?
我自己有时候也会收到这种错误思想的影响,比如一段时间自己心情烦闷,没有太多成果就不写文章,不做视频。殊不知,作为一个自媒体作者,不输出,就是不工作,不工作又哪里来的成就?
我哪怕是作为一个程序员,哪怕不是顶尖程序员,只是一个中下流的老年程序员。分享一些自己的经验对一些经验不足的年轻人,也许也会有帮助,或者是自己的失败经历,也可以避免某些年轻人走上歧途,为什么没有意义?难道全天下只有Linus的文章才可读?那你才有几篇文章可读,几本书可读。
三人行必有我师,反之三人行我必可助一人。我公众号粉丝6万多,写任何一篇文章也许对5万经验丰富的读者看起来这是一篇浅薄的文章,但是对1万经验不够丰富的读者,也许就是大有帮助的。
我自己和我的读者,我的黑粉,有时候会忘记,我今天报的大名,并不是因为我有多么厉害,正是因为我乐意分享,我乐于平等的对待每一个读者。
学习的成本问题
在lan言的采访里,我发现他不断的试图寻找我学了那么多技术,又用那么多不同的技术去找到了工作,甚至创业两次用的都是不同的技术一个是服务端、技术资源,一个是移动开发,这背后,我的学习成本和收益的逻辑何在。
我在跟他对话中,再一次意识到,其实我并没有一个清晰的学习成本和收益的逻辑。首先我觉得lan言心中的,包括很多人都有的这种,学习一个东西要付出时间成本,精力成本,如果没有收益,会不会蹉跎人生的思路是非常合理的。
人的时间和精力是有限的,不能什么都学,不能什么都投入,这当然是铁律。
但是,每个人的时间状态不同。我发现我不学习新技术的时候,我就没有激情。因为工作效率很高,我也没有太多时间需要加班,不学习新技术,我只能把时间沉迷在玩游戏,甚至无聊的玩扫雷纸牌,刷抖音,不断的刷最高难度的数独,听各种爽文小说。
我有时间去学习新的技术,在学习新的技术的时候,我能找到我的内心平静,我觉得我自己离理解这个世界越来越近,我离改变世界越来越近。虽然,我学习任何一本技术,当然也有功利的目的,当然有。
我学习C++ Builder,是因为我觉得C++具有最强的能力,而C++ Builder又有最直观的可视化开发界面可以高效的开发。我学习VC是因为当时要跟文曲星的其他同事在某个项目紧密合作,需要懂他们的代码,需要知道怎么跟他们交接。后来我和朋友业余开发365kit,我们需要Outlook插件,需要我懂COM开发,VC则是开发COM的最佳工具。需要我们做一个聊天机器人,而当时Python上有一个不错的成熟的Gtalk聊天机器人库,那么我一天学会Python,开发了我们需要的机器人。当我了解到Lucene理解了搜索引擎的内核实质是什么,那么学习Java去开发一个搜索系统,就变得顺理成章。当我被iPhone震撼,又抽奖得到了一个iPod touch,作为当时北京少数的Mac用户,资深程序员,对我来说学习iOS开发就是天经地义的选择了。
我都有自己的预期,我期待C++ Builder,VC,Python,Java,Objective-C给我带来工作机会,带来财富,这些都实现了。
然而,这一路走来,我学的其他的很多东西,可能没有一点点响声,比如我认真学了深度学习,NLP,分类,聚类,等等,还有一堆语言,暂时并没有在我的工作中用上。
而我也得到了很多奇遇,超乎了我的想象。
这是因为我虽然也有成本收益的思考,但是更多的时候,我醉心学习的时候,我得到了内心平静,不以物喜,不以己悲,当行好事,莫问前程。
这当然不是说,让大家做任何事情都随心随遇,没有目标,没有压力。而是说守正出奇。
我干了18年的一线开发。守正就是不管是我在老板的公司里面打工,还是我自己创业,我的本职工作,我恪尽职守,争取一流的表现。
我还记得在盛大工作的最后三个月,我事实上已经拿到了投资人的合同,随时随地200万的投资款可以到位。投资人问我何时辞职,我说我还在盛大担负云中书城的主力开发,当然哪怕是盛大这样的万人企业,可以做iOS开发的人,在创新院,也仅仅三人。当时盛大云中书城谋划上市,必须要在三个月内上线一款App,这是集团天字号任务。然而云中书城那帮人把App托付给了某外包供应商,做的稀烂,我只能被接受捡了烂摊子。
我的新职业生涯已经就位,投资款已经到账,只等我辞职,成立公司,就可以开始新征程。我认为我拿了盛大的一年高薪工资,不可能在集团缺人之际,拍拍屁股走人。于是我连加了三个月班儿,把App彻底完成,才离开盛大,正式辞职。
所以,我离开盛大虽然匆忙决绝和无情,但是这些年下来,我也从来没从当年的同事和领导口中听到任何这方面的怨言。守正就是做好自己的本职,不懈怠,不推脱责任。虽然我从来不会加磨洋工的班,但是如果项目真的紧急,通宵oncall,通宵写代码都是常事儿。
我们在给FT中文网做技术咨询的时候,突发一个技术问题,我和同事,两个人在FT的办公室里跟客户一起通宵开会,连夜写代码,连夜跟CDN沟通,上线新功能。一切搞定,我们才一起云淡风轻的出门吃早点,吃完打车回家补觉。
守正是培养自己的基础素养,也是培养自己的人脉,在前同事和合作过的技术圈朋友里面一直保持良好的人品和技术的口碑。
所以,我自从2005年到北京后,到2018年离开技术圈之前,我从来没有主动找过工作。总是前同事、朋友推荐我工作,去哪里都是被公司和老板欢迎,吃个饭喝个咖啡就入职,连简历都是入职以后再补给HR。
而出奇则在业余时间,在于自己对技术的热爱。我开始研究Lucene的时候,从来没有考虑过我自己有一天可以写一个搜索引擎,也没有想过当时国内的一些中大型网站会采用我的技术我的产品。学的时候,没有太大的野心,得到的结果却让自己惊喜异常。
学iOS开发也是如此。等等。
在守正这个层面,做好自己的本职工作层面,我觉得成本收益的思维是合理的。公司需要什么学什么,没有必要追先进和新鲜。做好本职工作,不掉链子最重要。
但是在业余时间,如果不满足于扫雷纸牌,刷抖音,数独,爽文小说,其实完全没必要那么功利,可以有目标,但是没必要追求每一个目标都可以达成也没有必要去思考成本。
学习一个技术需要三个月,是不是很荒废,但是如果以后10年的职业生涯都可以用呢?
如果看一本书需要几天,那么是不是很浪费时间呢?但是可以给你带来一生的好处的呢?可以让你一生都受益呢?
说起来,有两本简单好读的书,可以读读,我的技巧和松弛感。各大书店搜索,“郝培强 技巧”,“郝培强 松弛感”都可以找到。
我写了几十万字的微信公众号文章,累不累,我出了两本书,辛苦不辛苦。当然累,当然辛苦,但是不写这些文章,不出这些书,我又能刷抖音刷出来啥呢?还不是寂寞么?
“突破成本思维的局限:不要让成本思维害了你,没有收益,谈降低成本也没有价值”上的4条回复
tiny:您好,有什方式可以联系到您,有个商务合作的事想和您沟通一下。抱歉发在这了。
tinyfool@gmail.com
起因是打算换电脑,搜了一下MacBook,意外发现您2010年写的文章,深有感触,就追来您的主页,看到了这篇文章,我是一名计科本科生,这段时间对于未来学习乃至就业一直很迷茫,看了您的文字,发现自己很多想法太幼稚了,很多事情想的太拧巴了,谢谢您~
加油