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

 

 英文原文:Don't learn to code, learn to think

  译/赖信涛

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

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

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

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

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

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

  欢迎来到真实的世界

red pill 300x150 不要学习代码,要学会思考

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

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

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

  代码无处不在

Another Matrix Code v2 0 by luttman23 300x240 不要学习代码,要学会思考

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

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

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

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

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

  什么是计算机科学?

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

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

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

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

  什么是编程?

ScreenShot2014 05 19at2 300x178 不要学习代码,要学会思考

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

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

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

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

  综合考虑

binary Language 300x225 不要学习代码,要学会思考

  简要重述:

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

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

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

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

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

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

  如何开始?

HwYWwfsh 213x300 不要学习代码,要学会思考

  好消息是,你不必等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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python读取多个sheet文件_PythonPandas excel文件如何一次读取所有工作表,并再次写入多个工作表?,pythonpandasexcel,一次性,全部,sheet,重新...

关于如何一次性读取全部sheet,可看我之前写的一篇博客;本文重点讲述如何对同一个excel文件一次性写入多个sheet数据代码示例:import pandas as pdwriter pd.ExcelWriter("新数据.xlsx")sheet1Data [] # 这个为要向Sheet1写入的数…

stdin,stdout,stderr

我们在写C程序时经常遇到printf(),fprintf(),perror(),这些东西到底有什么作用。说到这不得不提及stdin,stdout,stderr。想想,我们在用…

Hadoop的改进实验(中文分词词频统计及英文词频统计)(4/4)

声明: 1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究。 2)本小实验工作环境为Windows系统下的百度云(联网),和Ubuntu系统的hadoop1-2-1(自己提前配好&#xff0…

简单的日历小程序

一个可以查询1900年之后的所有年份当月月历。 import java.util.Scanner; public class Calendar {//输入年月输出当月日历public static void main(String[] args) {Scanner input new Scanner(System.in);System.out.println("请输入年份");int year input.nextI…

python龟图_python学习turtle(龟图标状态)

2019独角兽企业重金招聘Python工程师标准>>>记录学习turtle.hideturtle()turtle.ht(),隐藏龟图标。turtle.showturtle()turtle.st(),显示龟图标。turtle.isvisible(),龟是否显示。显示返回true,否则返回false。turtle.sh…

spring mvc相关问题

1&#xff1a; 基于注解的SpringMVC简单介绍 2&#xff1a; spring组件扫描<context:component-scan/>使用详解 3&#xff1a; springMvc 注解配置例子

C# - 创建List属性的简单方法

不用担心List没有创建问题。 private ObservableCollection<EquipmentItem> _optionalCollection;public ObservableCollection<EquipmentItem> OptionalCollection{get{if (this._optionalCollection null){this._optionalCollection new ObservableCollection&…

旋转函数_【视频课】:一次函数拓展应用(图象的平移、旋转、轴对称及5种解题方法)...

请点击上方“出彩数学”可以免费订阅哦停课不停学★ 特别关注&#xff1a;今日头条、西瓜视频——初三中考解题方法与技巧、初一、初二的同步讲解视频&#xff0c;正在陆续上传&#xff0c;请关注今天头条或西瓜视频(下载APP&#xff0c;搜索“出彩数学”&#xff0c;关注即可…

c语言中,关于延迟函数的理解

对于延迟&#xff0c;有些c基础的人都能够做到用for或while来实现 例如&#xff1a; #include <stdio.h>int main() {int i, j, k;for (i 1; i < 1000; i){for (j 1; j < 1000; j){for (k 1; k < 1000; k){}}}printf("hello\n");return 0; }1234…

static方法不能直接访问类内的非static变量和不能调用this,super语句分析

大家都知道在static方法中&#xff0c;不能访问类内非static成员变量和方法。可是原因是什么呢&#xff1f; 这首先要从static方法的特性说起。static方法&#xff0c;即类的静态成员经常被称为“成员变量”&#xff08;class members&#xff09;&#xff0c;对于静态成员变量…

C++ Qt 访问权限总结

总结&#xff1a;C的访问修饰符的作用是以类为单位&#xff0c;而不是以对象为单位。 通俗的讲&#xff0c;同类的对象间可以“互相访问”对方的数据成员&#xff0c;只不过访问途径不是直接访问. 步骤是&#xff1a;通过一个对象调用其public成员函数&#xff0c;此成员函数可…

火山去水印链接_在线批量去水印下载快手图集视频、抖音、火山等平台方法技巧!...

不管是做自媒体还是做电商或是工作素材采集&#xff0c;都离不开视频&#xff0c;视频比文字更好展示出产品、细节内容&#xff0c;就好比我们经常看的抖音、快手、火山、皮皮虾之类的短视频里面就有很多优秀的素材&#xff0c;相信有采集过的朋友都会遇到平台水印这个问题吧&a…

输出素数

素数是指仅能被1和她自身整除的整数。&#xff08;1 不是素数&#xff09; 程序设计时 i 可以从2开始&#xff0c;到该整数的 1/2为止&#xff0c;用 i 一次去除需要判断的整数&#xff0c;只要存在可以整除该数的情况&#xff0c;即可以确定要判断的整数不是素数&#xff0c;…

php CI 实战教程:如何去掉index.php目录

Windows下自由创建.htaccess文件的N种方法.htaccess是apache的访问控制文件&#xff0c;apache中httpd.conf的选项配合此文件&#xff0c;完美实现了目录、站点的访问控制&#xff0c;当然最多的还是rewrite功能&#xff0c;即URL重写&#xff0c;PHP中实现伪静态的一个重要途径…

十字连接焊盘_你应该知道的焊盘基础知识

PADSTACK&#xff1a;就是一组PAD的总称。Copper pad&#xff1a;在布线层(routing layer),注意不是内层&#xff0c;任何孔都会带有一个尺寸大于钻孔的铜盘(copper pad)。对内布线层这个铜盘大概14 mils&#xff0c;外布线层更大。如果这里需要导线连接,那么这个可以提供一个可…

逆序输出字符串

void re(char *str, int len); void re2(char *str); int main() { char str[1024] “I am from ShangHai”; //char str[1024] “a b c d e f”; re(str, strlen(str)); printf("first : |%s|\n", str);re2(str); printf("second : |%s|\n", str);…

利用stat命令获取Linux文件系统和文件的详细状态信息

用途&#xff1a;stat命令用于显示文件或文件系统的状态信息&#xff0c;来自于coreutils软件包&#xff0c;一般系统自带此命令工具&#xff0c;它能获取与文件系统及文件相关的许多信息&#xff0c;具体用途见stat的功能选项。这些信息包括inode、atime、ctime、mtime、文件&…

平面上最近点对

在二维平面上的n个点中&#xff0c;如何快速的找出最近的一对点&#xff0c;就是最近点对问题。 一种简单的想法是暴力枚举每两个点&#xff0c;记录最小距离&#xff0c;显然&#xff0c;时间复杂度为O(n^2)。 在这里介绍一种时间复杂度为O(nlognlogn)的算法。其实&#xff0c…

分词之后的如何做特征选择_特征选择怎么做?这篇文章告诉你

作者 | Pier Paolo Ippolito翻译 | Skura编辑 | 唐里原文标题&#xff1a;Feature Selection Techniques据《福布斯》报道&#xff0c;每天大约会有 250 万字节的数据被产生。然后&#xff0c;可以使用数据科学和机器学习技术对这些数据进行分析&#xff0c;以便提供分析和作出…