人人都该学写代码的反思:也许我们更该学习的是「电脑思维」
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~
透过以下学习平台,大家今天就能开始上电脑科学的第一课:
大学课程
线上课程
社团与组织