为什么编程很难?

之前有一个很紧急的项目,项目中有一个bug始终没有被解决,托了十几天之后,就让我过去协助解决这个bug。这个项目是使用C语言生成硬件code,是更底层的verilog,也叫做HLS开发。

项目中的这段代码并不复杂,代码行数一共30行,我反复的阅读,代码逻辑和仿真没什么问题,底层verilog代码也并没有报错;但是最终得到的verilog代码与C语言代码不一致,我判断工具没有将C代码转换成我想要的verilog代码,可能是coding style导致,因为HLS对编写C代码是有要求的,C代码编写的不好,可能会导致硬件性能变差,或者最终综合的不对。

因为肉眼实在是看不出来,所以我决定重新写一遍,使用高级数据类型编写,代码行数就10行,但最终结果还是不对。我又将代码进行删减,最终保留4行代码,最终结果正确。

我判断问题出在删减的6行代码中,我对这6行代码做出了修正,将常变量改成固定值,结果是正确的。

最终,我判断这个bug可能是出在数据类型上,源代码中使用的类型是constant int,我改成ac_int<32, true>,结果就正确了。

因为变量类型定义错误,一个bug花了一周的时间,代码一共就那么几行,但是为了得到正确得结果,我尝试了几十种方法,不断更换coding style,才得到这个正确结果。

这就是编程最难的方面,写代码的时候你很爽,觉得思路清晰,写完一运行,全是bug,机器是不具备容错能力,一旦遇到bug,只会脱手不管。现在的编程语言虽然是在使用高级语言,但是还是需要人去理解机器。

在给大家看一个简单编程开发案例的漫画图,看完或许你会明白点为什么编程难。

这幅漫画大致讲的是:在外人看来,这个需求完成的时间差不多十天左右,没什么难度的。但他们不知道的是,计算机处理问题与人处理问题是有差异的,你大脑中产生的需求,在计算机中需要建立一条一条的规则去实现,这些规则必须要全部实现,一条都不能少。否则,程序会产生Bug。

所以,程序员做需求时得多方面考虑,做完整的测试,必要时还需要数学模型进行验证,确保程序能够完全正确实现。这些工作内容是外人无法看见的,他们只是想当然的认为这个需求简单,你竟然需要用这么多时间,这对程序员很容易造成误解。

相关推荐
松小白song9 小时前
【硬核排错实录】FPGA DDS 波形卡死:寄存器有值但正弦 / 三角 / 自定义波形完全不输出(双通道失效终极解决)
fpga开发
Zwawa9 小时前
先把轮子转稳,才不会烧心:编码器速度环 PID 怎么接回 PWM
c语言·单片机·嵌入式
星夜离尘5610 小时前
UART偶发乱码:波特率分频误差之外,还要算采样漂移
fpga开发·uart
Escalating_xu13 小时前
【C 语言】编译和链接:从源文件、目标文件到可执行程序完整解析
c语言·开发语言
C++ 老炮儿的技术栈13 小时前
std::atomic 是什么
linux·c语言·网络·c++·visual studio
Logic10114 小时前
C语言/数据结构位运算题解:异或XOR找出数轴移动中只出现一次的指令——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
weixin_4629019714 小时前
CubeIDE串口重定向 printf
c语言
2501_9159184115 小时前
在 Xcode 中运行和调试单元测试的完整指南
ide·vscode·macos·ios·单元测试·个人开发·xcode
面壁的熊猫15 小时前
工作和学习中的高效工具
vscode
人邮异步社区15 小时前
C语言好学,还是Python好学?
c语言·开发语言·python