为什么在美国的cs编程入门课大多有java和python。而在国内首先学习的语言是c/c++?
程序员文章站
2023-12-24 09:52:39
...
回复内容:
因为翻译过来的公开课里面就只有Java和Python。 无论国外情况怎么样,c/c++入门真的很不科学。而且后面的数据结构,组成原理,os,都在用c/c++,之前花一学期接触别的也无妨。但由于国内还要学两课、通识课这种杂七杂八的课程,讲两门语言恐怕来不及了,于是第一门就被压缩了。 看了一些回复后觉得似乎很有必要把我的内容从评论中复制出来 让更多人看到。
回答中多位答主似乎都身处北美院校,我作为一名国内某211大学 正经计算机专业(专业在国内排名二三十名 算是个中上等水平吧 对国内教育资源来说应该比较具有代表性。)
"你要是要求国内的学校跟北美的CS名校看齐,那你就应该做好你在大学第一学期就同时学Python+C++/Java及数据结构基础+离散数学的准备吧。"呵呵呵岂止如此?楼主你显然是没在国内高校读过CS专业! 说说本人经历,北上广某211大学正经CS专业,大一一年和大二上,和计算机有关的东西只学了 C C++ java 数据结构这四门课,三个学期就学了这四门和专业有关的课!!!这其中C++还是自学!!!我真TM纳闷了为什么被定为自学的不是思修毛概这种课而是专业课!!!更奇怪的是 计算机专业学生竟然还要学一门叫做近代史的课程并且是必修的,并且考试还是闭卷的,国内高校的课程合理性不言自明,如果有机会去北美学习CS EE这些工程类课程,我觉得根本不需要犹豫,比国内真的是天壤之别!
不仅如此,到了大三 大四,由于考研的复习考研 出国的备考托福GRE 工作的忙着到处实习,因此原本被安排在大三的很多重要的课程诸如 软件工程设计模式 数据库理论 人工智能算法 移动端编程 计算机原理 编译原理 互联网七层模型双工协议以及贯穿着OO思想的各种语言选修课,这些真正作为一名计算机学生应有的专业素质,大家没有时间学习,或者说没有时间好好学习。真正大一大二用来打基础的那两年却都浪费在了思修毛概马哲近代史电路焊接甚至很多学校还安排了更多大一大二的奇葩课程。我想说:
在国外大学读CS的同学,请珍惜你们的学习机会!
以下是2015/5/3凌晨最新的编辑。
-----------------------------------------------------------------------------------------------------------------------------------------
后来想了想,又看了看当时敲的这些东西。理性地讲,我们国内大学的课程安排,更像是以本科+硕士+博士 这样一整条完整的时间线来构建知识体系而设计的。说实话虽然这不合理但也不难理解,毕竟有权利和资格决定高校学生该在什么时候学什么样的课程的人恐怕基本上都是完整地走完这样一条书本生涯的人,保不齐还有什么多学位甚至修了多个硕士博士文凭的“理论家”,也许在他们眼里课程的确应该这样安排,也许他们中的部分人甚至根本不在乎课程究竟是如何安排因为这对他们自身没有任何直接利益可言,毕竟大学老师教课都是义务的,挣钱靠的是项目和走学。
但实际上,作为一名已经踏入工作岗位并且依然从事着coding工作的毕业生,回头看过大学的这些课程以及点点滴滴,我真的不认为这个世界上所有的人都应该在学校里花比四年本科更长的时间进行学习,至少计算机科学专业我可以负责任地这么说。
传统的制度体系带来了很多的问题,这其中就包括我们国家的教育。很多出国留学的人可能都会有这样一个共识,国外对我们国家高中之前的教育相对更认可一些,而我们大学阶段的教育在西方国家申学校的时候明显感觉到这一点。我身边的一个朋友告诉我,他甚至希望先考到国外一个二三流的大学再通过转学的方式进入一所更好的学校,国内大学教育结果在国外教育界 学术界的认可度不言自明。 实名反对目前排名第一的答案,纯粹答非所问,用大量文字图片凑字数。
其实原理很简单,Python在国内是最近几年才火起来的,大学里面要改一个课程的体系是很困难的,所以大学教育还来不及换。我接触到的很多大牛老师,他们都不会Python。
国内有些专业不需要知道那么底层的编程思想,所以他们教VB,他们的老师(或者学校领导)不知道有Python比VB好用,否则,怎么会仍然选择VB?
另外,亲身感受,有一部分老师,他的老师当年怎么教他的,他就怎么教他的学生。
============================以下内容纯属猜测:==========================
国外的教学思想是把复杂的问题讲简单,国内的风气是把简单的问题讲复杂。
谭浩强的学生遍天下,其中某些位居重要部门的学生想帮他多赚点钱。
楼上争论哪门语言好哪门语言坏的论调是没有道理的,Java那么恶心,但是用它确实可以赚钱吃饭。 为什么我们的入门课是Haskell.......................................
以上是吐槽。
首先对于优秀的大学来说,编程语言并不是一个很重要的东西,毕竟topXX的大学又不是蓝翔,教学任务不是什么毕业就会写qq。大多数课程设置的主要目的只是学习程序背后的编程思想,而语言只是相应的工具,什么顺手用什么。 譬如你做functional programming, 自然要用functional programming language来教。 做图像处理,你就会用matlab。做数据分析,你就会用r。 这不是说什么C不行,而是你有一个工具箱,但是你做什么事都用起子会很蛋疼而已。
毕竟,趁着年轻,多接触点语言总是好的。
以下是吐槽。
那你TMD也不要让我们每个作业都用一个新语言写啊,Jason这语言是个什么鬼东西啊? 每回assignment一半时间花在看Lib了啊! 已经会的语言都会搞混啊! 我校电院入门的语言是Python啊,谁说国内都是C/C++了?
反正我觉得挺好的,让很多人在后来选专业的时候盲从CS这样我们压力小很多。 我们暂时撇开CS Related的专业,国内学习编程的主要是理工科,文科很少开设,至少NJU是这个样子的。先想想理工科让学生们学习编程是为了什么?
- 本专业可能会用到一些相关的内容
- 需要有基本的编程思维
有人会问那为什么不使用Fortran?首先说他太老了,不是说时代老,而是思维方式有些落后(愚见,勿喷),而且Fortran的高效率是语言理念层面上的,但是在具体编译器实现上可能并不如C,毕竟现代C编辑器的优化技术已经到了变态的地步。而且,其实在大学中学习Fortran的也不少。
对第二点来说,学生学完这门课程要建立起初步的利用计算机来实现特定功能的思维方式,因为他们以后可能会使用Matlab,会使用R。所以需要一门比较正统的语言,学了一门之后,其它的基本上再学起来也不会太困难。所以选择C和C++再合适不过了,由C衍生出的语言不计其数,所以C的思维方式可以视为一种标准思维方式。但是这样也会导致学生的思维面比较窄,但是在固定的学时下,恐怕这是最好的这种办法。有多少非CS学生会再接触Lisp呢?所以基本上有C的思维方式也就够了。
综合这两点,C和C++基本上就是最合适的语言了,而且有一点必须要考虑,国内大学老师很多比较保守,不愿意引进过多新的东西,他都不会用Python你让他怎么教?而且有点问题想问题主,谁说国外编程入门大多用Java和Python?我怎么觉得还是C系列的比较多。 @dy.zhao 很久以前给他的答案点了赞。现在看看我个人还是赞同他的部分观点的。
先说一下我以下用的 CS 排名主要是这个US News 的:
至于 research,拿过多少图灵奖,这跟本科教学之类的关系暂且不讨论。就按照这个前十名的本科生排名来。
至于怎么比各校的课程,用 AP CS 能不能换分,能换什么分来比。至于 AP CS 难度,考过的都知道挺水的,用的是 Java,特别是现在 CS AB 和 CS A 被 CB 取消成一个了,AB 取消,难题都不考了。CB 自己考纲写得不全,有兴趣可以参见:Amazon.com: Barron's AP Computer Science A, 7th Edition (9781438005942): Roselyn Teukolsky M.S.: Books
Chapter 1. Introductory Java Language Features
Chapter 2. Classes and Objects
Chapter 3. Inheritance and Polymorphism
Chapter 4. Some Standard Classes
Chapter 5. Program Design and Analysis
Chapter 6. Arrays and Array Lists
Chapter 7. Recursion
Chapter 8. Sorting and Searching
Chapter 9. The AP Computer Science A Labs
这书是真的从 int 讲起的,但是 Java 应该讲到的地方都讲到了。
这是 CB 的考纲:http://media.collegeboard.com/digitalServices/pdf/ap/ap-course-overviews/ap-computer-science-a-course-overview.pdf
看一下前十学校的态度就行了:
1. MIT
2. Stanford
CS106B 这个 level 的是什么课?自己看视频:https://www.youtube.com/watch?v=KkMDCCdjyW8
在讲 hash;
至于难不难,当然是不难的:
Difficulty of CS 106 for a non-major? : stanford
但是的确有 major 是 CS 的人在上这节课。毕竟你不能要求所有报 CS 的人都有编程经验,即使有你也没法检验啊……
3. CMU
15-112 or 15-110 Computer class for Freshman?
这课,属于「选修」的那种感觉。
至于难不难,有一个人回复:
Generally speaking 15110 is the kind of introductory CS course for people who are not keen on exploring a CS career further. Actually you don't need to take it since you have AP CS; you can just get units straight away if you got a 4 or 5 on the AP.
15112 is what you should do if you wish to go further. It is taught by a former Microsoft Project Manager and uses Python. ( in fact you might be able to trade AP CS for 112 too, I just can't remember...) It's quite intense, the professor quite awesome and Python quite useful as a tool for mathematical operations and statistical analysis. Though the workload is notorious. " You know what CMU means after taking 15112."
So it's really dependent on your son. I am pretty sure he can graduate without taking a single CS course, but I doubt you should let slip the world' s best CS education experience now that you have access to it. You can always register for it and drop if you find it to be too hard, after all.
(注,那人是 MCS 的)
底下一个打脸的:
If your son is good at computer science and confident in his abilities, and got a good 4 or 5 then he should already have credit for 15-112. 15-112 is an intro course and covers largely the same material as what he did in AP computer science. Unless he's interested in reviewing material he has already done, he should skip 15-110 and 15-112 completely and just take his AP credit for them. A more appropriate course for him would be 15-122.
结论,CS 的人都觉得是水课。
4. UCB
这里我瞎了。。。我一直以为是不能换正经课程的……结果 AP CS 在 UCB 可以换成 Data Structure……
期末考卷:https://www.cs.berkeley.edu/~jrs/61b/lec/practice
这里出现 bug 了;明明 AP CS 水得一塌糊涂,结果在 UCB 居然能换掉 EECS 专业的必修课程,而且还是大一第二学期的必修课程:http://www.eecs.berkeley.edu/Programs/Handbook/sample-curricula-math1b.pdf
然后我看了一下 61C 是啥,发现了这个:https://github.com/liufei11111/CS61C
不太相信这是 ucb 的进度。只能说老老实实这样上的话,我觉得偏慢了(我算了一下 cs 的进度我一入学就是 junior?当然我觉得没有人会老老实实这样上……)
5. UIUC
我有这个学分。但事实上满足不了 EECE 毕业要求。水课。
6. GaTech
水课。学校里用 python,因为压根不在乎你用java 还是啥,太水了。
7. U of M
并非真正的水。但是还是 intro。
8. UT Astin
....
我看到了什么?
这门课程竟然还是 CS 才能选?逗我呢?……
9. Cornell
我看了一下很多人都是会去上更难的课程,但是不幸的是这门课被 Cornell 算在毕业要求里了(CS111X)
10. CalTech
不要忘了CalTech 虽然 CS 比较烂但还是 CalTech 好么;AP 是什么东西,你觉得我会认麽?什么,你说你觉得你自己很牛逼,可以跳课?来入学的时候给你张卷子爽爽。
总结一下:
CalTech, MIT:不承认 AP CS;即使是上一样的内容也要你在大学里重新再上一遍高难度版的。
Stanford,CMU,UIUC,GaTech:你考吧,考了学分对 CS 没用就是了……表示我们可以用 Python 上,别担心语言,反正都是水课……
UMach, UCB, Cornell, UT:算作 CS 的毕业要求学分;但是你上这么简单的课不怕被碾压吗?
结论:
用 Java 和 Python 上的基础课程,虽然的确是美国大学的编程基础课,但是在 CS Ranking Top10 的学校里,基本是水课的同义词了。简单来说就是「涨涨自信」。
另外比如 Cornell 有标注 Placement exam offered,UI 是 CS101 以上一个等级的课 CS125 提供 Placement;想要快点上的人都会考掉的,(我是直接从 CS225 开始上的……) 选什么都选看起来很难的开始学有利于培养学霸的自信。国内如果开Python, 那估计只有文科生去选了 因为Python确实容易入门啊。
C/C++好是好,但是不好学。
像C语言的指针、数据结构、类型声明等等这些强大的特性都不适合新手入门,难懂,所以有的学校干脆连指针和数据结构都不上了。还有HashTable这样实用的东西(Python里叫Dictionary的东西),没有原生支持。原生的string类型,C语言也没有。
C++倒是有string,可是也是延续了他爸爸C语言的缺点——不容易入门,拥有更多更加强大特性的同时,也更加难学了。
这种情况入门确实不如Python。
Python容易入门到了什么程度呢?在掌握有其他数门编程语言的底子的情况下,我看了两天基本语法,了解语法的大概构造,就可以直接动工帮人做项目了。
编程入门是培养编程观念、培养对编程的爱好的的,就这点来说,更加易学的Python作为入门课程是相当合适的。很多只学得会Python的Python传教士的出现,也是这个原因。
但是入门终究是入门,要玩程序员三大浪漫之类的,还是有些不足。没有黑Python程序员的意思,我自己也是Python程序员。
对了,暨南大学一些文科学院,编程就上的Python,不需要《计算机导论》、《计算机网络》、《微机原理》等等课奠基,直接就学Python,没有问题。如果是C语言/ASM,则需要其他课奠基。