在上一篇文章中,提出了学习编程的首先要学会站在设计者的视角,然后紧接着提出了三条原则:(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

第1篇 编程能力是什么相关推荐

  1. 知乎高赞:我的编程能力从什么时候开始突飞猛进的?

    作者 | 编程指北 来源 |  编程指北(ID:cs_dev) 知乎上有个提问: 你的编程能力从什么时候开发突飞猛进? 觉得挺有意思的,所以顺手回答了下,同时也发到我的公众号上来,这篇文章纯碎是记流水 ...

  2. web前端研发工程师编程能力成长之路

    2019独角兽企业重金招聘Python工程师标准>>> [背景] 如果你是刚进入WEB前端研发领域,想试试这潭水有多深,看这篇文章吧: 如果你是做了两三年WEB产品前端研发,迷茫找不 ...

  3. 程序员的编程能力层次模型

    编程技能层次 编程技能层次,指的程序员设计和编写程序的能力.这是程序员的根本. 0段-非程序员: 初学编程者,遇到问题,完全是懵懵懂懂,不知道该怎么编程解决问题.也就是说,还是门外汉,还不能称之为&q ...

  4. 计科专业大一学生一枚,如何提高编程能力?

    先简单介绍一下我的情况:大概去年的这个时候从学校毕业,二本A软件工程,现在在北上广深之一的某卫星城从事互联网相关工作,月薪勉强养活自己.看上去一份很没说服力的简历,希望我下面的话,不会让你有这个感觉. ...

  5. 程序员编程能力7个能力提升阶段分析

    前言 程序员的编程技能随着经验的积累,会逐步提高.我认为编程能力可以分为一些层次. 百牛信息技术bainiu.ltd整理发布于博客园 下面通过两个维度展开编程能力层次模型的讨论. 一个维度是编程技能层 ...

  6. 数据科学家编程能力需要多好_我们不需要这么多的数据科学家

    数据科学家编程能力需要多好 I have held the title of data scientist in two industries. I've interviewed for more t ...

  7. 让你编程能力秃飞猛进的好习惯

    分享自己写代码时的好习惯,让你的编程能力突飞猛进! 大家好,我是鱼皮,上回说到,很多同学在学编程时不注重代码质量,养成坏习惯的同时,失去了提升自己编程能力的机会. 还没读上篇文章的同学,请先阅读:劳资 ...

  8. Web前端研发工程师编程能力飞升之路

    今天看到这篇文章.写的非常有意思,于是转载了.看看我们都处于什么的阶段. [背景] 如果你是刚进入web前端研发领域,想试试这潭水有多深,看这篇文章吧: 如果你是做了两三年web产品前端研发,迷茫找不 ...

  9. 经验 | 计算机专业科班出身如何提高自己编程能力?

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散   计算机视觉联盟笔记   作者:王博Kings.Sophia 本文内容概述王博Kings好友一些编程学习经验 前言 ...

最新文章

  1. windows阿里云服务器配置
  2. 渗透测试之全方位信息收集神器 instarecon
  3. IDEA中双击两下shift全局搜索怎样取消和修改
  4. JS实现图片预览与等比缩放
  5. mysql 索引 lt =,当同时使用gt; =和lt; =时如何索引MySQL表?
  6. python 插补数据_python 2020中缺少数据插补技术的快速指南
  7. SpringMVC_02
  8. 关于用Linux桌面版当工作系统这件事
  9. android studio继承关系,Android Studio中查看类的继承关系
  10. 电子计算机属于哪个税目,高拍仪,摄像头等 税收分类编码是什么?具体选择哪一个计算机外部设备?...
  11. 在c语言中有函数leapyear定义如下,职业教育概论——职业教育的发展历史超星尔雅答案题库...
  12. ssd的smt_SMT贴片电容的全面知识
  13. 均匀分布方差的计算方法
  14. springMVC原理,一看明了
  15. Excel数据可视化竟可以如此惊艳!数据可视化大屏制作
  16. 猿创征文|【简单】微信公众号推送教程 ·可直接下载运行 ·超详细
  17. QCA988x Windows7驱动安装方法
  18. 【Linux 内核 内存管理】内存映射原理 ① ( 物理地址空间 | 外围设备寄存器 | 外围设备寄存器的物理地址 映射到 虚拟地址空间 )
  19. 傅里叶变换中,圆频率w与频率f之间的公式转化
  20. Redis事件-文件事件、时间事件、事件调度与执行

热门文章

  1. 十万个怎么办 - 外企HR支招 (摘自 开复学生网)
  2. IDEA安装与配置 (一) IntelliJ IDEA2018.2.7安装
  3. 【学习笔记】Get Started with MATLAB-Chapter03
  4. 标题太长用省略号代替
  5. magicbook linux送u盘,荣耀MagicBooku盘重装原版Win10系统的方法
  6. TensorFlow2 大幅提高模型准确率的神奇操作
  7. thinkpad x1 carbon电池充不进去电解决方案
  8. HOOPS组成、功能、特点
  9. PPT---素材整理
  10. Java实现 LeetCode 226 翻转二叉树