程序员:请不要轻视我们的过去
创始人
2024-07-26 20:51:20
0

这是当年开发的一个煤炭安全监控软件里增加新测点的函数。如果在当年看这段代码,感觉这应该是一段挺不错的代码,比如:注释很多,几乎每行都有注释;匈牙利命名法,使用像lp、w这样的前缀;结构、数组、宏定义,看起来都是有板有眼。

  1. //-----------------------------------------------------------------------------  
  2. // 函数:NewPoint  
  3. // 功能:分配一个测点定义缓冲区。  
  4. // 入口参数:  
  5. //    lpPNum    测点号指针。  
  6. // 出口参数:  
  7. //    如成功,返回在测点定义表中的偏移;如失败,返回0xffff。  
  8. //-----------------------------------------------------------------------------  
  9. WORD NewPoint(LPCSTR lpPNum)  
  10. {  
  11.     WORD i;  
  12.     LPTPOINT lpTmpPt;  
  13.  
  14.     // 在测点定义表中找空的缓冲区  
  15.     for (i=0;i
  16.     if (i==PtTab.wCount) {  
  17.         // 如未找到,则判断测点数是否已到***值,如已到,则返回失败  
  18.         if (PtTab.wCount+1>MAXPOINT) return(0xffff);  
  19.         // 如未找到***值,则测点总数加1。即在测点定义表的***追加一个缓冲区  
  20.         PtTab.wCount++;  
  21.     }  
  22.     // 初始化缓冲区  
  23.     lpTmpPt=&PtTab.lpPt[i];  
  24.     // 将删除标志(即缓冲区空标志)置1,作为后面具体定义时区分增加与修改的标志,  
  25.     // 如是修改,则此标志必为0  
  26.     lpTmpPt->tpDel=1;  
  27.     // 拷贝测点号到缓冲区  
  28.     lstrcpy(lpTmpPt->tpNum,lpPNum);  
  29.     // 将前一此操作测点的定义复制到缓冲区  
  30.     lstrcpy(lpTmpPt->tpName,HistPt.tpName);  
  31.     lpTmpPt->tpType=HistPt.tpType;  
  32.     lpTmpPt->tpOp=HistPt.tpOp;  
  33.     // 赋缺省的状态与数值  
  34.     lpTmpPt->tpState=PS_SUSP;  
  35.     lpTmpPt->tpRValue=0;  
  36.     lpTmpPt->tpDValue=0;  
  37.     // 置缺省的状态变化时间为当前时间  
  38.     _fmemcpy(&lpTmpPt->tpTime,&Time,sizeof(SYSTIME));  
  39.     // 将偏移值返回  
  40.     return(i);  
  41. }  
  42.   

时间已经过去十几年了,计算机系统、开发语言、设计思想都有了很大转变,现在要写一段同样功能的代码,可能完全不同了。

***的变化应该是面向对象技术的应用,测点和测点表都会从struct变为class,测点数组可能会用std::vector或std::list代替,并且用new来动态分配,宏定义也会换成常量或枚举。而上面这个创建新测点的函数,也会被封装到测点表这个类中。面向对象技术改变了我们思考和实践的方式,而且这个改变作用是巨大的。

再有就是一些设计思想的转变,比如对注释的看法。以前,注释多可能意味着可读性强。但《重构》一书中说:“你看到一段代码有着长长的注释,然后发现,这些注释之所以存在乃是因为代码很糟糕。”再看看上面这段代码,前半段,其实是查找一个空的测点位置,完全可以用Extract Method(提炼函数)重构方法将其移入另外一个函数,并给其一个准确的命名,而不需要注释。后半段,“代码已经清楚说明了一切,注释已经变得多余了。”

匈牙利命名法,已成为争议***的命名法,其类型冗余常常大于它所带来的收益。它来自微软的一名匈牙利程序员,但现在微软的.Net和它的编程语言中,微软更换了这一法则,在C#中以骆驼命名法和帕斯卡命名法居多。

计算机系统的提升也改变着程序。早年16位OS上编程需要区分远指针和近指针,但现在32位环境下,C++指针变量前缀一般都是p,很少见到lp。

技术在进步,编程思想在转变,人的思维也在不断更新。也许再过十几年,现在听都没有听说过的新技术会大行其道,你回头再看看现在的代码,可能也会有像我今天的感觉。但无论怎样,请不要轻视我们的过去,因为没有过去的积累,就没有今天的进步。
 

原文链接:http://www.cnblogs.com/wanghui9072229/archive/2011/04/25/2028793.html

【编辑推荐】

  1. 想成为更好的程序员吗?学习Prolog语言吧
  2. 15件事造就有理想的程序员
  3. 程序员发现苹果史上最严重的隐私侵犯行为
  4. 老程序员10年技术生涯的思考 从C++到Java
  5. 程序员如何在"小公司成长"和"大公司学习"

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...