摆脱软件开发中的低级错误

今天,在寻找一段代码的问题时,遇到了一个低级错误:

1
2
3
4
// 正确
jobElement.style.width = 'calc(' + d * 100 + '% + ' + d + 'px)'
// 错误
jobElement.style.width = 'calc(' + d * 100 + '% +' + d + 'px)'

正确与错误只相差一个空格,在发现这个空格以前,我猜测了很多可能。比如, const/let 使用不当、名称拼写不对等。这一次又认识到一个新的低级错误。

从开始找到确定是空格的问题,花了一个小时。效率不是很高。为什么会出现这种错误?在照着源代码输入的时候并没有在意这一细节。直到发现我的页面和原始页面有区别时,我才注意到这一点,当时的确是定位这个元素了,发现原始页面上有对应的宽度样式,而我的页面没有;这时并没有想到,直接去看这段代码有什么问题,而是直接选择最费力的方式——将原始代码和我的代码进行一一比对,进行调查。尽管找到问题所在,但是这种解决方式并不可取。

下一次再遇到低级错误,应该第一时间根据日志或者调试信息定位问题出现位置。另外,在确定问题位置过程中要沉住气,不能着急。

我前几天读到 tinyfool 的文章《程序员的成长从开窍开始系列 一、如何摆脱低级错误的困扰》时就开始思考如何摆脱低级错误。

遇到问题(不光是这些低级问题)时:

  1. 不要把问题向外推脱 。出了问题,有可能是系统 bug、API 调用问题,但是这些问题出现的几率比你犯低级错误的几率要低得多,先从自己身上找原因。这一点我做得不错。
  2. 要掌握工具 。最低限度是会 log,最好是 log 和调试器结合。在 JavaScript 调试方面,还只会用 console.log
  3. 分析问题要有逻辑 。遇到问题先把所有的可能性都列举出来,然后一个一个地分析,肯定能找到原因。这一点我还做得不够好,一看到问题,就想着把代码从头到尾全部梳理一遍,代码量小的时候能做到,但代码量大的话就很吃力了。
  4. 要学会隔离问题 。问题涉及到的代码越多,越难以理解,问题越难以解决。遇到此类情况,可以利用 log 或调试器,将代码一行一行地进行筛选,洗清嫌疑,这样可以很快找到问题出现的地方。如果代码特别长,程序特别复杂,可以用二分法来做,效率很高。这一点我没想过。
  5. 千万不要懒惰,不要事事求别人

要想不遇到问题,写代码的时候:

  1. 要对写出来的代码负责 。作者写程序是写一两行执行一次,确定没问题后,继续。这样最开始可能很慢,但整体速度要比那些彻底写完再运行调试的人的效率更高。每写一两行停下来,思考代码,能够让自己对例子有更多理解。
  2. 函数体/功能块不要过长 。作者认为如果一个程序的一个函数体或功能块超过 3 屏,就变得很难阅读。
  3. 缩进要对
  4. 不断重构

Layout of comment panels