为什么编程很难?

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

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

相关推荐
小周的C语言学习笔记4 分钟前
鹏哥C语言44---函数的声明和定义
c语言·c++·算法
DdddJMs__13521 分钟前
C语言 | Leetcode C语言题解之第419题棋盘上的战舰
c语言·leetcode·题解
WolvenSec31 分钟前
C/C++逆向:switch语句逆向分析
c语言·开发语言·c++·安全·网络安全
勇敢滴勇1 小时前
【排序算法】插入排序_直接插入排序、希尔排序
c语言·数据结构·算法·排序算法
Naiva2 小时前
ESP32 入门笔记02: ESP32-C3 系列( 芯片ESP32-C3FN4) (ESP-IDF + VSCode)
ide·笔记·vscode
小_t_同学2 小时前
C语言常见字符串函数模拟实现一
c语言·开发语言
Navigator_Z2 小时前
LeetCode //C - 382. Linked List Random Node
c语言·算法·leetcode
张三xy3 小时前
数据结构 第三章 栈和队列 练习题3.2.4 迷宫求解 C语言代码
c语言·数据结构·算法
qq_294481313 小时前
vscode 配置django
ide·vscode·django