复盘15年编程路-印象最深的3件事

大家好,我是艾叔,从04年第一个正式的软件项目开始,一直在做编程相关的事情:开发过工业级的软件;做过很多次Hadoop和Spark的算法性能优化和实现;写过Linux下的硬件驱动;裁剪和移植过操作系统;带学生打过很多次编程比赛;也得过很多奖。

复盘这15年,发现对自己编程方面影响非常深的,却是3件和编程不太相关的事情。

第一件事:解决计算机报“缺少**dll文件”的问题

那是刚入大学的时候,同学电脑报了一个“缺少“**dll”的错误,具体文件的名字已经记不清楚了。

我当时都没怎么接触过计算机,但毕竟是学这个专业的,也想挑战下自己,于是,尝试帮他解决这个问题。

我根据对话框弹出的dll文件名,去网上搜索,找到了这个文件,并把它放到了指定的目录下。

系统重启后,原来的错误没有了,但报了一个新错误:“缺少另一个dll文件”。

没问题,继续寻找呗。

就这样,不断找到缺失的文件,复制,重启,又报新文件缺少的错误。

反反复复,没有尽头。

这时,我们班的计算机牛人同学出手了,他并没有沿着我的思路走,而是把报错的硬件驱动直接删掉,重新检测硬件,安装驱动,重启,计算机不再报错,整个世界都清净了。

这件事情过去已经近20年了,当年的场景仍记忆犹新。

因为这代表了两种不同的解决问题的思路,一种是我们人类世界的,而另一种则是计算机世界的。

按照我们人的思路,全部推倒重来,虽然能彻底解决问题,但是,通常要比修修补补这种方式,付出更大的代价。

而在计算机世界中,只要是计算机能完成的,不管其过程多复杂,它都会不知疲倦地把事情做得又快又好,其代价可以忽略不计,人只用下达正确的指令即可。

我的问题就在于:用我们人的做事思路,手动去解决计算机世界的问题,既费时费力,还无法彻底解决。

 

第二件事:解决电台通信接口的问题

那是刚参加工作不久,有一天,领导拿来四个Modem(调制解调器,可以实现数字信号和模拟信号之间的互相转换),并交代了任务:利用今晚的时间,使用Modem连接三台计算机,并编程实现任意两台计算机之间的文件传输,第二天去现场演示。

我之前做的工作很少和硬件打交道,既然不会,就现学。看说明书,看连线,终于用Modem将三台计算机给连接起来。

然后又打开示例程序,开始研究起代码来。代码是VB写的,我之前一直用的是Delphi,但语言是相通的,这个难不倒我。经过一个晚上的修改,我和另外一个同事一起,在原来程序的基础上,增加了转发的功能,顺利实现了任意两台计算机的文件传输。

第二天,带着Modem和程序,我们踏上了北去的列车。

达到现场,已是下午,吃过晚饭,我们来看设备,顿时傻眼。

我们在实验室时,Modem之间是用导线直接互联的,而到了现场,Modem是要连接电台的,也就是说,数据最终是通过电台发送和接收,实现双方计算机数据通信的。

这两天的跨度确实有点大,我是学计算机的,电台只是听过这两个字而已,具体是什么,在这一秒之前,都没见过,更不用说,要利用它实现数据通信了。

捋了捋头发,压压惊。

我提出了问题的关键:即Modem和电台之间如何连接?

我们找到了电台的专用接口,密密麻麻有几十个引脚,关键是还没找到说明书,每个引脚是干什么的不知道,还有就是,引脚非常密集,需要有专门的接头对接,才能将线引出来。

两个问题横亘在面前,我们分成两组,第一组,在堆积如山的资料中去找说明书;第二组,则研究如何在没有专用接头的情况下,将Modem的线和电台的引脚连接上。

第二天一早就要演示,时间一分一秒过去,到了凌晨3点,两个小组都没有解决的迹象。

怎么办?

Modem和Modem之间连接,最主要就是一收、一发两根线,这个对于Modem和电台也一样。关键就是要找到电台接口中,哪个是收、哪个是发,并连接上。

按照前面的方案,从电台的专用接口突破,希望很渺茫。

那除了这个接口,电台还有没有其它接口呢?有没有可能绕过这个接口呢?

顺着这个思路,我一眼看到了电台的送话器,我们用它可以说话,这就是发送信号,也可以听到对方的说话,这就是接收信号。它不就是电台的第二个接口吗?

更重要的是,它的接线非常简单,而且因为它的导线已经引出,所以和Modem导线之间的连接也非常方便。

确定思路后,我们赶紧拆开送话器,确定收发线,然后,将Modem的导线临时焊接了上去。

忙完这些,窗外的远山已经渐渐清晰起来,天际露出了鱼肚白,一轮红日喷薄而出。(此处为文学描写,请自行忽略。。。)

赶紧打开电台试机,在计算机中点下发送按钮,计算机的数据,通过电台发送出去,发出呼呼的声音,而在接收端,果然接收到了数据正确的文件。

大家沸腾了,这一天一夜的的工作没有白费,第二天,我们顺利地完成了演示,拿下了这个项目。

这件事,对我后续的影响是很大的。之前,我通常习惯于做有把握的事情,但在实际中,很多事情是来不及准备的,这个时候,积极主动想办法,就有解决的希望。

 

第三件事:解决视音频不同步的问题

第三件事情,发生在我第一次带学生参加全国软件大赛时。

比赛要求上传作品的介绍视频,为了有更好地效果,我们用动画来介绍作品,这个动画制作起来非常麻烦,每一帧都要手绘,而且还找了专业的配音,再加上作品开发的任务很紧张,整个动画直到作品提交截止的那个晚上,才做完。

当我拿着做好的动画,回到家准备上传时,为了以防万一,我在自己的笔记本上,又播放了一遍动画,顿时傻眼。

动画视频在我的笔记本上播放,严重不同步,介绍的语音都已经讲完了,动画里人物的嘴还在一张一合。

这是为什么?在做动画的机器上,这个不是播放的好好的吗?

时间已经是晚上10点多了,离截止的时间不到2个小时。

虽然我没有做过专门的视音频处理,但从现象上看,还是能够基本推测出来,这个是因为:笔记本的显示性能比较弱,从而导致:视频播放的速度远慢于音频播放速度。

该如何解决呢?

拿回去重新编辑,重新生成已经来不及,只能另想办法。既然不能编辑源文件,那我能否用软件,直接降低该视频的分辨率呢?

到网上去搜索,还真是有很多这样的软件,但好用的没有几个,费尽几番周折,终于搞定了一个。转换以后,虽然分辨率下降了,但视音频同步了,还是达到了想要的效果。

快接近12点的时候,我们终于把介绍视频给传了上去。

后续,在那次比赛中,我带领了2个零基础的本科生,战胜了多支985大学的研究生团队,得到了全国总决赛的第2名。

这件事情和第二件事有点类似,工作中很多的事情,真的很难准备充分,但积极地去应对,就有解决的希望。

这三件小事,虽然和编程没有太多直接的关系,但却对我编程有重大影响。第一件事,让我对计算机的世界观有重新的认识,提醒我在编程的时候,要遵循计算机世界的规律;第二、三件事,则提升了我的信心,增加了处理未知的编程问题的经验。

Ps:艾叔不是高手,也不是牛人,编程的道路上,走了很多弯路,也踩了很多坑,如果你也和艾叔当年一样,欢迎扫码关注公众号。如果您觉得文章有用,也可分享给有需要的人。

猜你喜欢

转载自www.cnblogs.com/aishu/p/10495022.html