英文原文: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年级的课程中。

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

  1. 物理学和数学让你明白重力、弹性元件、压力、速度、摩擦和攀升等方面的知识。
  2. 生物学让你明白人体在高海拔、低氧、极端寒冷等情况下的反应。
  3. 历史解释了飞机的发明,进化,以及其在旅行、商业和战争中扮演的角色。

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

  什么是计算机科学?

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

  1. 解决问题:你将会学习算法——就是通用的一些方法,像是分治算法、递归、遗传算法、贪心算法——帮助你建模,分解,解决各种各样的问题。
  2. 逻辑:你将开始使用精密又正式的方法思考问题,像是抽象,逻辑代数,数论和集合论,来用严密的逻辑解决问题。
  3. 数据:你将会接触到信息论,并开始思考什么是信息?如何表述?如何对真实的世界建模?
  4. 系统:如何设计与构建复杂的系统,来实现一系列的需求?系统工程是一个几乎在各个领域都涉及到的重要的主题。
  5. 思考:了解人类大脑最好的方式,是试着去复制它。像人工智能、机器学习、计算机视觉、自然语言处理这些话题,不仅仅在计算机科学领域,同时在数学,生物,物理,哲学等方面都是最前沿的科学。

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

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

  什么是编程?

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

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

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

  1. DIY:如果你会编程了,你就可以制作一些东西。可以从最简单的开始:做一个能给旅游照片批量重命名的脚本,或者写一个Excel公式帮自己计算税务;然后,开始发烧级别的:给你自己的文件系统写一个浏览器;给你们公司做一个app;或者写一个能够和朋友一起玩的游戏。
  2. 解决问题:一旦你亲手做了几个app,弄清楚其他的就简单多了。一旦你不再害怕计算机——未知的领域——你就会成为技术达人。随着技术已经关系到我们生活的每个部分,掌握它们就会变得和学会阅读一样重要。
  3. 事业:我们学习计算机科学的目标不是成为职业的程序员。我们都学了数学,物理,化学,但是我们并没有都成为这方面的专家。然而,如果你对这方面有激情的话,软件工程师也是一份评价高,薪资高,进步快的职业。

  综合考虑

  简要重述:

  1. 计算机科学是一种新的思考方式。在这个技术时代,其中的概念对每一个人都很有帮助。
  2. 编程是学习计算机科学重要的一部分,以实现这些新的思考方式。然而,编程本身并不是目标。

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

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

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

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

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

  如何开始?

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

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

  University courses

  1. Coursera
  2. Udacity
  3. MIT OpenCourseWare
  4. Stanford Engineering Everywhere
  5. Academic Earth

  Online tutorials

  1. Khan Academy
  2. Treehouse
  3. MIT Scratch
  4. Codecademy
  5. Code School

  Communities and clubs

  1. CoderDojo
  2. Girls Who Code
  3. Girl Develop It
  4. Code.org
  5. Coding meetup Groups

http://kb.cnblogs.com/page/208800/

转载于:https://www.cnblogs.com/softidea/p/4376968.html

不要学习代码,要学会思考(转)相关推荐

  1. Java学习系列之不要学习代码,要学会思考

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

  2. 人为什么要学会思考(学习)?

    人为什么要学会思考(学习)? 不下决心培养思考习惯的人,便失去了生活中最大的乐趣. -----美国发明家 爱迪生 思考是一种享受,我思考所以我快乐.吃得再好也只是量变,不是质变(心脏和大脑的变化),人 ...

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

    ㊣华哥日记㊣ 3.22 学习为了什么?我一直说学习是为了学会更好的思考,其实更通俗的讲学习是为了避免犯大错误,兄弟姐妹们,你们知道一个大错误可以让我们浪费几年甚至十几年吗,人生承受不住大错误,可我们大 ...

  4. 学习代码要先学会“学习”

    #学习代码从学习开始# 我们得学习怎样去学习:自我教育 脚踏实地一步一步做 我们得学习怎样去学习:自我教育 一.剖析学习过程 如果我告诉你该怎么做,你可能会忘掉,但如果你自己动手做一次,你可能就记住了 ...

  5. 别只顾着写代码,学会这 25 条比涨工资都重要,你信不?

    点击上方"搜云库技术团队",选择"设为星标" 回复"1024"或"面试题"获取4T学习资料 如果每个程序开发人员都只是周 ...

  6. 机器学习训练营_如何不运行学习代码训练营

    机器学习训练营 by Michelle Jones 由米歇尔·琼斯(Michelle Jones) 如何不运行学习代码训练营 (How not to run a Learn-to-Code Bootc ...

  7. 学会思考技术背后的那些思想和本质

    如果你有装修过,或者家里造房子的经历,你会发现,大多数"技术工人"都是半瓶水,让你满意的人实在是凤毛麟角.就算你要找一个很有责任感的,不需要你去监督,做事情精益求精的人都基本上是没 ...

  8. 初学者先学python语音好吗_献给Python初学者 零基础学习Python能学会吗

    献给Python初学者 零基础学习Python能学会吗 时间:2018-01-08     来源:零基础学习Python方法讲解 零基础学习Python能学会吗?这个问题几乎是所有初学Python的小 ...

  9. 一段比较经典的多线程学习代码

    一段比较经典的多线程学习代码. 1.用到了多线程的同步问题. 2.用到了多线程的顺序问题. 如果有兴趣的请仔细阅读下面的代码.注意其中代码段的顺序,思考一下,这些代码的顺序能否互相调换,为什么?这应该 ...

最新文章

  1. 每日一皮:循环没写好,导致后面数据覆盖了前面的数据...
  2. 做Mysql主从时,注意使用replicate_wild_do_table和replicate-wild-ignore-table
  3. Qt C++属性类型提供给 QML调用(五)
  4. Flash安全沙箱和跨域文件
  5. 如何优化Hibernate EllementCollection语句
  6. plsql 弹出 register,plsql注册码
  7. Python json模块 - Python零基础入门教程
  8. Python3,selenium动态下载某库PPT文档,省下的钱可以撸串了!!!
  9. 使用media player和foobar的DLAN服务
  10. 3.取色精灵V2.0-非模态对话框自建消息队列、VS2008风格对话框、使用Common Controls、悬浮透明窗口、使用SLIDER控件
  11. 203.为用户定义的数据类型绑定默认值案例
  12. 根据经纬度确定行政区域_基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标...
  13. win10笔记本:掉帧卡顿、开机后卡顿、玩游戏帧数低、GPU占用率上不去,解决办法
  14. 在线时间戳计算时间差
  15. Download 文件下载
  16. 如何搭建一个docker容器
  17. 河道水面漂浮物识别检测系统 YOLOv7
  18. 开发容器式微服务的第一步
  19. 解决vscode扩展商店不能连接
  20. 冷知识:以前飞机上不能玩手机是因为山寨机太多?

热门文章

  1. 【大总结3】leetcode解题总览(算法、剑指offer、SQL、多线程、shell)
  2. redis——持久化
  3. 《Head First设计模式》第四章笔记 工厂模式
  4. 单元测试中使用Mockito模拟对象
  5. 《Python Cookbook 3rd》笔记(4.9):排列组合的迭代
  6. 《机器学习实战》笔记(01):机器学习基础
  7. STL源码剖析 算法开篇
  8. C++primer第九章 顺序容器 9.3 顺序容器操作
  9. GitHub政府用户破万:开源成重塑政府新手段
  10. 理性分散投资 收益袋袋平安