题图:from Zoommy
在生活中或者网路上,我经常被问到的问题就是如何学习编程,如何学习一门编程语言。其实编程这个事儿,就不是什么难题,尤其是入门。这就像入水一样,有的人在十米跳台向前翻腾3周半抱膝再转体360度,还能压出一脚5厘米高的水花,有的人呢,衣服都没换,就从岸边一头栽水里了,下去之后还发现了自己不会游泳。
但只要你想入水,无论如何都能做到。
很多人来问我,并不是我程序写得多好,更可能因为我这里是个入口。在编程方面,我认识很多在各个领域昂霄耸壑的高手和大师,但我一直是个编程资质平庸的人。这倒不是谦虚,无论你多么年少轻狂,以为自己无所不可为,随着齿岁渐增,你会发现自己的所知所见,终究是沧海一粟。学的越多,越不敢轻言所知。
每个人的编程之路最终能够抵达哪一座山峰,和我们的资质、编程经历以及编程之路上的导师息息相关。吴翰清(道哥)、朱赟(安姐)这种神童级别的人物,如果有足够的韧性和远见,一定会比普通人走得更远。云风这样的程序师,自幼学习编程,十数年间从未中断,编程经历丰富不做他想,也会取得极高的成就。而普通人如果能够做到坚持学习和自省,日拱一卒,不期速成,将来能达到什么成就,也未可知。
计算机并不神秘,而程序,最终也只是表达计算机控制逻辑的符号而已。
说说我自己的编程之路吧,非常接地气。小时候我没见过电脑,原因就一个字:穷。做为一个在八线城市长大的孩子,我差不多是在上大学之后才开始真正接触电脑。我的专业是机械加电子,其实和计算机没啥关系,好在专业里有几门编程语言的课,C,Pascal,Foxbase 等,电脑是386/486,黑白的脸,没有奔腾的心。我个人对计算机充满了浓厚的兴趣,各个语言学得还不错,给老师写过一些类似图书馆书籍管理的系统,现在细节完全不记得了。
整体来说,我在大学里学到的计算机知识并不系统,不像现在的很多大学生,在学校里学到的东西已经很扎实了。换句话说,在互联网时代,很多优秀的大学生毕业的时候已经在编程领域达到了很高的水准,因为资讯和资料实在是浩如烟海。我是在工作以后才真正开始接触编程工作,而真正开始编程,是从洪恩时代开始的。
在洪恩的三年半时间,是我职业生涯中最快乐的一段时光,我接受了真正的编程挑战,也遇到了我的良师益友。刚到洪恩的时候,他们正在做洪恩在线和论坛。当时我的组长对我说,你有两条路可以选,一个是去做前端,写 JavaScript 和 HTML,也可以做后端,写服务器相关的程序。我想了想,我还是写后台吧,前端不都是小姑娘做的么?十几年过去了,这个现状没什么改观,前端技术千变万化,我还是看到了很多写前端的小姑娘。
刚开始编写线上的真实程序,我用的语言是 Perl,当然也写 JavaScript,那时候 Perl 一边处理服务器端的逻辑,一边做 CGI,和前端页面混在一起,JS 用来处理页面的逻辑。因为自己底子差,于是从基础开始恶补,那时候也没什么事,天天泡在办公室编程和学习,每天工作时间都超过了十个小时(哦,现在似乎也差不多,看来没什么进步),编程能力和速度得到了飞速的增长。当然工资也涨了,老板都喜欢疯狂工作的员工!
随着业务的发展,我开始逐步接触不同的技术栈,比如汇编、C、Shell、Java、Python 等等,我开始恶补一些计算机基础知识,同时遇到了自己的导师,也是我的 Leader,他叫 baby。baby 毕业于清华大学,又读了中科院的硕士,出来工作的时候技术水平已经非常顶尖了,对操作系统、编程语言、数据存储等领域有深入的了解,公司的很多技术架构和选型都由他独立完成。我们遇到很多看起来难以解决的问题,到了他的手里,都可以顺水推舟,迎刃而解。当然,高手一般都不会那么耐心,但你可以学习他做事的方法,阅读他编写的代码,还可以偶尔问他问题。任何时候,成长都是自己的事,自己多下功夫,尽可能不打扰别人,这是个基本原则,我当年遵守的还可以。