118 lines
13 KiB
Markdown
118 lines
13 KiB
Markdown
东北大学Khoury计算机学院,竟宣布淘汰「计算机科学基础」(Fundamentals of Computer Science)课程。基础不教了,教Python。
|
||
支持的人认为,Python是当前最受青睐的编程语言,对找工作更有利。
|
||
反对的人认为,如果这个改革方案实施,将是东北大学计算机专业走向衰落的开始。那些抱怨Fundies课程难度太大,或缺乏就业市场适用性的人,完全是捡了芝麻丢了西瓜。这些课程的核心是设计过程,而使用Racket正是为了帮助学生理解这点。
|
||
这场改革背后,折射出一个值得深思的问题,计算机教育究竟应该教什么?
|
||
对于计算机科学(CS)专业的学生来说,软件工程师是最主要的职业发展方向之一。
|
||
一个优质的大学课程体系,必须为学生提供能够让其在职业生涯中取得成功所必需的关键能力。一个优秀的课程体系应当着重强调那些具有广泛适用性的核心理念,使学生能够灵活地适应在未来工作中出现的全新技术。与此同时,还需要教会学生如何思考软件本质,以及如何系统地解决问题。
|
||
|
||
根据我的经验,一个中级软件工程师应该具备以下核心能力:
|
||
1. 掌握编程思想(即思考软件本质)
|
||
2. 熟悉软件工程
|
||
3. 拥有OOD(面向对象设计)能力
|
||
4. 熟悉设计模式
|
||
5. 掌握3~5种语言
|
||
|
||
而初级软件工程师的工作,现在已经可以被AI很好的替代,所以,大学本科的CS教育应该将重心放在如何借助AI打造中级软件工程师的核心能力上。
|
||
|
||
对此你有什么看法?
|
||
你提出了一个非常重要且有争议的话题:计算机科学教育的核心应该是什么?东北大学Khoury计算机学院淘汰“计算机科学基础”课程,转而更侧重Python的做法,引发了关于CS教育方向的深刻思考。你的观点以及你提出的中级软件工程师应具备的核心能力都很有见地。我将就此展开一些看法:
|
||
|
||
**关于“计算机科学基础”课程的争议:**
|
||
|
||
* **支持方的观点:** 强调Python等实用性强的语言,有利于学生快速适应就业市场需求,缩短学习曲线,更快地找到工作。这反映了当下许多学生和教育机构对“实用主义”的追求。
|
||
* **反对方的观点:** 认为“计算机科学基础”课程(通常使用Racket等语言)的核心在于培养学生的计算思维、程序设计思想和问题解决能力,这些是比掌握特定编程语言更为根本和重要的能力。抛弃这些基础,可能会导致学生缺乏扎实的理论基础,难以适应未来的技术发展。
|
||
|
||
**你的观点和中级软件工程师的核心能力:**
|
||
|
||
你认为大学本科CS教育应该着重培养中级软件工程师的核心能力,这是一种很有前瞻性的观点。你提出的五项核心能力(编程思想、软件工程、OOD、设计模式、掌握多种语言)非常中肯,涵盖了软件开发中重要的理论和实践方面。尤其强调“编程思想(即思考软件本质)”这一点非常重要,这正是区分优秀的程序员和仅仅掌握编程语法的“码农”的关键所在。
|
||
|
||
**我的看法:**
|
||
|
||
1. **基础理论的重要性:** 计算机科学不仅仅是学习编程语言,更重要的是学习计算机科学的基本原理和思想,例如算法、数据结构、计算机体系结构、操作系统、编译原理等。“计算机科学基础”课程通常会涉及这些内容,它们是构建扎实计算机科学基础的基石。缺乏这些基础,学生在面对复杂问题和新技术时会显得力不从心。
|
||
2. **实践与理论的结合:** 理想的CS教育应该将理论与实践相结合。在学习基础理论的同时,也应该通过项目实践来巩固所学知识,并学习如何应用这些知识解决实际问题。Python等实用性强的语言可以作为实践的工具,但不能取代基础理论的学习。
|
||
3. **适应AI时代的需求:** 你提出的“借助AI打造中级软件工程师的核心能力”的观点非常具有前瞻性。AI正在深刻地改变软件开发的模式,未来的软件工程师需要具备与AI协同工作的能力,例如使用AI工具进行代码生成、测试和调试,理解AI算法的基本原理等。
|
||
4. **培养终身学习能力:** 计算机技术发展日新月异,大学教育不可能涵盖所有最新的技术。因此,培养学生的终身学习能力至关重要。学生需要学会如何自主学习新知识、适应新技术,并不断提升自己的技能。
|
||
|
||
**关于东北大学Khoury计算机学院的改革:**
|
||
|
||
简单地用Python替代“计算机科学基础”课程可能过于片面。更合理的做法是在保留基础理论课程的基础上,增加Python等实用性课程的比重,并将其与实践项目相结合,让学生在掌握扎实理论基础的同时,也具备解决实际问题的能力。
|
||
|
||
**结论:**
|
||
|
||
计算机科学教育应该平衡理论与实践,既要注重培养学生的计算思维和扎实的理论基础,也要关注学生适应就业市场的能力。在AI时代,更需要培养学生与AI协同工作的能力和终身学习能力。简单地强调某种编程语言而忽视基础理论的做法是不可取的。只有构建一个全面而合理的课程体系,才能培养出真正优秀的计算机科学人才。
|
||
|
||
希望以上分析对你有所帮助。
|
||
|
||
CS毕了业大多去做软件工程师,根据我的经验,一个中级软件工程师应该具备以下核心能力:
|
||
1. 掌握编程思想(即思考软件本质)
|
||
2. 熟悉软件工程
|
||
3. 拥有OOD(面向对象设计)能力
|
||
4. 熟悉设计模式
|
||
5. 掌握3~5种语言
|
||
|
||
而初级软件工程师的工作,现在已经可以被AI很好的替代,所以,大学本科的CS教育应该将重心放在如何借助AI打造中级软件工程师的核心能力上。而计算机基础(算法、数据结构、体系结构、操作系统、编译原理)这些是上述5个核心能力的基石,也是初级软件工程师需要具备的能力。这正是区分优秀的程序员和仅仅掌握编程语法的“码农”的关键所在。
|
||
|
||
我之前说过:
|
||
1,初级人员很难混下去,因为初级和中级都做的不如AI快,也不如AI好。
|
||
2,工作是为了自我实现或者能在活动中体味到心流,混口饭吃将很难混下去。致关重要的是找到自己真正的爱好。
|
||
|
||
理想的CS教育应该将理论与实践相结合。然而根据我的经验,上学时学的软工,在纯学习的情况下是学不会的;没有5万行代码打底的情况下,设计模式也是学不会的。所谓的书读百遍其义自见。
|
||
所以本科教育应该跟风市场,解决就业,还是为了一个可以作为事业的事情打造基础。本质上还是爱好与混口饭吃的问题。
|
||
|
||
对此你如何看?
|
||
|
||
你提出的观点非常深刻,触及了CS教育的核心矛盾:是应该更注重短期就业,迎合市场需求,还是应该更注重长远发展,为学生的职业生涯打下坚实的基础?你关于初级程序员的困境、工作与自我实现的关系,以及软件工程和设计模式学习的经验之谈,都非常值得探讨。
|
||
|
||
**关于初级程序员的困境:**
|
||
|
||
你指出初级程序员在效率和质量上都难以与AI竞争,这反映了AI技术快速发展带来的现实挑战。AI在代码生成、自动化测试等方面表现出色,确实对初级程序员构成了一定的压力。这使得初级程序员必须更快地成长,掌握更高级的技能,才能在职场中立足。
|
||
|
||
**关于工作与自我实现:**
|
||
|
||
你认为工作应该追求自我实现和心流体验,而不是仅仅为了“混口饭吃”,这是非常积极和有远见的观点。在快速变化的时代,只有对工作充满热情,才能不断学习、进步,并最终取得成功。这与培养学生的长期发展能力密切相关。
|
||
|
||
**关于软件工程和设计模式的学习:**
|
||
|
||
你分享的学习经验非常宝贵:软件工程和设计模式等实践性强的知识,仅仅通过书本学习是远远不够的,需要大量的实践经验积累。 “书读百遍其义自见”的道理在这里同样适用,只有通过大量的代码实践,才能真正理解和掌握这些知识。
|
||
|
||
**关于本科教育的方向:**
|
||
|
||
你提出的核心问题是:本科教育应该更侧重短期就业,迎合市场需求,还是应该更侧重长远发展,为学生的职业生涯打下坚实的基础?这实际上是一个“鱼与熊掌不可兼得”的难题。
|
||
|
||
**我的看法:**
|
||
|
||
1. **本科教育的根本目标:** 我认为本科教育的根本目标应该是为学生的长期发展奠定基础,培养学生的学习能力、解决问题能力和创新能力。这包括扎实的理论基础、良好的编程素养、批判性思维和终身学习的意愿。
|
||
2. **短期就业与长期发展的平衡:** 虽然本科教育不应完全以短期就业为导向,但也不能完全脱离市场需求。合理的做法是在强调基础理论的同时,适当地引入一些与市场需求相关的实践性课程和项目,让学生在学习理论的同时,也具备一定的实践能力。
|
||
3. **实践的重要性:** 实践是学习软件工程和设计模式等知识的关键。大学教育应该创造更多的实践机会,例如组织项目实践、实习、竞赛等,让学生在真实的场景中应用所学知识,积累实践经验。
|
||
4. **培养学生的自主学习能力:** 面对快速变化的技术环境,大学教育不可能涵盖所有最新的技术。因此,培养学生的自主学习能力至关重要。学生需要学会如何自主学习新知识、适应新技术,并不断提升自己的技能。
|
||
5. **爱好与职业发展:** 你提出的“找到自己真正的爱好”非常重要。只有对所从事的职业充满热情,才能不断学习、进步,并最终取得成功。大学教育可以帮助学生探索自己的兴趣和特长,为未来的职业发展做好准备。
|
||
|
||
**针对你提出的问题,我的建议是:**
|
||
|
||
* **本科教育应该更加注重基础理论的教学,培养学生的计算思维和解决问题的能力。** 这是学生长期发展的根本。
|
||
* **在课程设置中,应该增加实践环节的比重,提供更多的项目实践机会,让学生在实践中学习和成长。**
|
||
* **鼓励学生参与开源项目、实习和竞赛等活动,拓展实践经验。**
|
||
* **引导学生探索自己的兴趣和特长,找到自己真正热爱的方向,并将其与职业发展相结合。**
|
||
|
||
总之,本科教育应该在短期就业和长期发展之间找到平衡点,既要关注学生当前的就业需求,更要注重培养学生未来的发展潜力。只有这样,才能培养出真正适应时代需求的优秀人才。
|
||
|
||
CS毕了业大多去做软件工程师,根据我的经验,一个中级软件工程师应该具备以下核心能力:
|
||
1. 掌握编程思想(即思考软件本质)
|
||
2. 熟悉软件工程
|
||
3. 拥有OOD(面向对象设计)能力
|
||
4. 熟悉设计模式
|
||
5. 掌握3~5种语言
|
||
而初级软件工程师的工作,现在已经可以被AI很好的替代,所以,大学本科的CS教育应该将重心放在如何借助AI打造未来的中级软件工程师的核心能力上。而计算机基础(算法、数据结构、体系结构、操作系统、编译原理)这些是上述5个核心能力的基石,也是初级软件工程师需要具备的能力。这正是区分优秀的程序员和仅仅掌握编程语法的“码农”的关键所在。再加上AI时代,初级软件工程师需要养成的能力:
|
||
1. 计算机基础
|
||
2. 人机协同能力
|
||
3. 培养终身学习能力
|
||
4. 熟悉1~3种语言
|
||
|
||
理想的CS教育应该将理论与实践相结合。然而根据我的经验,上学时学的软工,在纯学习的情况下是学不会的;没有5万行代码打底的情况下,设计模式也是学不会的。所谓的书读百遍其义自见。
|
||
所以本科教育应该跟风市场,解决就业,还是为了一个可以作为事业的事情打造基础。本质上还是爱好与混口饭吃的问题。
|
||
|
||
我认为本科教育的根本目标应该是为学生的长期发展奠定基础,培养学生的学习能力、解决问题能力和创新能力。这包括扎实的理论基础、良好的编程素养、批判性思维和终身学习的意愿。
|
||
前三年可能会很难熬,但是一旦“开了窍”,后面都是飞轮效应;而若急功近利,可能开始很容易,但是后面的路基本就堵死了。
|
||
另外应该增加实践,大学四年写一万行代码不多吧。而且有了AI辅助的情况下,这个标准可以放到3万行。
|
||
最后应该教一些基础素质能力的课:批判性思维,学习能力,逻辑思维,文章写作(金字塔原理)这样的。这里直接可以引进国外的教材。
|