第1篇 编程能力是什么

  在上一篇文章中,提出了学习编程的首先要学会站在设计者的视角,然后紧接着提出了三条原则:(1)专注一个方向,而且一段时间值研究一个;(2)要写博客,将想法整理出来;(3)要写代码,重复的来写代码,反复重构。这些话都很正确,但是到了具体操作的时候,实际上就会存在一些问题,无论是方向的选择,还是说写博客或者说写代码,正确的原则来自于成功者的归纳,却并没有给出可以执行的方案。因而,在这篇博客里面,尝试根据上述的原则,提出可操作性的建议。

  在这里首先要说两个概念,一个是编程能力,一个是工作习惯。下面分别来描述。

  首先说编程能力,上述原则的目的只有一个,那就是提高编程能力,到了这里,就不得不说什么是编程能力,否则很难说提高了,通常理解中编程就是写代码,但是这个定义太模糊了,并不能带给我们任何有价值的启发来提高这种能力。因而,在这里,我尝试来提出自己对于编程能力的看法,编程能力就是把解决方案用代码呈现出来的能力。具体来说,一个库实际上就是一个解决方案,用来解决某类问题,比如正则表达式库,用来处理正则表达式,而编程能力实际上就是重写这个库,实现同样的功能。如果能够做得更好的,不论是扩展性,执行效率或者说更加容易使用,这些的改进都可以说是编程能力更强的一个表现。在这里写代码= 解决方案 + 代码实现,当然如果在解决问题的时候,在解决方案上能够有很好的创意,那么就可以说是一个Hack了,最后,如果不仅仅是解决问题,还能够提出新的问题,那么无疑是顶级黑客。不过能力是一步步提升的,先做一个优秀的程序员,做好代码实现的部分,然后一步步打怪升级。在这里现在可以说代码实际上就是解决方案的一种表现形式,那么为了做好代码实现。无疑需要做到以下三件事情:(1)理解解决方案,如果不理解结局方案,那肯定无法写出正确的代码;(2)利用具体的语言写出代码;(3)对代码进行重构优化。因而,提高编程能力的思路就出现了,针对流程中的每个环节单独进行强化。下面分别来描述:

  理解解决方案。这点无疑是不容易的,因为解决方案只是一个大致的思路,或者说只有关键环节,往往也是描述不清楚的,如同侦探,你掌握了一些证据,但是并不足以完成找到犯人,你还需要做一些工作,也就是把描述性的语言转换成伪代码,有了伪代码,任何一个程序员,利用任何一种语言都可以实现编程。那么如何具体来提高呢?个人觉得就是划出数据的流程图,首先用数据结构描述问题,而后思考数据怎么传递,到达最终想要的形式,通过画图,就可以直观不重不漏的完成这一工作。可以先划出已经知道的解决方案的流程图。实践几次,就会有一个比较深刻的见解,也会在后续工作中更加熟练,当然,这块核心还是算法的问题,不过,流程图的使用无疑可以提高你的效率。

  用熟知的方法写出代码。这点就是要熟悉所用语言的特性,包括基础的语法和高级特性,此外,还需要知道有那些常用的模块和库等可以直接使用来解决问题,没必要浪费时间去做重复的无用功。这个就是在两个方向针对性的去看书学习,此外,最重要的还是多使用语言以及这个模块,才能够真正的掌握。

  代码重构。实际包括很多内容,可以是小的改变,也可以是推翻重来。围绕扩展性,可用性,可读性,可以进行专门的提升,这时最好的方法就是找公认在这些领域具体这希些特点的开源项目,根据方案重写代码,反复对比修改,指导对于重构有了直觉上的认识,而不是理解了概念。

  最后,在实际的编程过程中,这三个步骤不是那麽分明,这里只是为了为了方便理解,做这样的区分,因为脑海中又有这样一个概念们,就可以针对性来调高自己,这对于刻意练习无疑是必不可少的。当然,也可能有别的思路,这里仅仅提供个人看法,仅供参考。

  关于工作习惯,实际上是一个老生常谈,就是说不止一次,一段时间按照上面做,而是让整个过程变成习惯,在每一次编程都是这样来的,才能够真正的提升编程能力。对于养成习惯,最好的建议是立马去做,坚持去做,不过这样的话带不来任何的启发。这里给出一点小建议:

  (1)构建个人的知识数据库:方便快速准确找到可靠的消息。这无疑是很重要一个建议,不论是通过云盘存储,通过博客记录都可以。这里是一个很大的话题,目前也还在探索中,如果你有好的见解,欢迎交流。

  (2)搭建工作平台;利用好github以及博客,此外比如论坛和qq群都合理使用。论坛以及qq群方便交流,用来收集资料和见解,而博客和github则是整理输出所收集到的资料,这是一个闭环的过程,不断地循环往复,搭建起来这样一个标准化的平台,后续要做的就是去搜寻,去写博客和写代码。关于那些好的资源,目前还在整理中,最常用的比如博客园,stacjoverflow,基本就可以解决大部分问题,还有就是官网。

  (3)学习工具提高工作效率。(好的截图工具,好的编辑器)打造习惯之所以坚持不下去,就是太痛苦了,因而,你需要学习一些软件,有了这些软件,只要一时痛苦,但是,一旦学会了使用,整个效率就会大大的提升,最终收获到意想不到的回报。

  所以,最后,总结来说,你需要关注以下东西:(1)伪代码;(2)代码重构技巧(扩展性,效率提升,可读性,可维护性,易于使用性);(3)基础的知识点的掌握程度。世界有天才,但是你不会和天才竞争,你需要和不是天才的人竞争,你如何脱颖而出,答案是:正确的工作方向+正确的工作方式,最后补充一句,优秀是一种习惯,你只有拼尽全力人后受罪,才能够在人前看起来轻而易举。

  

一个会写博客的程序员
原文地址:https://www.cnblogs.com/znn041622/p/10992276.html