毕设日记(四)
尾声,也是新的开始。
其实这个标题已经很离谱了,虽然叫“日记”但是半年时间才写到第四篇,不过还好我没有弃坑的想法,于是也就有了今天的内容。
从构思方案开始到几天前完全检查完论文,历经了半年的时间,写代码的时间大约占了一半,在这过程中其实想过要写一些东西,然而那段时间每天起床无非就是在好几个可视化库之间兜兜转转,挨个查文档再挨个做配置,一天下来其实没有真正实现什么功能,而确实耗费了很多精力。因为在规划中这个系列不是技术专题,只是记录下自己做毕设的过程,所以也没有产出文章。
不过在答辩前夕,可能这是这个系列的终章了,中间又没有及时记录下一些里程碑时刻,所以在这里我想重新回顾一下这半年来的毕业设计全过程。
在之前的文章中说过,我的毕设是一个数据结构算法可视化项目,这对想搞前端的我来说是一次机遇,也是一个能够写在简历上的难得的独特项目,同时我是一个对交互很感兴趣的人,这里的“交互”不是单独指操作系统或者app中点击或触摸的操作反馈,而是一种广义上的交互:面向普通的用户,网页、app中的操作逻辑是交互;而面向开发者,库、操作系统、编译器也是交互。交互可以很简单,也可以极其复杂,我希望未来我都可以有机会去接触它们。
其实当时从几百个毕设选题中看到这个可视化项目时,我想到了一个非常值得参考的开源项目Algorithm-Visualizer,而且最后的毕设成品也是模仿了它的UI。其实当时想得很肮脏,我以为万一自己遇到困难了还可以抄它,不过很快事实就给了我无情的回击,因为我跑不起来这个项目,虽然乍一看似乎是一些npm包需要python环境而我并没有安装过python所导致的,但自从上次我的不当操作致使Node.js在电脑里乱拉💩之后我就不再愿意装一些工作流中基本用不上的东西了。于是,在毕设上我也相当于没有了后路,其实现在想想,就算当时它的代码我能跑起来也没用,因为项目的作者那哥们儿是一行注释都没写,除开一些模板代码,大部分逻辑和算法我都不理解……
而在后来与导师讨论需求时又接到了导师“惊人”的提议,尽管导师对这个项目的构想与Algorithm-Visualizer非常类似,但同时又表示希望能够对C语言的数据结构算法做可视化,这一下算是把我的前端梦击碎了一半,因为要支持JavaScript以外的语言就必然意味着需要一个后端把代码交给编译器去跑,再把一个结果返回给前端去渲染可视化效果。在这个问题上要特别感谢Algorithm-Visualizer项目,我也是在试图扒了源码之后才初步有了一个可行方案的构思,可以说整个项目的核心就是围绕着这个方案展开的。
在这方面我查过一些文献,但算法可视化方向的论文本来就不多,其中提到实现方案的论文更少,其中能跑代码的实现方案则少之又少,甚至有文献提出直接搓一个针对可视化设计的编译器,编译器这种东西的工作量对任何人来说都不是半年内能够完成的,所以最终还是回到了Algorithm-Visualizer的方案。简单来说,它的方案是基于一套操作指令的,每一种指令都代表数据结构的不同操作,在目标语言侧,也就是C语言,需要设计一套API,在代码运行过程中通过调用API函数,就可以将代码中数据结构的操作过程记录下来,而在前端,则需要将指令形式的操作过程还原为各类数据结构的状态变化,这样就可以比较容易地把数据结构在某一时刻的状态进行可视化渲染。好了,更多技术方面的细节等我整理过后再细说吧,这里有一段简单的介绍视频,基本上验证了系统的可视化能力。
作为毕业设计来说,这个项目已然进入了收尾阶段,不过在答辩后,我希望对它进行一定的整理和重构,并作为我的第一个正经的开源项目来持续开发,而作为一个开源项目,我想这只是一个开始而已。
后记
其实这是导师的教学建设的内容,不过我倒没在意这是否代表着我的成果被白嫖了,相反,如果说未来的数据结构课堂上会采用我的项目来辅助教学,那我还是有点自豪的。从某种角度来说,我的项目侧重于提供一种代码层面的能力,而其实导师还有一个可视化项目分给了另一位同学,那个项目则更加侧重于直接通过交互来操作数据结构,因此从可视化效果上看,他能够将效果做得更加精美。
如今答辩已经结束,但由于系统的可视化能力距离我的预期还有一些差距,因此我的构想是在年底前把整套API进行重新梳理和重构,争取再将它规范为一套协议,最后也发展为一个开源项目,如果明年有机会的话我还想自己去实现代码编辑器,为接入多语言的算法可视化做一些准备。
之后在整理和重构的过程中会考虑输出一些技术内容。