提升编程能力,一般我们都听过很多方法,差不多就是多看,多学,多动手。但是我们有的时候会发现这种方式太慢,有的时候会到一种瓶颈,解决某些问题比较困难,产生挫败感。今天要谈是如何快速有效提升,如何逃避这种陷阱。
编程能力的发展阶段大致是一个这样的循环
一无所知---知道了一些----能解决一些问题----遇到解决不了的问题,觉得自己又是一无所知了
这是一个螺旋上升的过程,但是其知识和技能的掌握并非是一个爬楼梯的一级一级的跨越过程。我们也可以表示为一个类似搭积木的过程。如果你一直往高度上追求,不断叠,就会根基不稳,要想堆更高,那就要更宽的基础。在编程学习中,一般学会基础语言后,就会旁边扩展一些知识,然后往上一级发展。比如学会了C语言课本,先能计算数学问题之类的,发现没有啥用,写出的程序不好用;再学点UI库,如MFC、Winform,就能写有界面的程序了;但是进一步就会发现数据存储遇到问题,于是又学习系统api,学习数据库,然后解决问题的能力又高了一些。然后逐步下去,学习网络,学习数据结构与算法,逐步提升的一个过程。今天要谈论的是,如何快速,如何有效的提升,也就是加速这个提升过程。
首先一个是反思
反思自己的程序,如果再写一次,你会怎么做?现在做的有那些不足?有那些地方可以用什么方式改进?一旦你开始反思,就相当于埋下了钩子,下次学习遇到相关的技术,就会有动力记得更深刻,联想到自己的问题,把知识转化为自己的能力。如果时间允许的情况,可以随时重构升级自己的程序。重构是一个痛苦的过程,可能本来正常的程序,重构了很久反而不正常了,很多时候我们都会想放弃。但是要相信自己,只要重构采用了更好的技术,更清晰的思路,更精简的设计,他的好处会不断的展现出来。维护会越来越容易、修改bug增加功能也会很快,而最关键的这个过程提炼了自己的思维,做完重构,很可能技术就上升了一个层次。
反思包括对别人的程序反思,是思考别人为什么要这么做?思考一个程序你来做会怎么做?这个过程会让你思考你所会的技术能解决什么问题,还有那些地方有空白需要进一步学习,也会思考深入技术的底层。这就是要提到的另外一个快速有效提升的方法:试着思考学习底层原理
我们多数时候,喜欢遇到问题了,就百度查找答案,直接复制粘贴,改改就用了。并没有明白其底层的道理,对于我们的整体能力提升来说,没有多大用处。就算学了很多这样的函数,复制粘贴,也只是术的提升,一旦遇到问题遇到bug,就很难弄清楚到底什么地方出问题了。如果从一个思维方式的层次来思考,百度是在寻找问题是什么what,以及如何解决问题,也就是how。如果一直这种方式下来,最后我们就会变成瑞士军刀,什么都会一点点,但是稍微深入一点的问题就解决不了。要有效提升,就是思考Why,为什么要这样解决,为什么用这个技术?为什么是这个算法?为什么是这个函数?一旦开始用这种思维,就是在探求编程之道。这样在解决问题的过程,就算是百度,也会对自己有提升。另外顺着这个思路下去,很多问题就会触及计算机技术的本质:web服务的底层是如何运作?UI控件之间是如何实现交互?系统线程是如何进行调度?数据流编码是如何影响我们的解析?甚至到更加底层的硬件如何执行指令?随着深入的层次越深,解决问题的能力也就会越来越强。如果更底层一些,就已经脱离技术,进入解决问题之道,比如在调试中,就要应用钥匙通常不会在锁孔里面插着。又在设计的时候,要转换焦点,从实现当前的函数,考虑到实现一个功能的整体需求,考虑到用户如何使用,以后如何维护升级,如何扩展功能,焦点定得越远,那么很多问题你的思考方式就不一样了,很多可能掉进去的坑就不存在了。