你的编程能力从什么时候开始突飞猛进?
保留所有版权,请引用而不是转载本文(原文地址 https://yeecode.top/blog/41/ )。
首先我们要明白一个道理:编程没有什么特殊的,它是”科学技术->技术->工程技术”中的一个小的类别。
明白了这一点,如何提升编程能力便变得显而易见了。因为,关于学习科学和技术,我们经历过十几二十年的训练。而且,这一训练是极有成效的(相比于国外的一些欢乐的训练方法,这里仅作提及,不展开争论)。
这时你可以回顾自己学习某一门课时,在什么时候有突飞猛进的感觉。
主要有两个阶段:
- 初学阶段。对,就是上课听讲。这时我们通过课本学习基本的知识,经历从无到有的质的变化,每天都能学到大量的新知识,进步神速。
- 训练阶段。对,就是课后练习、以考代练。这时我们主要是通过做题,或者工程实训,将学到的基本知识用到实践中,并不断地反馈纠正自身的知识,最终建立知识体系和经验。这时你会常常有恍然大悟和醍醐灌顶的感觉,“原来这定理这么用,妙啊!”
而其他的一些复习阶段、熟练阶段,则进步较小。常常许久感觉不到什么进步。
反映到编程上,也是一样的。一个人编程能力突飞猛进的阶段主要有两个:
- 学习基本编程知识、环境。这一阶段是一个纯粹学习的过程,例如你在学习一门编程语言的语法,或者在学习一种算法。这个阶段重在学习的知识是正确的、成体系的。这点是容易实现的,只要确保自己使用了正规的业界认可的教科书,而不是什么《二十一天学会XXX》之流,应该问题不大。这个阶段你自己也能感受到自己的进步。
- 不断训练纠正提升。这一阶段又可以拆分为两部分:
- 第一部分:不断训练。相信这一点很容易实现,毕竟有很多程序员都昼夜兼程,急速狂奔,把头发都甩在脑后了。相信这个训练量是足够的。
- 第二部分:收集反馈,不断改进。这一点对于许多程序员而言是极为欠缺的。试想,你做完哪个项目后,会有专家告诉你哪个地方设计的不好,更好的设计方案是什么;你写完哪段代码后,会有大神告诉你最好是怎么写,可以获得哪些提升。以上的这些机会是进步的机会,但是,我相信是极少的。
所以,程序员进行了大量的编程作业,却没法收集到足够的反馈。这就像写完了作业,考完了试,但是没人老师给你批改,也没人告诉你正确答案。那你是很难进步的,因为你不知道自己做的对不对!
于是只能在莽撞的试错中前进,这就是成长缓慢的原因。
然而,各种原因,例如“教会徒弟饿死师傅”等,外加码农领域本来就是“年轻更吃香,年老被裁员”,所以,想获得前人的反馈难上加难。
但是,有一种反馈是存在的,或者,有一种标准答案可以被你拿来作为反馈。这种答案极为标准,比你周围大神写出的代码还要优秀!
对的,我说的是开源项目的源码。
优秀开源项目的源码经过了几千人的上万次修改,极为经典。这是极好的“标准答案”,就和课后习题的标准答案一样。
你要用这些优秀的开源源码作为答案去校准自己写的代码:
- 源码的包是如何划分的,你是怎么划分的?
- 源码的类是怎么定义的,你是怎么定义的?
- 源码的分支是如何拆分的,你是怎么拆分的?
- 源码的架构是怎么规划的,你是怎么规划的?
- 源码的异常是怎么处理的,你是怎么处理的?
当你阅读源码时,你会不自觉地和自己的代码对比。在这个过程中,你就进步了。
好了,除了“学习基本编程知识、环境”外,另一个让自己编程能力突飞猛进的途径你已经知道了——阅读和学习优秀开源源码。
或许,你早就知道了。
只是,你难以坚持去读一份源码。
因为很难!真的很难。
一下面对那么多的代码,一团乱麻。
我曾经也站在这困难之前。
那时我已经是一名高级架构师,做过网站的技术负责人,也规划实现过很多系统。然后内心一直想知道自己的架构设计、编程实现和世界上最优良的架构设计、编程实现之间的距离有多大!
可是我知道,除了读源码,我找不到其他进步的路线了。
于是我开始沉下心来,一个包一个包的拆解、一个类一个类的阅读、一行一行的分析。
最终,我收获极大,真的极大!
然后也总结了很多源码阅读的技巧、经验。
而后,出版社找到了我。之后我将这些经验技巧,都被汇聚成了一本书:
自吹自擂的话都掠过吧,大家可以自行去看书籍介绍或者目录了解更多。
最后以书中前言的一段话结尾,共勉!
所以,编程的进步之道就是:
多学,多练,但千万别忘了对答案!
对了,这本书也受到外方出版社的好评,并被台湾地区购买版权。接下来,将会在台湾等地发行繁体版。
当然,我也在想。如果有一天,国内的计算机书籍能够发行英文版,就算是反向文化输出了,那应该厉害了。
这靠我们每位从业者的努力!
加油!
可以访问个人知乎阅读更多文章:易哥(https://www.zhihu.com/people/yeecode),欢迎关注。