天下大事,必作于细

来源:互联网 发布:arduino单片机 编辑:程序博客网 时间:2024/04/23 17:03

天下难事,必作于易,天下大事,必作于细。
  ----《老子》第六十三章

近来有了些与以往不同的开发经验,这些经验可用八个字来概括:天下大事,必作于细。

有很多的人习惯使用"差不多","将就将就"这类短语。
用于做人,这体现的是一种历史中沉淀出的智慧;
用于做产品,尤其是软件产品,这是致命的。

我所接触到的国内的程序员,有许多走的是一条通向“高手”的路子。
具体的特征是,你给我个啥事,我肯定能把它做出来。
只求做完,不求做好。所以虽然知识面广博,临场搏杀老练,前行勇猛,却未必能作出优秀的产品。

因为明显的收益,好多人恨不得在短时间内成为绝世高手。
其结果往往浮沙筑高台,虽巍巍雄壮,却终究耐不得推敲。

为把事情说得更清楚,这里我来看下面一个场景:

命题:请编写一个为50个字符串进行排序的函数。

大多数人看到这个命题,不会问什么,很快就有结果出来。

其完成的函数里面可能包含下面的代码段:

A:

int iRet=lstrcmp(..., ...);

B:

int iRet;

if( GetVersion() <0x80000000)
 iRet=strcmp(...,...);
else
 iRet=wcscmp(...,...);

C:

int iRet;

iRet=_tcscoll(..., ...);

因为有人在实现程序的时候不求甚解,那么出现这种“看上去能行“的程序就成为一种必然。
(我不知道究竟有多少人(包括高手)会走上面列出的这些路,我个人是没处理好,所以在这里检讨)

从技术角度看,这里的问题在于:

命题不清楚,应该提出质疑。

不清楚的点包括,按照什么样的规则进行排序,码序(character set order)还是字典序(lexicographic character order)、程序是否会在多种Locale下运行、需不需要支持Unicode等。

刚看到这个题目时,可能发现不了这些问题,但是当学习相应API的说明时,如果仍然没发现这些问题,那唯一的可能就是学习的时候就没搞太清楚,而后又想当然的认为某个API的行为就是如何如何。

有自己不清楚的问题没关系,没人能什么都预先知道。
重要的是如何面对这种以前自己不清楚的问题。
使用一个API的时候,有多少人是在完整的看完帮助文档,并把相关概念都弄清楚后才使用的呢。

这种状况可能和大环境有关。
当企业为生存所迫,就不得不关注短期目标,所以就需要快枪手。
当员工为短期目标所迫,就不得不囫囵吞枣,也就没时间把基础打扎实。

中国的程序员虽然生存不易,但终究要对自己负责。

没人能避免程序中出现错误,但每个人都应该努力不写“应该没问题“的代码。

最终的产品就像拦河大堤,修起来要千万人力,但毁起来,老鼠打打洞就足够了。

在中国人眼里,日本人做事方式并不高明,
但日本的企业确实取得了非常大的成功,一个根本原因就是日本人非常的重视细节。他们不习惯放过任何一个
细小的问题。

原创粉丝点击