学生的第一门编程语言应该是什么?
时间:2025-11-05 03:10:53 出处:域名阅读(143)
“学生第一次开始学习计算机科学(computer science,学生CS)时,门编应该从哪种编程语言开始学习?程语”这一问题一直让教育工作者备受困扰。来自密歇根大学的学生计算机科学教授 Mark Guzdial 也对此进行了大量思考与研究,然而其近期发表在《ACM 通讯》上的门编一篇文章则指出,他的程语两个来自不同学校的 CS 同事都认为,学生的学生第一门课程学习何种编程语言并不重要,重要的门编是 CS 的学习成果。因为如果学生很好地学习了这些概念,程语那么他们接下来就可以简单地将其应用到任何要学习的学生语言当中。

对此,门编Guzdial 则在文中指出,程语当这个领域还处于比较早期的学生阶段的时候,这种想法或许是门编正确的。但那是程语在 20 世纪 60 年代末,课程刚刚建立的时候;而今天,所有不同年龄段和经验水平的学生都在学习如何编程,且他们最终都有着不同的高防服务器需求。
对于这一问题,不同的大学也仍然有不同的答案,这从某种程度反映了他们的教学理念和看法。THENEWSTACK 指出,斯坦福大学在 2017 年就曾因其计算机科学专业的入门计算课程的一些变化引起了强烈的反响。
斯坦福大学的学生报纸报道称,斯坦福大学计算机科学荣誉教授 Eric Roberts 花了五年时间致力于将该课程从 Java 过渡到 JavaScript,并最终创建了该课程基于 JavaScript 的新试验版本。因此,该课程被命名为 CS106J,而不是 CS106A。这一变化涉及到创建新的教科书和作业、以及培训新的助教,Roberts 本人也从退休状态中走出来教授该课。
此前,斯坦福大学的入门课程一直是基于 C 语言编程的(更早之前是 Pascal 语言)。然而在 2002 年,亿华云Roberts 通过编写教科书、并与其他教师合作重组课程和作业,帮助学校将课程转向了 Java。根据 Roberts 的说法,Java 很早就被设计为“互联网语言”。但在过渡到 Java 十多年后,他又认为,Javascript 已经取代了 Java 作为网络语言的地位。
现在,再次查看斯坦福大学的教学大纲,你会发现 CS106A 似乎正在使用 Python(和 PyCharm IDE),而 CS106B 的教学大纲则表明他们正在使用 C++。
与此同时,哈佛大学自己的入门课程 CS50 多年来则一直坚持使用多语言方法。在第一周,学生们采用 Scratch 编写程序,之后切换到 C 语言;接着在后面几周再次切换到 Python,再然后是 JavaScript。该课程的官方 FAQ 解释称,"CS50 不是只教一种语言,而是向学生介绍一系列程序性编程语言,每一种都是在概念上建立的。服务器托管最终的目标是让学生觉得他们不是学会了如何在 X 中编程,而是他们学会了如何编程。 "
至于为什么要从 C 语言开始,该课程的讲师 David J. Malan 教授则认为,学习 C 语言的几周让学生有机会了解所有编程语言的一些基本构件,同时也提供了解释缓冲区溢出这一关键安全概念的机会。
"我认为在一周时间内用 C 语言实现一个哈希表(或 trie),然后在一周左右后仅用一行 PHP 或 JavaScript 代码就能实现同样的内容,这也是一件很强大的事情"。此外,C 语言也是一种相对较小的语言,所以 "到了学期中期,学生们几乎已经了了解到了所有的东西(除了 unions 和函数指针)。"
不过,ACM Communications 的一篇文章指出,截至 2014 年,Python 已经成为美国顶级计算机科学课程(包括麻省理工学院和加州大学伯克利分校)的入门课程中最受欢迎的语言。具体来说,排名前 10 位的 CS 系中有 8 个(80%),排名前 39 的系中有 27个(69%)在 CS0 或 CS1 的入门课程中教授Python。Java 紧随 Python 之后,其次分别是 MATLAB、C、C++,然后是 Scheme 和 Scratch。
2016 年,三位英国研究人员进行的一项调查则指出,在英国大学中,使用 Java 的课程是 Python 的两倍多。“尽管事实上,相同的受访者认为 Python 更容易教学和学习”。对此,研究人员引用的一个可能的解释是:由社区指数衡量的长期的行业流行。
而温斯顿-塞勒姆州立大学的三位研究人员在 2019 年为 ACM 的计算机科学教育小组撰写的一篇论文中甚至认为,每个计算机科学学生也应该掌握大数据和云计算的基础知识,并拥有一些在云中部署和管理大数据应用程序的实践经验。还提出,与其单独开设云计算课程,不如将这些材料整合到多个本科计算机科学课程中。
根据英国研究人员的说法,向初级程序员教授什么仍然是一个重要问题。他们的论文认为,不能轻易掌握编程几乎肯定意味着不能在计算机科学领域取得进展。并指出,因此自从大学开始进行计算机科学教学以来,先教哪种语言的问题一直存在着激烈的争议。
密歇根大学教授 Guzdial 则仍然认为,学生从哪种语言开始学习是很重要,但他也希望教育工作者重新审视一个形成性假设。他在自己的 ACM 文章中回顾了 1979 年的一项研究,该研究认为,一旦学生学会了更广泛的语义概念,他们就可以将其应用于任何后续语言(只需要掌握相对容易的语法差异)。
但是 Guzdial 指出,在那个时代,大多数计算机科学的学生都是传统的大学生。早期进入计算机科学的学生通常比今天学习编码的普通学生具有更强的数学背景。因此,早在 20 世纪 70 年代末,教育工作者可能高估了转换编程语言的难度,因为他们最终只是在已经理解的数学基础上教授编程。
Guzdial 认为,如果我们根据学生已经知道的数学来教授编程语言的语义,那么新的语法只是一种新的数学形式主义。我们没有必要让编程与数学有关,如果我们不期望学生首先了解数学,也许早在 40 多年前就能期望更多的人学习编程。
本文转自OSCHINA
本文标题:学生的第一门编程语言应该是什么?
本文地址:https://www.oschina.net/news/149329/students-first-programming-language
猜你喜欢
- 通过激情探索学习(以passion为引导,最大化教程的效果与体验)
- Node.js 4.0 发布的主要目标是为io.js 用户提供一个简单的升级途径,所以这次并没有太多重要的 API 变更。下面的内容让我们来看看如何轻松的在 ubuntu server 上安装、配置 Node.js。一、基础系统安装Node 在 Linux,Macintosh,Solaris 这几个系统上都可以完美的运行,linux 的发行版本当中使用 Ubuntu 相当适合。这也是我们为什么要尝试在ubuntu 15.04 上安装 Node.js,当然了在 14.04 上也可以使用相同的步骤安装。1.系统资源Node.js 所需的基本的系统资源取决于你的架构需要。本教程我们会在一台 1GB 内存、 1GHz 处理器和 10GB 磁盘空间的服务器上进行,最小安装即可,不需要安装 Web 服务器或数据库服务器。2.系统更新在我们安装 Node.js 之前,推荐你将系统更新到最新的补丁和升级包,所以请登录到系统中使用超级用户运行如下命令:复制代码代码如下:# apt-get update 3.安装依赖Node.js 仅需要你的服务器上有一些基本系统和软件功能,比如 make、gcc和wget 之类的。假如你还没有安装它们,运行如下命令安装:复制代码代码如下:# apt-get install python gcc make g++ wget二、下载最新版的Node JS v4.0.0复制其中的最新的源代码的链接,然后用wget 下载,命令如下:复制代码代码如下:# wget https://nodejs.org/download/rc/v4.0.0-rc.1/node-v4.0.0-rc.1.tar.gz下载完成后使用命令tar 解压缩: 复制代码代码如下:# tar -zxvf node-v4.0.0-rc.1.tar.gz三、安装 Node JS v4.0.0现在可以开始使用下载好的源代码编译 Node.js。在开始编译前,你需要在 ubuntu server 上切换到源代码解压缩后的目录,运行configure 脚本来配置源代码:复制代码代码如下:root@ubuntu-15:~/node-v4.0.0-rc.1# ./configure现在运行命令 make install 编译安装 Node.js:复制代码代码如下:root@ubuntu-15:~/node-v4.0.0-rc.1# make installmake 命令会花费几分钟完成编译,安静的等待一会。四、验证 Node.js 安装一旦编译任务完成,我们就可以开始验证安装工作是否 OK。我们运行下列命令来确认 Node.js 的版本。复制代码代码如下:root@ubuntu-15:~# node -v v4.0.0-pre在命令行下不带参数的运行node 就会进入 REPL(Read-Eval-Print-Loop,读-执行-输出-循环)模式,它有一个简化版的emacs 行编辑器,通过它你可以交互式的运行JS和查看运行结果。五、编写测试程序我们也可以写一个很简单的终端程序来测试安装是否成功,并且工作正常。要做这个,我们将会创建一个“test.js” 文件,包含以下代码,操作如下:现在为了运行上面的程序,在命令行运行下面的命令: 复制代码代码如下:root@ubuntu-15:~# node test.js 在一个成功安装了 Node JS 的环境下运行上面的程序就会在屏幕上得到上图所示的输出,这个程序加载类util” 到变量 “util” 中,接着用对象 “util” 运行终端任务,console.log 这个命令作用类似 C++ 里的cout就是这些了。假如你刚刚开始使用Node.js 开发应用程序,希望本文能够通过在 ubuntu 上安装、运行Node.js 让你了解一下Node.js 的大概。
- 还是手贱,在修改了网络配置和更新后,开机,机子木有无线网卡了,有线网卡也非常诡异,必须要restart network才能连出去。在打开系统的网络连接面板时,出现系统的网络服务与此版本的网络管理器不兼容的错误。利用万能的Google,找到了解决办法。方法比较匪夷所思,我反正木有理解,但是就这么成了。。。方法就是4步走,看下面的引用:复制代码代码如下:First open Terminal and log in as root.# su After that go the correct folder.# cd /etc/NetworkManager/system-connections/Now take a look at the content of this folder. If you had a VPN connection e.g. there must be a file with the name of that connection. # ls -laNow you can remove that file or you can move it to another folder (so you can set it back if this solution does not work for your problem). To move the file to your personal folder use the following command:# mv /home// #username是你的用户名 Now the only thing left is starting the Network Manager:# NetworkManager当~~~你的网络管理界面里出现了久违的无线网卡~LOLPS:可能会出现未配置的情况,请reboot一下
- 想知道在Linux中你正在使用的网卡是什么吗? 在Linux中很容易就找出网卡的生产商。打开一个终端并输入下面的额命令:复制代码代码如下:sudo lshw -C network假如上面的命令不能在sudo下使用,那就别用 sudo 的特权模式。它的输出看上去有点奇怪但是很有用。复制代码代码如下: *-network description: Wireless interface product: BCM4360 802.11ac Wireless Network Adapter vendor: Broadcom Corporation physical id: 0 bus info: pci@0000:03:00.0 logical name: wlan0 version: 03 serial: 9c:f3:87:c1:5d:6a width: 64 bits clock: 33MHz capabilities: busmaster caplist ethernet physical wireless configuration: broadcast=yes driver=wl0 driverversion=6.30.223.248 (r487574) ip=192.168.1.23 latency=0 multicast=yes wireless=IEEE 802.11abg resources: irq:18 memory:b0600000-b0607fff memory:b0400000-b05fffff如你所见,我Macbook Air上的无线网卡是BCM4360,这是一款在Ubuntu下面很容易出现无法检测无线网络问题的网卡。lshw 命令实际上是用来列出硬件的,因此命令的名字是lshw。带上网络的选项后,就会只过滤出网络硬件了。了解网卡的其他方法另外你还可以使用lspci命令来显示PCI总线上的信息。你应该使用普通用户来运行这个命令。只需要在命令行下输入:复制代码代码如下: lspci命令的输出看上去想这样:复制代码代码如下: 00:00.0 Host bridge: Intel Corporation Haswell-ULT DRAM Controller (rev 09) 00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 09) 00:03.0 Audio device: Intel Corporation Haswell-ULT HD Audio Controller (rev 09) 00:14.0 USB controller: Intel Corporation 8 Series USB xHCI HC (rev 04) 00:16.0 Communication controller: Intel Corporation 8 Series HECI #0 (rev 04) 00:1b.0 Audio device: Intel Corporation 8 Series HD Audio Controller (rev 04) 00:1c.0 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 1 (rev e4) 00:1c.1 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 2 (rev e4) 00:1c.2 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 3 (rev e4) 00:1c.4 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 5 (rev e4) 00:1c.5 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 6 (rev e4) 00:1f.0 ISA bridge: Intel Corporation 8 Series LPC Controller (rev 04) 00:1f.3 SMBus: Intel Corporation 8 Series SMBus Controller (rev 04) 02:00.0 Multimedia controller: Broadcom Corporation Device 1570 03:00.0 Network controller: Broadcom Corporation BCM4360 802.11ac Wireless Network Adapter (rev 03) 04:00.0 SATA controller: Marvell Technology Group Ltd. 88SS9183 PCIe SSD Controller (rev 14)这些命令会同时列出有线和无线的网卡。你应该注意到上面的输出中显示我的系统中没有有线网卡。因为我使用的是Macbook Air,它没有以太网端口
- 解决戴尔电脑登录界面错误的方法(排查戴尔电脑登录界面错误的常见问题及解决方案)
- 先安装VMWare10,这个没什么可说的,安装好后启动,点击新建虚拟机,因为想设置虚拟机的磁盘保存方式,所以选择自定义选择“稍后安装操作系统”选择64位的版本给自己的机器取个名字,设定虚拟机磁盘路径,电脑c盘是SSD,为了速度就安到C盘了设置处理器的配置,这里需要看个人电脑配置,我是四核8线程的i7,这里就选了2*2,假如CPU核心数不多,就选择1*2分配内存,先来2G,以后不够再改配置后面的设置,除了磁盘的设置:将虚拟磁盘存储为单个文件,其他都默认就OK设置完成后,点击编辑虚拟机配置,设置ISO镜像文件路径完成后启动虚拟机,等安装文件加载,进入语言选择,默认是英文,下面有中文的语言选择我选择安装完成后再更新,音频解码就算了,虚拟机主要是为了布开发环境清除磁盘就行,不用怕,不会把真实磁盘清理掉的=。=把我默认到哈尔滨去了。。点击国内区域,选成shanghai注意:键盘布局选择英语(美国)设置用户名,密码下面登陆Ubuntu账户,愿意的填email创建一个,我选择以后登陆,估计很久很久以后=。=安装开始,趁机赶几行代码。。SSD安装就是快,完毕重启可以登陆了桌面很小,这时候还要安装VMtool点击顶部菜单栏的虚拟机选项,下拉选择“安装VMware Tools”,会自动载入光盘,打开窗口运行“vmware-tools-upgrader-64”无反应,把VMwareTools.tar.gz 文件拷贝而到桌面,右键提取到此处,会解压为一个 vmware-tools-distrib 目录打开终端,输入以下命令$ cd 桌面/vmware-tools-distrib$ sudo ./vmware-install.pl输入密码,执行,一路回车摁下去,到最后出现“Enjoy——the VMware team”的字样,安装完成打开VMware上方菜单栏的查看-自动调整大小,设置为自动适应客户机和自动适应窗口,右上角按钮重启虚拟机,登陆后就发现虚拟机桌面铺满窗口,调整壁纸平铺方式,显示OK至此,安装完成~
- 关于 update-rc.d 的一些使用介绍 命令功能 update-rc.d -f remove 从所有的运行级别配置目录中是删除指定的服务 update-rc.d start 配置服务在运行级别列表中按指定的顺序启动 update-rc.d stop 配置服务在运行级别列表中指定的顺序停止 update -rc.d与RH的chkconfig之间最大的不同就在于update-rc.d是要设置所以指向/etc/init.d目录下服务脚本的运行级别链接,而chkconfig是要每一个运行级别单独配置服务。从本质上来说,这也就意味着每次我们使用update-rc.d改变一个运行级别,我们就不得不改变所有的。例如,下面的命令序列与命令chkconfig -level 2345 inetd off的作用相同: $ update-rc.d -f inetd remove $ update-rc.d inetd stop 20 0 1 2 3 4 5 6 . 第一个命令移除了所有的指向/etc/init.d/inetd服务脚本的运行级别链接,-f标志将会使得update-rc.d即使在inetd脚本本身已经存在的情况仍然进行相应的处理。第二个命令在每一个运行级别创建了一个服务级别为20的停止脚本。例如,这会创建一个 /etc/rc3.d/K20inetd的符号链接来禁止运行级别3中inetd的运行。(在这里大家要注意的是大家要显示的添加reboot与 shutdown运行级别,即0和6,仅管其中所有的服务都会被设置成为“stop“)。作为另外的一个例子,下面所显示的命令将会在运行级别3到5允许 inetd的运行,而在其他的运行级别中则被禁止: $ update-rc.d -f inetd remove $ update-rc.d inetd start 20 3 4 5 . Stop 20 0 1 2 6 . Debian的update-rc.d最初看起来会叫人有一些迷惑,但是旦我们明白,我们就会发现他可以多么出色的完成我们的工作。
- 默认情况下,ubuntu会将自动安装的软件快捷方式保存在/usr/share/applications目录下,假如大家要创建桌面快捷方式,只需要右键-复制-桌面 就Ok,如图: 上面的方法是通过系统自动安装软件后实现的,有时候我们自己会从网上下载一些软件手动安装,那么,又该怎样创建软件的桌面快捷方式呢?这里以Eclipse 为例,首先到官网下载Eclipse软件包,直接解压在某个目录下,双击其中的eclipse文件,就可以启动eclipse了,不过假如每次要打开eclipse,都要从安装目录启动,是不是有些麻烦?依照下面的操作,来创建一个桌面快捷方式吧。复制代码代码如下: 2、将文件名修改为eclipse.desktop 3、给文件添加可执行权限 4、将该文件复制到桌面 注:在ubuntu11.04之前的版本中,似乎有更简单的方法来创建桌面快捷方式:右键点击桌面-创建启动器,
- 利用无peu盘装系统的教程及技巧(无peu盘装系统,实现简单高效,方便快捷安装)