不要只为学习代码,要学会思考

  这是一个人人都在学习编程的时代: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,弄清楚其他的就简单多了。一旦你不再害怕计算机——未知的领域——你就会成为技术达人。随着技术已经关系到我们生活的每个部分,掌握它们就会变得和学会阅读一样重要。

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

  综合考虑

  简要重述:

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

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

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

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

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

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

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

  如何开始?

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

  这里,分享一些好的资源:

  University courses

  Coursera

  Udacity

  MIT OpenCourseWare

  Stanford Engineering Everywhere

  Academic Earth

  Online tutorials

  Khan Academy

  Treehouse

  MIT Scratch

  Codecademy

  Code School

  Communities and clubs

  CoderDojo

  Girls Who Code

  Girl Develop It

  Code.org

  Coding meetup Groups

时间: 2024-10-25 08:41:46

不要只为学习代码,要学会思考的相关文章

不要学习代码,要学会思考(转)

英文原文:Don't learn to code, learn to think 译/赖信涛 这是一个人人都在学习编程的时代:Code.org请了比尔·盖茨,马克·扎克伯格和克里斯·波什等这些名人,来告诉你,每个人都可以编程:CoderDojo’s在各个国家悄然兴起:在英国,编程已经是各个年级学生的正式课程. 我认为这里有个误区.别误会我——如果每个人都会一些编程知识,这个世界当然会变得更好——但是学会写代码不应该是我们的目标.计算机和程序只是一个工具,是一种达到某种目的的方法. 真正的目标应该

不仅学习代码,也要学会思考

这是一个人人都在学习编程的时代: [合肥开源IT教育][开源培训][php培训][开源教育][开源IT教育培训][合肥php培训]Code.org请了比尔·盖茨,马克·扎克伯格和克里斯·波什等这些名人,来告诉你,每个人都可以编程:CoderDojo’s在各个国家悄然兴起:在英国,编程已经是各个年级学生的正式课程.我认为这里有个误区.别误会我——如果每个人都会一些编程知识,这个世界当然会变得更好——但是学会写代码不应该是我们的目标.计算机和程序只是一个工具,是一种达到某种目的的方法.真正的目标应该

不要学习代码,要学会思考《IT蓝豹》

这是一个人人都在学习编程的时代:Code.org请了比尔·盖茨,马克·扎克伯格和克里斯·波什等这些名人,来告诉你,每个人都可以编程:CoderDojo's在各个国家悄然兴起:在英国,编 程已经是各个年级学生的正式课程. 我认为这里有个误区.别误会我--如果每个人都会一些编程知识,这个世界当然会变得更好--但是学会写代码不应该是我们的目标.计算机和程序只是一个工具,是一种达到某种目的的 方法. 真正的目标应该是学会思考的方式.换句话说,我们应该尝试教授计算机科学,而不是教着写代码.在本文中,我将介

转:学习为了什么?我一直说学习是为了学会更好的思考,其实更通俗的讲学习是为了避免犯大错误

㊣华哥日记㊣ 3.22 学习为了什么?我一直说学习是为了学会更好的思考,其实更通俗的讲学习是为了避免犯大错误,兄弟姐妹们,你们知道一个大错误可以让我们浪费几年甚至十几年吗,人生承受不住大错误,可我们大多数人懒于思考,每次在深圳都会听到各种悲剧的故事,张三和王二十年前合伙做生意赚了500万,平分分赃,张三在龙岗买了一块地,王二回老家盖了个房子,现在张三亿万家财,王二在深圳还在租房!深圳之行见了很多米粉,生意上质一样的进步,可是他们中去年选择置业的明显更幸福,没置业的不是没能力,真的,他们去年缺乏一

学习代码,需要勤学多思

互联网时代已然来临,对于编程的学习则显得尤为重要.可能你不会相信,在发展迅速的英国,编程已经是各个年级学习的正式课程. 虽说对于互联网来说编程是很重要的一部分,如果每个人都会一些编程知识,这个世界当然会变得更好--但是学会写代码不应该是我们的目标.计算机和程序只是一个工具,是一种达到某种目的的方法. 教学真正的目标应该是学会思考的方式.教着写代码是最基础的环节,教授计算机科学才是真正的重中之重.写代码比以前更容易这倒是真的.因为现在有大量的资源可以用,不过我认为,学计算机科学或者变成一名程序员并

职场困惑——还该不该学习代码?

最近发现,线上教育是相当的火.很多的线下培训机构都可始有步骤的向线上来转移.而且在这个一切皆可复制的年代,可以将培训费无限的降低.而在这种情况下,曾经做为培训讲师的自己,开始有了困惑:已经快30了,到底还该不该学习代码? 学习R已经有了一段时间,相关代码的能力基本已经成形.去年在班里的一次小组比赛中,京东的同学说我的R语言能力可以找相关的工作了,但可能是自卑吧!一直也就没有找相关的工作.今年开始想往数据挖掘及可视化方向转型,其间也参加了IBM的数据摇滚节,期间也拿了奖.就深刻的感觉到,代码的要求

我自己的一个令人警醒的学习代码的故事

-- 一个正常理智的人是如何抓狂的 我本来是个穿正装坐办公室的人.但当我有了个模糊的创业灵感的时候,我决定自己学习编程. 我听说过一个家伙吹牛说使用一门叫做Ruby的语言是如何方便快捷令自己的工作流程自动化的.我想,那就学Ruby吧.于是我回到家开始google.15秒钟过后,我开始研究Ruby的教程了. 一周之后,我第一次参加黑客聚会.每个人都在讨论向Scala,Clojure和Go这样的编程语言.有很多需要学习的东西.我借了三本O'relly出版的专业书籍,每本读了50页. 我的一个朋友告诉

程序员都应学习代码编译器知识

程序员都应学习代码编译器知识   所有优秀的计算机科学学院都提供了编译器课程,但是相对比较少的学校把它作为本科课程的必修部分.这篇文章回答了这个问题:为什么需要学习编译器知识?即使你从没打算过编写编译器. 我写这篇文章的其中一个原因是,尽管我在读本科时很喜欢编译器课程,但是我几乎看不到它的实际作用.大多数资料看起来要么简单易懂,要么很深奥(事实上,我找到的大部分编译器资料都是很枯燥的.)无论怎样,我用了几年时间总结了为什么这类课程会如此有用的实际原因.原因如下. 分析器和解析器无处不在 严谨的p

资深PM告诉你为什么产品经理应该学习代码编程

大家都说产品经理不需要懂太多编程技术,不用太刻意学习编程知识,真的是这样么?今天和大家分享的是产品经理应该学习代码编程,为什么呢?一起来看看吧. 对于一个产品汪来说,创造产品是一件令人兴奋的事情(程序喵.设计狮按住了刀片....).产品经理们可以将自己天马行空的idea与在团队友(diang)好(guang).和(huo)谐(shi)的沟通之后转换为实实在在的产品.或者至少是制作出一个版本,然后发送给全世界. 每一天我都对我的工作所带来的创造性而备受鼓舞.而从零开始规划一个产品又往往会带来一系列