Skip to content

Latest commit

 

History

History
70 lines (36 loc) · 6.14 KB

学习编程的方法.md

File metadata and controls

70 lines (36 loc) · 6.14 KB

学习编程的方法

by 彭程 (20191203)

总是以这样的心态写代码:仿佛最终维护你代码的那个人是个变态暴力狂,他知道你住在哪里。 — John Woods

动机

本篇算是对个人在 软件工程 专业下6年半学习方法论的全面总结,我准备用这套方法论继续我的打怪升级生涯,此处权当留个备注。

编程是什么

“编程(biān chéng)是编定程序的中文简称,就是让计算机代为解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程。”

虽然在百度查资料不太科学,但这个概念我觉得是非常不错的,做个阅读理解,编程的客体是计算机,过程是与计算机交流(通过一门特定的编程语言,如Java,Python等),目的是为了让计算机解决某个问题。

如何学编程

从上述概念我们可以看出,由于编程的客体是计算机,所以:

  1. 你需要了解计算机本身,这背后对应的知识体系有 -- 操作系统,计算机体系结构,同时由于现代计算机都会联网,所以一般计算机网络也是必修,此外,数据库是现代系统的基石,所以数据库也是一门必修课;
  2. 你需要与计算机沟通,而沟通的手段是通过计算机编程语言,所以你需要会一门编程语言(如Java,Python等),和人际沟通语言一样,每门语言有其特定语法,擅长与不擅长的地方,语言特性需要掌握。此外由于计算机主要是数据组织,这里你必修的内容还有数据结构和算法,同时,更高阶一点,你还需要去了解一些语言设计后面的思想,如设计模式,面向对象编程,函数式编程等等;
  3. 你的最终目的是解决问题,所以编程还需要加上你独特的领域知识,比如你是做电商的,你是做金融的,这种垂直领域下的知识积累,才能使得你成为垂直领域内的编程高手,而不是只会纸上谈兵,同时,由于世界上聪明人很多,有人把编程中共性的东西抽取出来,形成了编程框架(俗称“造轮子”),这样大家不必每次都从零开始写代码了,这些东西也是需要掌握的;

所以“知识”二字,在编程的语境下,可以理解为“解决问题的线索”,而这些线索,可能同时来时上述123各个方面,这就导致编程的过程说白了就是在这3个方面中寻找线索,我们常说的bug,也就是这3点出现中的问题;

要想成为一名好的编程人员,上述3种素质都是必须的,这也就是为什么编程高手看一眼bug就能知道问题所在,其背后的逻辑是自己对整个过程成竹在胸,已然形成直觉,操作一般是“我猜这个会在哪里XXX”,然后一看,果然如此,而我等小兵只会Google看了半天还云里雾里。

如果要学习编程,1和2全看个人平时积累,3则取决于你去了什么样的公司,即做了什么业务。同时,不要妄想用努力学习2来取代3,比如你害怕写业务代码,唯一的办法就是多写,被上级喷然后再改,而不是用疯狂学习编程语言(2)来弥补3,这种做法估计和你想用努力提高中文水平来提高英文差不多。

明确了学习的目的,我们来看看学习的类型。

学习的类型

渐进式学习

从理论上来说,把东西都准备好了再出发是最好的,有人说“我要学完操作系统,计算机基础,数据库,数据结构,然后开始写代码”,这种人一看就是新手。因为实际情况是,每一门功课的背后都是一个世界,巨大的学习压力足以浇灭你学习初的那一点点好奇或动机。

爆炸式学习

另一种常见思路是,遇到什么问题就解决什么问题,解决完了算结束。但这种思路很可能转化成“面向Google/StackOverflow编程”,你每次遇到问题都要上网找,长远来看,你就是个CRUD boy,毫无个人竞争力可言。

那么什么是好(高效)的学习方法呢?

我现在的答案是:直接上3,基于实际问题反推1和2。

人是一种需要外部刺激的动物,一个中意的姑娘,如果约了三次都约不出来,估计也不会继续。同理,编程如果不能在一定时间内给你带来可见的增量信息,你那点所谓“编程热情”很可能就被恼人的知识细节所浇灭了。好在编程是个“所见即所得”的活,计算机能即刻给你反馈,这正是我们需要加以合理利用的地方。基于一个明确的目的(比如我要写一个XX系统),然后拆分子任务,碰到问题,解决当下问题,同时思考其背后的逻辑是什么(是我的哪个数据结构用得不精?我的并发编程知识不够扎实),在这个基础上,再去对症下药,效果会比一开始就扛高阶书籍好得多。

这也是所谓“书要读三遍”,第一遍看是工具,第二遍看是设计,最后才看到思想。正如我爱奇艺leader曾经说 -- “一般Hibernate的问题我都可以搞定了,因为我知道其设计的思想了,所以一般都能看出来”,这就是看透思想的好处,也是成为真正的编程高手的必由之路([2]有类似观点)。

学习编程的方法

有了上述铺垫,我这里给我我个人的学习编程的方法(也是写给我自己要注意的点):

  1. 以终为始,学习和工作都一样,开始前知道我的最终目的是什么(实现怎样的功能/学到怎样的程度),然后树立可见可执行目标,各个击破;

  2. 正视知识缺陷,哪里不会就补哪里,不要用补容易的B来绕过困难的A,这样做除了麻痹和感动自己,毫无用处;

  3. 有意识地积累3,12因为总会遗忘,3才是你在这行走下去的核心竞争力,不要放过每一个积累3的机会;

最后,BB Less,Code More!

参考

  1. 编程 百度百科

  2. 实例驱动学习