关于读代码和写代码的一些思考

最近我一直在思考这样一个问题,“自己明明已经看了很多代码了,为什么自己还是不能写出代码呢”?我感觉还是读代码和写代码背后隐藏的一些思考没有理解清楚。

写代码的过程,我认为是这样的。

首先,我们人类用大脑思考用的是自然语言(文字或者声音)来描述事物有哪些特性,如何完成某一个过程。这个过程纯粹是错略的描述,用的也是人自己的思考,用的也是自己的语言,这就是思考阶段。思考阶段是天马星空的,粗略的、硬性的。

思考阶段完成后,可能得到的一个规划书,里面详细介绍了有那些功能,功能需要完成的工作,有那些事物,这个事物有那些特性、使用什么单片机或者应用级芯片等等,这些都是字面意义的(包含拿到的数据手册)。

其次,程序员拿到这个规划书后,然后用32个关键字代表的c语言(C89标准还有计算机的一些特性,例如内存、堆、栈等内存分配,表现为语法)重构这些事物和特性(表现为创建好的一个一个变量),实现的功能(实现一个一个函数)。也就是用C语言进行细化重构编写的过程,最后将代码组合在一起,形成一个完整的项目代码,这就是“写代码”阶段。

“写代码”阶段存在一个前提环境,就是写的代码最终是要放到一个单片机或者应用级芯片(移植了linux系统)中运行的,也就说存在一个硬件环境。硬件环境在思考阶段就表现为芯片的数据手册以及里面提到的各个寄存器以及寄存器的功能。硬件环境在“写代码”阶段就是将芯片的数据手册中的寄存器以及寄存器的相关操作用c语言写成库函数。如果学习过STM32单片机的话,将4GB的内存空间进行了划分,其中一部分就分给了寄存器,这就是我所说的环境,是“写代码”阶段的客观基础(用或者不用都在放在哪里了,有点像好多个全局变量)。

总之,“写代码”阶段就是在了解环境(芯片特性,表现为数据手册中的寄存器)和“规划书”(要定义的事物以及功能)后,用c语言进行实现或者重构的过程(这个过程可以这样说:将环境和“规划书”用c语言翻译重构出来的过程)。值得注意的事c语言还是一种高级语言,我的认识是它是存在自然语言与计算机语言(汇编代码或者机器代码)之间的语言,它很多特性既符合人类自然语言的习惯又表现了计算机语言的特性(例如:变量、堆、栈、代码段等等)。

写代码的过程:将人类的想法(语义)用c语言语法重构写成计算机能理解的代码的过程。这个过程是一个简化过程(尽量实现所有的语法)、一个固化重构的过程(c语言表现为32个关键字)。

看代码的过程:

第一步要理解语法,也就是一个一个变量和函数(隐藏的栈、内存、堆、各种段等)。更深层的应该是理解语义,也就是C语言背后表现的“环境”和“规划书中的内容”。有时候我们只看懂了语法,具体表现就是c语言是如何操作全局变量和调用函数的,而看不懂背后的“语义”。单独一小块代码能看懂,但是整体就看不懂了。这就是没有明白背后的“语义”。“语义”表现的特点就是“粗略的”、“自然的”、“语法背后的”、“人类自己的想法”。

后面就剩下编译器的工作,将c语言代码编译成可执行文件,这又是一次语言的重构,就不再详细描述了。

总之,将人的想法(语义)要经过多次重构才能形成能够烧录到芯片中被芯片运行的过程。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值