it-swarm.cn

他们为什么不在学校教这些东西?

整个夏天,我很幸运能够进入Google Summer of Code。我学到了很多东西(可能比我在所有大学课程的总和中学到的要多)。我真的很想知道为什么他们不会教我在学校学到的一些东西。仅举几例:

  • 单元测试
  • 版本控制
  • 敏捷开发

在我看来,他们花了大量时间预先教授数据结构和算法等其他内容。虽然我仍然认为早期学习这些非常重要,但他们为什么不在他们之前教这三个呢?或者只是我的学校没有教授这些东西?

不要误解我的意思,我不认为大学总是要教最时髦的编程时尚,但是我的教授不应该教我一些“在开始编码之前绘制图表吗?”

118
Jason Baker

对您的问题最简单的答案是,计算机科学和软件开发领域都是非常新的,并且不是很好理解。虽然现代所有的科学和工程学科都在迅速发展,但其他领域有更多的经验可供借鉴,并且对它们如何运作有更广泛的共识。

例如,尽管最近在材料科学方面取得了进步,但土木工程师已经知道大约2000年如何建造一个不会坍塌的拱门,这是可以在大学里教授和学习的,而且争议相对较小。虽然我完全同意您关于软件开发人员应该学习的技术,但此协议基于个人经验和非正式推理。为了成为社会公认的“最佳实践”,我们需要收集的定量数据非常昂贵:版本控制有多大帮助?它有什么用?单元测试?我们可以推断出各种技术的有效性,但实际上证明效率最终会非常昂贵。我们需要从头到尾多次运行一个完整,逼真的软件项目,使用不同的技术,拥有相同专业知识的程序员群体。至少我们需要大量有关这些项目不愿发布的现有项目的数据。

土木工程师有数千年的桥梁可供查看,并提供大量信息。另一方面,软件开发人员只有几十年的信息,其中大部分都是保密的,因为组织很少有动力整理和发布有关开发人员效率的信息,即使他们正在收集信息(大多数都是“T)。

还有一些混乱的领域。软件开发或软件“工程”实际上与计算机科学不同。软件开发人员需要掌握计算机科学的工作知识,但是在算法复杂性的边界或者并行性推理的工作并不是工作程序员每天都会做的事情。同样地,一个真正的“计算机科学家”会编写大量丢失的代码,这些代码只是不起作用或者没有做任何有趣的事情,并且不会从实际软件产品的严格程度中获益。

互联网和开源社区的出现可能提供足够的数据来开始最终回答这些问题,但即使答案明天可用,它们也可能需要100年时间才能渗透到国际社会,以至于每个人都同意什么应该在学校教授。

最后还有一些经济方面的考虑。这是一个相对较短的时间,因为几乎每个参与软件开发的人都可以便宜,轻松地访问专用机器来运行他们想要的任何开发工具。几十年前,完全专注于运行测试的机器,甚至包含无限的源代码历史,对于很多人来说,这似乎是非常昂贵的。

187
Glyph

因为我们的老师:

  1. 没试过单元测试,
  2. 不知道如何使用版本控制和
  3. 甚至没有听说过“敏捷开发”。

学生应该把事情掌握在自己手中。我们做到了,结果很好,不是吗?

42
mislav

列奥纳多达芬奇写道,

那些在没有科学的情况下迷恋练习的人就像一个没有方向舵或指南针进入船只的飞行员,从来没有任何确定性。实践应始终建立在理论知识的基础之上。

好学校既教授理论(数据结构,算法等),也教授实践(单元测试,版本控制等)。这需要适当的教师混合,以便能够正确地教授这枚硬币的两面。完全由理论类型组成而没有真正经验的教师将不会这样做。同样,完全由从业者组成的教师也不会这样做。你需要一个混合,好学校有这个。

41
Alan

计算机科学一直有些矛盾;关于计算机的部分不是科学,而科学的部分不是计算机。

大学倾向于更多地依赖于“科学”方面(算法,数据架构,编译器等),因为这些东西比当前的行业最佳实践更加“永恒”,这些行业最佳实践往往逐年发展变化。例如,版本控制在过去5年或10年中经历了惊人的变化,但是大O仍然是大O,并且散列,btree和递归仍然像40年前一样有用。他们的想法通常是为您提供足够的基础,然后您可以选择git等工具,并了解当您被告知底层数据结构是SHA-1哈希的非循环有向图时,以及开发人员努力工作时的含义优化系统调用的数量,使其受到约束。

现在,考虑一下你学到了所有你必须知道的事情才能理解最后一句 - 如果答案是'大学',那么他们的工作做得很好。

39
pjz

一切都是流行的时尚。在大学的第一年,你将比在大学里的所有年份学到更多。计算机科学与计算机无关。

College为您提供了一个装满工具的工具箱。这是一把螺丝刀,是一把月牙扳手。你可能会在大学里使用每个工具一次。当你进入现实世界的时候就是你真正发现自己拥有的东西。你可以从其余部分中找出有用的部分,你想在工作台上留下哪些,以防万一,以及你每天留在口袋里的东西。

Tqm,Iso,Cmm,Agile等等。这些都是他们将要来的时尚,他们会去,没有一个成功的不仅仅是常识。所有成功的工程师和公司都使用某种常识,这就是使他们成功的原因,很少有人需要它的名字。问题是你不能出售常识,经理无法通过培训和购买常识来证明自己对公司的价值而没有一个吸引人的名字。在上面写一个名字,他们的上级已经阅读了一些新闻文章或杂志,经理保住了他们的工作而你保留了你的工作。声称遵循这些做法的公司实际上很少。大多数人都会向一位顾问写一张支票,并将他们的年度或终身证书交给某个俱乐部,这样他们就可以在他们的网站上放置一个图形或者他们的产品进入盒子上的标签。很多人会认为这很少见......在那里,看到它,它发生了。这是业务的一部分,你必须偷工减料以保持盈利并保持门打开和灯亮。所有这些做法的核心追随者都认为最后一个是时尚,而这一个不是,最后一个真的太昂贵了,这个不是。最后一个是假的你刚刚聘请了一位顾问,这个是真的。与编程语言一样,这些也将发展。

您了解业务现实,大学系统以及您在其中的角色的能力是关键。像生活中的任何事物一样,选择你的战斗。它不是大学或企业或政府或任何其他人的工作,教你想要你需要或想知道。寻找第一名是你的工作。同样,你不能责怪别人为你提供时间来做这件事,你必须这样做。你会脱离马,你不是受害者,起床并重新开始,没有任何借口,生活不公平。利用讲义,不要假装独立。并且当然要支付你的会费,不要给公司干涸的讲义,而不给他们一些东西(当时你最好的?)作为回报。

为什么人们认为cmm或敏捷或其他任何一种都是时尚?为什么他们认为他们不是?为什么教授教你这样的程序?为了避免得到或避免常数或避免这个和那个?是因为它产生更可靠的代码吗?表现更好的代码?减少人为错误?或者是因为对论文/程序进行评分更容易,让他们有更多时间进行研究?是因为他们不知道如何编程,他们只是关注这个主题的其他人?他们是否告诉过您,您无法拥有可维护,可靠,高性能的代码?您甚至无法“选择任何两个”可维护的干扰,可靠性和高性能?有时你会牺牲性能的可靠性。有时你不关心可靠性或性能,你只想从另一个会计软件程序的版本117.34.2到版本118.0.0。您的商业模式来自销售版本升级和技术支持,就软件开发人员而言,任何旧机器人都可以以相同的方式编写相同的代码。用大学新鲜的东西替换烧坏的,并继续销售升级。

这些问题没有普遍的答案,你必须找出你的意见,与之共存并为之辩护。改变主意,与之共存,并捍卫它。

质疑一切......如果我触摸炉子上的火锅,我真的会被烧掉吗?害怕的心理影响是否会造成更多的伤害而不仅仅是被烧伤?是否有一种安全的方法来测试答案而不会受到伤害?

当我能负担得起的时候,我会购买并最终在我的宿舍里融化晶体管,帽子,电阻器等,所有这些都有一种独特的难闻气味。购买立体声耳机比在第一个晶体管类别后第二天建造一个放大器要便宜得多,也便宜得多。 Linus当然是例外,它比购买操作系统更容易购买操作系统......虽然你在那段时间学到的东西与Linus学到的不同,但你可以做得更多。

大学内外的世界将采用这些公式(cmm,敏捷等)来解决问题,当下一个问题出现时,他们会迅速放弃它们。你不必使用版本控制来获得成功,就像没有那样有很多成功(实际上,由于行业的时代,到目前为止还没有版本控制有更多的成功)。同样,您可以通过最少的测试获得成功(以计算机行业中真正的大牌为例)。您可以通过测试自己的代码来成功,并通过遵循永远不应该测试自己的代码的规则来获得成功。您可以使用emacs成功,并且您可以成功使用vi。你必须决定什么混合适合你,如果你很幸运找到一个与你同意的工作场所。随着时间的推移,适合你的工作将会发生变化,从工具到语言再到编程风格,再到恐惧,版本控制,文档等。你会结婚并生孩子,并决定你可能想隐藏在那个大公司的角落里。健康保险包与无聊的工作,享受你的孩子,而不是在小型创业公司的热门程序员。

当你离开大学并进入现实世界时,倾听并与之合作并与“老定时器”争论。他们有几十年到几个世纪的综合经验,他们已陷入的陷阱,你可能会避免和或自己测试(也许你意识到你不必触摸火锅,发现它会烧伤你)。大多数人会看到这些潮流中至少有一两个来去匆匆,特别是它们被烧得多么糟糕,以及它们从中恢复过来的方式。他们知道许多不同的测试方法,以及测试样式的名称。什么有效,有什么不行。风险在哪里以及如何避免在切线上浪费时间。当你成熟并且你成为旧计时器时,将它向前传递。通过尝试教导那些关注你的人来支付你学到的东西。记得要教他们如何钓鱼,不要只给他们一条鱼。有时你必须让它们在成功之前失败,防止它们被烧得太厉害。

我真正想在这里说的是,现在我们处于一种罕见的情况,我们可以看到一个平行宇宙的演变(并可能影响它)。是的,与物理学相比,计算机科学是一门年轻的科学。但与此同时,它已经进化了很多次。根据您的工作地点和与您合作的人员,您可以观察硬件工程师。硬件世界中的编程语言当然不是新的,但它并没有像软件世界那样快速地发展。软件有几十年的开端。硬件一直认为软件工程师是二等公民。我们的工作很容易,他们的工作很难。 (注意我实际上都是硬件和软件工程师)。有趣的是,现在他们仍在处理我们认为的基本或婴儿问题。为什么我需要使用版本控制,我是唯一一个在这个芯片上工作的人。您使用gcc或其他廉价编译器或免费IDE的经验可能与我使用的昂贵工具相比,如果公司认为您值得使用它或者甚至知道如何使用它们他们会给你买一份副本。还有一长串其他借口。我有幸学习了vhdl和verilog,并在一周之内从这样一个硬件工程师那里得到了高效率(尽管我的文凭说电气工程师我的职称是软件工程师)。我想学习这些语言,当我可以使用这些工具时,我会在办公室呆到深夜并自学。从那时起,该工程师特别意识到我所说的是真的,语言只是语法,编程基础是相同的,工具都做同样的事情。它的苹果和苹果不是苹果和橘子。

总的来说,尽管仍然很难发出这样的信息:这两个并行行业中的一个在语言,编程习惯,源代码控制,测试,工具,编程环境等方面比其他行业有更多的经验。我试图解决的问题是在开发时采用硬件设计,创建价格合理的功能模拟器,我们可以与处理器的模拟(虚拟机)配合使用,这样我们就可以开始测试硬件并开发测试和可交付软件早在我们进入芯片之前。没有关于此的任何“新”,但我们没有机制来获取最新代码,跟踪代码中的更改以查看我们需要关注时间的位置。没有用于跟踪定义硬件的用户(编程)接口的文档的机制。一个黄金副本以二进制形式存在于某人的电子邮件收件箱中,并且只有在您不必阅读verilog以查明正在发生的情况时才会更改。等等,那个verilog是多大了?我整整一周花在你身上的那个错误在三个星期前发现并修复了吗?那么我们只是飞到一些度假胜地和派对六个月等待硬件人员完成他们的任务并把它扔到墙上给我们,或者我们借此机会试着保持耐心和乐观并告诉他们他们有一些常识方法不是那种让他们既能完成工作,也可以分享他们的工作以及分享他们的东西进行同行评审的常识方法......

请记住,硬件工程师确实带着一盒闪亮的新工具离开大学,就像你一样。您学习了17种不同的编程语言,其中您只能使用一种,您职业生涯中的其他语言将在您离开大学后发明。当他们离开大学时,他们可以告诉你他们对微积分和相对论的了解,每个元素中有多少电子并计算高斯曲面周围的电荷。但他们职业生涯的大部分时间是一,零,和,或者不是(嘿,我们有共同点,你真正需要了解的是计算机,一,零,和,或者不是硬件或软件工程师)。从物理学,微积分的基本定律来看,电子不会像编程语言那样快速地发生变化。但是编程的基本原理在所有语言中都是相同的,并且将继续存在于未来。您是否离开大学知道或者您是否认为Java与C++不同且更好,因为这和那个以及另一个?

像任何其他企业一样,大学的工作就是保持盈利。他们必须聘请合适的学者,以便为正确的学生和正确的研究资金以及正确的研究项目提供帮助,使大学获利。他们必须提供合适的班级,以培养合适的学生并培养出合适的毕业生,这样几十年后,大学附近的雇主和希望远在外的雇主都会认识到这所大学能够培养出高效,有利可图的员工。 (是的,有时你必须吸引合适的运动员参加正确的运动,以获得适当数量的电视时间和适当数量的名称识别和体育收入)。一些大学将教授C++和Java,有些大学永远不会。有些人会发明CMM,有些人会教Agile,有些人则不会。如果大学有任何价值,那么你可以在那里学习。他们不会教你学习的所有东西,但他们会有一些有用的东西。当您在那里时学习一些东西,在工具箱中收集合理数量的各种形式的工具。离开大学找工作。如果您的工具箱很糟糕,可能会找到另一所大学而从未提及第一所大学。如果它是一个好的工具箱,请使用这些工具并根据自己的时间构建一些新工具。如果它是一个非常好的工具箱,说出关于那所大学的好东西,以及你从中学到的好学术,并从学校回来支付他们给你的东西。即使你没有在大学工具的通用目录中获得所有可能的工具,你也会走开某个子集。即使你不毕业......

12
dwelch

当我在俄勒冈理工学院担任兼职教时,我教过这些东西。他们被教导,只是稀疏。

12
Scott Hanselman

哦,上帝不要让我开始

我曾经在一所声名卓着的大学担任过cs主任,告诉我面向对象的编程只是一个“时尚”,所以他们没有提供像C++那样的任何课程。

至于为什么他们不教这些东西,那么,大学就是教你学科的基础知识,不一定是行业的最佳实践

11
Steven A. Lowe

最简单的答案是,你正在学习计算机科学,你列出的东西与计算机科学的学术领域并不真正相关。软件开发可能是你用计算机科学的东西,建立在你学到的东西的基础之上......但计算机科学和软件开发并不是一回事。

教你版本控制的课程,或者如何编写有效的单元测试...这将教你一个 trade ,即(好的)软件开发。

10
matt b

那么大学的事情就是他们需要教授真正普遍的东西。像敏捷开发这样的东西仍然很新,尽管它在互联网上被讨论了多少,但它并没有在任何地方使用,所以教给全班学生可能只会让少数人进入敏捷商店。

然而,版本控制是现在不可原谅的事情。这是每个人都需要理解它的工具,它几乎和编译器一样有用,CVS已经存在了大约20年以上。任何离开大学的程序员至少都需要理解这些概念。幸运的是,如果您在大学中进行任何小组工作,您可能很幸运能够与已经了解版本控制的人一起降落,并说服您的小组使用它。我知道我很高兴那个人在我的小组里。

单元测试也非常不可原谅。我唯一要说的是,这本书仍然是在测试驱动的开发上,并且100%的代码覆盖总是有时会比它的价值更麻烦。但单元测试非常有价值,应该在软件工程课程中介绍。我想,有些东西正在进入一些大学,但还没有到达所有大学。

8
William

为什么不呢?我获得CS学位的经历几乎是一样的。原因是,据我所知,教授编程的人不会编程。不需要教授这些东西进行认证,教师不熟悉它,学生从不开发任何重要的项目作为课程的一部分。与教授CS理论或Java语法相反,实际教授编程没有动力。

6
Allen

这取决于大学。我于2003年毕业于澳大利亚大学。在那段时间里,我们学习了UML,单元测试,XP(和其他敏捷方法论),以及Z,算法和数据结构,操作系统等所有正式的东西。

虽然他们没有详细介绍单元测试,但更多的是为了一次演讲而通过服务。如果能够学会如何编写有效的单元测试,而不仅仅是“什么是单元测试”,那将是很棒的。

就版本控制而言,我们从第2年开始在我们的编程项目中使用它(CVS)。

我同样强烈赞同Glyph所说的话。 CS是一个如此不成熟的领域,实际上只是在过去的50年里,我们不知道我们应该学习什么,什么只是一时的流行。给它一个150年,然后事情可能会更多地解决。失败的真实世界项目的数量很明显,这是一个不成熟的行业。想象一下,如果80%的建筑项目失败了!

6
Rob Gray

计算机科学家认为他们是数学家而不是工程师,所以他们更喜欢教数学部分而不是工程部分。测试,版本控制和文档不会超过任何其他工程学科中的时尚。

5
Martin Beckett

所有这些都可以轻松地(在一个单独的类中)涵盖软件开发实践。它不是大多数CS课程的一部分,因为这不是CS的内容,尽管我认为对这些内容的一些报道是有用的。我的学校有这样的课程;它没有涵盖版本控制,但它确实涵盖了UML,需求收集,开发方法(各种敏捷和瀑布),单元测试,集成测试等,并要求我们以4-5的团队工作来开发项目(Java中相当简单的Clue rip-off)。如果您觉得需要进一步的软件工程课程,那么它们可以作为选修课程使用。

尽管我在任何课程中都没有提到过一次版本控制,但我的大多数朋友都将它用于个人项目,课堂作业等等,所以我们并没有接触到它。那些没有自己捡起来的人在团队任务过程中不得不被同学使用。

大学旨在教授概念和理论,因为那些是你自己很难掌握的东西。版本控制是一种工具,很容易上手。使用它,阅读网络上的一些教程,你就完成了。如果你需要讲课和家庭作业来弄清楚如何从SVN中检查出来的东西,你将会遇到很困难的事情。

请记住,有很多方法可以在课外学习东西;利用这一点。你付出了很多钱去参加课程并使用这些设施,所以为了它所有的价值而喝它并参加LUG和ACM会议,参加项目团队(总有一些ME建立一个需要程序员的机器人),或者得到管理人文部门服务器的工作。从材料工程大楼的装卸码头中挑选一台计算机,下载带有快速宿舍互联网连接的Linux iso,然后玩游戏。

4
Adam Jaskiewicz

我认为问题在于大学并不认为他们需要教你成为一名专业人士,而是专注于编程的学术方面。我原以为至少应该参考行业中使用的最新方法和技术,因为这些东西也具有学术意义。

在我们的课程中,我们学习了个人软件过程,其中包括记录项目花费的时间,良好的评论等,但没有提到版本控制等专业基础知识。

3
Deeksy

你已经命名为3,其中一些我认为对于理解计算机系统(例如版本控制)几乎同样重要。这些都是工作的一部分,你可以成为一名优秀的程序员/计算机科学家,而无需了解它。

类似的单元测试 - 为什么选择单元测试?当然,可用性测试,系统测试,用户验收测试和工厂验收测试更重要吗?好吧,除非您将代码发送到维护部门后认为您的工作已完成,否则它们是完全正确的:)

想想我每天使用的其他概念,这对于学习软件和计算机系统基础知识的学生来说没什么用处:

  • 良好的评论实践
  • 符合标准(不仅是国际标准,还有团队编码标准)
  • 文件
  • 更改控制(不一定与版本控制相同,这是关于存储差异,这更多的是关于什么以及为什么你改变了一些东西)
  • 可用性开发

以上都是“软技能”,你没有 需要 写出好的代码。

但是,如果你错过了“硬”技能,比如数据结构和算法,那么你编写好代码的机会几乎是不可能的。

2
gbjbaanb

除了敏捷开发之外,我在大学一年级学到了所有这些东西。

这就是选择合适的学校,恕我直言。如果你进入前10名,你将很快学到所有这些东西。

就CS教育而言,我们基本上要求教授们教授这么多(各种语言的语言,数据结构,运行时效率,以及实际上如何在比特级别工作)。我想提出一个问题,为什么孩子们不会自己去学习软件工程?

2
Alex Gartrell

这仅仅是因为数据结构和算法构成了计算的核心,因此更为重要。单元测试,版本控制和敏捷方法只是交易的工具(如果有必要,预计会在工作中接收它们)。

2
CaptainHastings

我在大学里学到了所有这些。也许这取决于你选择的课程?我的课程非常多样化(软件设计,UI设计,电子商务,AI,功能编程等)。软件设计涉及设计模式和单元测试(一个涉及各种事物的大型项目)。 UI设计......我们是一个从事项目的三人小组。没有版本控制我们什么都做不了,所以我们得到了。灵活的开发是我们的教授不断告诉我们的,但是他们把它留给每个小组来使用它。

我发现很多大学生都参加了“简单”的课程或课程,这会使他们获得高GPA。其他人专注于他们想要学习的东西,并且正在大力探索找到他们感兴趣的领域。然后有些人确切地知道他们感兴趣的东西......这很好,除非他们往往不会使他们的课程多样化。

2
Swati

就像学生一样,每所大学都是不同的。有些大学,或者更确切地说,有些教授不愿改变或懒惰。幸运的是大部分都没有。理论,概念,历史等对任何CS课程都很重要。但是,为学生的工作环境做准备也是如此。毫不奇怪,我所在地区的社区学院提供最新且适用的CS课程。与大型,成熟和着名的大学不同。

2
Matthew Sposato

他们不教这样的话题,因为大多数学校都是学术性的,而不是贸易。也就是说,它们旨在教授思想和理论,而不是训练你进入职业生涯。质量保证的整个概念与计算机科学无关,除了通过数学证明。此外,QA实践和开发工作流程在一个开发中心与下一个开发中心之间存在很大差异,因此在学校教授它们是浪费您的时间和金钱。

2
Nathan Strong

要回答为什么这些东西不是第一个被教授的东西:本科课程通常训练你成为硕士生。只有在您开始选择自己的课程(通常在以后的几年中)时,您才能选择了解学术界以外的事情。这就是为什么他们专注于算法,数据结构,向您展示未解决的问题等。

我个人认为他们这样做很好。编程并不像我们许多人看起来那么容易;很多人都在为之奋斗。我宁愿这些人在弄清Perforce怪物之前先了解for循环的工作原理。

2
Swati

你提到的所有三件事(单元测试,版本控制,敏捷开发)都在格罗宁根大学的计算科学课程中得到了一定程度的教授。这是否是一件好事,我将作为一个悬而未决的问题离开;但是没有大学教你“实际的东西”是不正确的。

1
Thomas

这些都是基于我在转换专业之前在CS项目中的有限经验,以及我在一家大型软件公司实习的经历。没有教授单元测试,因为您必须创建的大多数程序都不够大,无法进行自动化测试,您保证了一组特定的输入,因此可以手动测试所有内容。教你如何自动化测试也可能会影响项目的评分,因为大多数项目都使用运行自动化测试的脚本进行评分,快速浏览代码以确保你没有int foo1; int foo2;并使用适当的缩进。

我不知道为什么版本控制不会被教授,但部分可能是项目的大小。我从来没有任何足以进行版本控制的项目,而且我的意思是超过1000行代码,需要整整一个学期来编写。我想如果你需要的话,他们会认为你会教给你自己。我所拥有的任何团队项目都应该是成对编程项目,为什么在同一台计算机上使用版本控制呢?

我不知道为什么不会教授敏捷开发,但它可能会与程序大小相同。虽然adgile开发在个人计算机和小型服务器上运行的新软件中很常见,但它通常不用于IBM大型机等系统,也不用于文档为王的银行或医疗等问题域。它也可能与这样一个事实有关,即20世纪前许多教授都接受过培训,这种事实并非如此。

1
Jared

我不认为敏捷编程是一种时尚,但与此同时我很难想到教师可以给你一个项目让你学习它的方式。除非他们给你项目A build a,项目B扩展了一个。问题是时间和范围。在4个月的课程中,这将很难。

版本控制和单元测试方法不断变化,并且取决于语言或定义它们的人。

数据结构和算法是可以在类设置中处理的东西。老实说,他们需要花费更多的精力来理解单元测试和版本控制。试着记住大学的一部分就是教你自学。拼贴画并没有完全相同的授权。或者至少不同程度。恕我直言。

1
baash05

我认为好的CS课程应该教授将作为未来所有编程教育基础的基础知识。敏捷等开发方法和版本控制工具就像时尚;他们来去匆匆。此外,它们往往被用于工业环境而不是学术环境,因此我认为大学很少能够涵盖那些你可能在工作中学到的东西。我不是说这是对的,但这可能是学术心态。

1
Bullines

我同意你所说的话。我刚刚开始在软件开发领域工作,我已经开始学习敏捷开发,这是我从未在大学里学过的东西。

事实可能是大学教授没有尽可能多地跟上新的开发技术。他们也可能觉得课程中还有其他更重要的事情。

1
Dave

大学讲师不知道如何编写软件,他们只是研究它,教它,并偶尔抨击一些只有在论文发表之前才能工作的代码。

这只是因为像Titus这样的人,我们得到了任何真正想要编程的学者 - 在这里阅读他对这个主题的评论

当我还是一名学生时,我在图书馆阅读有关极限编程的书籍,我们在课堂上对它进行了详细讨论 - 同样的课程要求我们遵循软件开发的“瀑布模型”,其中“编译”是其中的一个步骤。拥有。

在你的职业生涯中一切顺利,我希望你毕业你的学位,很高兴在你的名字后面写信。 :)

1
Jerub

我认为这取决于你所处的计算机科学课程类型是针对研究和科学方面的课程,还有哪些课程适合实施方面。我特别拒绝某些只有教授留在学术界的学校。如果你没有教授没有“使用”他们教的东西,那就完全是他们的头脑。

插头:在DePaul大学攻读Comp Sci和MS in Soft Eng的学士学位,我主要由兼职教授的教师/教授教授,这对我来说很好,因为我宁愿让他们从前一天带来一个轶事并将其与课堂联系起来。此外,这是一个大多是通勤/兼职学校,大多数学生都有工作使用他们正在学习的东西。

学习的过程仍然从所有的理论开始,但是我们通常会被问到“你们有多少人在你的工作中实际使用它?”典型的答案是“我们使用它,但是以简化或简化的方式”,然后我们进入实际的现实世界场景。

在我上学期间,单位测试始终存在。即使他们开始使用Java,他们也让我们在所有项目中使用ANT和JUnit。这是构建配置和单元测试的良好开端。

极限编程包含在我所参加的大约3或4个课程中。我记得他们都从12个不同的方面开始,从配对编程到单元测试(见上文)。而现在似乎关注的是敏捷。

因此,快速回答是肯定的是,那里的学校比其他学校采用更务实的方法。

1
Glennular

大多数大学软件项目必须符合单个班级的范围,这意味着有效地进行为期5-6周的项目,涉及1到4名合理的无经验程序员。单元测试和源代码控制只有在您将其扩展到涉及更多人的长期项目时才会变得令人信服地有效。因此,很难将这种技术构建到类项目中,而这种方式不仅仅是毫无意义的要求。

1
Shalmanese

主要原因是许多(大多数?)大学认为自己的目标与贸易学校不同。因此,他们希望教授学生 如何学习 以及该学科的基本原则。此外,算法和数据结构将适用于任何编程语言,并且不依赖于特定工具(毕业时可能会或可能不会使用)。

在计算机科学中,这意味着算法,数据结构,计算机理论,编译器理论等。你列出的东西不是关于理解如何编程,如何解决问题等等。它是关于编程的实践(其中,顺便说一下,对于大学里的任何一个打算作为程序员工作的人来说,这本书是一本了不起的书。现在,大部分内容都不会用在入门级代码猴位置,导致一些人认为它没用。我不同意。我认为它非常有用。但是,这并不意味着在获得CS学位后,您将了解作为程序员所需要的一切。

这也不是说你提到的东西没用。他们是。如果你不学习它们,你将无法作为程序员工作,我认为它们应该在大学里教授,至少在一定程度上。我会看一下教学版本控制,单元测试等,就像我在艺术本科课程中看到的那样,以及Paint Brush是什么以及哪些应该用于各种情况的教学。

1
Christopher Cashell

单元测试和版本控制都是在我上大学的第二年计算机科学课程中讲授的。单元测试属于测试部分,其中还包括白盒和黑盒之间的差异,并且在第3年的编程任务中有很多标记用于良好的错误处理,这很容易来自单元测试。

在我认为的学术环境中,敏捷开发可能很难教。虽然我在理论上确实了解了瀑布方法,但直到我毕业并进入可能与学术界完全不同的现实世界之后,我才开始在现场看到它。在第3年,我做了所有奇怪的错误案例,并且几乎通过了一项任务,我从未触及过任务授权给我讲述信号量的核心。

此外,敏捷已经存在了多长时间,你指的是哪种形式的敏捷?从我所看到的,它有许多不同的实现。

1
JB King

理想情况下,我的猜测是他们要么没有时间教这些东西,要么教授算法和语言更重要,大多数学生将难以学习的东西。

学校是自学的对立面,因为这些东西(版本控制,单元测试)是最容易学习的,所以他们需要确保即使是能力最差的学生也能够做最重要的基本编程和算法,稍后做“周围的事情”。

你谈论的那些事情会随着时间的推移而改变,而且很难改变工具等。大教育结构就像保持简单。

0
jokoon