从错误中学习

前两天在推上看到马斯克发了一张图,主题是从错误中学习,如下:

从错误中学习

读完有点感触,想起最近在重新用到的Java静态测试工具SpotBugs,昨天听组内技术分享,突然想起来这个工具了,有兴趣的可以看看Intellij静态代码扫描插件SpotBugs

为什么要说这个插件呢,因为它本身能发现项目中大量不规范或者非最佳实践的代码,堪称代码BUG的百科全书,一般千行代码的不规范点都在10以上,当然其中大部分都是重复的。还有他能检测出很多的性能问题,虽然都是小问题,比如冗余的代码调用,无用的代码行,以及非性能最佳实践的代码。

每次打开SpotBugs的报告,都能看到一推的红色警告,然后翻一翻就能得到一些新的体会,也算是一种工作积累。

在我自学的过程中,深刻认识到现在的能力都是过往的BUG积累出来的。在无数个下班的夜里,跟BUG战斗到天亮。吃一堑长一智,每次经过BUG的洗礼,都感觉自己水平上升了另外一个阶段。没掌握一个Java的知识点,至少遇到10次error。在不断尝试的过程中也是能遇到无数个error才能确认完全掌握某个API。这在我最近学习Golang的过程中依然适用。

最近在整理一份Java的教程中,就觉得大多数时候一个API正确的使用方式只有少量几种,但是错误的方式却成倍增加。而这些错误的方式其实都是隐藏的知识点。对于学习一门语言来说,即使SDK自带的API调用也是很多变的。一般我都是先搜一个最佳实践的代码,然后不断尝试换一个别的使用姿势,这其中相当于拓展了这个知识点关联的知识点了。而且通过不断试错和练习,也能加深自己对这个知识点的理解。

就我自己的经验来讲SpotBugs属于从别人的错误中学习,自己在学习过程中不断试错从自己的错误中学习。编程语言以及其生态圈中的各类框架都有非常多隐藏的BUG,偶尔发现一个还是挺奇妙的。比如我之前写过两个BUG:Math.abs()求绝对值返回负值BUG分享Intellij运行Java程序启动等待BUG分享

图中的第一项应当是人人都需要避免的,而后两项距离过于遥远,是在没啥经验。

别让错误从手中悄悄溜走!

Have Fun ~ Tester !