那些烂代码教给我的事
2012-10-20 20:47
148 查看
(以前的博文,转到csdn上来)
如果作为一个程序员,你对我写的东西不感兴趣,可以直接跳到最后一句。
这周三的时候,我还是跟往常一样在做我的事,偷偷摸摸学点儿ror。一个老师让一个同学叫我过去帮忙看程序,说是程序编译不通过。。。
先说明,这个项目组的项目是一个地质相关的绘图软件,大部分的程序设计到石油数据,和一些计算机图形学的东西,是跟中石油合作的,有大概8、9年的样子了,无测试。几十万行代码应该是有的。
我看了下编译出现的状况:omg!!!几百个编译错误。旁边的同学倒是很淡定,熟练的注释掉了几个看样子是新写的文件。。。
恩,这下子好点儿了,说是有两个类型重复定义了:
我:如果没有测试,再怎么也应该添一个文件就编译一次吧!
老师:这个不是关键,关键是这个重复定义的数据,搞得很老火阿!
好吧
大概是这样的代码出现了问题(我精简了):
DataTypeA和DataTypeB是定义在两个不同的头文件中的enum类型,代表同样的物理意义的数据。。。有一些文件会同时包含这两个头文件
我:为什么有两个不同类型的数据表示了同一个东西?
老师:A是在原来的程序里面定义的数据结构,B是我们新写的库,我们不希望新的库依赖于老的程序。。。这样我们可以不断的添加新的库实现新的功能。。。
我(心中OS):真的就不依赖了吗?
才开始我没有注意到一个命名是DataTypeA,另一个是DataTypeB。我以为都是A,就随便加了个ifndef,期待速度解决问题。。。结果是,,,不行。。。holy shit!。。。
怎么A中的VERTICAL会根B中VERTICLAL冲突呢?
这项目真心太大了,编译都要好久,我就写了个小demo,来速度验证这个语法问题。恩。还是不行,看来是语法问题。。。
后面通过查资料,我才知道enum属于POD(plain old data)。。。enum的类型名称是没有名字空间的。。。
好吧,问题找到了。。。
为什么会叫坏代码教给我的事呢?因为我觉得正常情况下,我是不会用enum的。为什么?
我问了那个同学一个很简单的问题:你们会不会在某个地方判断enum类型的值是VERTICAL还是HORIZON,然后再根据判断的结果,进行不同方法的计算?
同学:会啊
我:会不会这样的判断不止一处?
同学:恩,是的。
我:有没有针对VERTICAL或者HORIZON的一些算法改变?
同学:有
我:你有没有觉得你改的时候很苦B?
同学:有有有!!!同学恍惚遇到知音了。。。
为什么不用enum的原因我也就差不多解释了一半了。
最重要的一点:
好的代码锻炼人的思考,坏的代码锻炼人的语法
如果作为一个程序员,你对我写的东西不感兴趣,可以直接跳到最后一句。
这周三的时候,我还是跟往常一样在做我的事,偷偷摸摸学点儿ror。一个老师让一个同学叫我过去帮忙看程序,说是程序编译不通过。。。
先说明,这个项目组的项目是一个地质相关的绘图软件,大部分的程序设计到石油数据,和一些计算机图形学的东西,是跟中石油合作的,有大概8、9年的样子了,无测试。几十万行代码应该是有的。
我看了下编译出现的状况:omg!!!几百个编译错误。旁边的同学倒是很淡定,熟练的注释掉了几个看样子是新写的文件。。。
恩,这下子好点儿了,说是有两个类型重复定义了:
我:如果没有测试,再怎么也应该添一个文件就编译一次吧!
老师:这个不是关键,关键是这个重复定义的数据,搞得很老火阿!
好吧
大概是这样的代码出现了问题(我精简了):
DataTypeA和DataTypeB是定义在两个不同的头文件中的enum类型,代表同样的物理意义的数据。。。有一些文件会同时包含这两个头文件
我:为什么有两个不同类型的数据表示了同一个东西?
老师:A是在原来的程序里面定义的数据结构,B是我们新写的库,我们不希望新的库依赖于老的程序。。。这样我们可以不断的添加新的库实现新的功能。。。
我(心中OS):真的就不依赖了吗?
才开始我没有注意到一个命名是DataTypeA,另一个是DataTypeB。我以为都是A,就随便加了个ifndef,期待速度解决问题。。。结果是,,,不行。。。holy shit!。。。
怎么A中的VERTICAL会根B中VERTICLAL冲突呢?
这项目真心太大了,编译都要好久,我就写了个小demo,来速度验证这个语法问题。恩。还是不行,看来是语法问题。。。
后面通过查资料,我才知道enum属于POD(plain old data)。。。enum的类型名称是没有名字空间的。。。
好吧,问题找到了。。。
为什么会叫坏代码教给我的事呢?因为我觉得正常情况下,我是不会用enum的。为什么?
我问了那个同学一个很简单的问题:你们会不会在某个地方判断enum类型的值是VERTICAL还是HORIZON,然后再根据判断的结果,进行不同方法的计算?
同学:会啊
我:会不会这样的判断不止一处?
同学:恩,是的。
我:有没有针对VERTICAL或者HORIZON的一些算法改变?
同学:有
我:你有没有觉得你改的时候很苦B?
同学:有有有!!!同学恍惚遇到知音了。。。
为什么不用enum的原因我也就差不多解释了一半了。
最重要的一点:
好的代码锻炼人的思考,坏的代码锻炼人的语法
相关文章推荐
- [置顶] 那些烂代码教给我的事
- 为什么很多人宁可天天去读那些个所谓的看似能学到东西却没卵用的博文,都不肯好好静下来写写代码呢?
- 网页布局里那些让人摸不着头脑的小问题——有关html代码换行
- 获取dom元素那些讨厌的位置封装代码
- hdu 3313 Key Vertex 那些AC的代码基本都是错的!
- 给自己一个定位 还是要写代码啦 跟人沟通打交道的那些 没有那么多兴趣
- Android平台第三方SDK会采集用户的那些隐私数据及具体实现代码
- Magento查询系统还有那些产品没有设置Group Price的代码
- 使用Nuwa实现安卓代码热修复及那些坑
- combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
- iOS开发中那些容易被我们忽略的代码,常用代码集合
- 那些短小精悍的&奇葩的&令人感到惊讶的JavaScript代码(一)
- 那些开源程序中让人叹为观止的代码 - 2 单例模式
- android中双卡双待的那些代码
- 让那些无用代码注释见鬼去
- 【前端模板之路】一、重构的兄弟说:我才不想看你的代码!把HTML给我交出来!
- ---jni 代码需要那些库
- Operating System-Thread(5)弹出式线程&&使单线程代码多线程化会产生那些问题
- 获取dom元素那些讨厌的位置封装代码
- StringJoiner 拯救那些性能低下的字符串拼装代码(转)