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

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

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

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

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

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

欢迎来到真实的世界

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

小编是一个有着5年工作经验的java程序员,对于java,自己有做资料的整合,一个完整学习java的路线,学习资料和工具,相信这里有很多学习java的小伙伴,我创立了一个2000人学习扣群,479121291。无论是初级还是进阶的小伙伴小编我都欢迎!

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

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

代码无处不在

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

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

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

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

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

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

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

什么是计算机科学?

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

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

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

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

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

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

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

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

什么是编程?

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

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

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

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

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

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

综合考虑

简要重述:

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

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

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

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

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

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

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

Java学习系列之不要学习代码,要学会思考相关推荐

  1. [jQuery学习系列四 ]4-Jquery学习四-事件操作

    [jQuery学习系列四 ]4-Jquery学习四-事件操作 前言: 今天看知乎偶然看到中国有哪些类似于TED的节目, 回答中的一些推荐我给记录下来了, 顺便也在这里贴一下: 一席 云集 听道 推酷 ...

  2. 深度学习系列:深度学习在腾讯的平台化和应用实践

    深度学习系列:深度学习在腾讯的平台化和应用实践(一) 莫扎特 2015-01-04 6:05:13 大数据技术 评论(0) 深度学习是近年机器学习领域的重大突破,有着广泛的应用前景.随着Google公 ...

  3. jenkins学习系列之PMD静态代码检测

    一.jenkins集成PMD流程 实际生产中,上线的代码往往要经过检测,满足一些规则才行,这些规则可以是直接使用官方的规则,也可以是自己写的. 因为目前的工作和java有关,所以这里以java代码静态 ...

  4. 【深度学习系列】迁移学习Transfer Learning

    在前面的文章中,我们通常是拿到一个任务,譬如图像分类.识别等,搜集好数据后就开始直接用模型进行训练,但是现实情况中,由于设备的局限性.时间的紧迫性等导致我们无法从头开始训练,迭代一两百万次来收敛模型, ...

  5. 【深度学习系列】——深度学习简介

    这是深度学习系列的第一篇文章,欢迎关注原创公众号 [计算机视觉联盟],第一时间阅读我的原创!回复 [西瓜书手推笔记] 还可获取我的机器学习纯手推笔记! 直达笔记地址:机器学习手推笔记(GitHub地址 ...

  6. ASP.NET MVC 3.0学习系列文章(开始学习MVC)

    Visual Studio 11安装ASP.NET MVC4体验 Nic Pei 2011-09-27 23:15 阅读:2891 评论:11   微软build大会.net平台大事汇总 Nic Pe ...

  7. 学习系列--最优学习内容选择

    学习系列 这个系列我们将系统探讨如何进行系统学习,帮助大家从学习内容到学习方式等,让大家了解到如何高效学习以及如何长远的进行学习规划. 这系列不会探讨具体的学习科目,而是给出一个系统选择的方式,帮助大 ...

  8. 点云深度学习系列2——PointNet/PointCNN代码比较(变换矩阵部分)

    PointNet与PointCNN从文章到代码都有很多相似之处,两者对比看待,或许更有助于我们理解. 众所周知,PointNet中使用了maxpooling和T-net,作者文章中起到关键作用的是ma ...

  9. 深度学习系列-前言:深度学习的好教程

    写在之前:忙忙碌碌,总是在走走停停,挤挤时间,留一个思考的机会.断断续续,研究深度学习也有段时间,从开始的小白到现在算是入门了,中途看过些许文章文献资料,也有许多的问题.高山之行才刚刚开始,本系列旨在 ...

最新文章

  1. python程序设计试卷_Python程序设计试题库
  2. 不是计算机专业学python能找到工作吗-非计算机行业为什么要转行学习Python编程...
  3. Spring Boot后端+Vue前端+微信小程序,完整的开源解决方案!
  4. 1354. 等差数列【一般 / 暴力枚举】
  5. firefox-Developer开发者站点——关于Object.create()新方法的介绍
  6. 高压断路器故障诊断的相关方法
  7. 商业有规律,赚钱有方法,不要在盲目努力了
  8. 成绩排序--清华机试真题;使用运算符重载
  9. kubernetes Serverless、CaaS、FaaS是什么
  10. Shopee Games 游戏引擎演进之路
  11. np.array_split()np.split()
  12. 无线路由器的连接与设置
  13. Madgwick AHRS算法笔记
  14. 走进游戏中的美术:游戏美术风格介绍
  15. Ubuntu 20.04.2.0 LTS 下Geany 1.36的“编译文件”和“生成当前文件”两个按键不可用
  16. 一些我们关于端到端语音翻译的思考和尝试
  17. 我的 Java 后端面试日记!
  18. java 调用打印机
  19. MNS(非极大值抑制)python实现
  20. 什么是MLF?与逆回购有什么区别?

热门文章

  1. 亿万级数据查询优化方案
  2. Bystack世界观(二):区块链岛屿法则
  3. ubuntu命令行下上网方法-超帅
  4. http://zhh2009.iteye.com/blog/517796/
  5. 解决navicat总是卡死,一直转圈
  6. 怎样建一个属于自己的网站?(小白建站教程)
  7. javascript正则匹配邮箱
  8. 人像模式的灯光效果?iPhone 8开挂袭来
  9. Linux FTP安装与配置
  10. WebService 远程调用方法汇总