2020-04
10

强大到让我瑟瑟发抖的递归

By xrspook @ 8:41:56 归类于: 烂日记

大学学习C语言的时候,基本上我不会写单独的函数,所有要解决的事都在主函数里搞定了。当时我学过判断和循环,但是,我却从来没学过递归。在解决一些简单事情的时候,循环跟递归,没什么差别。从理解程度来说,我觉得循环更简洁一些,但是,当某个东西像套娃那样一层叠一层,每层里面依然用同样的规则继续套叠,不知道要叠多少层的时候。递归就会展现它无穷的魔力。循环难以实现这个,又或者循环并非实现不了,但是递归在完全不需要体现循环的框架下,简洁的语言就已经在做着循环的事情。

昨天,我第一次在Python里见到这个恐怖的递归。外国人的书,我觉得都有一个特点。正文的时候举的例子都很简单,但是一到习题,就会把你彻底搞死。习题里面会偷偷带入一些超纲的东西。大概写书的人理所当然默认你应该知晓。这种事情我已经在学习Java的时候领略过。当时那本书之所以没法看下去,就是因为我没办法想象出作者的脑洞到底是什么。他们的习题几乎可以说大多是一些填空题,但要实现一个功能,其实未必一定就得用某种方法。你给我一个条件,给我一些目标值,我能做出来也就OK了,为啥必须走你的路呢,这非常难。之前我不觉得自己跟外国人的脑洞到底差多远,但是当我对比过自己和他们写的程序以后,我发现真的差挺远的。虽然我们都能实现某个功能,就效率而言,感觉上没差多少,因为我只是在做一些非常初级的东西。应试教育的时候,有标准答案,当然好判定成绩,但实际上,编程这种东西真心应该天马行空。给我一个效率的限制,比如说完成某件事,必须在多长时间之内解决,代码长度不能多于多少,至于我用什么办法,这是我的事。

说回递归函数这件事,在处理几个简单数字的时候,可能你感觉不到它的强大,但是,当我见识过用那个东西画出来的层级图形以后,我简直就只有站在旁边瑟瑟发抖的份儿。真的不知道是哪个神经质想出来这么强大的东西。但实际上,深究下去,那也不是很强大,那不过是不断地重复一些已经设计好的事情而已。如果要人去做那些重复,一开始还好,但是随着事情的深入,会慢慢乱套,但是计算机不会,他们会一根筋地执行我们的指令。最终出来的结果是令人惊叹的优雅,还是乱七八糟一坨屎:就得看设定规律的人的功力了。

递归现在对我来说是一个非常恐怖的东西。因为我不了解它,所以我害怕它,就像当年认识循环一样。但是,用好递归以后,我的武器库里就会增加一个杀伤性非常大的家伙。说到递归,让我联想起新冠病毒。这个东西的递归到底什么时候才是个头?我觉得这肯定不是一个死循环,自然界非常擅长递归,处处都是数学和逻辑你知道吗?!但是,到底要递归多少次,全人类才最终能看到隧道尽头的曙光呢?到底这个新冠病毒函数的递归里埋伏了多少个随机数呢?学习递归让我明白到,层级少好对付,层级一旦扩增,那就是次数级的增长,而且,说不准到达一定层级的以后就会触发某些大招炸弹,想想都心寒。

编程是一个让我重新理解自然规律的过程。

2019-06
27

大吃一惊

By xrspook @ 11:16:04 归类于: 烂日记

今天花了一整个下午去开一个对我来说不知道为何要开的会,因为里面说到的那些东西我的部分早就已经准备就绪了。准确来说,我已经完成了接近20天,但快到截止日期的时候,其他人貌似进度还不知道在哪里。资料还没收集完;资料整完以后还没有以一个靠谱的形式整理出来;整理出来的东西他自己觉得没问题,但别人一看就觉得那是重点错。这让我觉得有点无语,而之所以会有这个情况,其中一个原因是一开始制定方案的人没定下一个大的框架,他所制定的收集资料时间过长,导致这段时间里大家有没有做事,做了多少事根本无从考量。因为查找资料的时间太长了,后面整理的时间又太短了,所以你根本没机会把大家整理出来的东西用同一个口径去修改合成,因为东西尚且没有以他们的角度整出来,又怎么可能合成得了。

之前我觉得有些东西是理所当然的。收集资料的时候,一开始你的确应该事无大小全部都拿过来,但在整理的时候,你就不应该做纯粹的罗列,那是毫无意义的。以党建方面的资料为例,如果要以年份为时间轴列举,每年你就只能列举一些有代表性的、比较大型的、做出成绩的、只有你这个单位有,而其他单位拿不出来的。但是负责这一块的同志居然把组织员工看电影也写上去了,而且还没写清楚看的是哪部电影,所以基本上如果仔细看,每年都会看到这么一条——组织员工观看电影/组织员工观看某个视频。这是件让人觉得相当无语的事。同样,他选取了那些照片也是让人觉得摸不着北。比如其中一张是会议室里坐满了人,大家低头,不知道正在努力学习些什么,虽然远处投影上写着那个会议的议题,但显然在会议室用投影把那个照片打出来的时候我们尚且看不清,就更不用说如果把这张照片放在展板或者放在某个宣传册里面,缩小那么多倍以后完全不知道那是什么情况了。当然,图片这种东西你还可以在下面用文字说明,但显然,从图片质量衡量,这张照片毫无意义,没有任何代表性,无法得知那一年发生了什么大事。就更不用说他选的某些照片,里面只有一个人拿着麦克风在说了些什么,构图很一般,图片质量很一般,反正图片就是不是那种没美感的,外加背景看不到任何的会议主题之类。选取这些照片,而且照片的文件名里只写了图1、图2,没有写具体事件以及发生的时间。这不是在逗我玩吗?负责这一块的同志他觉得自己已经完成任务了,但是我这个局外人看来,他这些事情做了跟没做一个样。如果我是拍板那个,他所做的这些东西全部都得返工重来,想想都觉得恐怖。他可是暨南大学中文系刚毕业没几年的硕士研究生,他到底是怎么完成他的本科以及硕士论文及答辩的呢?还是说他那种学术的层次我这种理科生、平凡人理解不了。我个人觉得,如果你找出来的资料和素材是你有别人也有,你干脆就不要找了,因为这是相当无聊没意思的,毕竟你找的这些资料是代表这个单位过去10年来的辉煌。如果不是每个点上你都做得比别人好,那么你就找一两个你比别人优秀的地方,着重扩大。我不觉得他会想不到这一点,他不这么干难道就因为领导要他以时间轴的方式展示出来,然后他就一味遵照上面的命令去执行?

不知道是不是文科生都这样,于是我有点理解为什么60年代华南师范大学中文系毕业的我爸会经常被我妈唠叨他读死书、不变通、拒绝学习了。

2019-01
7

统帅

By xrspook @ 23:53:44 归类于: 烂日记

坐在床上,我犹豫了十分钟,仍然不知道该如何开口,因为脑子里的东西太多,不知道从何说起。

过去这几天,我经历了非常多的事,很多都是第一次遇到,而实际上,或许不能算是第一次。对我来说是第一次,但对我妈来说不是。第一次的时候,她们还有长辈指导,但现在,她们就是最高指挥官,而她跟其他指挥官又有各种矛盾,谁也说不服谁。大家肚子里都有很多方法,但是又不太一致。每个人都是想到一些做一些,却没有看到事情的全局。具体的事情或许她们知道该怎么做,但实际上,有很多事她们都只是做了个开头,然后画风一转,又去做别的事了。作为一个旁观者,真的看得我心烦意乱,所以最后我实在忍不住了,直接把她们的管理权抢过来。显然她们都是很好的兵,但问题是她们从来没当过将军,不知道如何指挥,所以每次都只是在一些很细端末节的问题上纠缠不清。如果有一个人说了算,显然这些事都可以很快解决,比如说统计人数的问题,可以通过一个电话搞定,但现在,她们却走了无数弯路。一开始的时候,觉得做某些事不好意思,但实际上,当计划要进行下去的时候,她们又必须厚着脸皮做之前她们觉得不好意思的东西。

我妈那代人都70多岁了,显然他们的脑子已经不太好使,尤其是在这些一辈子大概只会遇到几次的事情上面。从前还能找个老人指点,但现在老人都走了,她们就只能靠自己残存的记忆。对我来说,我从来没有做过这些事,也正是因为这样,我完全不需要从她们那些记忆的角度去处理事情。东西摆在那里,只要你把它做好就行,无论你用什么方法。我是一个做统计的,显然你要我列清单,然后计算次数和总数显然非常简单,但是,如果靠她们的老一套办法,即便她们通宵不睡觉也整不出来。归根到底,是因为她们的思路不清晰。明细数据只有一个,但汇总方法有无数种。很多时候,你不仅仅要一个汇总结果。所以如果用手抄的方式会非常累人。但显然,按照我的思路,只要原始数据录入完毕,各种汇总都相当简单,那就只是一个拖拉鼠标刷新数据透视表而已。一直以来他们都全凭记忆排列出来的各种亲戚关系如果按照一定的脉络排序,那是相当简单的事。哪个有,哪个没有,哪个差多少,一切都清清楚楚。不需要抄N张纸得出汇总数据又或者用更为不可理喻的画正字盲数方法计算。这不是什么选举,这不是什么计票,不是不记名的,做某些汇总的时候,你必须得记名,虽然那个汇总数据就只是一个总数,但如果你的明细不清晰,你根本没办法再复核。在我的统计逻辑里,汇总出错这种事不存在,只要原始数据没问题。所以只要他们按照我的思路,只要跟我核对好原始数据,其它东西可以水到渠成,所有汇总都可以在弹指间获得最终结果。

为了得到那个最高的管理权,让她们都听我的,这几天我真的拍了不少桌子。但最后,连我最牛逼、最习惯性说了算的妈妈也终于臣服于我,配合我的工作。话事权这个东西,我真不喜欢要,但是如果我的管理能让一切都更顺畅,为什么不把这个权力给我呢?的确,我可以让他们更高效,更舒服。

一直以来,我都宁愿做最基础的工作,但这几天我发现,在某些特殊时候,我必须担负起管理的责任。

2017-12
27

错误估计

By xrspook @ 10:00:31 归类于: 烂日记

昨晚运动和电影的计划全盘落空,原因是我错误估计了自己工作的实际耗时。

吃完晚饭以后我打算最多只做到晚上7点,但居然在不知不觉中很容易就7点了。然后我跟自己说,8点之前回去,但实际上当我终于觉得自己差不多搞定的时候已经接近8点半了,外加一些收尾工作,实际上回到宿舍的时候已经接近晚上9点了。这其中有一个是我差几十米走到宿舍楼突然想起貌似我今天下午下班还没有打卡,于是又折返回办公楼打卡。在做回统计之前这种事几乎不会发生,我觉得自己从前从未这样错误估计过自己的工作量。当然其实我下班后晚上做的事完全可以第二天再做,但我却有种不做完心里不舒服的感觉。这些时间不会有加班费,是不做完我自己内心过意不去。闲的时候我可能上班时间一天都无所事事,所以我觉得自己应该要做到在适当的时候把那些时间补回来。

让我做电子版的账本我很乐意,但让我以一定格式打印出来我就觉得很烦。为什么每一页都要签名?为什么那些什么上年结转、结转下年之类的不能直接打印而必须盖章?为什么收入和支出不能写在同一行?为什么同一个月发生的好几行月份那些单元格要合并?为什么经常有检查但账本却必须拿纸质的给别人检查?为什么帐目没发生的月份仍要补0和斜杠?账本最核心的东西是把数算清楚,这样那样的存在让我觉得顾及那些格式比账本本身更让我头痛。大概因为我太年轻我知道得太少,所以有以上那么多的疑问。但每次都要打印80页账本的时候,我很自然地就会烦躁。如果为了应付检查,每次检查之前都重新打印就意味着每次都要重新签80个名字,而且不只是记账人我,还有那个审核人,当然还包括那几百下的各色盖章画红色斜杠之类。但如果出了第一次签名以后往后都以套打的方式往上面继续打印我每次都要重复很多匪夷所思的步骤,每次就打印那么一两行,即便我能按住Shift选中同一个工作薄的多个工作表形成工作组也一样很麻烦,因为会存在很多表单的物理行数不一致。当我打开其中一个工作簿,里面放了接近30个工作表的时候我想死的心都有了,光是把每个工作表都点开看一下就让人烦,点开了以后还要进行哪怕只是几个点击的操作都非常容易让人犯错。该怎么优化这个账本的录入和打印在重新做回统计的时候我已经在思量,但至今没想出什么好办法。从理论上说套打是必须的,但那些思路我觉得是反人类的,要以什么逻辑去实现呢?我觉得设计那个账本格式的人没搞清明细表和汇总表的关系。这也是今年我被总公司的人莫名叫去帮忙以后发现他们的一个问题。他们把明细表和汇总表混用了,如果数据简单,当然那样做能一目了然,但数据很复杂,汇总的东西很多,而且经常要对明细进行不同的分组得出不同的汇总数据仍然使用明细汇总混用就麻烦大了,因为我们不得不为有没有设置错误公式引用而折腾半天。要找汇总数据的时候得拉过长长的明细数据,需要快速计算某些明细数据的时候汇总不恰当地夹杂在中间。每当我遇到貌似很麻烦的Excel问题的时候我就会觉得自己知道得太少,所以完全没有靠谱的改进思路。

之所以学无止境是因为生活逼迫着我们唯有不断接受新事物掌握新规律才能让日子越发好过。

2017-09
30

理清思路

By xrspook @ 11:24:57 归类于: 烂日记

理清思路比其它都重要,搞清楚整个流程,知道自己在做什么,比非常勤快地不断地猛做靠谱。今天早上,我总算在7:30之前,完成了昨天数据的汇总。因为经过昨天的各种记账以后,我有点明白那到底是怎么回事。的确,上级的要求很变态,通常要求你按批次去汇总,一个批次里面可能有多个单位,通常来说他们会要求每个单位都分开。有些时候只需要一个批次的总数。这还不是最烦的,更烦的出现在某些账目里,需要分列客户的属地,于是一个批次里面有N个客户,可能会有M个属地,也可能会有N个属地。N和M的关系非常难说,具体情况会如何,运气好的话就刚好是一个客户一个属地,运气不好的话可能是多个客户一个属地,但是却仍然有多个属地。账里要求你把同一个属地的所有批次都写进去,等于那是按照属地分的,但问题是得把多个标的的加起来。而更多时候报送时别人总是要求你分批次分客户。其实这些对应不难,但是却很烦。尤其是当你一个批次的东西还放在接近30个仓里面,每个仓都有变动的时候。今天之前我在烦的东西,除了这些批次客户还有什么船号。但今天我想通了一个问题,船号是什么根本不重要,对我来说重要的只是仓号。批次客户仓号就是我需要的全部。船号和车号对我来说都是一样的无所谓。当然如果我要做另外的统计汇总,船号就比其它都重要,因为有可能要做某个客户所有船号或者不同船舶吨位的分类汇总。所有的这些信息只有在一开始的时候就理清思路,如果往后再回过头来,基本上已经没办法再搞清谁是谁了。如果连我这种愿意折腾的人也搞不清,别人就非常有可能更加是乱成一团。之前让我混乱的是某个客户中了两个批次的标,所以从心理上说,因为客户名称是一样的,我很难把它分出来。但今天我想清楚,其实之所以有这样的困难是因为批次这个分类字段没有被加进去,如果我一开始就是按批次区分的,无论那个客户出现在多少个批次多少次都无所谓,对我来说那个客户名字上是一样的实际上身份不同,你直接把它当成客户的分身就可以。名字是一样的,但性质不同。

因为变化汇总的要求很多,如果没有对数据进行透视表方式的处理基本上是不可能完成任务的,我很庆幸,在搞这一摊东西之前,我越发的熟悉数据透视表这个功能。有了这个东西只要我的基础数据分列得足够详细,我就可以得出我想要的汇总结果,可以按仓、可以按批次的、也可以按客户。当然如果你硬性要求还得分什么车多少船多少,会有点难度。但是这个也未必不可能,因为从我们现在的这个称量单号生成规律还是可以把车跟船轻易地分离开来。但是要做到这个,最恰当的方式是一开始的时候就做好分类标识,就像我在那些分类标识里面又添加了批次这个选项一样。自从单位开始有船进出以后,我都每天都过得很郁闷,首先烦那些船的数据到底有没有输入,其次是那些船到底属于哪个单位、属于哪个标的,。没有一个系统是完全靠谱的,所以最终我还得自己搞清自己到底想怎么样。今天是这个月最后一天,估计我们单位的不会让我好过,所以不可能在今天下班之前就结束这个月的账目。但是月末这个数耗在那里显然麻烦非常大。为了这个我已经郁闷好几天了。

有种被掏空的赶脚。

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress