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.html" target="_blank">Systems 如何设计并建立一套复杂的系统且同时满足一连串的要求和限制呢?系统工程几乎在所有的商业模式中都是是相当重要和基本的。
思考(Thinking)理解人类心智的最好方式便是复制,像是人工智慧 AI、自然语言处理等是走在最前端的科技,其不近牵涉了电脑科学,同时还有:生物学、心理学、哲学和数学。
注意到了吗?上面完全没有提到跟写代码相关的词条,这是因为写代码只是实现电脑运算的一种工具,写代码并不包含在电脑科学的概念宗旨里。
电脑科学不只是跟电脑相关,就如同天文学不只是望远镜、生物学不只是显微镜、化学不只是烧杯试管一般。科学是与工具无关的。
——Michael Fellows and Ian Parberry
事实证明,比起电脑,我们更倚赖另一种运算工具:大脑!而电脑科学的目标正是要教导我们以一种全新、普世且能被广泛应用的方式思考。当科技变得越来越普及时,这种全新的思考方式将会变得跟物理、数学、生物、历史等学科一样重要。
总而言之,光是思考是不够的,我们必须知道如何应用。在物理领域,我们以磁铁、棱镜进行实验;在生物领域,我们以培养皿、试管进行观察;在电脑科学领域,我们学习写代码。
什么是程序设计?