科學計算機簡單編程
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:
一個挑戰是說服學生參加計算機科學課程(如果有的話)。 這主要是由于它通常僅作為選修課提供。 一系列缺失的激勵措施正在以不利的螺旋式發展阻礙計算機科學教育的發展。 當一門課不計任何東西時,有:
- No incentive for students to take it, and thus… 沒有鼓勵學生服用它的動力,因此……
- no incentive for schools to offer it, and thus… 學校沒有動力提供它,因此……
- 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:
既然我們已經涵蓋了大部分背景知識,那么應該考慮四個策略選項:
- Should all schools offer CS classes? 是否所有學校都開設CS課?
- Should all schools offer programming classes? 是否所有學校都開設編程班?
- Should all schools require CS classes? 是否所有學校都需要CS課程?
- 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/
科學計算機簡單編程