大多数程序员都习惯了平时在电脑上敲代码,但也有些情境要求我们手写代码,比如平时学习时做纸质笔记,完成老师布置的课程作业,同事之间交流讨论讲解思路,ACM比赛时手写分析算法,还有最常见的面试手写算法等。昨天看了康奈尔笔记法,觉得有点意思,于是想着把它应用到程序员的圈子里来,可以在面试等场合很好的向面试官阐述算法思路同时规范书写,希望能给大家带来一些帮助。
一、什么是康奈尔笔记法
图1.康奈尔笔记法
5R笔记法,又叫做康奈尔笔记法,是用产生这种笔记法的大学校名命名的。这一方法几乎适用于一切讲授或阅读课,特别是对于听课笔记,5R笔记法应是最佳首选。这种方法是记与学,思考与运用相结合的有效方法。
自从沃尔特·波克博士发明了康奈尔笔记法以来,这一笔记法被广泛应用于听课、阅读、复习和记忆材料。使用这一笔记法可以让你的笔记系统化,使你主动融入到知识的创造中去,提高你的学习力,从而帮助你取得学习成果。
二、程序员算法手写本设计思想
图2.程序员算法手写本设计图
程序员算法手写本采用了康奈尔笔记法的三大模块划分原则,同时结合了程序书写本身的特性,共分为以下三个部分:
(1)【思路】:理清算法思路,可以图文并茂的分析算法,写出算法实现步骤、边界条件和测试用例等,为算法实现奠定基础,好的思路不仅能有效的向他人展示你的思考过程,帮助你清晰地写出算法,更能有效减少手写算法代码难以反复修改的弊端。(tip:可在“思路”上方留白处简单写上算法题目作为标题。)
(2)【算法实现】:根据上一步已经形成的思路,一步步写出相应的算法实现,行号模拟平时编译器里写代码的习惯,有助于规范格式和向他人讲解算法实现思路,为算法交流提供便利,为什么设计32行我想你们都会懂,因为程序员对这个数字很敏感,希望你也喜欢。(tip:可在“算法实现”上方写出对程序的命名,如程序需要几页纸共同实现也可以在这里标明页码。)
(3)【总结反思】:分析算法的时间复杂度和空间复杂度,总结所用的方法和可以进一步优化改进的地方,为解决follow up问题提供方案,写完代码后和面试官的交流过程都可以在这里继续进行分析。
三、如何使用
笔者自己制作成了A4竖开的本子以方便使用,大家在写代码时可以自己在白纸本上画出这样的框架来启迪思路,让你的手写算法更规整更具说服力,也可以和现在非常流行的“方格本”结合使用(《聪明人用方格笔记本》这本书里详细讲解了它的用法和好处,此处不再赘述。),同时笔者提供了一个word版的“程序员算法手写纸”,很方便修改和定制,大家如果需要可以直接打印使用。东西虽然很简单,但笔者很用心的思考怎样才能用纸写出更优雅的程序,打动你的面试官。
图3.《程序员算法手写本》
好了,轮子做好交给你们了,希望你们喜欢,如转载或用作其他用途请留言告知^__^。
附:“程序员算法手写纸word版”百度云链接:http://pan.baidu.com/s/1pLi1aeZ 密码:oltr