因每样事物都具其特色,每个人都有其个性,故而每种工作都有其技巧,每件事情都有其方法。
程序员的工作亦是如此,假如不能抓住事物的本质去对待问题,恐事倍功半,徒劳无功。
回想起初,刚接手单片机上,简单的点亮LED 的程序时,逐句逐字阅读。乃未入门之探索也,盖不能成事。如今已工作5年有余,项目中代码的功能、模块逻辑之纷繁复杂,自思应好生整理。一则为前面5年之辛劳尝试,加以回顾总结; 二则为今后程序员的人生,继往开来。
1. 师出高明
程序代码,计算机系统,os 都是西洋人发明创建而来,若能直接阅读他们的文献,一手的资料,大有裨益。
https://dzone.com/articles/7-ways-to-improve-your-code-reading-skill
如何理解代码,这篇文件总共从7个维度阐述。
1) 运行代码
静态的代码,动态的进程。
代码为结果,原因和过程是动态的进程,从而实现人们的需求。
运行代码,观察进程再动态运行中的现象,结合编写代码的初衷,可以加深对代码的理解,从而找到为何代码要这样来写的原因。
同时还特别提到framework 或 libraries 如果了解,会辅助代码的阅读。
2) 找到顶层逻辑
也就是程序的全局观,从全局出发,循序渐进,阅读代码,最终落入到代码实现细节。这样比较符合人们的思维逻辑,不会被局部的函数或局部逻辑,而困死其中,迷失在茫茫的逻辑大海中,失去了顶层逻辑的指南针。
首先建议大致浏览代码,根据代码的字面意思,整理出一条逻辑线索,形成顶层逻辑,大概明白,这个项目是要干什么的,然后在去看细节实现。
3) 代码开发、阅读、编辑工具的使用
磨刀不误砍柴工,且不细说。
4)了解编程语言的语法、编写风俗习惯
比如 函数调用,就是通过PC 指针指向函数的首地址。
5) 常用的编程模型或模板套路
自古套路得人心,比较offset() 函数在Linux 内核中获取成员变量的首地址,然后通过指针指向首地址来引用捕获到需要的变量。C 语言指针的妙用,在捕获变量的用途里大放异彩。
6) code review
互相借鉴,三人行必有我师焉。学会向贤者学习。
7) 学习做减法
最后一条,也是最万能的一条。将大的函数拆成中等函数,在拆成小函数。由简入繁。
2. 图形化程序流程
程序都是按照固定流程来写的,代码写的不是功能,而是流程。 只是特定的流程,可以实现特定的功能。所以,代码天生就不是功能,而是因为构成了算法流程,才转化成了功能实现。
步骤我认为应该如下:
需求功能---> 算法流程 -----> 编码实现
只是有能工巧匠,对编码coding 烂熟于心,故而可直接写出完备的代码,不再我的考虑范围之内。