大二的时候开始接触比赛,(在这里我避开提名字,但是并不是说队友不重要)甚至到大三,参加了这么多比赛,比赛的细节我就不再提了,不同的比赛不一样的,我只是想把我感触比较深的几点谈一谈。第一点就是,作比赛,一定要分析清楚题目,你的方案哪些好,哪些不好,如果比赛是积分制的话要分析清楚哪些是采分点,这些采分点哪些方案比较合适,不要给自己乱规定一些要求,不要想着高大上。往往是抓到采分点的设计(在挑战杯可以算创新点,应用价值),就赢了一大半。一定要客观的,给自己的这个方案去分析,去评价后再决定选择与否。第一步走错,接下来都是非常痛苦的。你觉得自己真的付出的很多,但是效果可能并不理想。最近看到一本畅销书书,书名《你只是看起来很努力》,也许可以解答你心中的疑问呢。第二点,你要明确,你下一步要做什么,你决定怎么做,又为什么这么做,你做的结果能反映出什么。这一大串的问题也许你觉得很没有意义。这都是在问些什么呢,如果我不知道我在做什么,那我是疯了吗……其实,说句不好听的,你确实疯了,用上面的话说,你只是看起来很努力。先泼一下凉水。因为这样的情况我见的太多了……尤其在建模上,我们都说建模这个比较确实很水,但是确实有人做的很棒,不容置疑的。建模讲究灵活的运用模型去解决问题,然后分析。但是不能把一个模型硬生生的去往题里面套,每个模型都有每个模型的前提,意义。一个简单的例子,神经网络好像是一个很万能的方法,但是他又并不是看起来这么万能,他的前提是需要一组可靠数据去训练。而往往我们会滥用他,我们从matlab中导出很多结果,并不知道他意味着什么。只是追求我们的高大上。其实综合起来看,我们自己却在证明这样一个式子:假设A=B,证明B=A。只是自己不知道罢了,因为篇幅太长了,所以把自己之前的假设忘了。甚至评委都不会发现。第三点,创新,我们一直都提倡创新,但很少又能做到创新,最近在做毕业设计,查了很多文献,发现真的是应了一句话,天下文章一大抄,有的甚至原封不动的抄袭。创新很难,但是也很重要。第四点,多问问有经验的人,多查查文献,多理解。不要埋头去做,这个相当重要,不与自己独立解决问题冲突……
这些都是当时掉进去的坑。走了很多弯路……
2016年3月1日
后来,确实是很急切的想写有界面的程序了,改用了Delphi,直接拖控件,也下了不少第三方控件。写起来很快。很大一部分软件都是用这个写的。要论里面真有什么技术含量,实话说,确实没有。都是一些常用控件功能堆叠在一起。图个方便。。但是写的多了,这个软件的代码可以用到那个上,那个又可以用,总之,用专业点的话来说,写代码就是要保持高内聚低耦合的一种状态。今天查文献的时候,关于透视变换的。发现了一位大牛的博客,这是真正的大牛,可能你们都没见过,我必须要分享一下,不能光震撼我,也要震撼一下你们,博客http://blog.youkuaiyun.com/xiaowei_cqu,她本科是计算机专业。工作在北京谷歌,神一样的人物。即使不知道她本科具体什么样,但是能把博文写到这样的水平,把一个项目写的如此清晰透彻的,我第一次见到。突然发现自己在软件上多么的先天不足啊,我们测控是光机电算材啊,哪方面都学,其实学完了也不会。只是为了应付应付考试。这么大的差距,怎么样才能追赶上呢?而且,还是一个妹子,妹子撸代码的就很少,突然见到这么牛逼的妹子,感觉前方的路一眼望不到尽头啊!所以说呢,千万不要觉得自己会点东西,就自满了,我们要学的还有很多,年轻的时候要多奋斗,虽然不一定能追上她们的脚步,但是免得多年后悔恨啊,其实我现在都有些悔恨了,大学没好好利用时间来学习……看来研究生要多吃苦喽。
说到研究生,测控的考虑清华,北航,天大等都可以,光电我觉得浙大,华中科技,南理等学校都很牛逼。不要说我没有提到你心目中的学校,都包括在“等”里面。有木有学弟学妹来天大,我可以带路哦。赶紧抓紧时间奋斗吧。向前看……
回到编程的主题。其实在大二的时候我就接触了MFC编程,当时表示完全看不懂,不理解这是这么鬼。每个人都这样,学新的东西都会遇到这种情况,如果硬看还是看不懂,那好,我就放弃,因为如果看不懂,证明我还欠缺基础,可以通过学习一段时间新东西的基础,来完成新知识的学习。那什么是基础,我觉得,比较笨的方法就是,在这些新知识里,哪些词不懂,就去找含有这些词的书籍,去学习。学完之后,回过头来。豁然开朗的感觉。其实每本书前面应该有预备知识的内容的。我研究生应该和数字图像处理比较密切,也会涉及微小光机一体化的东西。所以去年又重新刷了一遍C++,感觉很轻松的就看懂了。从C++到MFC,别看书里面只隔了一章,其实跨度还是比较大的。我对MFC不适应,给控件加变量,不明白可以有两种类型的变量,而且还得手动去加,非常麻烦。而且在VC++6.0,用MFC的时候,遇到好多bug,严重的影响编程的速度。所以前言里面提到,我现在已经改到VS2012了,VS2012可以配合opencv2.4.9一起用。而VC++6.0只能和opencv1.0用。另外matlab也是一款非常有用的软件,但是matlab和VS混合编程的时候,matlab7.0的版本才能和VC++6.0混合编程。但是感觉matlab7.0好古老。所以用MATLAB2013与VS2012混合编程也是不错的。今天先睡了……
2016年3月4日
关于我对编程实战的看法,也可以说是我认为的应该如何去通过编程去进步。曾经看到过一幕,也是刚刚来516的同学,他在编程,恰好运行时出错了,然后我看他的代码,大概是一个求某数N次幂的代码,而出错的原因是最后的计算结果太大,溢出了。溢出确实是一样很常见的错误,也是非常难发现的,尤其是在单片机编程的时候,溢出都不会报错。但是会出现莫名其妙的问题。这个时候只能去单步调试,去看内存中的值具体是多少,或者用很多个printf来看每一步到底是什么结果。另外一点,其实这个代码的功能虽说是一个求幂的代码(并没有写为函数),但是我并不觉得它会给我带来更多的经验。我更希望的是,自己给自己出题,出一些实际中遇到的问题。比如在写教务管理CUSTE-KEY的时候,也确实为了这样一个目的。一开始不知道如果加载上网页,然后去查,找到idhttp和webbrowser控件,然后去选择一个易懂的继续写。同样写串口助手的时候,有mscomm和spcomm,总有一个你觉得相对简单的可以去用。实际去编程的时候会遇到很多的问题。然后再去慢慢查,耐心的去解决。尽量写成一个一个的函数,将他们封装起来,以便以后再用。我一般都是在csdn、知网和pudn上查资料(账号从淘宝直接买……也刚刚将博客从新浪转到了优快云,因为新浪博客没有添加代码的功能,非常麻烦,尤其是传android代码的时候,提交完格式全乱了)。对于学习代码的书籍,看懂他的代码,然后自己回忆,用自己的思路写,不要照抄完,run之后依然感觉有成就感。总之,少说多做。要做就得完美
这里简单的总结一下,我在前面以流水账的形式简单的描述了我个人的学习经历以及我对编程的一些看法,可能也会有个人的一些偏见,如果各位觉得有道理,可以尝试一下,觉得毫无用处,也可以按自己的规划来。因为我毕竟不是计算机专业出身,经历的也不算多,总之是为了让自己进步,目标明确即可。有人问,我到底学什么的,搞什么的,甚至一个大一的说我就是建模的,我就和我的专业一样,学的范围确实比较大,其实我是对什么感兴趣学什么,遇到什么问题学什么。还有就是我为什么不选择一个计算机专业,这个我在高考的时候确实非常想去选择计算机专业,当时我比较倾向信息安全和信息对抗,于是乎,到了长理的信息对抗,但是关于计算机的课也就那么几门而已。不过这并不影响我的兴趣。。
几年过去了,得到了很多,错过了很多,但不曾后悔,有得有失,才值得去回味。路漫漫其修远兮,吾将上下而求索……
QQ315228399
白皓月