那些烂代码教给我的事
来源:互联网 发布:canny边缘检测算法 编辑:程序博客网 时间:2024/04/30 20:13
(以前的博文,转到csdn上来)
如果作为一个程序员,你对我写的东西不感兴趣,可以直接跳到最后一句。
先说明,这个项目组的项目是一个地质相关的绘图软件,大部分的程序设计到石油数据,和一些计算机图形学的东西,是跟中石油合作的,有大概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的原因我也就差不多解释了一半了。
最重要的一点:
好的代码锻炼人的思考,坏的代码锻炼人的语法
- 那些烂代码教给我的事
- 程序员妻子自述:那些程序员教给我的
- 程序员妻子自述: 那些程序员教给我的
- 程序员妻子自述:那些程序员教给我的
- 程序员妻子自述:那些程序员教给我的
- 程序员妻子自述:那些程序员教给我的
- 提高班教给我的
- 嵌入式教给我的。。
- 【好文推荐】程序员的妻子说...那些程序员教给我的
- 那些程序员教给我的------爱情的本质是相互欣赏
- 创办四家公司教给我的90件事
- 前男友教给我的二十一件事!
- 罗特hr教给我的
- 工作经历教给我的一些东西
- 深圳房价教给我的三堂课
- Fab CEO:创办四家公司教给我的90件事
- Fab CEO:创办四家公司教给我的90件事
- Fab CEO:创办四家公司教给我的90件事
- Linux netstat命令详解
- 关于图论的一些小结 (一)
- UVA 12293 Box Game
- 【整理】面向对象设计的SOLID原则
- C语言相关问题
- 那些烂代码教给我的事
- java synchronized关键字理解
- RARP协议,ICMP协议以及IGMP协议
- 深入浅出多线程系列之七:4种定时器
- 为什么中国的程序员总被称为码农
- opencv 视频读取 和 进度条显示
- WPF绑定(Binding)讲解大全
- C54X 中断响应流程及 CPU 如何执行 ISR ?
- shell排序的c实现