人人都该学写代码的反思:也许我们更该学习的是「电脑思维」

jopen 10年前

人人都该学写代码的反思:也许我们更该学习的是「电脑思维」

Photo Credit: 电影「实习大叔」剧照

        近年来,程序设计在全球掀起一股热潮,写代码不再是男性专属,而是不分男女老幼的全民运动了。

        Yipit 创办人曾说:「coding 不是程序员的专利,每个人都要学习写代码」,例如在全球各地举办的 Rails Girls 工作坊,就帮助许多女性进入 Ruby 以及 Rails 的程序世界。

        除了摆脱过去写代码是男性专属的既定印象,写代码的年龄层也有年轻化的趋势,像是 Rails Girls 创办人推出教小朋友写代码的绘本、英国小学生使用 iPad 学习写代码等新闻屡见不鲜。

        此外美国非营利机构 Code.org 曾找来多位科技名人如 Bill Gates、Mark Zuckerberg 以及体育界和政界明星拍摄短片,倡导每个人都该学习写代码,呼吁社会该更加重视软件教育以解决工程师稀缺的问题。(来自爱尔兰 CoderDojo 则是鼓励年轻人与小朋友写代码的非营利组织,他们分布在全球的多个城市)

        然而,面对这股全民写代码的浪潮,曾任 TripAdvisor 软件工程师、现任 LinkedIn 资深软件工程师的 Yevgeniy Brikman 发表「Don't learn to code. Learn to think.」一文,他认为大家在学习写代码的同时,更重要的是学习电脑科学的思维模式。

        大家对程序设计多少有点理解是好事,但写代码不该成为最终的学习目标。写代码是一种工具,是达成目标的方法。那么真正的目标是什么呢?Yevgeniy Brikman 认为,让大家学会全新的思考模式才是真正的目标,我们该试着学习电脑科学而不只是写代码。

        接下来,将会解释两者的差异,并解释为何学习电脑科学更为重要。

        欢迎来到真实世界

人人都该学写代码的反思:也许我们更该学习的是「电脑思维」

        首先,或许很多人会想问:无论是程序设计或电脑科学,到底跟我有什么关系呢?为什么我该关心?

        事实上,在阅读本文时,你可能正使用 Chrome 或 Firefox 浏览器,用的是 Windows 或 OS X 系统。并且你今天大概花了一些时间收发 email、浏览微博动态或在优酷上看了几个热门视频。现代人的生活与电脑紧密连结:医疗记录、税务记录、个人履历等等,各种想得到的服务几乎都能在电脑 上操作。

        而你使用的智能手机,使用了 GPS 定位,配备相机、触控屏还有许多其他的 APP 应用。此外你每天接触的电视节目、电影、音乐、游戏等等都与电脑绘图和数位音效处理紧密相关。

        出门在外你可能会使用 Google Map 寻找路线,现在 Google 无人驾驶车都可以行驶在一般的道路上。而飞机则有自动驾驶、甚至在高空中也有 Wifi 及通讯系统。更高上大一点,太空中的卫星正围绕着地球,提供着气象资讯与卫星影像。

        软件正在吃掉全世界。但这一切都还只是开始,在人们意识到这件事之前,大家早已用起穿戴设备、只能家居。用电脑控制家里的门禁。也许在不久的将来,机器人会清洁环境,出门乘坐无人驾驶车、住在虚拟现实世界里。

        刚刚提到的所有的科技都是由软件驱动,渗透到生活中的各个层面。大家都被程序环绕,未来,代码量只会不断增加,所以电脑科学和代码与每个人的生活都有紧密连结。

        什么是电脑科学?

人人都该学写代码的反思:也许我们更该学习的是「电脑思维」

        根据维基百科定义,电脑科学是系统性研究讯息与计算的理论基础,以及研究它们在电脑系统中如何实作与应用的实用技术学科。以下是几个电脑科学相关概念解释:

        问题解决(Problem solving)透过学习演算法,像是 divide and conquer、 recursion、heuristics、greedy search、 randomized algorithms 等,帮助你解决问题。

        逻辑(Logic)使用精准和正式的方法去思考,包括 abstraction、 boolean logic、number theory、set theory 等理论,帮助你更严谨的解决问题。

        数据(Data)你会开始接触资讯理论并开始提出类似「什么是资讯?」、「如何呈现资讯?」等这类问题。

        系统 Systems 如何设计并建立一套复杂的系统且同时满足一连串的要求和限制呢?系统工程几乎在所有的商业模式中都是是相当重要和基本的。

        思考(Thinking)理解人类心智的最好方式便是复制,像是人工智慧 AI、自然语言处理等是走在最前端的科技,其不近牵涉了电脑科学,同时还有:生物学、心理学、哲学和数学。

        注意到了吗?上面完全没有提到跟写代码相关的词条,这是因为写代码只是实现电脑运算的一种工具,写代码并不包含在电脑科学的概念宗旨里。

电脑科学不只是跟电脑相关,就如同天文学不只是望远镜、生物学不只是显微镜、化学不只是烧杯试管一般。科学是与工具无关的。

——Michael Fellows and Ian Parberry

        事实证明,比起电脑,我们更倚赖另一种运算工具:大脑!而电脑科学的目标正是要教导我们以一种全新、普世且能被广泛应用的方式思考。当科技变得越来越普及时,这种全新的思考方式将会变得跟物理、数学、生物、历史等学科一样重要。

        总而言之,光是思考是不够的,我们必须知道如何应用。在物理领域,我们以磁铁、棱镜进行实验;在生物领域,我们以培养皿、试管进行观察;在电脑科学领域,我们学习写代码。

        什么是程序设计?

 人人都该学写代码的反思:也许我们更该学习的是「电脑思维」

        程序设计,或说是写代码,是指对电脑下指令以让其完成某项特定的动作。如果从来没写过代码,您大概曾经在 App 中点击过某些按钮,这些 App 正是由许多程序代码组成,透过程序代码告诉电脑如何展示界面、要在哪里取得数据以及如何回应使用者的点击。

        程序设计完全是基于上述电脑科学的原则,刚刚谈到的逻辑、演算法、系统工程等能用来建构任何事情,从你正用来阅读本文的浏览器到飞机上的自动驾 驶程式都可以。即使程序设计牵涉到许多数学与结构,但这同时也相当能激荡创意的实作。用一条条的代码,把想法化为真实存在的产品。

        学习程序设计能为你带来不少好处,以下 Yevgeniy Brikman 提出三点:

        1、DIY

        如果你会写代码,你就能建立专属于自己的产品,从最简单的开始,例如用 Excel 表格计算自己的税务问题。更难一点, 建立自己的网站、开发自己公司的 App 甚至打造一款手机游戏与朋友共享。

        2、故障排除

        一旦你开发了 App,便会发现要开发其他 App 也没那么难了。一旦你不再害怕电脑未知的部分,你就朝着成为技术专家又前进了一步。当科技渗透生活的各个部分,去了解并且探索。如何操作它,就变得跟学习如何阅读一样重要。

        3、职业生涯

        学习电脑科学的目标不是为了成为专业工程师,如同我们从小在校园里学习数学、物理、化学一样。不过如果发现自己对电脑科学有兴趣的话,不难发现软件工程是现在成长最为快速、高薪的工作选项之一。

        把电脑科学和程序设计结合在一起

人人都该学写代码的反思:也许我们更该学习的是「电脑思维」

        最后让我们再总结一下:

电脑科学是一种新的思考方式,其中的概念对处在充满科技环境中的每个人都相当有用。

程序设计是学习电脑科学相当重要的一环,用于将电脑科学的思维付诸实行。然而,程序设计本身并不该被视为学习终极目标。

        如何开始第一步

人人都该学写代码的反思:也许我们更该学习的是「电脑思维」

        身处在这个时代,幸运的是我们手边有许多资源能从马上开始自学电脑科学!事实上,这可能是最好入门的学科了,你只需要一台电脑就够了,正在阅读本文的读者大概都具备了这两项基本条件了!LOL~

        透过以下学习平台,大家今天就能开始上电脑科学的第一课:

        大学课程

  1. Coursera
  2. Udacity
  3. MIT OpenCourseWare
  4. Stanford Engineering Everywhere
  5. Academic Earth

        线上课程

  1. Khan Academy
  2. Treehouse
  3. MIT Scratch
  4. Codecademy
  5. Code School

        社团与组织

  1. CoderDojo
  2. Girls Who Code
  3. Girl Develop It
  4. Code.org
  5. Coding meetup Groups