2020-04
10

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

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

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

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

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

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

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

2020-03
31

如果可以再选一次编程初恋

By xrspook @ 8:59:02 归类于: 烂日记

编程是什么,我也不知道,但显然对我的很多同学而言,那是一个别人给你的任务,要你去实现它。那就像是一次测验或者一次考试,把那东西拿下,他们就会有成就感,或者那根本谈不上成就感,完全是因为那跟成绩挂钩,那跟学分挂钩。任何东西和那扯上关系,他们都会觉的有满满的肾上腺素。他们不是为自己而变成。情况就像那些沉迷于游戏的人。当然我之所以这么说,大概因为我不玩游戏,我是一个游戏渣,所以我才会有这样的看法。当我的同学花很多时间听歌、看电影、看电视、看综艺的时候,我花了很多时间在我的blog上,有可能是回忆某天我干了些什么,有什么感悟,也有可能我正在改进blog的。有可能是版面装修,也有可能是某篇日志里某个图片的PS。现在回想起来,那真挺神奇的,为什么我每天都可以为自己的日志配张图呢?现在我已经不记得是不是每篇日志都这么干了,但的确很多日志我都用心地配了图。有些简单一点,直接是照了个相,然后处理一下,修改一下大小也就可以了,顶多是加个滤镜什么的,但更多的那些是集合了好些操作的。

相比于PS,我更喜欢写代码。但实际上,当时我接触的代码不过是CSS而已。网站的基本结构很简单,因为高深的东西已经被BlogBus封装起来了,所以我能操作的不过是最基础的HTML代码。以及可以随意让我修改的CSS。当时我可以修改CSS,但我不可以随意增加或者减少CSS的起效位点。有些东西他们没有把控制权放出来,所以某些部位我是没办法通过CSS控制的。当时,甚至可以这么说,我没有接触到真正的编程。因为什么判断循环都是不存在的,又或者格式输出也是不存在的。更加不用说什么变量参数之类的东西。

为什么我大二的时候会对C语言那么着迷呢?我真的不知道。如果还可以选的话,我会主动选择C语言吗?当时的我根本不知道居然有那么多编程语言。直到后来,我终于见识到了各种各样了强大的东西,比如说昨天我上的那节课,说Python居然不需要用大括号把语句框起来,只通过缩进就能判断,那是同一个层级的。这简直把我脑子里的编程语言给颠覆了!如果那是在其它语言,无论是C还是PHP,又或者是其他东西。根本不可能运行成功,但Python通过4个空格的缩进就实现了。于是我不得不问一句,为什么我们当年要学习C而不学Python呢?当我用过VSCode以后,我觉得debug的过程很爽快,写代码也很轻松,因为你写好一半,另外一半就蹦出来了。前面你对某个东西定义了,后面当你打出一点点,余下的东西你可以通下拉把它选出来。当你写出判断之类的东西,回车后自动缩进是自然而然的事。代码写出来以后,不同类型的东西有不同的颜色,一眼就看得出来。正在写或者保存以后,如果某个地方出现了红色波浪线,意味着那里通常出状况了,有可能是静态的语法判断把你冤枉了,但对我来说,通常那都是我的粗心大意。如果当年学习C语言的时候也有这么多帮助,大概我们就不会在语法和格式上面纠结半天。实际上,我们的脑子应该用在天马行空上,而不是死在那些花括号对碰上,不是吗?当年,我可是用txt记事本写C语言的。更多时候,我身边没有电脑,我是拿草稿纸写的。的确,这样白手起家锻炼了我,但我觉得,用VSCode写代码,才会让我真正感受到写码的快乐。

34岁才开始和Python交朋友,我觉得这还不算太迟。

2020-03
24

回忆那只让我恐惧的小海龟

By xrspook @ 9:25:43 归类于: 烂日记

我不是读计算机的,但因为我是一个工科学生,所以我的大学课程里面有程序设计,但是学的是最基础的C语言。我不知道C语言跟其它比起来到底怎样,虽然很基础,但是该有的东西也都有了。还记得小学时学的那个小海龟LOGO语言。那才是真的一个让我崩溃的东西,每次上电脑课我都会有心惊胆战的感觉,大概因为当时我们是小学三年级,英语之停留在口语的阶段。如果只是拼打字,我还可以凭借那张纯粹打印出来的键盘练习。因为大家家里都没有电脑,所以所有人也就那个样了。至今我不觉得自己的打字有多快,尤其是如果你要我打英文。中文之所以快,是因为输入法有一些模糊音的处理,估计如果我是一个外国人,英语的输入法也有模糊音处理。英语输入法的模糊音或许只是我不知道。

小学的时光现在回想起来,就像奇迹一样。没有键盘的我们是怎么练打字呢?那些需要按Shift键才出得来的大写字母到底是怎么练的?我已经不记得一开始我们练习打字用的是哪个软件,但我记得我用过TT。现在我的电脑里仍然有TT这个奇迹般的软件。小学电脑室里学生的的电脑没有鼠标。之所以上电脑课用LOGO语言的时候我很慌,因为我觉得自己根本没有完全搞懂,处于一个半懂不懂的状态。那个东西回家却不能找爸妈帮忙。除了上课那40分钟以外,就再没有上机的机会了。我没办法通过课外练习弥补我课堂上的困惑。又或者那个时候,如果我努力的钻研一下课本,我不会迷糊,但如果我有一个实操的电脑摸索,我一定会觉得那相当简单。小学上电脑课的时候都是两个同学一台电脑。我的同桌总觉得那个小海龟非常简单,于是老师讲课的时候,他总是在脑洞大开的各种探索,当时的电脑还没有中央控制全部这种高端的功能,所以老师根本不知道,学生在下面瞎搞。也大概因为这样,我的注意力就好在看他脑洞大开上面,因此忽略了老师。之所以同桌觉得那超简单,因为他家里有电脑。对我来说,小学的记忆中,电脑是个恐怖的存在。那门课对我来说比其它课程都要让我忐忑,但当时所有人都意识到,电脑将是未来需要掌握的基础技能,不懂电脑跟文盲没啥区别。

初中的时候,我家里终于有了电脑,那是一台别人淘汰的机子。虽然说是被淘汰的,但是没被淘汰之前,又或者新买回来的时候那东西很贵。小学时候,学校的机房学生用386,没有鼠标,只有老师的那台486才有鼠标,下课的时候我们会围看老师玩纸牌。所以当亲戚的那台旧电脑搬到我家的时候。我根本不知道如何用Windows系统。连怎么关机我都不会。鼠标单击双击左键右键是个迷之存在。虽然,亲戚的朋友把机装好以后,给我演示了一下要怎么操作,但实际上我只是迷迷糊糊似懂非懂,关个机费了九牛二虎之力。小学时的LOGO语言没学好,因为我没看书,家里也没电脑,当我家里有了电脑以后,我买了一些Windows操作系统的书,也看过一些Windows和Office类的教学光盘,于是,我终于不慌了。虽然那个DOS系统还是会让我莫名紧张,但看到Windows界面就会觉得安稳。

又过了好多年。电脑这东西几乎变成了老古董,现在大家用得最多的是各种智能设备。虽然样式在变化,但实际上最核心的东西仍然不变,无论是从前小学里我们用386的时候,还是现在的各种智能终端上的AI系统,核心的东西依然是编程算法。

冥冥之中,我总是要跟一些我早年害怕的东西打交道。大概战胜自己就是活着的意义。

2018-03
8

早起开干

By xrspook @ 10:44:42 归类于: 烂日记

不知道从什么时候开始理论上应该工作日早上做的统计我全部都挪到了前一天的晚上做,这意味着前一天晚上下班以后我要加班。不确定从什么时候开始,也说不准能在什么时候结束,反正那项工作全套流程走下来大概需要45分钟到1小时。但随着单位作业时间越来越长,之前晚上六点多就能结数,但现在非常有可能结数的时候已经是凌晨。我总不能等到半夜12点再开工,然后干到1点钟才睡觉吧。这对身体非常不好,而且这般熬夜没什么效率可言。一直做,一直错,一直返工,简直在浪费生命作践自己。所以呢,几天前我把那改到了早上一大早去做。通常来说,如果工作日的前一天晚上是在单位宿舍睡觉,第二天早上我会在早上630的闹钟后拖拉十几分钟起床,整完内务到办公楼打水的时候大概是早上7点多一点。单位的早餐是730开始供应的,800是正常的上班时间。即便我700开干,理论上我800之前应该能搞定,但我总不能不吃早餐吧!所以现在我是准时610的闹钟就爬起来,到达办公室开干大概是630。正常情况我会在720之前完成,然后呢我还能悠哉地去打水烧水然后吃早餐。平时打水的操作我是在到办公室之前做的,现在改到了干完一轮冲锋的统计之后。这份工作太特殊,如果多一些人分担我的任务,我实在没办法给他们解释必须得自觉提前做到。自觉不自觉这种东西奢求不来。如果不自觉,领导一声令下当天的工作必须当天结束,如果没结束就干到结束了再下班,那就意味着必须只能工作到半夜了。因为没办法要求别人必须早起干活,唯一能让他们觉得心理平衡的就只是每天余下的工作时间自行安排,在做好自己工作以及足够发散八卦学习完别人的工作以后,多出来的时间自行把握。我一直觉得唯有这样才能发挥最大的工作效率。虽然已经到了21世纪,但这种工作氛围在国有单位还是向来不被推崇。有事干也好,没事干也好,你都得装成很忙的样子。哪怕只需要1个小时就能完成的事你也得给我拖长到7个小时去做。爬上去的人,又或者说根本不用爬直接电梯上去的人个个都是装逼的绝世高手。我实在不知道什么时候这种恶心事才会消失。又或者这个矛盾会一直存在,国企也好,私企也好,外企也好,哪里都一样。

天还没亮就起床,平时还处在模糊中现在却必须聚精会神地开干,这不容易。因为工作时间前移了,所以正式上班时间的时候我就会有时出现没事干的尴尬。我是这个单位的一个奇葩。准确来说,我向来都是个奇葩。光是三十出头都不结婚就已经够奇葩的了。还记得大二的时候教我们C语言的老师是个女的,40多岁都没结婚,我们所有人都觉得她很有性格(怪怪的),私底下我们说会不会是因为没结婚所以激素分泌不正常。作为一个教程序语言的老师,我觉得她不够聪明,冒泡法当时对我们来说不容易,但她讲课的时候也不见得她可以轻松搞定。除了不够聪明以外,她是个很直率的人,不喜欢那些死读书、光抄写不思考的人。有些时候,我们觉得她的某些行径挺大快人心。现在看来,可能会成为第二个她。

生活从来不容易。

2016-05
11

开看java的head first

By xrspook @ 7:29:44 归类于: 烂日记

根据一贯的经验,越是到了检查日我就会越清闲,因为一整天就只是坐在那里,等检查人过来。检查就那么几分钟最多十几分钟,没有超过半小时的,但却要用一整个工作日等待。曾经试过,等了一整天,等到下班了还是没过来。最终,那一次他们真的没有过来检查,而我们却为此搞了3天的卫生。这到底是好事还是坏事?真说不准。

我的经验告诉我,检察日就一定是很闲很无聊的。检查之前还有点着急等待。检查之后那是完全的放松无压力。领导去招待那些来检查的人,而我的同事跟我一样,要不就是准他被检查,要不就是享受候检查后的快乐时光。

我抓紧这个机会,赶快拿本书出来学习一下,对上一次看程序语言的书已经不知道是什么时候的事了。大概那次是因为我为了要完成。工程原理的设计作业编写计算软件而去看VB。我最熟悉的程序语言是C语言,但那只是用来考试的。在实际应用中几乎不用。我觉得学会一种计算机语言,就像学会了英语一样,再学习其它语言,比如说,西班牙语,德语,法语,还有其他拉丁语系的语言的时候。不能说你有什么优势,但是某种法则起码你是懂了,所以你在学其它的时候会有一点感觉。HTML是我很久以前就接触到的,在我学C语言之前就已经懂了,之后我又学了CSS,还有PHP。说来也搞笑,之所以要学PHP是因为我要把WWE网站的图片正则出来,而无需我一个一个点开复制。大概所有程序员一开始之所以要创作是因为大家都很懒,大家都不想去干那些重复的事。

上周五开始,就没那么忙,所以我已经开始java的head first学习。程序类的书都老厚老厚的,这已经成了习惯。在买java这书以前我也买过一些很厚的其它程序语言的书籍,但在这之前书买回来我就只是放到书柜里,或者放在某个地方,只是买没有去看。在买之前我是花了很多时间去挑选,但最终,书和我是分离的,当然我就没有学到书里面的东西。而为什么这次居然会真的看起来而且是拿这个笔一边看一边做书里面的练习?是因为,我必须得学会这个语言,然后,我才能进一步学会写安卓程序。我的目标是自己写一个跨平台的数据录入及处理软件。之前也看过外国人写的程序书籍,但那些书是经典系列的,所以有些沉闷。而且因为我看的是翻译版本,翻译的错漏以及用词的生硬,简直让书本变得不堪入目。学习C语言和VB的时候,我用的是国人编写的教科书,感觉还行。这本head first我的感觉完全不一样,跟那些沉闷的,经典书籍,不同,里面的思路也跟国人编写的教材,有很大区别。主要是因为他们的脑洞发散得很厉害。他们经常把一些很沉闷的东西就像给小朋友讲故事一样,虚拟化拟人化或者各种萌化。里面用到的编程例子,s让你觉得,很折腾,很无语,但实际上是真的有助于你去思考。比如说简简单单的就只是三句话的输出,本来可以直接写出来,但是他们设计的练习,却让你不得不用各种条件判断,经过无数折腾后才弄出来。你需要明白其中的规律,你要好好的利用所有的规律。明明可以不折腾,但他们却非得让你折腾得要生要死。昨天最后一道练习题,我是在偷看答案的前提下才做出来的。做完以后我好好地想了几遍,但还是有点想不通,所以在10K的跑步里,我一边跑,一边想,最后终于想通了。这真是一本让人欲罢不能很想一直看下去的书。少有程序类的书籍会写得如此有趣。

越是学习越是想学习,因为越发明白自己无知。正因一直在奋斗的路上,所以生活也变得充实。

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