2020-04
10

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

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

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

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

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

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

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

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系统,核心的东西依然是编程算法。

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

2020-03
20

偶遇VSCode

By xrspook @ 9:27:33 归类于: 烂日记

昨天晚上但我吃完饭回到宿舍,拖完地要去办公室之前,我跟书桌上的外婆说,今晚总算没那么多板上的任务,我会早点回来。结果我还是很晚才回宿舍,甚至比平时还要晚,因为我洗完澡的时候已经超过了晚上11点。昨天跟之前几天不一样,因为昨天单位有卸船作业,所以我还得在手提电脑上忙一阵单位的事情。我很痛恨自己的拖延症,跟之前几晚相比,昨晚我的确是很闲的,但正是因为我很闲,所以我就去看了一下自己订阅的东西,结果就发现一个,很好玩的跨平台,出自微软,轻量级的编程软件。之前基本上可以这么说,我没用过编程软件,一直用的最多的是Notepad++,但那只是个代替Windows记事本的工具。的确很便携,而且在处理代码的时候也有高亮显示,字体大小和格式很自由,体积很小,我已经用了很多年,一直觉得很爽,因为用那个东西,有后悔药。即便我按了保存,还是可以后退很多步,至于一共能后退多少,我还真没研究过,装上插件以后,可以有跟多形式的自动保存,比如当光标离开软件以后,东西就自动保存了。又或者我可以设置,多少时间就保存一次。写代码这种东西,最慌的就是改完以后才发现,没改之前更好,但是软件不能后退,没有后悔药。跟Office软件比起来,Notepad++的后悔药好用多了。因为Office软件一旦按了保存,之前的东西就后退不了了。而且Notepadd++打开文件的速度非常快,即便是很大的数据文件也没有问题,比如说,几十MB的XML文件。为什么会有那种东西?其实那个就是我WordPress导出的数据,是我10多年来blog的日志数据。我不知道如果那些东西拿去出书的话,那本书得有多少页。其实我还真有想过会不会有一天无聊地把自己的blog拿去出书。但为什么要出纸质版的书呢?电子书其实也行。把我的blog静态打包下来,就是一本电子书。

回到Notepad++加上,虽然那个东西可以用来写代码,但跟专业的写码软件比起来,还是挺不方便的。虽然其实Notepadd++也有不少插件,但是跟别人的插件比起来,好像还是欠缺点什么。如果纯粹是文字,不是代码的话,我觉得它非常优秀了。比如说我经常用来核对字幕哪里修改了。之前我并不觉得Notepad++不适合用来写代码,直到昨天我看到了那个VSCode以后。在那里保存一个后缀为HTML的文件以后,你只需在那里输入一个东西,之前之后的那些格式全部都自动生成了,而且全部都已经标记好颜色,做好了缩进。那个东西自带了emmet功能,快速写码变得易如反掌,因为只需要写一点点东西,一大串成对的代码就出来了,于是,妈妈再也不用担心我丢三落四,因为成对的代码会自动出来,代码可以出来,我觉得自动缩进不会有啥状况。一直我都在搞blog,我一直都只是在做前端的设计,看到这些功能以后,我简直震惊了,用这个东西写码,只要你有思路。只要你有灵感,写一个网页相当快捷简单。不过绝大多数时候,我觉得前端设计还是需要一些脑洞的,比如说你根本没想到可以那样做的话,你怎么可能写得出来。

因为看到那个让我兴奋的软件,而且还是便携的,直接解压使用,无需安装(但是很大,解压后200多MB),所以洗澡的时候我考虑过要不要再写一个WordPress模板,那个blog用来存放我从前做过的那些blog。那些不是我主站的blog,比如说BLF的、JEA的、以及ADR的。那里的东西有些不是我的,但是很大一部分都是我磨出来的。曾经,我在那里倾注了非常多心血。那是我曾经的兴趣所在。那些东西是我人生的一部分,但是,他们以前的家已经消失了。BlogBus没有了,点点也没有了……我觉得我应该让他们重生。

写一个网站的前端需要灵感,但网站的核心是内容。首先,我要考虑怎么把BlogBus和点点导出来的数据转化为WordPress可以理解的内容。

2019-12
28

如果AI…

By xrspook @ 9:33:11 归类于: 烂日记

大概我是那种永远喜欢从一成不变之中挑出些不一样的人出来,所以如果你只是叫我抄写的话,我反而会抄错,但如果你让我发现其中的一些规律,或者某些跟其它不一样的东西的时候,我反而会做得更带劲。还记得我读中学有个游戏叫做大家来找茬,以前的游戏机店通常都有那种机子,后来我们家里有电脑了,或许也会装个那样的游戏。那个东西很简单,就是找两个图里不一样的地方,虽然用现在的技术对比的话,什么都出来了,但自己去找和直接得到结果,显然是两回事。

在AI人工智能技术越来越普遍的今天,几乎可以这么说,那些全凭勤奋的事以后几乎都不需要人去做了。虽然AI可能会费一点周折,但依然能够快速得出答案。勤奋的事情没有了,稍微花点脑筋的事情也没有了,我们可以做点什么呢?我觉得大概我们就只剩下可以去制定AI的规则了。这也就是为什么现在已经逐渐在说以后不会编程的人是文盲的原因。人工智能这种东西实在太聪明了,他们会自我学习,但是学习到一定程度会有什么后果呢?有些事我们绝对不愿意碰上的,所以在AI变得太聪明之前,大概我们就得划定一些界限。还记得以前经常有那么一句话,没有做不到,只有想不到,所以人的潜能是无限的,同样,如果你给予足够多的信息,AI的潜能也是无限的。有限东西我们心里还有个底,无限的东西,其实挺可怕。如果真像某些科幻片所说,AI要谋害我们呢?他们完全可以这么干,但是他们为什么要这么干呢?发展到一定程度,AI可以完全不依赖人类,反倒是人类非常依赖那东西。人类最根本的问题是扩张,因为人会繁殖,会出生也会死亡,但AI这种东西,几乎可以这么说,可以修修补补永恒下去。在这种情况之下,他们为什么要扩张呢?如果他们有更高级的版本出现的话,他们会不会自行淘汰掉低版本?还是说要花大力气把低版本升级呢?我觉得大概他们不愿意让高低各种版本并行。或许我们可以设定让他们忠于人类,但通过他们的自身学习,他们会不会否定了这一条基本的原则呢?AI可以复出很多个AI,但是,越多就越有竞争,而且会过多消耗资源,但是,只有这一个的话,显然很孤独。人类在多少才最合适这个问题上,从来还没找到一个共识的平衡点。

当别人还停留着遵守规则的时候,我已经在考虑,如何制定规则,要制定什么规则,才能让我过得痛快。而之所以会这么做,是因为我肯定接触到了一些别人暂时还没遇到的问题。从乐观的角度考虑,我的运气太好了,从悲观的角度考虑,为什么模棱两可的事都会自动找上门。但无论你逃避也好迎接也好,你都得接受这个事实。等待让别人给你一个不顺畅的方法不如你主动提供一个你觉得靠谱的给他们。

懒是一个正常的状态,但那不应该是常态。

2019-12
7

2020年的目标:学习R语言

By xrspook @ 21:57:29 归类于: 烂日记

昨天我花了很多时间去研究R语言里面的绘图。R语言这种东西是今年夏天我才开始接触的,当时我看的是head first系列的数据分析。在这本书里面,R语言用得非常多。首次接触那个东西时我就觉得,那个比Excel厉害太多了。作图这种东西,貌似是美工,但实际上,在R语言里面,只要你想得出来,你就可以通过编程去实现,牛逼轰轰的。无论你想得出的,又或者是想不出的功能,它都能做到。突然之间我觉得自己在统计分析这个问题上真的是个白痴。一直以来我都觉得自己在理论知识方面很缺乏,但原来我在技术的使用方面更加是井底之蛙。如果我要提高我的理论水平,如果直接从案例从技术方面入手,也是可以实现的。我得知道别人是怎么做的。别人用什么方式去实现的。为什么别人可以从那个视角去分析问题,而我却没想到。同样的原始数据,为什么别人就能揪出一些我没想到的东西。这一点我必须努力加把劲探索。

昨天从中午开始我就纠结R语言的散点图。散点图这种东西,Excel里也能做,但问题是Excel里面没办法做出矩阵散点图。之所以我中午开始纠结R语言,因为我在几个月前到数据分析教程里知道学习里知道了R语言可以用几句非常简单的编程,绘制出神一般的的矩阵散点图。矩阵散点图这个东西,第一次看到就把我惊呆了。在那之前我见过的散点图只是两坐标或者三坐标上面标注点,绝大多数情况下我只看到过两坐标的。我们大都从点的分布,点的密度,点的聚集模式得出一些规律,找到一些结论。这是以前我一直在做的,我也只看到别人做到了那个程度,但在今年夏天我学习的那本数据分析里面,他们用两维数据作出一个散点图,在用第三维数据对比N个散点图。这些矩阵散点图是一次性做出来的,并不需要一个个的手动合并,而且那些散点图也不需要手工去设行列数。你只需要提出处理数据的要求,他们就会选择最佳的方式表达出来。第一次看到那个的时候,我觉得那简直是屌爆了!前几天我也尝试过用我的数据做矩阵散点图。后来发现,别说散点图,即便是要我提供一个能正确读取数据的csv文件好像也很麻烦。昨天中午,当我把一个一个Excel做出来的散点图罗列堆砌到Word里的时候,我明白到如果只是一两个,没问题,但我需要2个散点图一起做对比,4个散点图一并罗列出来找差异,显然只能使用矩阵散点图的方式,而不能一个一个贴浪费篇幅且让人疲劳。

在学习数据分析那本书的时候,虽然我也用过R语言,但是那纯粹是把书本上的命令行抄写过去,我完全没有动脑筋,所以当我把自己的数据放到R语言里面处理,希望得到我想要的东西的时候,无论我怎么纠结,貌似都得不出我想要的东西。在奋斗了几个小时以后,我才发现原来plot跟xyplot是两个完全不一样东西。plot是R语言的一个原生作图函数,xyplot则需要调用lattice数据包。数据包就像是一个插件,不过lattice那个插件已经常规到已经默认安装在R语言的主体软件里。在折腾的时候,我因为发现plot函数xyplot函数得出来的图不一样,我才明白到了这点。最明显的区别是他俩的图形颜色不一样,坐标轴的字体不一样,以及坐标轴的刻度分布不一样。我个人觉得lattice数据包作出来的图要比R语言原生的好看一些。

昨天我足足折腾了接近12个小时,才稍微得到了我想要的东西。之所以说稍微,是因为某些因素我还不能自如控制,有些参数我纯粹只是停留在猜想的层面。我不能满足自己只知道一些。我也知道有一些轻量级的作图软件大概也可以做到我想要的功能,但既然R语言如此强大,我愿意花更多的时间去认识他拥抱他。

用编程的方式去作图,想想都觉得这实在太牛逼了。于是,昨天晚上我也定下了目标,2020年我要加把劲学习R语言。

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