作为业余爱好者如何学习编程

发表于:2013-12-20来源:酷勤网作者:不详点击数: 标签:编程
作为业余爱好者如何学习编程。因为 Aaron Swartz 的自杀,这两天看了不少关于他的报道以及他自己的博客,对我触动最大的是尽管他一直在做技术相关的事情,但眼光和理想却远远超越了技术。他把技术当作推动自由和社会变革的工具,所以 Twitter 签名也是 "Applied sociolo

  因为 Aaron Swartz 的自杀,这两天看了不少关于他的报道以及他自己的博客,对我触动最大的是尽管他一直在做技术相关的事情,但眼光和理想却远远超越了技术。他把技术当作推动自由和社会变革的工具,所以 Twitter 签名也是 "Applied sociologist", 而不是经常可以在程序员那里看到的 "Geek" 和 "Hacker" 等。我非常钦佩他的社会理想和为之做出的努力,然后开始思考自己可以做些什么,于是就有了这篇文章。

  现在有关编程的书籍非常多,网上也有很多教程,但大多都是针对职业程序员或者计算机专业的学生,对那些只想实现一些自己想要的东西的业余爱好者帮助不大。业余爱好者并不想以编程为职业,也不想花太多时间去学习基础,他们只是想尽快做出自己想要的东西。这样的东西在专业程序员看来可能很烂,但我觉得非常有意义。会编程的人越多,信息流动的渠道就越多,做出好玩的东西的机率也越大。

  我的技术水平一直不怎么样,而且越来越业余,不过正因为如此,我非常能体会初学者的痛苦,或许写这样的东西正合适。本文的目的是帮助业余爱好者扫清一些思想上的障碍,分享一些我的经验,并不会涉及太多技术细节,毕竟每个人想做的东西和想学的编程语言都不同,不过后面会给出一些学习资料

  重要声明:本文只针对那些不想以编程为职业,只想学习编程以便自己做东西的业余爱好者。想要成为一个优秀程序员的同学请看这篇经典的《十年学会程序设计》。

  思想准备:

  1. 编程不难,至少做出一个能用的东西不难。别把它当回事儿。很多人之所以觉得编程很难是被专业术语和趾高气扬的程序员吓到了。别担心,业余爱好者不需要对自己要求那么高。

  2. 编程不需要数学基础。没错,就算你数学很烂也能做出东西。大部分算法都已经有成熟的解决方案,可以直接拿来用,完全不用担心。我们的目的是做东西,不是研究算法和数学。

  3. 编程不会改变你的生活方式。你完全可以学习编程而不接受和它有关的文化。不一定要崇拜某位大神、阅读技术新闻或者参与社区,也不一定要不修边幅、熬夜工作。如果愿意的话,精装打扮穿上最漂亮的衣服去编程也可以。反正不想成为职业程序员,不用担心因为「不像程序员」而被鄙视。

  4. 有很多友善的程序员。程序员给很多人的印象要么是邋遢、木讷、害羞的书呆子,要么是性格怪异、智商极高的大神,其实大部分程序员并不是那样,只不过媒体和大众更偏爱怪异的东西。以 Linus 为例,在他的自传 《Just for Fun》 中提到:

  「Linux 不是靠牺牲宝贵的睡眠时间换来的。事实上,如果你想听真话,那我就要说,我更喜欢睡觉。」

  「在那个时候,只要一想到姑娘,Linux 系统就变得不再重要了。在某种程度上,今天也还是这样。」

  瞧,这位大神其实大部分时间和普通男性差不多,更喜欢「睡觉」和「姑娘」。所以,如果真的遇到了无法解决的问题,完全可以大胆地去请教专业程序员们,一般都可以得到答复。

  5. 习惯无知。无论学习什么东西,往往越深入就越觉得自己无知。这样的无知本身并不是坏事,它可以让你保持谦虚,但千万不要被它吓得不敢继续前进。及早适应无知的感觉,你并不需要全知全能才能做出东西,如果觉得困难,可以试着假装自己擅长编程 。

  如何开始:

  首先,完整阅读这篇文章:《你第一要做的是开始去做》(这篇文中翻译自 The first step is to start )。

  如文中说的那样,不要以「基础不够」、「知识不全」等借口停下来,一开始甚至可以先在纸上勾勒出想要的东西。当然,完全不懂编程肯定无法开始真正的创造,但学习的时候不要抱着「先专心学习,学好本领再回来做」的念头。正确的做法是:只学那些最基础的东西,然后立刻着手去做,遇到不会的地方再去学。

  没有技术背景的人学习编程很容易被错综复杂的技术体系吓到,网上的教程中也经常会出现「一定要读这本书,非常经典」、「最好先有 XX 基础再看这篇教程」之类的警告,结果有时候会出现这样的情况:本来你只打算学习编写网页 ,结果几天后莫名其妙地开始苦读《精通正则表达式》。为了能够专注于自己想做的东西,要十分警惕「学习」这件事情。尽量学习最少的东西,然后把时间都花在创造上。当想要学习的时候,慎重考虑它是否会让你偏离目标,或者绕太远的路。这样做肯定会导致基础不够好,但我们是业余爱好者嘛,能尽快做出东西就行了。如果你真的非常在意基础,说明你可能更想成为职业程序员,请返回参考前面的重要声明。

  没有人天生就会编程,在做东西的过程中会不断学到新的知识,然后就会发现自己之前的代码很愚蠢。这个时候你可能会很想推倒重来,或者从头改进之前的代码。要抑制住这种冲动,不然就会掉入代码优化的无底洞。事实上,几乎所有的专业程序员都会对半年前自己的代码感到不满,而且一开始代码质量不好完全没有问题。举个例子,假如要在网页上显示 10 次 "I love you.",你并不知道如何使用循环,于是就复制粘贴了 10 次 "I love you"。这样的做法或许很笨,但是你做出了想要的效果,对于业余爱好者来说,完成一个东西要比代码质量重要得多,不要为了这种笨方法而感到羞愧。

  如何解决问题:

  在创造的过程中肯定会遇到很多问题,对于初学者来说,大部分的问题都是语法或者拼写问题,只要仔细检查代码就可以解决,少数摸不着头脑的问题也可以用 Google 找到答案。很多非 IT 行业的人平时都只是搜索中文,可能并不觉得 Google 比百度要好,但当你开始学习编程,就会立刻发现 Google 比百度好用得多,一般都可以在搜索结果第一页找到想要的东西。使用 Google 搜索的时候,请尝试用英文描述问题,或者直接把出错信息直接粘贴到搜索框。

  如果实在搜索不到解决办法(这种情况对业余爱好者来说极为少见,请善用 Google),可以去 Stack Overflow 提问。提问的时候请注意描述好自己的问题,把错误信息以及相关的代码都写进去。 Stack Overflow 的氛围相当好,应该很快就会有人回答你的问题。比较不方便的地方是你必须使用英文提问,没办法,因为类似的中文社区并不存在。如果执意要去中文社区提问,那么我真诚地建议你使用女生头像和昵称,可以有效提高回复率,呵呵。

原文转自:http://www.kuqin.com/pragmatic/20130627/334617.html