回想读过的这本书,内心的感受只有一句话:态度决定一切!
在网上经常可以看到有人问“如何才能学好编程?”或者“为什么国内程序员不如国外程序之类的问题?”其实看看《Writing clean code》这本书就知道了,对于assert的编写和使用,作者用了整个第二章来描述,而看似只是简单的一个断言宏,实际工作中随时有可能使用到,而且使用的方式也很有技巧可探讨,试问国内又有多少人能做到刨根问底的研究这个小小的宏?这就是态度问题了。很多人热衷于跟风各种各样层出不穷的新技术,而对于计算机的本质:体系结构、编译原理……等真正的计算机科学技术不屑一顾,在别人架构的华丽平台上孜孜不倦的堆着代码,还认为自己非常牛B,只在网上抱怨怀才不遇或者讨论那种语言更有“钱途”这类的废话。
作者还举过一个memcpy()函数实现的例子,我印象中很多公司招人的时候喜欢要求应聘者写一个memcpy()函数,来考察其对语言的理解程度,很多人都写成如下方式:
void memcpy(void* pvTo, void* pvFrom, size_t size)
{
void* pbTo = (byte*)pvTo;
void* pbFrom = (byte*)pvFrom;
if(pvTo == NULL | | pvFrom == NULL)
{
fprintf(stderr, “Bad args in memcpy\n”);
abort();
}
while(size-->0)
*pbTo++ == *pbFrom++;
return(pvTo);
}
几年前我第一次读《Writing clean code》前试着写的时候更加“惨烈”,甚至连指针是否为NULL都没有处理都就直接移动了,更加没有考虑维护如下的debug版本:
void memcpy(void* pvTo, void* pvFrom, size_t size)
{
void* pbTo = (byte*)pvTo;
void* pbFrom = (byte*)pvFrom;
#ifdef DEBUG
if(pvTo == NULL | | pvFrom == NULL)
{
fprintf(stderr, “Bad args in memcpy\n”);
abort();
}
#endif
while(size-->0)
*pbTo++ == *pbFrom++;
return(pvTo);
}
在读过《Writing clean code》后只剩下羞愧:
void memcpy(void* pvTo, void* pvFrom, size_t size)
{
void* pbTo = (byte*)pvTo;
void* pbFrom = (byte*)pvFrom;
assert(pvTo != NULL && pvFrom != NULL);
while(size-->0)
*pbTo++ == *pbFrom++;
return(pvTo);
}
之前根本没有过考虑过太多代码的健壮性与简洁性,只以为自己功能实现就完事ok,从此才知道自己的代码离优质的商业代码的差距有多远。这就是态度的问题:为什么开始的时候不能考虑那么多?因为没有用心去面对这段代码!记得以前老师说过做计算机开发很重要的一点就是用心,设计代码的时候要把自己的思维计算机化。如果这段代码代表我的身体,肯定我不会容忍缺胳膊少腿的情况出现,我没有用负责的态度面对代码,所以才造成残缺不全的代码出现。
在大学的时候大家都比较毛躁,估计冲动是现在大学生的通病了吧,以我所见,计算机系能静下心来写代码的学生都不多,接触过过大型系统开发的更加少,大家都指望着热门专业(考大学时候计算机是热门)毕业后就能坐在宽敞的空调办公室里体面轻松的拿着高薪享受小资生活,而没有以严谨的态度面对计算机开发工作,偶尔一点热情坐下来写几行代码的时候却烦心于debug过程,计算机永远都只认识0和1,它不会欺骗人,对就是TRUE,错了就是FALSE,不可能推个云手来体现一下中庸之道,做计算机开发只能以负责的态度面对,不然趁早改行去做行政单位,若干年后领导就可以对手下人指手画脚了!
记得大学的时候有同学以“反正听不懂”为由逃课出去玩,教导员屡禁不止,正可谓:道高一尺,魔高一丈!最后只能无奈的说:“听不听得懂是能力问题,去不去是态度问题,就算你听不懂,至少你也给老师一个好点的印象,考试才能手下留点情面……”其实编程是一样的道理:不会可以学,世上无难事,只怕有心人。但是如果没有心,即使是小水沟也跨不过去。当然人总是有惰性的,很多时候我也想偷懒,不想坚持下去,但是能不断提示自己分清楚主次,锻炼自己严谨的态度是最重要的!
10多年前最初接触286,只是把它当作单显游戏机而已,写几十行的简单BASIC程序只能依靠兴趣来维持。到今天,专门从事网络方面研发的工作也已经超过3年了,以后即使我不再从事计算机开发工作甚至离开计算机行业,但是无论做什么事情,我都坚信一点:态度决定一切!