编程方法学 - 公开课学习笔记(一)

好像一直并没有专门学习过某种语言,C也罢,C++也罢,VC也罢,都是在实践中学习。但是Java看过《Thinking in Java》,在实际开发中,优秀的编程风格是很重要的,在我们看source code,有些是社区开源代码时,有时真的很痛苦。在网易上有门公开课《编程方法学》,就去看看。

斯坦福大学给了一个Karel的类,以此为基础进行编程教学。记录一些笔记。

第1课:课程介绍 (2011.5)

比以前学校的老师讲课风趣不少,要学习和被学习真的很不一样。

程序很多人会写,但是要成为大师就不一样。就像作文大家都会写,但是写作成为大师就很难。

第2课:欢迎来到Karel的世界(2011.7.7)

编程要注重可读性,程序不仅仅是写给机器看的,也是写给人看的,这是优秀程序员的首要条件。

程序应该具有的通用性,不是针对单一情况处理,在处理复杂情况中的方法的复用性。这取决于我们如何分解功能和结合功能,例如Java中,定义一个方法实现怎样的功能。

第3课:Karel与Java(2011.7.8)

错误处理:要确保循环的退出,避免无限循环的情况,尤其效率我们第一次和计划最后退出循环那一次body的运行,即对于循环需要确定第一步和最后一步循环是否已经完成我们所需的动作,例如是否在退出循环后仍需要再执行一次动作,或在进行循环之前先将动作执行一次,以免off by one bug。以及这个最后一步是否能有效的确保在条件判断中退出循环,是否各种情况都考虑到。

注释(comment):要养成良好的编程习惯,在文件和方法之前加入注释,方便阅读。给出方法的前置条件和后置条件,也就是前提和结果。以Karel举个例子,Karel将Beeper从一点移到另外一点,并且返回。返回后需要将karel回复到原来状态,例如原来面向哪个方向就是哪个方向。如果只是做完搬运的动作,如果没能完全回复原状,会影响后面的操作。如果状态发生变化,那么在注释中的后置条件中需清晰表达。有例如S路行行走,有一个行一行的方法,是否需要说明后置条件为,已经转向。

逐步求精(stepwise refinement):就是至上而下逐步分解的(top down design)。除了某些特定的情况,在设计中通常会采用这种方式。而由下至上则是很多程序员入门前易犯的错误。对于分解的动作,如何能回归最初状态,准备执行下一个动作,是不错的选择。现在的CPU不在乎多些计算,而需要将程序写得简洁和清晰。例如karel这个小机器人,在某位置上,进行移动和操作,最后回到原来的位置上,或者面向某个方向(不一定是绝对方向,例如非墙方向,即可前进方向),这样就是回复原来的状态,使得任何人在你处理完之后,得到一个良好的状态。

分解的一般性原则:

  1. 每个方法应该能解决一个问题,问题有多个层次;
  2. 一个方法大概在1-15行之间
  3. 好的方法名字,容易阅读出功能,并应加上comment(加上前置和后置条件)

附:说说郭MM,事情出来正好是什么扶贫日,收到邮件通知,每个级别员工应该捐多少钱都写得很清楚,就是即便你爱心爆棚,也是有限额的,但是如果你不愿,一般也是不行的,因为秘书是逐个室去收,基本落实到人头。以前我们那个阿姨,还挨个人去收,然后再邮件最末通常假惺惺地说捐款自愿,或者普通员工自愿之类的。问题是,以前是捐了,照理,相应的部分是可以免税的,但是只有收钱积极,从未见免税。郭MM恰逢时候,事情的唯一结果就是我们这次真的是自愿了,因为大家都决定不交了……当时在家里养伤,以为有人替我交了,回去一闻,发现第一次不用交。

还有李娜的事情,奖励60万,税12万,将48万捐出(补两万成50)。这里有一个很大的问题,如果捐款是不扣税的,也就是说如果李娜要捐的话,是可以全款60万捐出,不需要扣税的。

你可能感兴趣的:(编程方法学 - 公开课学习笔记(一))