现在,计算机已经融入到了我们生活的方方面面,手机、电脑、智能家居等。在计算机变得如此普遍的今天,是不是每个人都应该学习一点编程呢?

2013年,非营利性组织 Code.org 发起了“Hour of Code”的倡议,得到了很多著名人物和企业的支持(Is Computer Programming Hard to Learn ?),其中包括扎克伯格、比尔盖茨、苹果、谷歌,就连美国总统奥巴马都发布视频呼吁每个美国公民都学习编程。

所以,这么多名人,牛人都呼吁大家学习编程,那么普通人学习编程到底有什么用?

普通人学编程有什么用?

主要有如下理由:

教会我们思考
提高效率,使生活、工作变得简单
生活基本技能

编程教会如何思考

乔布斯在一次采访中说过:

Everyone should know how to program a computer, because it teaches you how to think.

因为程序就是对现实事物的抽象,而且,按照写好的逻辑运行。所以,编程能够锻炼我们的抽象思维能力和逻辑思维能力。

编程能提升效率

李笑来老师在《把时间当做朋友》中提到过:

学习班之后的岁月里,摆弄计算机给我带来了无数心灵愉悦,这些暂且不论,只说一件事——在编写《TOEFL核心词汇21天突破》的过程中,倘若我没有稍多于常人的那点计算机知识,能自己编写一些批处理脚本,就不可能在那么短的时间里完成那样海量的工作。而且,如果没有这些技能,就算再花几倍的时间,也很难拿出具有与《TOEFL核心词汇21天突破》同样的质量的作品。而最终,质量保证了销量。

通过编程,我们能够很容易的处理大量重复性、低效率的工作,从而节省时间。而工作中很多地方都用到了编程来提高生产力,比如 Excel 中的宏,很多 Adobe 的产品(如 Photoshop, Illustrator, After Effects)都能使用 JavaScrpt 来自动化工作。如果你学习编程,就能使你的工作做的又快又好。

编程是基本技能

正如 Quora 问题 Should most young people learn to code? 中回答的那样:

你会做饭,但你不是厨师
你会开车,但你不是司机
你会清理屋子,但你不是保洁阿姨
你会疏通马桶,但你不是水管工人

所以说,不一定你非要是程序员,你才会编程。在计算机使用越来越广泛的今天,编程已经成为了一项基本技能。

如果你不会编程,你就只能使用别人提供的功能。就好像你不会做饭,就只能下馆子一样,但是这样就不能很好的满足你对于健康、热量、营养的要求。

所以,学习编程更多的是满足我们私人订制化的需求。比如,今天我遇到一个使用 Excel 处理大量数据的需求。但是,我不会编程,可能就只能买别人开发好的脚本,或者自己花大量时间做大量重复性的工作。但是,如果你会编程,你就可以自己写一个脚本,最后可能快速、优雅的解决了问题。

而且,可以预见的是:在将来,计算机肯定会运用的越来越广泛,对我们生活的侵入越来越深。而会编程的人只是一小部分,那么我们的生活就完全掌握在了那一小部分会编程的人手中了。所以,学习编程,能够让我感到自由。

普通人如何学习编程

现在,如果你觉得有必要学习一下编程,那么,我们就来讨论下——普通人如何学习编程?

为了解决具体问题而编程

最重要的一点:为了解决具体问题而编程。很多人会在学了几个月编程后,感觉并没有学到什么,这就是因为你并没有从中找到成就感。当你通过学习编程解决了自己具体的问题后就会感到巨大的成就感,比如我为了解决每天部署繁琐的过程,学习了 shell 脚本,只需要一个脚本就能部署了,这就给了我很大的正向反馈。而且当你为了某个具体问题而学习编程的时候,你就会知道,那些知识对我解决问题有用,那些可以暂时不学。编程需要学习的东西很多,所以必须做出取舍。

当并无具体的需求时,如果有兴趣,那也行。如果没有兴趣,只是觉得应该学习编程而编程的话。我建议你在学习了基本的知识以后(比如了解了这门语言能实现什么功能),给自己找一个目标(比如搭建一个个人网站,抓取某个页面的图片),然后实现它。有了目标再学习,效果会好很多。

使用Google和英文

为什么这两个东西如此重要呢?

第一、技术很多都起源于美国和欧洲,所以几乎所有技术的官方网站都是英文的。而学技术要学会使用官方文档,当然也是英文的。当然你也可以看翻译过来的资料,但是毕竟是翻译过一次的,所以很依赖于译者翻译水平的高低,而且这是已经被人理解过的二手的资料了。

第二、学会使用 Google 为什么也成为了必要。在你学习,开发的过程中会遇到很多的问题,这个时候会经常用到搜索工具。在编程领域,英文资源比中文资源多了不是一星半点。比如 stackoverflow(一个编程的问答网站)几乎包括了你学习编程时会遇到的各种问题的答案,以为这些问题很早以前就有人遇到过了。所以,遇到编程问题时,记得使用英文在 Google 上搜索答案。

第三、学会如何提问,必看的文章是:《提问的智慧》。建议把这篇长文看完再提问。

找到合适的学习资源

编程可能是最适合自学的科目了,因为有大量的资源(书籍、视频、教程)可以选择。那么如何在海量的资源中选择适合自己的呢?

首先,我认为资源分为两类——书籍和视频。如果你喜欢看书,那就找一本好书,如果喜欢视频,那就找好视频。那么如何区分好书和好视频呢——提问,你可以使用搜索引擎,询问身边的朋友。而且,一定要找与自己当前阶段契合的书籍和视频教程,并不是所有的书籍都适合初学者,所以一定要注意选择。最后,一定要看该语言最权威的书籍,肯定不会让你失望。

再者,要学会看官方文档,学会查官方手册。教程和手册的区别在于:

教程:教你如何使用这门语言,可能很多东西不会提及
手册:提供完整、全面的有关这门语言的信息(很多时候就是 API 手册)

学习的时候我们看教程,但是有了一定基础只有,要学会看官方的手册。因为手册包含了这门技术的方方面面,有一个完整的知识体系。它包含对这门语言原理的介绍,官方推荐的用法,API文档等,所以一定要学会看官方文档。

多练习,多讨论

古典老师提到学习的721法则,我觉得就很适合编程的学习:

10%的时间自己学习
20%的时间与人沟通讨论
70%的时间去练习实践

编程是很需要练习的科目,看再多的书还不如在电脑上运行一次来的实在。学习编程要做到每天写代码,代码运行起来之后,可以极大的加深你对知识的理解。

还有就是要多讨论,多看别人的代码。讨论能够让人的思想碰撞,产生意想不到的火花。比如你思考一个问题的解决方案很久了,但是还是没有头绪,但是可能别人的一句话可能就会点醒你,这在编程上很常见。而且,通过看别人的代码我们可以学习更好的实现方法,更优的解决问题的逻辑,特别是牛人的代码。

编程语言的选择

虽然最终都是在计算机上运行的指令,但是还是有很多语言我们可以选择,不同的语言可以实现不同的功能,那么普通人如何选择语言呢?

选择什么语言还是需要看你具体的需求是什么。如果你平时使用 office 比较多,那么可以学习 VBA。如果你需要自动化很多重复的工作,那么你可以学习 Python。如果你想要建造自己的个人网站,那么你需要学习 Javascript、Html 和 Css。如果你没有具体的需求,那么我建议你学习 Python,因为它很容易让你感到提高了生产力。