西西河

主题:【原创】朗读代码 -- 代码ABC

共:💬30 🌺32
分页树展主题 · 全看首页 上页
/ 2
下页 末页
  • 家园 【原创】朗读代码

    据说,国外有那么一间大学。

    据说,那间大学有一个代码咨询小组。

    据说,这个小组专门帮程序员找出其代码中的错误。

    据说,在这个小组的门口摆了一只小熊。

    据说,每一个过来咨询的程序员都要向这只小熊朗读自己的代码。

    据说,许多人还没把代码读完就自己发现了错误。

    。。。。。。。

    在不太久之前,程序员还在使用文本编辑器输入程序代码。那时候没有集成调试环境;没有变量跟踪;没有单步运行;甚至程序断点也要通过代码来设定。那时候一个有力调试工具就是——打印机!

    把程序打印出来,找一个远离键盘、屏幕的地方,自己客串一回电脑,把程序在心里运行一遍(也可以是几遍),实际上就是在心里朗读代码。可能出乎许多人的意外,靠这种方式可以发现大部分的错误。这种类型的错误我后来称之为“肉眼可以发现的错误”。的确许多代码错误可以仅仅通过“肉眼”发现,不需要借助复杂的集成调试环境,关键在于掌握朗读代码的技巧。

    技巧在于——不要把自己当人!你就当自己是一个CPU,不要做任何假定,老老实实地计算每一个表达式,记住曾经改变过的变量,计算每一个循环的出入条件,留意每一个函数的“副作用”。实际上很多错误都是程序员对代码的理解和实际运行它的计算机不一致引起的。而代码朗读将训练你把这种不一致降到最低。这样你不但可以发现代码中的错误,而且在以后编写代码的时候自觉地写出错误很少的代码。所以朗读代码还是一个通往高级程序员的修行方式。

    这种方法看起来简单,不过在一开始的时候会令人非常沮丧,因为你会发现不管检查多少次都不会发现一个错误。再加上调试环境的诱惑,现在恐怕没有多少人愿意干这种吃力不讨好的事情了。的确在调试环境中单步走一次的时间绝对比你在心中运行一次的时间更短。不过你可以把这两者结合起来,通过比较自己的运行过程和调试环境的运行过程来发现自己思维上的错误,逐渐纠正这些错误。渐渐的你就能用“肉眼”来发现错误了。而更重要的就是你写出来的代码错误也越来越少,当你能确信在五百行以内的代码能够一次通过,那么这项修行业就毕业了。

    关键词(Tags): #编程#排错
    • 家园 其实都是一个道理,文章诗词要千锤百炼,要请别人听读修改

      即使运行没有问题,结果也正确,也还有优化的工作可以做。

      代码就是自己的亲儿子,比亲儿子还亲,不停的塑造,不断地改进,要求的是尽善尽美。

    • 家园 呵呵,这个其实就是代码走查嘛

      用人脑来执行电脑的活^0^

      • 家园 非也非也

        俺讲的这个是一种训练方法,训练程序员写出正确代码的本能。

        厄,把我这老坟给挖出来了。

        • 家园 原来开发人员也这样啊

          我是做测试的,所以下意识就跟测试的手段挂钩了。

          不过对正确代码的本能认知,这个不止是开发人员,也是测试人员的基本功呢。

          怪道说代码走查一般都要用经验丰富的程序员来干这个,大概也是借助这种本能来排查代码中的问题吧。

          另外,//blush:我没注意发帖时间。

          看那篇绿坝肉鸡看的兴起,于是直接从发帖人然后所有帖子进去,又把兄台所有帖子看了个遍……

    • 家园 stanford

      在机房在角落里放teddy bear的是(n年前的)stanford。john robbins说的

      不过很怀疑有没有这个“咨询小组”,恐怕连ta都不愿意做这个倒霉事情。当然在外面做consultant按小时挣大钱的另说

    • 家园 另一个办法是peer review,也就是找别人来读你的代码

      通常是同一组里需要用到你的代码的同事。

      • 家园 这比上刑罚还要痛苦

        可是经常要做这事,还有就是“朗读代码”,差不多天天要读上几段,人生一大苦啊。

        • 家园 咦,晨兄也作抠丁?我怎么记得你是坐控制房的干活?

          做软件的peer review,至少我经历过的,都还好,不知道其他行业是不是更挑剔?关键是和同组里的契合。如果平常讨论和设计的时候,大家沟通流畅,做出的东西就不会离题万里。

          至于具体实现中出现的错误让别人给指出来,其实是好事。否则,到了QA那里过不去,还是自己的麻烦。更要命的是如果到了客户手里出了问题,再查出是自己的代码引起的,那才是大祸。所以,我非常热衷于让别人审查我写的代码,至少,出了问题还可以拉个“陪斩”的。

          • 家园 控制室的back room地干活

            基本上就是控制系统编程,要求千奇百怪,我们就是自己的QA,所以更加要小心。

            • 家园 我们就是自己的QA

              这不就是没有做到\"职责分离\"嘛?难道你们的内部控制系统没有看出来?

              • 家园 咳,一个化工厂有一两个专职的控制工程师就不错了

                你还要求有PM、QA什么一大班人马吗?我们不是正规军,没有工兵、炮兵、侦察兵的支援;我们是特种部队,从规划到捅刀子全包干了。

                • 家园 你们不是大厂嘛

                  DCS这种化工厂的命根子,特别又是自己开发软件,更加要有人来监督了,我说的内部控制系统不仅仅是控制工程师,还要企业的内部审计部门参与,尤其在项目立项的时候。

                  前面不是有人谈谈了信息安全的问题么,您从事的工作不就是化工厂的信息安全?

                  • 家园 DCS是最不重要的

                    一般在一个电厂里重要性的排行是机,炉,电,热, 那个热就是指控制那块。

                    不知道化工厂的情况, 另外,我也不在电厂工作, 只是跟电厂接触较多。

                    • 家园 工艺复杂的话DCS就比较重要了

                      电厂还算相对简单吧,流程不是特别长,工艺回路也少。

                      像我们工艺上小循环外面套上大循环之类的玩意,控制出问题就热闹了。

分页树展主题 · 全看首页 上页
/ 2
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河