有小伙伴问:如何快速提升编程能力?
考虑这样一些场景:
Case 1:你还在读书,照着教程,照着例子,学习编程。刚开始,大概率是先读别人的代码,理解别人的代码,而非一上来,就开始写。
Case 2:一个职场新人,一进公司,就加入一个项目组,那项目代码真是海了去了!然后老大可能给你一个小小的活,在现有基础上,添加一个小功能。项目经验少的童鞋,一下就傻眼了,特么的,这代码这么多行,文件几百上千!该从何入手呢?别说改了,看都看不懂!完了,试用期是不是就要被干掉?!
Case 3:你进了一个小公司,技术管理混乱,前任已闪人,你受命接任一个一坨翔一样的项目,那代码写的真是云里雾里,工期又紧,老板又逼着出货,怎么办?闪人?可是下家会更好么?跳槽往往是从一个坑里,跳到另一个坑里。所以读吧,总是要读的。
学校往往教授的是如何写代码,可能从没有教如何读代码。
然而,理想很丰满,现实很骨感!工作中,你写代码的时间可能只占工作时间很少很少的一部分,大部分时间你可能都是在阅读已有的代码,当然除非这个项目从0到1都是你一个人干,可即便是自己写代码,也是渐进增长、不断迭代的,也需要不断反复阅读自己写的代码。
再者,编程与写文章,有异曲同工之处。编程与写作相似之处,都是用语言表达写作者的想法。
对于如何提升写作,古人曾讲:熟读唐诗三百首,不会作诗也会吟。回想学生时代,老师也常说:读书破万卷,下笔如有神!强调写作需要大量阅读,读的多了,写作能力也会相应提升。阅读之于写作,相辅相成,互为促进。
那么,大量阅读别人的代码,也能提升自己的编程水平。阅读代码,个人觉得会有这样些好处:
优秀的源码,就如传世佳作一样,值得反复揣摩,细细品味。其编写技巧、设计范式、架构思想,都具有极大的学习借鉴价值。比如一些优秀的开源项目:Linux内核、lwIP、u-boot等等。这些作品都汇集了全球优秀顶级程序员的思想智慧,都是非常优秀的作品,广为流传,广为应用。如果能花些时间去阅读理解一下其代码,一定是大有裨益的。
很多时候,我们的日常工作内容或许只是很小的领域,修复一些小的bug,修改一些小的功能等。如果只专注这些小的点,个人成长一定会受到局限。
如果能善于发现一些新的感兴趣的领域,并去阅读相关的代码,则一定会提升自己的编程能力的。
所以,为什么要读代码呢?
找bug review别人的代码 学习 维护等
这里聊聊我的一些体会,也未必都对,也未必适合其他的朋友。分享以作交流,如有其他想法,也欢迎大家留言交流。
我一般拿到一份别人的代码,会先去找这个项目的入口,先梳理个大概的脉络。如单片机程序,一般会从下面几个角度先扫一遍:
......
如果是Linux应用程序,或者C++应用程序,我也大致采用差不多的思路,先读个大概,然后再细读。比如对一个Linux应用程序,会先了解这些方面的概要信息:
在阅读代码的概要信息的时候,我比较喜欢做做笔记,画画图。在阅读代码的时候,我比较喜欢先去研究代码中的数据结构。数据结构往往会体现作者抽象问题、对问题建模的一些思路,并使用UML图画出来,刚开始可能都不去看每个函数是怎么实现的,只关心与这些数据结构相关有哪些函数以及数据结构间关系。
“Bad programmers worry about the code. Good programmers worry about data structures and their relationships.”
— Linus Torvalds
这样做有个好处,边绘图边去理解代码,就会加速对代码的理解,对我来说,我如果只用两只眼睛盯着看,和一边看一比画图效率会低很多。
这样做还有一个好处,可以将理解以图的形式记录下来,如果光用图还不能表达清楚的时候,我还会再加点文字描述。时间过了很久之后,再来看代码,可能之前的理解全忘了,可是如果有这样一份图文并茂的笔记,我就会很快找回记忆。
另外,还有些工具,可以自动将代码转化成类图等,比如visual studio,可以自动绘制类图,Enterprise Architect也具有根据代码生成类图的功能。具有此类功能的软件还有很多,有兴趣的小伙伴可以搜索一下。
一个经常调试的程序猿,键盘上F10,F11这些键大都坏的比较快。
如果我讲的这些,如对你有所启发,也不妨点个赞或者再看,小小的鼓励一下我。当然,你如愿意扩散分享,那就感激不尽啦。
版权声明:本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。
由于微信公众号近期改变了推送规则,为了防止找不到,可以星标置顶,这样每次推送的文章才会出现在您的订阅列表里。
猜你喜欢:
适用于嵌入式的差分升级通用库!
分享一种灵活性很高的协议格式(附代码例子)
分享几个实用的代码片段(第二弹)
分享一种你可能不知道的bug定位方法
分享一种修改配置文件的方法
《嵌入式大杂烩周记第 13 期:lz4》
《嵌入式并行多线程处理器,了解一下!》
在公众号聊天界面回复1024,可获取嵌入式资源;回复 m ,可查看文章汇总