个人项目总结 By 张雄
#这篇文章的目的是总结下过去两周内ASE课程的individual project。内容是写一个词频统计的命令行程序。当然统计单词不涉及语义,只要是被非[A-Z a-z]的字符分开的都可以算为单词。实现的语言不限,我是用C#写的。
#拿到project的内容感觉不难,感觉重点也就是递归遍历目录和split,不过由于对C#访问目录的方法不是很熟悉,所以花了一点时间去学习,但总的来说没有遇到什么组里地就写完了,丝毫没有考虑到效率问题,data structure什么的也都尽量挑了自己觉得省事的使用。写完后拿自己之前在学校里的一个双语语料的英文版测试了一下,感觉貌似还好的样子,不过由于没有参照,所以实际上也说不上好还是不好,只是看上去还比较靠谱的样子。
#过了几天之后又上ASE课程,然后得到了一个算是标准的测试数据集,用自己的代码跑了一下,果然不负众望地出错了,当然我不是指RE这样的错误,而是跑出的结果不对,观察后发现结果中出现了很多无法很好地显示的特殊字符,于是考虑到可能用split并不是很合适的一种做法,所以开始着手实现自己的split,这一写就是好几个小时,中间有个小bug一直没有找出,花了相当长的时间去debug,好在最后终于还算是跑出了貌似正确的结果。
#有了结果后又顺手看了一下性能。第一次使用VS自带的性能调试工具,感觉还是很强大的,之前更多的时候还是把VS当成了一个不怎么好用的编辑器+编译器,但其实VS叫studio不是叫visual edit或visual compile还是有原因的,里面确实集成了很多工具,而自己根本就不太注意。在自己8core高富帅机器上即使是自己几乎没有考虑效率问题直接去写的代码在性能界面上看到的运行结果居然也还可以,看到的两个瓶颈一个是ToLower,还有一个是Dictionary的一些内部方法,我试着自己写了一个ToLower,结果发现比自带library的速度还要慢,于是只好作罢。Dictionary的话如果想优化貌似会涉及到一些非常重口味的东西,于是我也就呵呵而过了。
#然后submit源代码和release出来的exe,这件事情就算结束了。
#另外值得一提的是,虽然这个程序很简单几乎算不上一个project(当然严格地说我还是在VS里建立了一个project),但我还是记录了下做不同事情需要的时间,并最终把预期和实际情况做了下对比。
#超出预期的是Testing过程,原因就是我上面所说在获得了新的数据集之后发现了split的问题之后又着手实现自己的split导致花了很多时间。
#总之,项目本身的最大收获是学习了很多关于C#和VS的新姿势(比如C#神奇的LINQ),并且多少也算是恢复了下荒废已久的coding能力。
#以上。