不要学习代码,要学会思考(转)
英文原文:Don't learn to code, learn to think
译/赖信涛
这是一个人人都在学习编程的时代: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来宣布你已经开始学习计算机科学了。事实上,这是最容易学习的一个主题,你只需一台电脑和一根网线。我想,现在你正在阅读本文,那么很可能你两者都有了。
这里,分享一些好的资源:
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
http://kb.cnblogs.com/page/208800/
转载于:https://www.cnblogs.com/softidea/p/4376968.html
不要学习代码,要学会思考(转)相关推荐
- Java学习系列之不要学习代码,要学会思考
这是一个人人都在学习编程的时代:Code.org请了比尔·盖茨,马克·扎克伯格和克里斯·波什等这些名人,来告诉你,每个人都可以编程:CoderDojo's在各个国家悄然兴起:在英国,编程已经是各个年级 ...
- 人为什么要学会思考(学习)?
人为什么要学会思考(学习)? 不下决心培养思考习惯的人,便失去了生活中最大的乐趣. -----美国发明家 爱迪生 思考是一种享受,我思考所以我快乐.吃得再好也只是量变,不是质变(心脏和大脑的变化),人 ...
- 转:学习为了什么?我一直说学习是为了学会更好的思考,其实更通俗的讲学习是为了避免犯大错误...
㊣华哥日记㊣ 3.22 学习为了什么?我一直说学习是为了学会更好的思考,其实更通俗的讲学习是为了避免犯大错误,兄弟姐妹们,你们知道一个大错误可以让我们浪费几年甚至十几年吗,人生承受不住大错误,可我们大 ...
- 学习代码要先学会“学习”
#学习代码从学习开始# 我们得学习怎样去学习:自我教育 脚踏实地一步一步做 我们得学习怎样去学习:自我教育 一.剖析学习过程 如果我告诉你该怎么做,你可能会忘掉,但如果你自己动手做一次,你可能就记住了 ...
- 别只顾着写代码,学会这 25 条比涨工资都重要,你信不?
点击上方"搜云库技术团队",选择"设为星标" 回复"1024"或"面试题"获取4T学习资料 如果每个程序开发人员都只是周 ...
- 机器学习训练营_如何不运行学习代码训练营
机器学习训练营 by Michelle Jones 由米歇尔·琼斯(Michelle Jones) 如何不运行学习代码训练营 (How not to run a Learn-to-Code Bootc ...
- 学会思考技术背后的那些思想和本质
如果你有装修过,或者家里造房子的经历,你会发现,大多数"技术工人"都是半瓶水,让你满意的人实在是凤毛麟角.就算你要找一个很有责任感的,不需要你去监督,做事情精益求精的人都基本上是没 ...
- 初学者先学python语音好吗_献给Python初学者 零基础学习Python能学会吗
献给Python初学者 零基础学习Python能学会吗 时间:2018-01-08 来源:零基础学习Python方法讲解 零基础学习Python能学会吗?这个问题几乎是所有初学Python的小 ...
- 一段比较经典的多线程学习代码
一段比较经典的多线程学习代码. 1.用到了多线程的同步问题. 2.用到了多线程的顺序问题. 如果有兴趣的请仔细阅读下面的代码.注意其中代码段的顺序,思考一下,这些代码的顺序能否互相调换,为什么?这应该 ...
最新文章
- 每日一皮:循环没写好,导致后面数据覆盖了前面的数据...
- 做Mysql主从时,注意使用replicate_wild_do_table和replicate-wild-ignore-table
- Qt C++属性类型提供给 QML调用(五)
- Flash安全沙箱和跨域文件
- 如何优化Hibernate EllementCollection语句
- plsql 弹出 register,plsql注册码
- Python json模块 - Python零基础入门教程
- Python3,selenium动态下载某库PPT文档,省下的钱可以撸串了!!!
- 使用media player和foobar的DLAN服务
- 3.取色精灵V2.0-非模态对话框自建消息队列、VS2008风格对话框、使用Common Controls、悬浮透明窗口、使用SLIDER控件
- 203.为用户定义的数据类型绑定默认值案例
- 根据经纬度确定行政区域_基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标...
- win10笔记本:掉帧卡顿、开机后卡顿、玩游戏帧数低、GPU占用率上不去,解决办法
- 在线时间戳计算时间差
- Download 文件下载
- 如何搭建一个docker容器
- 河道水面漂浮物识别检测系统 YOLOv7
- 开发容器式微服务的第一步
- 解决vscode扩展商店不能连接
- 冷知识:以前飞机上不能玩手机是因为山寨机太多?