为什么编程很难?

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

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

相关推荐
坚果派·白晓明5 小时前
【鸿蒙PC三方库移植适配框架解读系列】第八篇:扩展lycium框架使其满足rust三方库适配
c语言·开发语言·华为·rust·harmonyos·鸿蒙
谙弆悕博士7 小时前
快速学C语言——第16章:预处理
c语言·开发语言·chrome·笔记·创业创新·预处理·业界资讯
matlabgoodboy7 小时前
软件开发定制小程序APP帮代做java代码代编写C语言设计python编程
java·c语言·小程序
handler018 小时前
UDP协议与网络通信知识点
c语言·网络·c++·笔记·网络协议·udp
C+++Python9 小时前
C 语言 动态内存分配:malloc /calloc/realloc /free
c语言·开发语言
cen__y9 小时前
Linux11(网络编程)
linux·运维·服务器·c语言·网络·网络协议·tcp/ip
坚果派·白晓明12 小时前
【鸿蒙PC三方库移植适配框架解读系列】第五篇:完整流程图与角色职责
c语言·c++·华为·harmonyos·鸿蒙
聆风吟º13 小时前
【C标准库】深入理解C语言 isalpha 函数详解:判断字符是否为字母
c语言·开发语言·库函数·isalpha
TANGLONG22215 小时前
【C++】继承详解——基类/派生类、作用域、默认函数、菱形继承(超详细)
java·c语言·c++·经验分享·笔记·ajax
Dlrb121115 小时前
C语言-字符串指针与函数指针
java·c语言·前端