经验和总结都写在这儿吧(好管理些,嘿嘿)
一、一些金句
来蓉三月,几无进展。并非不勤快,而是方向错了,一切白费……实验吭哧做了很久,也得到了不少结果,然而,中间画图时发现有错,追根溯源,是最初始的数据集没有处理好,两个多月白做了……又重头来过。因此,我当前最大的问题是“思考少,鲁莽做”。
“做事之前先问为什么”
这是师兄反复告诫的话。如果没有想清楚目标,闷头去做,就是愚蠢。
“多和自己思辨”
这也是师兄反复教我的。想了一个算法,在写代码、调程序之前,不断自己与自己争辩:“为什么要选这个算法?”“用到的数据结构效果好不好?有没有更好的?”“逻辑有没有问题?”“比别人好在哪里?”“创新够不够?”等等,经过大量、充分的思考以后,再来动手编程,会减少很多错误率和折返的时间。
“快点!再快点!”
对于1、跑程序;2、想算法。都应该让进程走得快些。比如跑程序,“这个程序怎么这么慢,一个迭代要跑两三小时?”“能不能开多个进程同时跑(在迭代间相互独立的情况下)?”“是不是程序中哪一块拖慢了速度?能不能加快速度?”。比如想算法,因为动手编程、调试的过程比较漫长,可能长达几个月,而几个月后若是发现效果不好,相当于几个月功夫白费。因此,需要“快速试错”,通过“思辨”节省试错的迭代时间,以及通过编写小规模的程序发现问题。
“从实验结果寻找问题”
当想好了算法的初步方案后,开始动手实验,然后,从实验结果中寻找问题,再来改进算法。
“每次做事都是完成80%~90%,总有10%~20%的低级错误”
这是师兄对我的评价。的确,无论是做PPT,还是出题,还是写程序,总是有些“如影随形”的低级错误,惆怅……原因在于我每次做完以后,总是没耐心检查(而我这种人,至少要检查两三遍,才能发现错误在哪里),就交付结果了……
二、经验总结
1、调程序
作为一个接触程序很久的人,居然今天写一个简单的java程序还写了半个上午,调试了一个下午。想了想,有几点要注意的:
- 写或大改程序前,先把思路想清楚,最好清晰到哪个成员变量在哪儿赋值,需要变化几次等;
- 调试程序前,先自己对照思路检查自己的程序,看是否出现写错变量名等低级程序?或者每一条语句是否写对了,联系上下文的思路是否正确?
- 如果觉得2)的过程太费脑,太繁琐。那么,就将新写的程序的每一步变化打印出来,从打印结果中判断程序执行对否?问题出在哪里?(注意,是尽可能打印所有步骤的详细信息,不然,还得反复添加打印语句、跑程序、观察结果等)
- 用vector替代List,用bit替代int(或boolean)