为什么编程很难?

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

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

相关推荐
kingmax5421200822 分钟前
《数据结构C语言:单向链表-链表基本操作(尾插法建表、插入)》15分钟试讲教案【模版】
c语言·数据结构·链表
mit6.8242 小时前
[box64] 解决ARM64运行x86_64跨平台兼容性 | 机器架构配置
c语言
喵了meme2 小时前
C语言实战6
c语言·开发语言
Logic1012 小时前
C程序设计(第五版)谭浩强 第七章课后习题优化算法与核心步骤解析
c语言·visualstudio·程序员·学习笔记·软件开发·编程基础·c语言入门
喵了meme3 小时前
Linux学习日记21:读写锁
linux·c语言·学习
zfj3213 小时前
vscode是js开发的,为什么能支持golang java等各种语言开发
javascript·vscode·golang
风中月隐3 小时前
C语言中以坐标的方式图解“字母金字塔”的绘制
c语言·开发语言·算法·字母金子塔·坐标图解法
NeDon4 小时前
[OJ]数据结构:移除链表元素
c语言·数据结构·算法·链表
刃神太酷啦4 小时前
C++ list 容器全解析:从构造到模拟实现的深度探索----《Hello C++ Wrold!》(16)--(C/C++)
java·c语言·c++·qt·算法·leetcode·list
Herbert_hwt4 小时前
C语言结构体详解:从定义到实战应用
c语言