易飞滔Todd | 次生进化

Peter Norvig的编程建议

Peter Norvig是Google的大牛之一,他在Udacity开了一门课计算机程序设计,用Python语言讲授,这门课程的实践性很强,下面是他在课程中提到的一些编程建议:

  1. 修改程序的几个维度:正确、效率、特性、优雅,需要在几个维度间平衡,更优雅的代码对软件改进没有直接作用,但可以为未来可能的修改打下更好的基础,而重构就是修改代码使其更优雅。
  2. 程序员应当善用别人的代码,提现在两个层次,一个是编程语言的库,应当熟悉常用的并善于查文档,二是一些大的功能模块,比如网页服务器、Email通信组件等。
  3. 学习一些高级的复杂的语言特性,应当去理解这个语言特性解决的痛点是什么,这是它出现在这个语言中的原因;
  4. 好的代码要长还是短,取决于是否清晰的进行了沟通,即别人能否容易读懂你的代码,太长或太短都可能影响沟通;
  5. 自顶向下设计还是自底向上设计,取决于对问题的清晰理解在哪个层次,如果对问题的大尺度理解很清晰,就适合自顶向下设计,不要害怕写一些代码桩。反之,如果大尺度都不清楚,则可以写一些已经分析清楚的小模块,然后进行组合试验。
  6. 现在学习编程的条件很好,但是要注意多和他人沟通,多向他人学习。
  7. 针对问题,可以先找到快速,dirty的解法,并估算算法的复杂度,看是否有必要进一步优化,优化应当建立在分析焦点操作的基础上。
  8. 在必要的时候,要认真读文档。
  9. 读代码要主动,最好在IDE环境下读,改一改看结果会怎样。要有整体读代码,获取架构的能力,也要有读片段,迅速找到所需的能力。
  10. 智力游戏问题定义清晰,而又足够复杂,很适合进行编程训练。
  11. 在三种情况下考虑递归:
    1. 数据结构本身时递归定义的,比如二叉树
    2. 有数学递推式
    3. 能够进行尾递归优化