教十年前的自己学编程

编程的门槛,跨了十年。

最近集中的处理Linux、Python、Vim、SQL、Hexo博客搭建、Ubuntu环境搭建等事情,天天泡在里面,感觉自己都快被程序化了。数据科学课上硬着头皮Python到底,所有对程序的担一扫而光。问我爽不爽,答案是百分之一百二的不爽。每一天都觉得自己什么都不会,沮丧感极强。上完了课,还要回来反刍。
今天当屏幕上出现这行代码的时候,我仿佛回到了十年前C语言的实验室里。

1
print "hello,world"

那个时候手机还是诺基亚,人人网才刚刚兴起,大一不让带电脑;那个时候一群程序小白,坐在科技感极强的教室里,碰到了电脑,紧张又兴奋;那个时候面对屏幕上闪烁的光标,手足无措。到现在我都记得,那个时候特别渴望有一个人能像高考前的语文老师一样,手把手的教自己,编程要注意什么,要怎么做。

十年后,那个人来了。正好最近朋友的孩子也到了我十年前的光景,写给你们,希望可以有所帮助。

源头

找到起源

市面上有太多的二手信息,随便一搜Python的教程,能找到很多,打开看一看,大同小异,无非是语法、项目;语法里从变量开始、到控制结构再到数据结构等等。但是Python的源头却只有一个。
当我们接触到全新的编程语言时,首先问问自己,这个语言是谁在什么时候发明的,起源是什么,为什么要发明这个程序,现在程序谁在维护,源码在哪里,官方文档在哪里。按照这样的思路,你才能找到一门编程语言的源头。我们来试一试,用Python举例:用搜索引擎搜索“Python”,无论是哪一个搜索引擎,一定会有这两个内容

总这里出发,能够最快、最准确的了解Python的信息,你也不需要别人的评价和指点了。随着对上面的文档的充分理解,你对Python有了感性的认识。如果你是一个高段位选手,很可能已经掌握了Python这门语言,如果不是,那么就需要持续的学习Python的编程。
我们已经找到了知识的源头,如果你刚刚进入计算机世界可能会直接傻眼,面对海量的英文材料和天书一样的计算机代码。没关系,这个时候可以找到一个资料做初步的入门。计算机世界是高度相关的,在了解Python的过程里,会发现有大量的其他相关知识要学习,比如说:Linux、MySQL、Vim等等。可以先保证最小的学习行为,把重心放在Python上,后面再来攻克这些难题。另外,这些看上去是难题的事情,其实在你入门之后会很简单,而且以后学习别的新东西不再需要重复学习。
无论是什么样的教程资料,能够告诉你的无非是这些内容

  • 程序的语法,语法中主要包括变量的定义、程序控制结构(for、if、While)、逻辑运算符、类和对象(如果是面向对象的语言会有)、函数、特殊的结构(有一些有指针的语法)等。
  • 注意事项:一些书里可能会有一些容易出错的注意事项,编程的意见和建议等等。
  • 案例:实际的语法代码案例。
  • 作业:给你布置的初级的编码任务。
    如果你看的是一本实战类的书籍,还会有一些项目等等,这一部分在后面讨论。
    恭喜你,走到这里,你已经能够初步的写一些简单的代码了。

在苦海中遨游,一次就够了

“hello,world”并不是全部,编程是否能够突破门槛,关键还是在会写一些简单的代码之后。我们现在已经有的工具:官方文档和基本语法。其实还有其他的一些高质量的资料会起到很重要的作用:

  • 帮助注释:一般的编译环境都会包含帮助的内容,内容和官方文档高度一致。
  • Google搜素:Google搜索能够帮助我们精准的解决点对点的问题。

到目前为止,我们已经有了所有的食材,面对这么多的优质信息材料,如何消化才是关键。这里会遇到的几大拦路虎:

  • 语言:这是第一大拦路虎,对于很多刚进入计算机门槛的人来说,大家可能还没有意识到,这是一个英文主导的世界。优质的信息翻译成中文到中文世界流行需要五年甚至更久。而各种程序在英文环境下是最稳定的。所以必须要过语言关:
    • 英文的Linux环境
    • 英文的文档阅读
  • 范式:无论是Linux的命令帮助文档还是Python的命令帮助文档,解释方法本质上是一致的。给出命令、参数、用法、示例。掌握了范式,看得懂帮助,能够实践起来,胜利在望。

面对这些拦路虎,除了死磕之外,就是死磕。但是死磕也有自己的方法:

  • 多理解原理:无论是现在的源头学习还是后续的实践,一定会遇到很多问题。有的人解决了问题,不明就里,得过且过。这样浑浑噩噩,可能很多年后也只能是一个初级码农。任何的学科知识都可以当成一张大网。我们找到了源头,把网提了起来。那么网络中间的连接呢?提问的方式是最好的建立连接的方法。编程世界里语法是最基础的。但是语法背后的内隐知识,只有自己不断的刨根问底,才能习得。
  • 制作学习卡片:计算机知识太过庞杂,怎么办?卡片是一个好办法,每一次学习结束,6-12小时后,尝试编制自己的学习卡片。卡片不借助任何外在材料,靠自己的大脑,把核心的内容梳理出来。一开始有困难时正常的,长此以往,会让你出乎意料。
  • 尝试教别人:认知心理学已经有了研究,证明在同等条件下,即使是在大脑里想象自己教自己学习,都会提高学习效率。我们可以尝试教会之前的自己你学到的,如果能找到伙伴一起学习,会有更深刻的体会。

实践

计算机是一门实用的学科。有了工具,有了方法,必须要实践。另外,实践和前面的源头学习是相辅相成的,并不是线性的前后关系。学了就要实践,实践了得继续学习,无限循环。

要有结果

任何一次实践,也可以模拟自己在教自己。告诉自己现在在做什么,准备如何来做,要有什么样的成果。每一次的实践都要去总结。我们的结果可以是一段代码,也可以是一篇文章,或者一个卡片,和同学的一次沟通。既然做了,就要做完。

要有输出

结果并不完全代表输出。每一次的学习要有结果,而一段时间之后,需要一个输出,这个输出一定要可以展示给别人看。可以是自己的一个项目,可以是学习后的演讲。这个输出要让自己足够自豪,能够证明是自己经过了一段时间的努力后的成果。不要担心自己的输出不够复杂,罗马不是一天建成的。因为我们还要相信时间的力量。

相信时间

前两天刚开始接触大量的代码时,及其郁闷,很多看不懂。可是现在,豁然开朗。两三个月前接触数据科学课时,毫无头绪,及其沮丧。现在,已经可以帮助自己解决工作的问题了。相信自己,相信时间,沧海桑田。

工具

优秀的工具都有着自己的设计逻辑,也大多是简洁、美观的,这是一种享受。
不要害怕自己是小白,直接上最专业的工具,和大牛用同样的平台。现在这个阶段,github是再好不过的平台了,和全世界的程序员在一起,你会感受到无穷的力量。

如果能做到这些,相信你可以通过一门编程语言走进计算机的世界,也相信你可以走得更远。话不多说,开始动手吧。


注意:这篇文章的方法适用于入门阶段,随着水平的提升,方法会不断变化。

声明: 本文转载需标明出处,禁止用于商业目的。

ChangeLog

161116 新建
161116 发布

PS:我的编程问题清单
这些是目前比较突出的问题,记录下来,及时反省,及时纠正。

  • 看英文文档障碍,特别是官方文档对函数的说明
  • 通过文档直接习得用法应用较为困难