为什么编程很难?

之前有一个很紧急的项目,项目中有一个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。

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

相关推荐
SilentSlot1 小时前
【C/C++】手写 DPDK 协议栈(十一):基于 PPS、SYN 比例和源 IP 熵的 DDoS 检测
c语言·c++·tcp/ip
西安景驰电子2 小时前
PCIe 授时卡原理及应用
运维·服务器·windows·单片机·嵌入式硬件·fpga开发
冻柠檬飞冰走茶3 小时前
PTA基础编程题目集 7-15 计算圆周率(C语言实现)
c语言·开发语言·数据结构·算法
落chen3 小时前
基于Vivado的FIFO-IP核-强化篇
fpga开发
wardenlzr3 小时前
VSCode 运行 Live Server 提示「Windows 找不到文件 Chrome」问题全解析
chrome·windows·vscode
程序员more3 小时前
我用 AI,20 分钟做了一个 VSCode 股票摸鱼插件
人工智能·vscode
减瓦5 小时前
告别Postman——用VSCode优雅地发起Http请求
vscode·http·postman
Rabitebla5 小时前
C++ 内存管理全面复习:从内存分布到 operator new/delete
java·c语言·开发语言·c++·算法·leetcode
SilentSlot6 小时前
【C/C++】手写 DPDK 协议栈(八):用五元组 Hash 加速连接定位
c语言·c++·哈希算法
Tisfy6 小时前
LeetCode 3517.最小回文排列 I:排序(Python两行版) / 计数(O(n)时间+O(C)空间+字符串原地修改)
c语言·python·leetcode·字符串·排序·计数排序·回文