我的本科毕设,从四月中下旬开始到六月中上旬结束,共耗时将近两个月。期间学到了很多,收获颇丰,在此对于毕设做一个完整的记录,分享给大家。
动机与心态
其实,对于我们学校的学生来说,毕设想怎么做,做得怎么样,全看自己怎么想。由于学校比较重视就业率、升学率之类的数据,因此到了大四下学期的时候,只希望学生能够安安稳稳的,不出什么岔子,好好完成毕设,顺利毕业就好了,因此在毕设这个最后的考核中,一般是比较水的,基本就是走个流程,比较形式主义。
据我观察,相当一部分同学的毕设,工作量和完成质量还不如平时的课设,少数同学在选课题的时候随便一选,中期东拼西凑甚至不做事,交论文的前几天复制粘贴 + 修修补补,查重也能过去,答辩的时候念着大段大段从百度上拷贝的科普性质的内容,下面的老师也不会认真听你讲,全程基本都在检查论文的格式,或者注意力在别的地方,最终顺利过关;也有部分同学认真钻研,把自己的课题做的非常深,有个认识的同学做的是机器人相关的题目,答辩的时候老师评价说,你这个成果可以去参加研究生毕业答辩了。那位同学保研去了浙大,膜拜~~~
我算是介于这两者之间的,在选题之前,我就想好好完成一次高质量的毕设,做个好点的项目为以后准备,同时锻炼一下自己的编程能力。于是提前找到了 Java 老师做指导老师,他相对比较负责,对学生也挺好。我希望课题是偏应用方向的或者是可视化方向的,使用 Java 完成。但是老师的几个课题中没有特别符合的,我只好选择了一个相对更感兴趣的,名称是状态机自动生成与图形化仿真系统研究与实现。是不是听着都感觉很高级?
现在想想,觉得选择一位负责的毕设导师真的很重要,如果老师技术也不错就更好了。在完成毕设的过程中,当遇到了棘手的问题,他会从更高的视角给你指出新的思考方向,在一些关键节点比如答辩前、验收时都能给予宝贵的指导,这比那些对学生不管不问却要求很多的老师好到不知道哪里去了。
还有就是在选择项目的时候,建议不要随着自己的性子选择,而是结合自己的优势、兴趣,更主要的是效果,来进行选择。比如,如果完成这个项目能让我们接触一些比较前沿比较新的技术、能锻炼自己的能力,同时项目本身比较有含金量的(比如有技术难度或是有应用前景,能写到简历上的),这样的课题就是非常值得选择的。相比之下,那些古老的冷僻项目基本就不用看了~~~
开头
实际上在三月中下旬我就开始查找一些毕设相关的资料,希望能够提前开始,提前完成,为后面的实习减少一些工作量。后来发生的事情证明,这个想法简直是太 naive 了。。。不仅毕设做着做着发现要做的越来越多,而且实习这块儿也有不少波折,最终还不到一个月就宣告结束,这部分在之前的文章 实习二三事(上)和 实习二三事(下)中已经提及过,感兴趣的童鞋可以去看看。
刚开始的时候,老师的出发点是让我解决现有的问题。状态机是对事物间关系的一种抽象,可以很好地表示一种状态的转换,比如常见的生产者消费者的状态图。但是现有的一些软件在绘制包含较多状态机的关系图时(用线条、点和文字等表示),由于要让最后的效果比较清晰(点和线需要比较整齐,不能乱成一团),随着状态数目越来越多,往往需要多次重新绘制,非常慢。于是,老师让我了解一下 Java 2D 相关的内容,看能不能有什么突破,比如提高绘图效率、改善布局算法之类的。
然后我在网上查了一些资料,发现 Java 2D 的操作非常的底层,而且很少有人用它来画状态机的转换图,而且它本身是一个绘图的工具类,和布局算法关系并不是很大。。。
于是我想,有没有什么东西,能帮我完成这个排版布局和绘图的工作呢?
接下来就开始找这方面的信息。这一找,就找到了 Graphviz 这个工具(官方网站点这里),它使用一种简单的文本语言 DOT 来描述图形,能自动完成布局和可视化等操作,直接给出一张最终的图片,还支持很多其他的格式输出。这不是直接解决了老师的问题嘛!?
Graphviz 是一个被低估的强大工具,网上的介绍并不是很多,而且关于将其和编程结合来自动生成图像的文章更是少之又少。我就要开始这方面的探索啦!
下一篇将会专门介绍 Graphviz 相关的内容~~~ 感谢大家阅读 : )