编程:从前有一个傻呆程序员,老婆交给他一项任务,他办了四次才满意

从前有一个傻呆程序员,他老婆交给他一项任务:“去买3斤橙子,买最大最甜最便宜的脐橙”。

普通人买水果直接去店里就买了,但程序员不同。程序员心道:“大,好分辨,甜,不好分辩。水果店老板肯定不让每个橙子都试吃一下的”。于是问Siri,Siri说:“一般橙子屁股上有脐圈的,是母橙,母橙比较甜”。就这样通过调研,甜度辨别的技术难题解决了。

接下来程序员开始策划去哪里买。经Siri调查,小区里共有4家水果店。程序员心道:“这4家店每家都可能卖橙子,也都有可能是最便宜的。如果冒然去了A店买,而C店才是最便宜的,就失去了做事的严谨性,回来可能挨骂。严谨的做法应该是货比三家,每家都看看并把价格记下来,然后选一家价格最低的购买。但是,应该先去哪家看价格呢?理论上应该先去离家的店,最后去离家最远的店。”

经大致估算,4家店按离家距离排序,依次是ABCD。程序员应该先去A店。但估算毕竟是不严谨的,于是程序员请出百度地图,在地图上一一标上家和4家店的GPS坐标,再以水果店的GPS坐标分别计算离家的距离。最后得出结论,顺序依次是CABD(因为C店是直接距离,店距离排序逻辑略)。

于是程序员去C店,得到一个结果,然后又分别去ABD各店,最终得出A店返回无穷大。A店可能没有脐橙或有效货存不足。其它3家店,B店最便宜。程序员决定去B店购买。此时程序员老婆打来了电话,说“叫你买个橙子怎么去这么半天!”,程序员道:“目标已经锁定,即将完成任务”。

程序员到了B店,不敢耽搁,马上开始了选脐橙的逻辑:

半小时后,程序员拎着水果回到了家。老婆骂他:“怎么买水果比种果树都慢!”程序员开始反思,这个买水果的流程是不是还有很多优化的空间?

第二次买橙子时,净化数据源与冒泡排序这两个循环,程序员将它们合在了一起:

由于减少了时间复杂度,并且略去了第一次技术调研、系统架构的时间,这一次只用了20分钟,但老婆大人还是嫌慢:“别人买水果几分种,你买水果20分钟!”

第三次买水果,程序员不再使用单只手的冒泡排序,而使用两只手的快速排序法,左手向右比较,右手向左比较(算法过于复杂,不作伪码展示了)。这次用了15分钟,但老婆大人仍然不满意。

第四次买水果,程序员优化了进店询价逻辑。前几次买水果,程序员要了老板的微信,这次出发前先给4家老板群发了一条微信息:“老板,今天脐橙还有没有,多少钱一斤?”

这次用多线程问询,替代了之前的单线程走路问询,只用了5分钟就完成了任务。老婆满意了。

程序员感叹道:“程序优化果然是无止境啊!但貌似目前的逻辑还可以再优化,譬如历次购买水果第一优先选择基本都是B店,下次可以直接去B店。在去的路上向4家老板发微信询价,大概率答案还是B店。如果不是,进店前还有时间调整路线,这是执行与问询的多线程。”

你能从这个程序员买橙子的故事中,看出编程难在哪里吗?

2018年12月29日

本文首发于微信公众号“艺述思维”:从前有一个傻呆程序员,老婆交给他一项任务,他办了四次才满意

原文地址:https://www.cnblogs.com/sban/p/10198086.html

时间: 2024-08-01 13:32:50

编程:从前有一个傻呆程序员,老婆交给他一项任务,他办了四次才满意的相关文章

一个优秀的程序员所具备的14个品质【转载】

慎于说Yes 在没有搞清楚开发需求.任务工作量.团队期望值之前,有前途的程序员不会轻易答应.特别是对于新人来说,比较急于表现自己,对于同事或者老板的工作安排来者不拒,精神可嘉,方法不可取.承诺太多,会出现自己无法按时完成的情况,即使按时完成,也可能没有达到别人的期望值,长期以往别人对你的失望会越来越多. 敢于说No 看起来和第一条雷同,其实细究起来不一样.第二条执行起来比第一条难得多.当遇到明显不合理的要求时,可以考虑拒绝,前提是准备好了全面充分的理由.不要经常说No,但是一旦说了,就要切中要害

【知乎】怎么成为一个优秀的程序员,而不是一个优秀的码农?

怎么成为一个优秀的程序员,而不是一个优秀的码农? 9 条评论 分享 默认排序按时间排序 98 个回答 3844赞同反对,不会显示你的姓名 萧井陌 微信公众号:炼瓜研究所 技术社区 - 3844 人赞同 优秀的程序员会告诉你打根基的重要性,会劝你在厚积薄发前要隐忍. 优秀的码农会告诉你学啥底层.啥啥啥一拖就好了,学了python还要啥自行车啊,数据结构排序函数二分搜索这不都内置了吗?工作中永远用不到,学算法有啥用啊?成为高手有很多种方法汇编是个屁啊? +++基础的分割线+++ 列举几个我认为比较重

如何成为一个优秀的程序员(大部分写的都非常不错)——要勤快,不停的学习;争论是无意义的,不如把两种都学了,会更有收获。

在看这份FAQ之前,你必须先读完ESR的<如何成为一名黑客>(本文末尾附有中译版),该文所讲过的道理我不再重复.该文用很大的篇幅讲什么是黑客文化,虽然态度和信仰的确是成功的最关键因素,但是你肯定会想,做不做黑客跟我没关系,我只是想学个一技之长,找个好工作而已,对吧?那么肯定更希望获得一些具体的可操作的指导.     1.各种软件技术之间是怎样的关系? 我把软件技术分为三个层次:    问题域:计算机图形学.音视频编码.信息安全.模式识别.信息检索.自然语言分析.人工智能.科学计算等:     

如何成为一个优秀的程序员

第1个一点点:专注眼下 见过太多心猿意马的程序员,我不得不把「专注眼下」作为天字第一条.他们往往有各式各样的小梦想,比如做个小茶农.做个小鹅贩.做产品.做销售.做投资,却被程序员的高薪或是没有转行的魄力「耽误」了,而因为不专注,他们不在意做好自己的本分,不在意锤炼自己的技能,不在意学习新兴的技术.不可否认,这世界上存在着伟大的产品(像乔老爷).伟大的销售(像埃里森).伟大的投资客(像彼得菲),而他们毫无例外都是程序员出身.可你听说过巴菲特评价盖茨的话么,比尔盖茨如果转行去卖狗,那他一定是全世界最

一个初中生到程序员的辛酸经历

一个初中生到程序员的辛酸经历 转自木板 前言:我将写下一个穷苦家庭的农村孩子的经历.我念书不多,文笔不好,基本上是流水式的叙述,大家多多见谅.如果你现在年轻或迷惘,那你看下这篇文章或许有帮助.如果你想了解社会的底层,也可以看看本文.在这篇文章里我会写一些我对人生的看法,希望可以给各位参考参考. 我今年二十八岁,个子不高,长得还算端正.在学校受的教育不高,就读到初中二年级下学期.   我干过很多行业,学过厨师,学过装修,做过酒店服务员,送过报纸.可以说在在社会底层的经历十分的丰富.后来参加自考拿了

一个伟大的程序员的6个好习惯~你晓得不~

一个伟大的程序员需要具备哪些特质呢?也许大部分人回答的是逻辑.机智.耐心和勤奋当然,其实这个问题并没有标准的答案,但是除了这些特质,习惯也是非常重要的,而这个特质可能在已经进入正轨的团队组织中才得以窥见. 除了必须的技术和逻辑思维,下面跟随小编看一下在团队中应该具备怎样的好习惯吧~ 好的时间管理 亲有木有经常遇到迟到的问题,对于任何一家公司迟到都是很让人头疼的.作为一名程序员,有时候不得不熬夜加班,从而导致第二天上班迟到啦~(这点小编要投诉一下我们戴维,总是踩着点打卡,哪怕你来早那么一点点,都不

一个无锁消息队列引发的血案:怎样做一个真正的程序员?(二)——月:自旋锁

前续 一个无锁消息队列引发的血案:怎样做一个真正的程序员?(一)——地:起因 一个无锁消息队列引发的血案:怎样做一个真正的程序员?(二)——月:自旋锁 平行时空 在复制好上面那一行我就先停下来了,算是先占了个位置,虽然我知道大概要怎么写,不过感觉还是很乱. 我突然想到,既然那么纠结,那么混乱,那么不知所措,我们不如换个视角.记得高中时看过的为数不多的长篇小说<穆斯林的葬礼>,作者是:霍达(女),故事描写了两个发生在不同时代.有着不同的内容却又交错扭结的爱情悲剧,一个是“玉”的故事,一个是“月”

如何成为一个设计师和程序员混合型人才

优秀的设计师和程序员统治着网络–毕竟是他们创建的网站.而那些创建最好玩和最有用的网站的人,往往都是两种技能兼而有之,他们可以将两种完全不同的视觉语言和技术语言运用自如. 会设计的程序员和会编程的设计师是最抢手的,尤其在创业公司中.能够掌控所有的环节能让你的产品快速高效的从概念变成产品–这这是很多年轻的公司尤其需要的.这些综合型人才在获得一些经验后也能成为优秀的产品经理. 所以,如果你是一个除了写代码之外还想有作为的黑客,或者如果你是一个想要有更多开发的设计师,你如何能从仅是一个领域的专家变成一个

学习Axure的心得&amp;关于如何做一个优秀的程序员

这些天学习了Axure的一些基础知识,感觉自己就只是刚刚入门,还有好多东西不懂.本想在网上好好地学一些更高的操作,却找不找比较好的学习视频.网上的资料太多,而且质量参差不齐.(视频画面根本就看不清)到后来就找了一些文本资料来看,但还是未能坚持看下去.不过,我看了一些关于程序员的资料. 下面就来说说我的看法. 一 努力刻苦地编程.好的程序员是后天炼成的,是靠一行行代码和一个个算法给喂出来的.因此,只要努力就一定能成为一个优秀的程序员. 二 拥有过硬的技术和本事.要明白,在IT行业,靠的不是关系,地