科学计算机简单编程

by Sam Corcos

由Sam Corcos

是“计算机科学”还是“编程”? (Is It “Computer Science” or “Programming”?)

教育政策白皮书(提示:它们不是同一个东西) (An education policy white paper (hint: they’re not the same thing))

by Lewis Ellis and Sam Corcos

刘易斯·埃利斯和萨姆·科科斯

Advocates of computer science education have been pushing for improvements to pre-university computer science education, often bemoaning its underrepresentation and lack of recognition in our high schools.

计算机科学教育的拥护者一直在推动大学预科计算机科学教育的改进,常常抱怨它的代表性不足和在我们的中学中缺乏认可。

These complaints are not without merit: as of November 2015, only 27 U.S. states recognize computer science as a math or science class, and 90% of high schools have no offerings in the field. Statesmen, entrepreneurs, and celebrities have encouraged a shift towards greater computer science education.

这些抱怨并非没有道理:截至2015年11月, 美国只有27个州承认计算机科学属于数学或科学课程,并且90%的高中没有该领域的课程 。 政治家,企业家和社会名流鼓励向更高的计算机科学教育方向发展。

There just aren’t enough people who are trained and have these skills today.

如今没有足够的人受过训练并具备这些技能。

With so many public advocates coming forward — especially surrounding Code.org’s “Hour of Code” campaign in December of 2014 — computer science education has become a mainstream issue. Visitors to Code.org are asked if they agree with the notion that “Every student in every school should have the opportunity to learn computer science,” and to sign their name to show support. Nearly 2 million people have done so, myself included.

随着众多公众支持者的到来,尤其是围绕Code.org 2014年12月的“代码之小时”运动,计算机科学教育已成为主流问题。 询问Code.org的访问者是否同意“每所学校的每个学生都应有机会学习计算机科学”的观念,并在他们的名字上签名以表示支持。 包括我在内的将近200万人这样做了。

It’s important moving forward in the future, which is now, that everybody learn it. — Chris Bosh, Miami Heat

重要的是要在未来,即现在,每个人都学习它。 -迈阿密热火队的克里斯·波什(Chris Bosh)

But there’s a subtlety at play when you try to get more specific and ask someone exactly what they support. Do you support “programming” or “computer science” courses? Contrary to what you may think, these two subjects are about as different as Latin is to linear algebra. Allow me to explain.

但是,当您尝试变得更加具体并向某人确切询问他们的支持时,会有一点微妙之处。 您是否支持“编程”或“计算机科学”课程? 与您可能想到的相反,这两个主题与拉丁语与线性代数几乎一样 。 请允许我解释一下。

Give it a shot, and don’t let anyone tell you you can’t — President Obama

试一试,不要让任何人告诉你你不能-奥巴马总统

什么是计算机科学? (What is computer science?)

It’s math. As a computer science major myself, I can tell you first hand that computer science involves writing very little code — especially at the higher levels. If I had to arbitrarily assign a percentage to “math v. programming”, I would say that computer science is at least 80% math and at most 20% programming.

这是数学 。 作为我自己的计算机科学专业,我可以直接告诉您计算机科学只需要编写很少的代码,尤其是在更高层次上。 如果我必须为“数学与程序设计”任意分配一个百分比,我会说计算机科学至少有80%的数学和最多20%的编程。

In computer science you learn about sorting algorithms, finite state machines, turing machines, parsers, lexers, tokenizers, lambda calculus, monads, monoids, functors, lists, maps, maybes, lenses, and futures, to name a few.

在计算机科学中,您将学习排序算法,有限状态机,图灵机,解析器,词法分析器,令牌生成器,lambda微积分,monads,monoid,函子,列表,地图,也许,镜头和期货等。

It is very common for computer science courses to have a mathematics prerequisite. Algorithms and data structures are heavily reliant on a background in math.

计算机科学课程具有数学先决条件是非常普遍的。 算法和数据结构在很大程度上取决于数学的背景

Also contrary to popular opinion, computer science majors are not necessarily good programmers. Granted, they show a higher aptitude towards becoming a good programmer, but they rarely know how to code anything useful coming out of college with a computer science degree.

同样与流行观点相反的是, 计算机科学专业不一定是好的程序员 。 当然,他们在成为一名优秀的程序员方面表现出更高的才能,但是他们很少知道如何用计算机科学学位编写任何有用的代码。

什么是编程? (What is programming?)

function fibonacci(n) {   if (n < 2) {     return 1;   } else {     return fibonacci(n - 2) + fibonacci(n - 1);   }}

It’s somewhere between a foreign language and formal logic. A word you will hear a lot in programming is “syntax”, which is how a particular programming language structures its logic. This might sound familiar because it’s the same word — not coincidentally — that foreign language classes use to describe the structure of sentences.

它介于外语和形式逻辑之间 。 在编程中您会经常听到的一个词是“语法”,这是一种特定的编程语言如何构造其逻辑。 这听起来很耳熟,因为外语类用来描述句子的结构是同一个词(并非偶然)。

Programming does not require a highly mathematical background, and much like a foreign language, the only way to become a better programmer is to practice. Most people who start programming are surprised to discover how easy it is to learn and how little math is involved. As a friend once described it to me, “Once it stops looking like The Matrix, it’s actually pretty easy.” In my experience, this change of perception usually takes less than a month.

编程并不需要很高的数学背景,就像外国语言一样,成为更好的程序员的唯一途径是实践。 大多数开始编程的人都会惊讶地发现学习起来很容易,并且所涉及的数学很少。 正如一位朋友向我描述的那样,“一旦它不再看起来像《黑客帝国》 ,那实际上很容易。” 以我的经验,这种观念上的改变通常需要不到一个月的时间。

An example to illustrate the difference: In programming you generate a random number with the function Math.random(). In computer science, you learn how to build algorithms that make truly random numbers that can be used in a function like Math.random() to generate a random number.

一个说明差异的示例:在编程中,您可以使用Math.random()函数生成一个随机数。 在计算机科学中,您将学习如何构建能够生成真正随机数的算法,该算法可在Math.random()之类的函数中使用以生成随机数。

问题描述 (Problem description)

I taught myself to program in middle school and was disappointed with the limited computer science offerings at my high school*. In college, I taught computer science (CS) to many of my peers as an undergraduate TA for seven semesters, and also organized and ran four instances of a high-school-level programming contest** totaling over 1000 participants. I’ve spent significant time interacting with CS students and instructors at both the secondary and post-secondary level.

我在中学时自学编程,但对高中时期有限的计算机科学课程感到失望*。 在大学里,我曾作为七个学期的本科生TA给许多同龄人教授计算机科学(CS),还组织并举办了四个实例的高中级编程竞赛**,共有1000多名参与者。 我花了大量时间与中学和中学后的CS学生和讲师互动。

I’ve also explicitly discussed CS education with numerous high school teachers, learning of their successes, difficulties, and abject failures. Much of what I’ve heard has lined up with a 2013 survey by the Computer Science Teachers Association, which found that:

我还与众多中学老师明确讨论了CS教育,了解他们的成功,困难和失败的经历。 我所听到的大部分信息都与计算机科学教师协会 ( Computer Science Teachers Association)在2013年进行的一项调查相吻合 ,该调查发现:

40 percent of teachers said the greatest challenge in teaching computer science is a lack of support or interest from school staff. Another 35 percent said a lack of student interest or enrollment was the greatest challenge. Rapidly changing technology and a lack of curriculum resources were cited as the greatest challenge by 30.5 percent and 23.5 percent of teachers, respectively.

40%的教师说,计算机科学教学的最大挑战是学校工作人员缺乏支持或兴趣。 另有35%的人表示,缺乏学生兴趣或入学是最大的挑战。 Swift变化的技术和缺乏课程资源被30.5%和23.5%的教师分别认为是最大的挑战。

The conversations I’ve had with teachers reflect the results of that study. One major problem these teachers have told me about is how they grade their programming assignments. They would typically receive submissions from their students by email, then run and evaluate them manually on their own computer. This archaic system takes an order of magnitude more time to grade than the widely-used submission systems and auto-graders used in most universities.

我与老师的对话反映了这项研究的结果。 这些老师告诉我的一个主要问题是他们如何为编程作业评分。 他们通常会通过电子邮件接收学生提交的材料,然后在自己的计算机上手动运行和评估它们。 与大多数大学中广泛使用的提交系统和自动评分器相比,该古老系统花费的时间要多一个数量级。

They explain that without the enrollment numbers, staffing, or financial backing of a university CS department, they don’t have the resources to develop or invest in something more sophisticated. Even if they did, schools typically only have one computer science teacher who would stand to benefit. Nonetheless, these teachers would always have inspiring stories of the students they’ve taught, the curiosity they’ve helped spark, and the exciting things their students have gone on to do.

他们解释说,没有大学CS部门的注册人数,人员配备或财务支持,他们没有资源来开发或投资于更复杂的项目。 即使他们这样做了,学校通常也只有一名将受益的计算机科学老师。 尽管如此,这些老师总是会有关于他们所教过的学生的鼓舞人心的故事,他们所激发的好奇心以及学生们继续做的令人兴奋的事情。

One challenge is convincing students to take a computer science course if it is offered. This is primarily due to the fact that it is often offered exclusively as an elective. A series of missing incentives has been stunting the growth of computer science education in a negatively-reinforcing spiral. When a class doesn’t count for anything, there is:

一个挑战是说服学生参加计算机科学课程(如果有的话)。 这主要是由于它通常仅作为选修课提供。 一系列缺失的激励措施正在以不利的螺旋式发展阻碍计算机科学教育的发展。 当一门课不计任何东西时,有:

  1. No incentive for students to take it, and thus…没有鼓励学生服用它的动力,因此……
  2. no incentive for schools to offer it, and thus…学校没有动力提供它,因此……
  3. no incentive for teachers to train to teach it.没有激励教师培训它的动力。

It would be unfortunate if students who would otherwise be interested are turned away from the field prematurely by poorly implemented or under-supported graduation requirements.

不幸的是,如果实施不力或支持不足的毕业要求过早地将本来有兴趣的学生拒之门外。

The existing high school advanced placement (AP) Computer Science A curriculum is actually mostly a programming course. It teaches object-oriented programming with Java, and its exam consists entirely of questions such as, “Here’s a piece of code, what does it do?” and, “Here’s a problem, write a program to solve it.”

现有的高中高级课程(AP) 计算机科学课程实际上主要是编程课程。 它教授使用Java进行面向对象的编程的课程,其考试完全由诸如“这是一段代码,它做什么?”之类的问题组成。 并且,“这是一个问题,编写一个程序来解决它。”

The recently introduced AP Computer Science Principles, on the other hand, focuses on higher-level computational thinking, with programming being only one of seven “big ideas” covered by the curriculum. It discusses topics from audio and video to how the internet works, how we keep things secure, and the impacts computer systems can and do have on the world. It’s so unmarried to programming that it doesn’t even require teachers to use a specific programming language.

另一方面,最近引入的AP Computer Science Principles (AP 计算机科学原理)侧重于更高级别的计算思想,编程只是课程涵盖的七个“大思想”之一。 它讨论了从音频和视频到互联网如何工作,我们如何确保事物安全以及计算机系统可以对世界产生的影响等主题。 它与编程无关,甚至不需要老师使用特定的编程语言。

Of course, part of the confusion comes from history: AP Computer Science A (and formerly AP CS AB) was largely the only show in town for decades, and it was a programming course being called Computer Science. The AP Computer Science Principles curriculum is the kind of broad foundation course suited for the more general “Computer Science” name.

当然,部分混乱来自历史:AP计算机科学A(以前称为AP CS AB)在很大程度上是该镇几十年来唯一的展览,它是一门编程课程,被称为“计算机科学”。 AP计算机科学原理课程是一门基础广泛的课程,适合更通用的“计算机科学”名称。

This new AP Computer Science Principles curriculum was introduced in late 2014 for launch during the 2016–17 school year, and 60 million students participated in “Hour of Code” in 2014, compared to just 20 million in 2013. We now have 27 states recognizing computer science courses as more than just an elective, and the rate of adoption is increasing.

新的AP计算机科学原理课程于2014年底推出,于2016-17学年启动,2014年有6000万学生参加了“代码时光”活动,而2013年只有2000万。我们现在有27个州计算机科学课程不仅仅只是一门选修课,而且采用率也在不断提高。

But in spite of these improvements, our education system is moving too slowly and without a clear understanding of the direction in which we are going.

但是,尽管有了这些改进,我们的教育系统仍然运行缓慢,并且对我们的前进方向没有清晰的了解。

教学程序设计的特殊挑战 (Special challenges of teaching programming)

Curriculum for computer science courses is fairly uniform and well established. The mathematical underpinning of the subject matter has not changed in decades so teaching a class from year to year with the same, refined lectures is practical.

计算机科学课程的课程是相当统一和完善的 。 数十年来,该主题的数学基础一直没有改变,因此,每年以相同,精致的讲座授课是切实可行的。

Programming, on the other hand, is quite different. There are dozens of major programming languages, each with varying use cases, complexity, and performance. Not only are there dozens of languages, but there are also hundreds of frameworks around these languages that change at an even faster rate. This makes it nearly impossible to teach an up-to-date course on the subject, but there are ways around this problem, to be discussed later.

另一方面,编程是完全不同的 。 有数十种主要的编程语言,每种语言都有不同的用例,复杂性和性能。 不仅有数十种语言,而且围绕这些语言的数百种框架的变化速度甚至更快。 这几乎不可能讲授有关该主题的最新课程,但是有解决此问题的方法,稍后将进行讨论。

Most college-level programming courses (inappropriately named “computer science”) teach a programming language called Java. Java was introduced by Oracle in the mid-1990s and was wildly popular and is still widely used today. Without going into too much detail, Java is not the programming language that students should be learning now: 20 years after the release of Java. The programming language of the future is a language called JavaScript, which, in spite of its similar name, is actually in no way related to Java.

大多数大学水平的编程课程(不恰当地称为“计算机科学”)都教授一种称为Java的编程语言。 Java是由Oracle在1990年代中期引入的,并广受欢迎,并且至今仍被广泛使用。 无需赘述,Java并不是学生现在应该学习的编程语言:Java发行20年后。 未来的编程语言是一种称为JavaScript的语言,尽管其名称相似,但实际上与Java没有任何关系

JavaScript is the most widely known programming language and it is the most employable language. Most of the next-generation web frameworks are run entirely on JavaScript, including Angular (supported by Google), React (supported by Facebook), and Meteor. JavaScript allows you to build full-featured software, websites, mobile apps, and just about anything else you can think of. And thanks to a massive investment in the language from Google (for more information, see V8), JavaScript is now more than 5 times faster than Python, the currently favored programming language of science and academia.

JavaScript是最广为人知的编程语言,也是使用最广泛的语言 。 大多数下一代Web框架完全在JavaScript上运行,包括Angular(由Google支持),React(由Facebook支持)和Meteor。 JavaScript使您可以构建功能全面的软件,网站,移动应用程序以及几乎所有您能想到的东西。 得益于Google对这种语言的大量投资(有关更多信息,请参见V8 ),JavaScript现在比Python(目前最受欢迎的科学和学术界编程语言)快5倍以上。

Even with everything JavaScript has going for it, it’s difficult for me to say that all programming courses should teach JavaScript, at least at the introductory level. The efficacy of programming languages changes over time, so setting an inflexible curriculum could do more harm than good, which is how we ended up with classes teaching Java held over from the 90s.

即使JavaScript具备了所有功能,但我很难说所有编程课程都应该教授JavaScript,至少在入门级上。 编程语言的功效会随着时间而变化,因此设置灵活的课程弊大于利 ,这就是我们从90年代开始教授Java的课程的结局。

Certain programming languages are also better at doing certain tasks. C++ is a very old language that is still among the most efficient languages available. Python also has a vast array of resources available that make machine learning much more practical than an implementation in JavaScript.

某些编程语言也更擅长执行某些任务。 C ++是一种非常古老的语言,仍然是可用的最有效的语言之一。 Python还拥有大量可用资源,这些资源使机器学习比JavaScript实现更为实用。

Another major challenge of teaching programming is the difficulty of setting curricula and measuring effectiveness. Also, as mentioned above, grading is a laborious process that is — ironically — completed manually in most classrooms.

教学程序设计的另一个主要挑战是难以设置课程和衡量效果。 同样,如上所述,评分是一个费力的过程,具有讽刺意味的是,在大多数教室中,评分是手动完成的。

政策选择 (Policy options)

When students are asked about what got them interested in computer science, a common thread quickly becomes apparent: they liked computer science after only a brief exposure to the topic. I’ve never heard anyone say that it took a long time to develop an interest in the subject; they just needed an introduction, and curiosity took care of the rest.

当学生被问到是什么使他们对计算机科学产生了兴趣时,一个共同的话题很快就变得显而易见:他们仅在短暂接触了该主题之后就喜欢计算机科学。 我从未听说过有人花了很长时间才对这个话题产生兴趣。 他们只需要介绍,好奇心就解决了其余的一切。

This brings me to a study done some years ago that suggested an incredible related result. The original paper is here, and Jeff Atwood provides a great summary here. From the paper’s abstract:

这使我进入了几年前完成的一项研究,该研究提出了令人难以置信的相关结果。 原始文件在这里 ,Jeff Atwood 在这里提供了很好的总结。 从论文摘要:

An experiment found two distinct populations of students: one could build and consistently apply a mental model of program execution; the other appeared either unable to build a model or to apply one consistently. The first group performed very much better in their end-of-course examination than the second in terms of success or failure … We show that consistency does have a strong effect on success in early learning to program but background programming experience, on the other hand, has little or no effect.”

实验发现了两个截然不同的学生群体:一个可以建立并始终如一地应用程序执行的心理模型; 另一个似乎无法建立模型或无法始终如一地应用模型。 就成功或失败而言,第一组在课程结束时的考试成绩要好于第二组……我们证明了一致性对早期学习编程的成功确实有很大影响,但背景编程经验却对成功有很大影响。 ,几乎没有效果。”

To quote Jeff Atwood’s take, this means that “the act of programming seems literally unteachable to a sizable subset of incoming computer science students.” This is not just numbers telling a story; every computer science educator I’ve asked has had some similar hunch that things just haven’t quite clicked for some sizable portion of their class.

用杰夫·阿特伍德(Jeff Atwood)的话来说,这意味着“编程的行为似乎对相当一部分即将入学的计算机科学专业学生来说是无法讲授的。” 这不只是数字在讲故事;它还包括数字。 我问过的每位计算机科学教育家都有类似的预感,即对于他们班级中相当大的一部分,事情还没有完全解决。

I’ve seen it first hand over and over in my time as a teaching assistant for various intro-sequence programming-heavy CS courses. Every semester there would be a number of students who, not for lack of trying, simply could not make it through the course. It was prototypical: they would invest 20 or 30 hours per week, triple that of the average student, trying to get through each assignment, often spending 10 or sometimes even 20 hours in office hours seeking guidance, confirming understanding, and asking questions.

在担任序列内编程较重的各种CS课程的助教期间,我已经一次又一次地看到它。 每个学期都会有很多学生,他们并非没有尝试就无法通过课程。 这是典型的:他们每周将花费20或30个小时,是普通学生的三倍,试图完成每项任务,经常在办公时间花费10甚至有时20个小时来寻求指导,确认理解并提出问题。

As teaching assistants (TAs) we would do everything we could, but it was always painful seeing these students put forth so much effort while so many others breeze by in comparison, spending 5 or 10 hours per assignment and rarely needing help.

作为助教(TAs),我们将竭尽所能,但是看到这些学生付出了巨大的努力却却被其他人轻而易举地比较,每次作业要花费5或10个小时,并且很少需要帮助,这总是令人痛苦。

It happened every semester, in every intro CS course, to a not-insignificant portion of the class. These are some of the brightest students in the world at the University of Pennsylvania, and once they find that CS isn’t a good fit for them, they go on to be researchers, bankers, doctors, and lawyers. If these otherwise perfectly intelligent and hardworking students are finding that it’s not for them, how can we possibly expect every high school student to learn any serious amount of programming?

在每学期的每门CS入门课程中,它的发生时间都是相当重要的。 这些是宾夕法尼亚大学世界上最聪明的学生,一旦他们发现CS不适合他们,他们就会继续成为研究人员,银行家,医生和律师。 如果这些本来非常聪明和勤奋的学生发现不适合他们,我们怎么可能期望每个高中学生学习大量的编程知识呢?

Even if we dismiss the notion that many people just don’t grasp programming as well as others, Dan Bricklin, a decorated technologist best known for inventing the electronic spreadsheet, offers another take:

即使我们驳斥了许多人不像其他人一样不懂编程的想法,但以发明电子表格而闻名的装饰技师Dan Bricklin也提出了另一种观点:

Programming is a very error-prone business, especially with “typed-statement” systems. Most of them are very intolerant of errors (even simple typos)…Unless you are totally immersed in that particular programming system…it is very hard for most people to do …this is not to say that many people can’t get immersed in systems that require such understanding. They do in many parts of their lives.

编程是一个非常容易出错的业务,尤其是在使用“类型声明”系统时。 他们中的大多数人都不容忍错误(甚至是简单的拼写错误)……除非您完全沉迷于该特定的编程系统中……对大多数人而言,这很难做到……但这并不是说许多人无法沉浸在该系统中需要这种理解。 他们在生活的许多方面都做过。

For example, lawyers and tax accountants routinely work with such complexity in their contracts and planning. Doctors work with an untold number of variables…It’s just that people who aren’t professional or hobbyist programmers usually don’t want to get so immersed in something that is infrequently done and not part of the rest of their lives. The question really isn’t “Why Johnny can’t program” but rather “Why Johnny won’t or doesn’t choose to program”.

例如,律师和税务会计师通常在合同和计划中如此复杂地工作。 医生需要处理无数的变量……只是那些不是专业或业余程序员的人通常不希望沉浸于一些不常做的事情,而不是他们余生的一部分。 问题实际上不是“为什么约翰尼无法编程”,而是“为什么约翰尼不会或不选择编程”。

Instead of splitting people into performance-based buckets, he considers motivations and complexity and suggests that maybe there’s some self-selection going on. Maybe some people just don’t want to invest heavily in something for which they see correspondingly little use. Maybe some people like some flavors of complexity but not others.

他没有将人员分成基于绩效的工作组,而是考虑了动机和复杂性,并建议也许正在进行一些自我选择。 也许有些人只是不想为他们认为很少使用的东西投入巨资。 也许有些人喜欢一些复杂性,但其他人则不喜欢。

Sam Altman, President of Y Combinator (the famous seed fund which helped Dropbox, Airbnb, and countless other technology companies get off the ground), recently tweeted a concise summary of this notion:

Y Combinator总裁萨姆·奥特曼(Sam Altman)(著名的种子基金帮助Dropbox,Airbnb和其他无数的技术公司起步了)最近在推特上发布了这一概念的简要摘要:

Everyone should have the opportunity to learn to code. But it’s not the answer to everything. Not everyone will like it or be good at it. I will never like or be good at football. A world where CS is the only option would be a sad one indeed.

每个人都应该有机会学习编码。 但这并不是一切的答案。 不是每个人都会喜欢或擅长于此。 我永远不会喜欢或擅长足球。 的确,在CS是唯一选择的世界确实是一个可悲的选择。

So what does all this mean? Programming isn’t for everyone. Not everyone will like or be good at it; the same goes for computer science. But it is imperative that students have the opportunity to try computer science sooner rather than later, so as to decide for themselves if they want to learn more.

那么,这意味着什么? 编程并不适合所有人。 并非每个人都会喜欢或擅长于此。 计算机科学也是如此。 但是当务之急是让学生有机会尽早尝试计算机科学,而不是后来尝试,以便自己决定是否想学习更多。

Now that we’ve covered much of the background, there are four policy options that should be considered:

既然我们已经涵盖了大部分背景知识,那么应该考虑四个策略选项:

  1. Should all schools offer CS classes?是否所有学校都开设CS课?
  2. Should all schools offer programming classes?是否所有学校都开设编程班?
  3. Should all schools require CS classes?是否所有学校都需要CS课程?
  4. Should all schools require programming classes?是否所有学校都需要编程课程?

The first would oblige schools to offer a computer science class with the current curriculum; as a basic introduction to the field, the current curriculum will suffice. This policy option is absolutely worth implementing. Most people assume this is inevitable, but it only comes about with changes in legislation.

第一种是要求学校根据当前课程设置计算机科学课程; 作为该领域的基础介绍,当前的课程就足够了。 此策略选项绝对值得实施 。 大多数人认为这是不可避免的,但这只是随着立法的变化而发生的。

The second would oblige schools to offer a programming course. Unfortunately, this would be new for public schools and would require a new curriculum and additional training for teachers. Online resources, such as CodeAcademy, CodeSchool, KhanAcademy, and dozens of others have done a tremendous job making curriculum that is easily accessible and cutting edge. The coupling of classroom learning with some of these online resources might be the key to teaching programming courses. This policy option is only worth implementing if there are sufficient resources dedicated to making it work.

第二个要求学校提供编程课程。 不幸的是,这对于公立学校来说是新的,将需要新的课程和对教师的额外培训。 在线资源,例如CodeAcademy,CodeSchool,KhanAcademy和许多其他资源,在制作易于访问且尖端的课程方面做出了巨大的贡献。 课堂学习与其中一些在线资源的结合可能是教授编程课程的关键 。 仅当有足够的资源专门使它起作用时,才值得实施此策略选项。

The third option would require students to take a computer science class as a graduation requirement. This is likely to happen at some point in the future, but it is premature to require it in 2015. The resources, teacher training, and public support are insufficient to make this work. That said, the math one learns in computer science is no less applicable to long-term success than geometry or calculus.

第三种选择是要求学生参加计算机科学课程作为毕业要求。 这很可能在将来的某个时刻发生, 但是在2015年要求它为时过早 。 资源,师资培训和公众支持不足以完成这项工作。 就是说,在计算机科学中学习的数学与几何或微积分同样适用于长期成功。

The fourth option would require students to take a programming course as a graduation requirement. This would mean learning a programming language, such as JavaScript, C++, Haskel, etc. While this would be a useful skill for many people, it is entirely unnecessary to require it in the classroom. Unlike English, math, or history, programming is a skill that lacks wide applicability outside of the act of programming itself.

第四种选择是要求学生参加编程课程作为毕业要求。 这将意味着学习一种编程语言,例如JavaScript,C ++,Haskel等。尽管这对于许多人来说是一项有用的技能, 但在教室中完全不需要它 。 与英语,数学或历史不同,编程是一种技能,在编程本身的行为范围之外缺乏广泛的适用性。

政策建议 (Policy recommendations)

Some measures are easy to support unconditionally: Yes, a good computer science class should count as more than an elective. Yes, more schools should offer computer science classes. Yes, we want more people to learn computer science. But beyond these more easily supported suggestions, it’s not as clear what should be done.

一些措施很容易无条件地得到支持:是的,一门好的计算机科学课不应该算是选修课。 是的,更多学校应开设计算机科学课程。 是的,我们希望更多的人学习计算机科学。 但是除了这些更容易支持的建议之外,尚不清楚应该做什么。

One recommendation is to make a broad introductory CS course accessible to every student. We only need to offer enough for students to try it out and see if they like it. If they do, and they want to learn more, the course served its purpose, and hopefully more in-depth offerings are also available. If they don’t, the course should have still taught some useful understandings, not just a bunch of programming specifics that the uninterested student is likely to never use again.

一个建议是使每个学生都可以参加广泛的CS入门课程 。 我们只需要提供足够的空间让学生尝试一下,看看他们是否喜欢它。 如果他们这样做了,并且他们想学习更多,那么该课程就达到了目的,并且希望也可以提供更深入的课程。 如果他们不这样做,本课程应该仍然教了一些有用的理解,而不仅仅是一堆程序设计细节,那些感兴趣的学生可能永远不会再使用。

Another recommendation is to set clear certification pathways and curricula for computer science teachers. Few states have done this, but it helps make teaching computer science more accessible to interested teachers. That leads to more computer science teachers, which enables more schools to offer computer science classes. It also helps us know when we have enough CS teachers to consider bigger future initiatives, which will require more resources than are currently available.

另一个建议是为计算机科学教师设置明确的认证途径和课程 。 很少有州这样做,但这有助于使感兴趣的老师更容易地进行计算机科学教学。 这就导致了更多的计算机科学教师,这使更多的学校开设了计算机科学课程。 它还可以帮助我们知道何时有足够的CS老师考虑更大的未来计划,这将需要比当前更多的资源。

As a broad policy, I would recommend the following, in order of importance:

作为一项广泛的政策,我将按照重要性的顺序建议以下内容:

1. All high schools should offer computer science courses, with the current curriculum.
2. Computer science courses should satisfy a math or science course requirement.
3. All students should have the option to take at least an introductory computer science or programming course.
4. Programming courses, where taught, should be offered in a modern language, such as JavaScript.

To whomever may be reading this, I’m quite interested to hear what you think and I look forward to reading your comments.

对于可能正在阅读此书的任何人,我都非常有兴趣听到您的想法,并期待阅读您的评论。

额外 (Additional)

Photos courtesy of Unsplash

照片由Unsplash提供

* Fortunately my high school did offer one CS class, and my computer science teacher was great. But there was only one of him, and he taught lots of other classes, and not many people took his CS class, so there wasn’t much hope for anything further.

*幸运的是我的高中确实开设了一门CS课,而我的计算机科学老师也很棒。 但是他只有一个,他教过许多其他课程,而且参加CS课的人并不多,所以对进一步的学习没有太大的希望。

** PClassic.org

** PClassic.org

Sam Corcos is the lead developer and co-founder of Sightline Maps, the most intuitive platform for 3D printing topographical maps, as well asLearnPhoenix.io, an advanced tutorial site for building scaleable production apps with Phoenix and React.

Sam Corcos是Sightline Maps (最直观的3D打印地形图平台)以及LearnPhoenix.io (高级教程站点,用于使用Phoenix和React构建可扩展的生产应用程序)的首席开发人员和联合创始人。

翻译自: https://www.freecodecamp.org/news/is-it-computer-science-or-programming-c01383dacc9c/

科学计算机简单编程

科学计算机简单编程_是“计算机科学”还是“编程”?相关推荐

  1. 计算机教学及其编程视频教学,计算机科学及编程导论教学视频

    全集 http://video.1kejian.com/university/open/13647/ 评分: 5(力荐)分 视频类型: 人气:372 次点播 更新时间:2012-09-14 22:39 ...

  2. 编程一个最简单游戏_一个关于AI编程的游戏

    点击上方"机器学习与统计学",选择"置顶"公众号 重磅干货,第一时间送达 周末推荐一个正在玩的游戏,挺好玩的. <异常>是一个关于AI编程的游戏,在 ...

  3. 华兴数控g71外圆循环编程_数控车床加工编程典型实例分析(西门子802S数控系统)...

    这是一篇带有教学色彩的习作,文章对数控编程的方式和步骤进行了简明的阐述,并针对一个典型零件的数控车削加工给出了一套程序.程序是以西门子802S数控系统为例编写的. 数控机床是一种技术密集度及自动化程度 ...

  4. 如何在树莓派上进行python编程_《树莓派Python编程指南》怎么样_目录_pdf在线阅读 - 课课家教育...

    计算机已经不再只是用来工作的方盒子.任何拥有一个可编程处理中心的东西都可以称作计算机.游戏终端.智能手机.全球卫星定位系统(GPS)单元.平板电脑以及其他许多令人难以置信的设备都说明了这一点.它们都是 ...

  5. python中年大叔学编程_中年大叔学编程-Python环境安装

    在IT界有一句话是:学编程就是先学程序语法,然后学会百度.这话很真实,我想大部分程序员都是这样的情况,当然也包括我. 这里我来一步一步分享,如何快速开始编程. Python 环境下载.安装 首先,我们 ...

  6. 学python编程_少儿学Python编程的一些思考

    自从孩子上了初中,孩子妈就开始盯着各种真假难辨的中考.高考新政传言.当她从铺天盖地的少儿编程广告里获悉,编程将纳入中考,高考范围,并且2018年高考,多个省份的数学卷甚至都出现了编程题时,就变得异常兴 ...

  7. python青少年编程_机器人Python青少年编程开发实例

    章 打开极客之门 1.1 TurnipBit是什么 1.2 从拼插编程开始 1.3 做个真正的程序员 1.3.1 什么Python 1.3.2 面向硬件的MicroPython 1.3.3 支持Mic ...

  8. 计算机科学之父和计算机之父_在计算机科学中找到自己的道路

    计算机科学之父和计算机之父 I vividly remember the nights I've fallen asleep in my college dorm questioning whethe ...

  9. python中年大叔学编程_中年大叔学编程-Python简单操作文件

    原标题:中年大叔学编程-Python简单操作文件 在计算机中,经常打交道的就是各种文档,用得比较多的软件就是office和记事本来操作文件,那么我们试试用Python来简单读写文件. Open函数的用 ...

最新文章

  1. mysql用户控制登录_MySql用户权限控制_MySQL
  2. android socket创建失败
  3. 蓝盾第三代AI防火墙分析
  4. Java Web应用程序的SecureLogin
  5. 面试题 php随机获取概率结果
  6. 求解算术表达式结合二叉树的后缀表达式问题
  7. jquery-easyui中datagrid扩展,隐藏显示表头功能
  8. zabbix通过自动发现功能实现自动识别网络设备接口
  9. 关键路径c语言,有向图的关键路径的C程序实现代码
  10. 面向创意设计人员的CATIA
  11. macpro如何清理磁盘空间_Mac系统空间占用太大,如何清理磁盘空间
  12. 第十三届蓝桥杯C B组 J:砍竹子
  13. 什么是弹性(display: flex)布局 ?
  14. 网站出现502 BAD GATEWAY的解决办法
  15. 华为mate20 pro 专业模式拍照
  16. 红米K30 Pro再次降价700元,小米加速收割5G手机市场
  17. 若依(RuoYi-Vue)+Flowable工作流前后端整合教程
  18. RSR 服务器 进行RTMP推流报错:Failed to update header with correct duration Failed to update header with
  19. 02604---打印机 toner灯亮
  20. Java中的测不准原理

热门文章

  1. 腾讯,字节等大厂面试真题汇总,深夜思考
  2. AJAX 异步加载技术
  3. SpringBoot中各配置文件的优先级及加载顺序
  4. 翻译(九)——Clustered Indexes: Stairway to SQL Server Indexes Level 3
  5. 408. Valid Word Abbreviation
  6. 分享网页设计当中使用进度条打造精美界面最佳例子
  7. ObjectContext.Refresh
  8. 用myeclipse搭建S2SH struts2 spring hibernate
  9. activiti 5.22的demo运行
  10. 作业1---四则运算