我们今天的主题要从奥巴马的一段演讲开始说起。
这段视频是奥巴马去年应邀为美国在线编程教育网站code.org举办的“编程一小时”活动做的宣传片。为了呼吁美帝人民学习编程知识,奥巴马甚至还亲自挽起袖子写了一段javascript代码,这也让他成为美国历史上第一位会写代码的总统。(虽然写得不怎么样)
文/魏剑峰
在code.org 随后推出的一段《编程,学校不会交给你的课程》的广告中,包括 Bill Gates,Mark Zuckberg等各界名人也纷纷献身说法,号召编程要从娃娃抓起。
搞编程的并不只有美帝一家,大洋彼岸的英国甚至将2014年设立为”Year of Code”,规定所有5-16岁的学生都必须学习编程。
那么现在问题来了,为什么会有那么多社会精英公开呼吁全民编程?编程这一技能在未来究竟意味着什么?
一个显而易见的事实是,计算机和互联网早已渗透我们生活的方方面面,并且在可预见的未来里将会与现实有着更为紧密的结合。从社交聊天,吃喝玩乐,学习提升到你在手机上打开这篇文章开始阅读,它们无所不在,而这一切都离不开计算机和编程技术的发展。计算机技术对一个国家未来的发展显然有着至关重要的作用。
但你可能会有疑惑:我只是个文科生/我不是IT行业的,编程跟我有什么关系呢?
说一说我自己的理解。大家一定都用过谷歌翻译吧?你还记得5年前,10年前的谷歌翻译是什么样子吗?有没有感觉谷歌翻译的质量正变得越来越好?(虽然跟人工翻译还有很大的差距),而这一切又是怎么发生的?
谷歌翻译质量提升的重要关键并不是语言学和语料库研究的突破,而是因为一项技术:大数据。
在大数据技术出现之前,传统的机器翻译大概遵循以下的规则:先设定好一套尽可能完善的语法规则以及两种语言的对应词库,然后根据这套规则对输入的语言进行翻译。为了完善语法规则和词库,机器翻译研究机构曾经雇佣了很多语言学和翻译专家,但研究了很久最终结果并却不理想。比如,由于机器翻译死抠语法规则,翻译”It serves him right.”这句话可能会得到“它服务他正确”这样荒诞的结果。
直到大数据技术出现,机器翻译才有了新的突破。简单来说,使用大数据进行翻译时并不是按照语法规则来翻译的,而是按照数据之间的相关性和机器学习算法。比如翻译”It serves him right.”这句话时谷歌并不是逐词翻译,而是将整个句子放到互联网数据库中搜索,然后统计出整个互联网上所有与这句话翻译相关的结果(比如各种中文英对照文章中可能会出现这个句子及对照翻译),而统计次数最高的译文就可以作为最终的答案参考。通过这样处理后,谷歌能够保证翻译出来的结果在互联网上最为流行,被用户接受程度最高,翻译的质量也有了很大的提升。
这就是计算机技术在翻译领域的一个成功应用。
举这个例子是为了说明,即使是纯文科的翻译领域也会不可避免地与计算机技术产生交集,其他学科更不必说。其实在欧美大学文科生学编程并不是什么新鲜事,不少文科生已经开始用Python(一种脚本语言)进行文本挖掘以及数据处理了。国内目前也有大学开设了计算机和语言学交叉课程,比如有个课程叫“计算语言学”,基本上就是采用编程和数学的方式来研究英语,有兴趣的同学可以了解下。
因此不管是从功利还是从兴趣爱好的角度来讲,编程在现在及未来都将是一门非常重要的技能。
懂编程能够带给你很多实际收益。就拿英语学习来说,如果你懂编程的话可以写爬虫去各大词典网站抓取自己感兴趣的单词,制作生词本,可以统计高频词,还可以量身抓取外媒上第一手的听力和阅读材料。有意思的应用还有很多,就看你的想象力和创造力了。
当我们在学编程时我们在学些什么?
每个人都应该懂点编程,但这并不意味着每个人都要去当码农(这也并不现实)。你可以不会编程,但至少要懂最基础的编程原理。就如乔布斯在1995年的访谈中提到的那样“学习编程教你一种新的思考方式”。
学编程最大的好处其实是可以对人的思维方式进行训练。它是一个对思维完整性和逻辑性进行训练的过程,而在这个过程中我们可以培养一种新的看待问题和处理问题的方式。
举个例子,俄罗斯方块这款小游戏你一定玩过吧?假如现在让你写一个俄罗斯方块游戏,你会怎么入手?
从编程思维的角度来看,我们需要将问题分解,将一个大问题拆解为一个个小问题,然后逐个完成。比如对于上面的游戏,我们大致可以将其分解为三个小问题:
1.游戏界面(速度和积分显示怎么处理?主游戏界面怎样显示?)
2.俄罗斯方块(一共有多少种方块?每种方块用数学坐标应该怎样表示?)
3.游戏逻辑(方块的下落,左右移动,上下翻转,掉落消除应该怎么处理?对应的数学坐标应该怎样计算)
编写这个游戏的过程充分应用了分类讨论,函数思维,问题抽象等多种思维方法。写完这个游戏之后你会发现原来一个看起来很简单的游戏竟然隐藏着如此多的细节,背后有那么多的复杂的逻辑需要处理。每一个软件和游戏都是思维的艺术品。
在这个过程中你也会不断发现自己思维存在的缺陷和问题,并着手去进行完善。将这种编程逻辑应用到日常生活中,应用到读书写作中,你会有新的收获。
比如现在要写一篇议论文,但感到无从下手,我们就可以按照编程的方式将问题分解——是想不到论点,还是没有支持的论据?论点不足应该怎么办,论据不足又该怎么办。你手头有哪些工具可以利用?你期待写成什么样子?明确问题之后再将它们逐个击破,问题也就得到了解决。
编程是不是很难学?
编程的确有一定的门槛,但并没有想象中的那么难学——你只需要具有一定的数学基础和逻辑思维能力,还有投入时间去练习。要知道,欧美八九岁的小学生都能自己开发游戏了,他们能做到的,你同样也可以。
而且比起十几年前的程序员,现在学习编程实在要幸福很多——互联网上有大量的课程和资源可供学习,有Google,有Github,有Stackoverflow,只要你肯花时间去学,并没有什么能难倒你的事情。
初学者可以选择从Python或者PHP(世界上最好的编程语言)开始,它们都足够简单,就算你毫无基础也可以在两三个月内利用它们做出一些有意思的小东西出来。
学编程就像学习其他任何技能一样,都需要投入大量时间去练习,不断去犯错改正学习,最终日臻完美。最关键的,是要对自己有信心,就像奥巴马所说的 “Don’t let anyone tell you ‘you can’t.'”
为什么要学英语?
前几天朋友圈里有两张图很火,说的是马云和马化腾跟随习大大出访期间,在中美互联网论坛上的两个镜头:
图片的主题就叫《论学好英语的重要性》——相比于英语老师出身的马云,腾讯的小马哥英语口语显然要稍逊一筹,错过了跟美国的贝索斯和库克谈笑风生的好机会。
马云的英语的确不错,他大学读的是外语系,毕业后又当了多年的英语老师,而且还经常给在杭州的外国游客当翻译——正是这段经历为其日后的成功埋下了伏笔。马云在翻译过程中认识了一对来自西雅图的夫妇,并在他们家做客时第一次接触到了互联网,于是有了后面阿里巴巴的故事。
为什么要学英语?这个问题的答案其实跟为什么要学编程差不多,因为它们都能带给你一个不一样的视角,让你获得更多的信息,而信息可能就意味着机遇。
马云的例子也许太遥远,举个近一点的,13和14年曾经有个很火的名词叫“比特币”,而这一概念最早也是从国外发源的,当然是以英文信息呈现的。国内最早关注并投资比特币的人后来都收益颇丰,这就是信息的力量。
当今世界上最先进的知识和文化绝大多数都是以英文为载体的,如果不学英文,这些你统统都接触不到,即使接触到了,可能也是过时的或者被加工过的信息。
身处于互联网时代,你可能对此有更深的体会:最新的技术书籍和文档是英文的,苹果发布会是英文的,最新的英美剧是英文的,维基百科是英文的,facebook,Quora和twitter 也都是英文的…如果不会英语,天知道你会错过多少好东西。
这就是为什么那么多人都在努力学英语的原因,希望能让自己与更大的世界对话连接。这些人中,有怀揣梦想的普通人,也有身处顶层的行业精英,比如联想的CEO杨元庆。
当联想在2005年收购IBM的个人电脑部门时,媒体曾担忧不说英语的杨元庆怎样去管理美国人团队。为了学好英语,他做出了一个对企业CEO而言时间成本非常高的决定:举家搬到北卡罗来纳州,聘请英文家教,严格要求自己每天学英文一小时,并不厌其烦地收看CNN电视节目。从不熟悉英语到能用英文自信流利地演讲,他用几年的时间给出了答案:(看完之后你会发现,比你成功、比你有钱、比你聪明的人,往往都比你还努力在学英语,你有什么理由找借口?)
这也是一个非常有说服力的例子,学英语其实就是一个坚持和积累的过程。语言学习的过程很公平,它并不需要太多的天赋,你付出了多少往往就能得到收获多少。在演讲台上用英文谈笑风生的背后是多少日夜的坚持与积累,真正努力过的人相信都会有很深的体会。在这个过程中,你收获的并不仅仅是一门语言技能,还有一个强大的内心,一个更好的自己。
为什么要学英语?或许答案就如蔡康永说的“15岁觉得游泳难,放弃游泳,到18岁遇到一个你喜欢的人约你去游泳,你只好说“我不会耶”。18岁觉得英文难,放弃英文,28岁出现一个很棒但要会英文的工作,你只好说“我不会耶”。人生前期越嫌麻烦,越懒得学,后来就越可能错过让你动心的人和事,错过新风景。”
·氧分子网(http://www.yangfenzi.com)延伸阅读:
写下这个题目,估计很多人都会产生一种悲凉的感觉,这让我想起了二爷在2013年为我的书《MacTalk·人生元编程》做序的片段:
很多程序员都在「转型」和「突破」,做产品,做运营,做职业吹货,他们想办法甩开「做技术的」或「写代码的」标签。我不止一次听到「程序员是吃青春饭,你还是得赶紧转型」这样的所谓前辈忠告。
如此背景之下,「一个写了十几年代码的老程序员」头衔的背后,似乎一定有一曲二胡拉就的挽歌,你忍不住掏出纸巾想递给对面已经年逾不惑的他(那时我还不到40呢,MD),伸手叫服务员「再上一箱啤酒,冰的」,你悲怆,你泣涕涟涟,你起好了范儿,准备听他开讲。
结果他一开口,竟然是……活泼幽默轻松直率荤素搭配清爽可口。
四十多岁了还在一线编写代码,在很多人看来是不成功的,「可是船长,这明明是一场悲剧,你笑什么呢?」
谁特么说这是一场悲剧了?以前总有人说程序员是吃青春饭的,你们也就写到30岁。后来程序员们很快30岁了,又说看你们35岁能干啥。现在40岁的程序员也屡见不鲜,很多人的言论变成了「哎,都四十多了,还在写代码」。但我目力所及,优秀的大龄程序员在国内外比比皆是。当然,到了这个阶段他们的工作不仅仅是编写代码,除此之外,他们还在创业、管理公司、研发产品、分享和写作。这里面的杰出代表有很多,比如七牛的许式伟,做 IP 库的高春辉,写游戏的云风,南京西祠胡同的响马……今天我想和大家聊的是左耳朵耗子,陈皓。
陈皓,网名左耳朵耗子,98年毕业,20 年软件开发及相关工作经验,先后在阿里巴巴、亚马逊、汤森路透等知名公司任职,对 IT 底层技术平台有深入的了解,尤其在大规模分布式系统的基础架构方面有透彻的研究。
时间是如此残酷,我已经记不清什么时候第一次和耗子见面了,早些年交流大概都是在微博上。2012 年耗子在亚马逊,我在用友。有一天他说要去阿里了。我说你怎么也跑阿里去了?耗子说:
老池,你也老大不小了
嗯(你不也老大不小了么)
这是个不可辜负的时代,我在亚马逊做了很多年,希望去见识一下国内顶级的互联网公司
为什么想动呢?
中了《Rework》的中毒。一要不断地搔自己的痒处。二要做的和不做的都要一样的自豪
你去吧
随后耗子去了阿里,两年后离职创业,成立了 MegaEase公司,为企业提供技术和产品服务,时至今日,他老人家依然奋战在编程的第一线,他们公司的核心产品就是耗子基于 Go 写出来的,用来解决很多公司大并发和扩展的业务问题。
我后来离开了用友,加盟锤子科技,两年后离职,加入极客邦科技开启创业生涯,近期推出了 IT 知识内容产品「极客时间」。几年过去了,我和耗子都真的年逾不惑,但理想还在,在这个大时代里,我们都在做自己想做的事情。
耗子是个骨灰级的程序员,对计算机底层技术和架构如数家珍。他提倡的观点就是「要吃透基础技术。基础技术是各种上层技术共同的基础。吃透基础技术是为了更好地理解程序的运行原理,并基于这些基础技术进化出更优化的产品。很多分布式系统架构,以及高可用、高性能、高并发的解决方案基本都可以在基础技术上找到它们的身影。所以,对基础技术的学习能让你更好地掌握更高维度的技术」。
很多读者问,底层技术博大精深,从语言、编程范式、算法和数据结构、计算机原理、网络、数据库、分布式技术等等,怎么可能有时间去掌握这么多东西呢。耗子捋了捋头上的白发说,可以啊,你看我,我用了二十年的时间持续学习这些东西,我现在还在学,你才二十多岁,你也有这样的二十年,那你什么东西学不会呢?
同时,耗子在自己的独立博客酷壳上持续分享技术观点和实践总结,通过一篇篇观点鲜明、文风犀利的文章吸引了大量 IT 从业人员的关注,影响了成千上万程序员在技术选型、求职就业和个人成长等方面的思考和发展。
耗子一直是我非常尊敬的程序员。
最近一次和耗子合作缘起于「极客时间」。在做这款产品的时候我首先想到了左耳朵耗子和他的文章,能不能和他一起打磨更高质量、更高频度和更系统化的知识产品呢?开始耗子内心当然是拒绝的,很少有作者能够承受全年专栏固定频率的输出,但是最终我们把这件事做成了。
一线技术专家和大量的知识输出始终存在着矛盾,怎么解决呢?我们配备了专业的技术编辑团队,花费了大量的时间和精力,与耗子一起去把他在一线炮火中锤炼出来的东西一点点的挖掘出来,包括他自己对技术的探究,给企业做咨询的实战经验,最终形成了全年的提纲。
在艰苦的打磨了两个月之后,「极客时间」上就有了「左耳听风」。左耳即耗子,听风意为他对互联网大潮最新科技讯息的感知。我们希望他把自己所有的实践和见识汇集在一点,通过这个专栏和盘托出。
耗子对技术是非常敏感的,最新的一篇专栏文章「Go语言,Docker和新技术」中, 他详细介绍了自己为什么会选择用 Go 语言研发自己的新产品,要知道他可是写了许多年 C++ 和 Java 的。他在文中写到:
一个技术能不能发展起来,关键还要看三点:有没有一个比较好的社区。有没有一个工业化的标准。有没有一个或多个杀手级应用。上述的这三点是非常关键的,新的技术只需要占到其中一到两点就已经很不错了,何况有的技术,比如 Java,是三点全占到了,所以,Java 的发展是如此好。
……
用这些标尺来量一下 Go 语言,我们可以清楚地看到:
1、Go 语言容易上手;
2、Go 语言解决了并发编程和写底层应用开发效率的痛点;
3、Go 语言有 Google 这个世界一流的技术公司在后面;
4、Go 语言的杀手级应用是 Docker,而 Docker 的生态圈在这几年完全爆棚了。
所以耗子很早就进入了这样的新技术领域,而现在是收获的季节。
文章网址:[https://time.geekbang.org/column/article/294]
写到这里估计会有读者吐槽了,人家好好的在酷壳写作,被你们拉来变成付费阅读了。这里其实有个杠杆效应。耗子以前的写作频率大概是一月一篇,写作素材比较随性,想起有意思的点就会成文一篇。而「左耳听风」的更新频率是一个月八篇,全年无休。文章是系统性的、实用性的,也是最新鲜的输入。读这样一个骨灰级程序员的一年专栏,就像在阅读一本有生命力的图书,你还可以与作者沟通和互动,这个价值,难道比不了周末的一顿聚餐么?
也许一篇文章可以解决困扰你的一个问题,也许一句话,就能改变你人生的轨迹。要知道,改变我人生轨迹的一本书叫做《HTML4 动态编程》。那一年是1999。