程序员更需要深度思考~宅客学院

这是一个人人都在学习编程的时代:Code.org请了比尔·盖茨,马克·扎克伯格和克里斯·波什等这些名人,来告诉你,每个人都可以编程;CoderDojo’s在各个国家悄然兴起;在英国,编程已经是各个年级学生的正式课程。

我认为这里有个误区。别误会我——如果每个人都会一些编程知识,这个世界当然会变得更好——但是学会写代码不应该是我们的目标。计算机和程序只是一个工具,是一种达到某种目的的方法。

真正的目标应该是学会思考的方式。换句话说,我们应该尝试教授计算机科学,而不是教着写代码。在本文中,我将介绍两者的不同,以及为什么后者是当下学编程浪潮成功的关键。

如果你喜欢视频的解释,我强烈推荐Simon Peyton Jones的TED,Teaching Creative Computer Science。这和本文的观点不谋而合。

看完之后,依然想看文字的版本么?好的。让我们先从一个关键的问题开始吧:为什么你要学习编程或计算机科学呢?

回答这个问题之前,我们先卖个关子。

欢迎来到真实的世界

现在,你可能正在用Chrome或者Firefox浏览器在看这篇文章,运行在Windows或者OS X操作系统上,用的一台笔记本或者台式机。我猜你今天还花了一些时间查看电子邮件,刷Facebook,或者在Youtube上看视频了。如今,人们的生活越来越依赖于计算机:医疗记录存放在了数据库中;简历放在LinkedIn上;使用Google或者Facebook来推销你的产品;用Amazon来买东西;在网上报税;在线管理你银行的账户;甚至还涉足了比特币。

现在,从屏幕上移开你的眼睛:在你的口袋,包包,或者旁边的桌子上,可能就有一部智能手机。它装有GPS,摄像头,触摸屏,还有成千上万的应用。如果你现在在客厅,你可能还有一台联网的LCD电视,一台DVR,DVD播放器,苹果TV,XBox,或者PlayStation。你每天看的电影,听的音乐,玩的游戏,就封装在这些设备显卡和声卡中。

软件正在占领这个世界,但这还只是个开始。不知不觉中,你就穿着各种可穿戴设备,用计算机来锁门,用机器人来运货,打扫房间。拥有你自己的电子技术,经营自己的生产厂,生活在虚拟的世界中,乘自动驾驶的汽车去旅行,甚至飞向太空。

代码无处不在

毫无疑问,以上我所描述的技术的源动力是软件。你生活的每一个方面,都被代码所包围。大量的代码会让未来变得美好。

但是,仅仅是一项技术非常普遍不能成为你在学校学习它的理由。就像我们乘坐飞机,但是考飞机驾照并不在从幼儿园到12年级的课程中。

然而,飞行的原理却是课程的一部分:

物理学和数学让你明白重力、弹性元件、压力、速度、摩擦和攀升等方面的知识。

生物学让你明白人体在高海拔、低氧、极端寒冷等情况下的反应。

历史解释了飞机的发明,进化,以及其在旅行、商业和战争中扮演的角色。

从中学毕业的时候,你就已经知道了飞机是什么,它是如何工作的,如何安全乘坐飞机。通识类课程,像物理学,数学,历史,教会你如何思考各种各样的问题,包括飞机;与之形成对比的是教会你是用工具的课程,像教你如何驾驶一种特定类型的飞机。

什么是计算机科学?

计算机科学是一门研究计算的学科:就是说,如何表述和处理信息。以下是一些你会学到的概念:

解决问题:你将会学习算法——就是通用的一些方法,像是分治算法、递归、遗传算法、贪心算法——帮助你建模,分解,解决各种各样的问题。

逻辑:你将开始使用精密又正式的方法思考问题,像是抽象,逻辑代数,数论和集合论,来用严密的逻辑解决问题。

数据:你将会接触到信息论,并开始思考什么是信息?如何表述?如何对真实的世界建模?

系统:如何设计与构建复杂的系统,来实现一系列的需求?系统工程是一个几乎在各个领域都涉及到的重要的主题。

思考:了解人类大脑最好的方式,是试着去复制它。像人工智能、机器学习、计算机视觉、自然语言处理这些话题,不仅仅在计算机科学领域,同时在数学,生物,物理,哲学等方面都是最前沿的科学。

注意,上面的清单中并没有提到代码或者编程,因为它们只是实现计算的工具:它们本身并不是计算机科学。

计算机科学并不是关于计算机的科学,就像天文学不是关于望远镜的科学,生物学不是关于显微镜的,化学不是关于烧杯和试管。科学并不是研究工具的。

——Michael Fellows和Parberry

什么是编程?

编程,或写代码,就是指示计算机来执行哪一些指令。如果你从未写过代码,也可能通过操作应用程序来和计算机交互。其实在内部,这个应用程序也是通过代码来告诉计算机显示什么,在哪里检索数据,以及对于你的点击操作做出什么回应。

所有的编程都是建立在我们上面讨论的计算机科学的原理上的。值得注意的是,同一组概念——逻辑、算法、数据、系统工程——可以用来构建任何软件,小到你现在阅读这篇文章用的这个浏览器,大到飞机上的自动驾驶软件。尽管会涉及到一些数学和架构的知识,但这却是极富创造性的活动:你将想法变成现实,一次一行代码。

将编程作为学习计算机科学的一部分有以下的好处:

DIY:如果你会编程了,你就可以制作一些东西。可以从最简单的开始:做一个能给旅游照片批量重命名的脚本,或者写一个Excel公式帮自己计算税务;然后,开始发烧级别的:给你自己的文件系统写一个浏览器;给你们公司做一个app;或者写一个能够和朋友一起玩的游戏。

解决问题:一旦你亲手做了几个app,弄清楚其他的就简单多了。一旦你不再害怕计算机——未知的领域——你就会成为技术达人。随着技术已经关系到我们生活的每个部分,掌握它们就会变得和学会阅读一样重要。

事业:我们学习计算机科学的目标不是成为职业的程序员。我们都学了数学,物理,化学,但是我们并没有都成为这方面的专家。然而,如果你对这方面有激情的话,软件工程师也是一份评价高,薪资高,进步快的职业。

简要重述:

计算机科学是一种新的思考方式。在这个技术时代,其中的概念对每一个人都很有帮助。

编程是学习计算机科学重要的一部分,以实现这些新的思考方式。然而,编程本身并不是目标。

混淆这两个观点,就导致了现在学习编程热潮的圈子的一些问题。Slate 发布了一篇文章,《也许并不是每一个人都需要学编程》;Atlantic写了一篇《新闻学院应该要求记者写代码吗?不》;Jeff Atwood写了《请不要学习写代码》,其中提出了一个精辟的问题:

“如果迈克尔·布隆伯格(纽约市市长,译者注)是一个专业的Java程序员,他能更好的领导一个美国的大城市么?”

当然,这个问法是错误的。这就表示这些活动的目标是学习代码,而不是学习思考的方式。如果连Jeff Atwood这样经验丰富的程序员都搞错了,那么普通人更分不清楚了。问题应该这样问:

如果通过学习解决问题的方法,训练严密的逻辑来提高自己的能力,那么迈克尔·布隆伯格(或者其他人)能工作的更好吗?

我相信,答案是显而易见的。而且随着科技的发展,答案会越来越清晰。这就是为什么,我们要把教学重点放在计算机科学上,而不是代码。

如何开始?

好消息是,你不必等Code.org来宣布你已经开始学习计算机科学了。事实上,这是最容易学习的一个主题,你只需一台电脑和一根网线。我想,现在你正在阅读本文,那么很可能你两者都有了。

时间: 2024-11-13 14:39:22

程序员更需要深度思考~宅客学院的相关文章

如何让程序员更容易的开发Web界面?重构SmartAdmin展示TinyUI

如何让程序员更容易的开发Web界面,是一个持久的话题,所有的从事相关开发的公司都会碰到这个问题,并且被这个问题所深深困扰. Tiny框架也不得不直视这个问题,确实来说,想解决这个问题,也是非常有难度与深度的,业界也有各种各样的尝试,这也是有各种各样不同框架出现的原因. Tiny框架构建者认为,完全采用一种框架解决所有问题,是不现实的.而且即使目前找得到一种非常好的框架,暂时可以满足应用需要,但是随着技术的发展,业务的进化,就会慢慢变得不再满足业务需要.因此,Tiny框架构建从不再把做一套UI组件

谋哥:这个时代没有比程序员更适合创业

[谋哥每天一干货,第五十八篇] 农村人都喜欢涌入城市,远离山清水秀的家乡,到城市蜗居,走进贫民窟,挤进地铁,为了什么?其实就是城市有更多的机会和选择.这是KK的<科技想要什么>这本书里面说到的. 互联网正在改变一部分人的选择,我想最直接的就是IT和金融从业者.我就是IT领域的一个例子,我辞职离京,回到家乡,依然能够从事IT行业的事情.只要有网络的地方,我似乎就能生存,因为我赚钱基本是靠在网上,跟线下没有直接关系.移动互联网的发展更是让精英的IT从业者找到自己的控制时间和休息的自由. 回想一下国

android程序员成长路径的思考

我之前就想过要写这个话题,不过之前没有什么认识,我只是在阅读别人的见解,看法.昨天晚上,我阅读了这篇文章<产品经理罗永浩:用户体验探索,没有尽头>,这篇文章描述了罗永浩对锤子手机设计细节的阐述,及罗永浩对产品经理的看法,认识.恰巧阅读了这篇文章,我从中想到了android程序员的成长路径. 成长路径之一,可以做出产品经理要求的各种界面效果. android程序员,是做android系统上的应用的,一个应用就是一个产品.我是这样认为的,你可以做出好的产品,那么,你就是优秀的android程序员.

没人比程序员更讨厌软件

原文作者:Jeff Atwood 几个月前,我们买了一台新的数码相机,为的是更好地记录我们家小宝贝的成长过程.采购的事情由我太太负责.她小心地打开相机的包装盒,给相机装上电池,然后就开始了首次试拍.像很多电子产品一样,随相机附送的还有一张软件光盘.于是,她不假思索地打开DVD光驱,然后把光盘放了进去. 我眼角的余光碰巧注意到了这一切.说时迟,那时快,我疯了似的从房间的另一头冲过去,同时大叫:"不--要--啊--"--我不顾一切地试图阻止她从那张光盘上安装软件(为了更好地理解当时的情景,

怎样成为一名“喜鹊”程序员? 转载自宅客学院

我时常在想,软件开发人员在某些方面和喜鹊——一种臭名昭著地喜欢偷发亮的物品来装饰它们巢穴的鸟类非常类似.像喜鹊,从定义上说明软件开发人员是一种异常聪明,又有好奇心的动物.但是,我们非常非常容易因为闪亮的新玩具而分心. 我 一点也不觉得阅读类似Scott Hanselman的<Ultimate Developer Tool list>鼓舞人心.相反,它令人疲劳.软件世界前进的改革步伐是无情的.我们的周围充斥着各种所谓闪亮和新的东西,其概念本身开始瓦解,一遍一遍又一遍 地重复这些陈词滥调,直到它们

一个程序员对职业生涯的思考

写这篇文章源于某条微博评论,原内容大概是一个快40岁的人还在当程序员写代码,评论内容大概是:有些人就喜欢当程序员写代码,无可厚非.但是,现实情况中是否真的能做到“无可厚非”呢?我思考了一阵子以后,就有了这篇文章,希望与所有职场人共勉. 首先我要申明一点,我不是砖家,也不是牛人,我只是一名普通的IT从业者,本文只是我对我们IT人的职业生涯规划的一些观点和意见,如果大家有不同意见,或者觉得我的观念欠妥,欢迎讨论,但是拒绝谩骂.吵架和攻击,谢谢. 简单介绍一下我的情况,我是03级的本科生,07年毕业后

“脑子快”的程序员更优秀吗?

转自:http://www.iteye.com/news/30801 今天Hacker News上的一篇文章<为什么想得慢的人能赢>引起了广泛的讨论. 网友Scott Burson在文章后评论说:“之前,我雇佣了一位TopCoder冠军,原本预计他编码飞快,但实际上他是最小心细致的人,不过大家渐渐发现,两年内,他提交的代码从来没有bug,从来没有.” 为什么看起来思考缓慢的人却能胜出呢? 作者表示,所谓的反应慢比反应快需要更多的自律.相比之下,反应快就会更加不准确,而缓慢的思考就像乌龟,慢却稳

具有jQuery背景的程序员如何转换为AngularJS思考模式(译)

最近一直在研究angularjs,最大的感受就是它和之前的jQuery以及基于jQuery的各种库设计理念完全不同,如果不能认识到这点而对于之前做jQuery开发的程序员,去直接学习angularjs的话,很可能学了很久还不知道这个东西能用来干什么以及怎么使用,怎么和UI进行结合等问题,在stackoverflow上找到一篇关于这方面的文章,阅读之后颇有收获,在此基础上将它译成中文,以求抛砖引玉大家一同学习. 原问题:假如我熟悉利用jQuery去开发客户端应用,那么我怎么上手angularjs,

“反应快”的程序员更优秀吗?

Hacker News上的一篇文章<为什么想得慢的人能赢>引起了广泛的讨论. 网友Scott Burson在文章后评论说:"之前,我雇佣了一位TopCoder冠军,原本预计他编码飞快,但实际上他是最小心细致的人,不过大家渐渐发现,两年内,他提交的代码从来没有bug,从来没有." 为什么看起来思考缓慢的人却能胜出呢? 作者表示,所谓的反应慢比反应快需要更多的自律.相比之下,反应快就会更加不准确,而缓慢的思考就像乌龟,慢却稳扎稳打. 每个人都记得龟兔赛跑的故事,但似乎没有人会吸