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

时间:2020-03-05 18:57:43  来源:igfitidea点击:

在整个夏天,我很幸运地参加了Google Summer of Code。我学到了很多东西(可能比我所有大学课程学习的总和还多)。我真的很想知道为什么他们不教一些我在学校早些时候学到的东西。仅举几例:

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

在我看来,他们花了大量时间在教学其他方面,例如数据结构和算法。虽然我仍然认为这些对于早期学习非常重要,但是为什么不在他们之前教更多这三个呢?还是仅仅是我的学校不教这些东西太多?

别误会我的意思,我认为大学总是不应该教那些最流行的编程时尚,但是我的教授们不应该教给我的东西不是"在开始编码之前画图"吗?

解决方案

回答

哦,上帝别让我开始

我曾经在一家著名大学担任过CS系主任,告诉我,面向对象编程只是一种"时尚",所以他们没有像C ++这样的幻想提供任何类

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

回答

我认为好的CS程序应该讲授基础知识,这些基础知识将成为我们将来进行所有编程教育的基础。像敏捷这样的开发方法和版本控制工具都像时尚。他们来来去去。而且,它们通常用于行业环境,而不是学术环境,因此,我认为大学很少涵盖诸如我们可能会在工作中学到的东西。我并不是说这是对的,但这可能是学术上的心态。

回答

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

问题的事实可能是大学教授跟不上最新的开发技术。他们可能还会觉得自己的课程中还有其他更重要的内容。

回答

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

我发现许多大学生上了"简单"课程或者课程,他们的GPA很高。其他人则专注于他们想学习的内容,并在很大程度上探索以找到他们感兴趣的领域。然后有些人确切地知道他们对什么感兴趣……这很好,除了他们倾向于不使他们的课程多样化。

回答

确实为什么不呢?我获得CS学位的经历几乎是相同的。据我所知,原因是教编程的人没有编程。不需要教那些需要认证的东西,老师们也不熟悉它,并且学生从不开发任何有意义的项目作为他们课程的一部分。与讲授CS理论或者Java语法相反,没有实际去教编程的动机。

回答

大学的讲师并不知道如何编写软件,他们只是研究,教导软件,偶尔会抨击一些代码,这些代码只有在论文发表后才有效。

仅仅是因为像Titus这样的人,我们才吸引到了真正精通编程的学者,请在此处阅读他对该主题的评论

当我还是一个学生的时候,我在图书馆中阅读有关极限编程的书籍,我们在与他们要求符合软件开发"瀑布模型"的相同类中简短地讨论了它,其中"编译"是其自身的一步。

祝我们事业蒸蒸日上,我希望我们能获得学位,在名字后面写上一封信真是太好了。 :)

回答

计算机科学家认为他们是数学家,而不是工程师,因此他们更喜欢讲授数学部分而不是工程部分。
测试,版本控制和文档的流行度没有任何其他工程学科那么高。

回答

因为我们的老师:

  • 从未尝试过单元测试,
  • 不知道如何使用版本控制和
  • 甚至没有听说过"敏捷开发"。

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

回答

达芬奇(Leonardo da Vinci)写道:

Those who are enamored of practice
  without science are like a pilot who
  goes into a ship without rudder or
  compass and never has any certainty
  where he is going. Practice should
  always be based upon a sound knowledge
  of theory.

好的学校既教授理论(数据结构,算法等),又教授实践(单元测试,版本控制等)。这需要适当的教职人员混合,以便可以正确教授此硬币的正反两面。完全没有理论经验的,完全由理论类型组成的教师是不会做的。同样,完全由从业人员组成的学院也不会这样做。我们需要混合,好的学校也有。

回答

我在俄勒冈理工学院(Oregon Institute of Technology)兼职时教过这些东西。很少有人教他们。

回答

好吧,大学的事情是他们需要教授真正通用的东西。诸如敏捷开发之类的东西仍然是相当新的东西,尽管在互联网上讨论得很多,但它并没有在所有地方使用,因此向全班学生教授它可能只会使少数进入敏捷商店的人受益。

但是,如今版本控制是不可原谅的。每个人都需要了解它,它是一种几乎与编译器一样有用的工具,并且CVS已有20多年的历史了。离开大学的任何程序员至少都需要理解这些概念。幸运的是,如果我们在大学里做过任何小组工作,我们可能很幸运能与已经了解版本控制并说服小组使用它的人一起学习。我知道我很高兴那个人出现在我的团队中。

单元测试也几乎是不可原谅的。我唯一要说的是,这本书仍处于测试驱动开发之外,要想获得100%的代码覆盖率,有时总会比它值得的麻烦更多。但是单元测试非常有价值,应该在软件工程课程中进行介绍。我以为其中有些东西正在进入某些大学,但还没有普及到所有大学。

回答

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

在计算机科学中,这意味着算法,数据结构,计算机理论,编译器理论等。我们要列出的内容很少是关于如何编程,如何解决问题等的知识。这是关于编程的实践(顺便说一句,这对于任何想成为程序员的大学人来说都是一本了不起的书。现在,许多功能将不会在入门级代码猴子的位置使用,导致某些人认为它没有用。我不同意。我认为这可能非常有用。但是,这并不意味着获得CS学位后,我们就知道成为程序员所需的一切。

这也不是说我们提到的内容没有用。他们是。如果我们不学习它们,那么在作为程序员的工作上将会遇到麻烦,而且我确实认为,至少在一定程度上,应该在大学里教他们。我会看教学版本控制,单元测试等,就像看本科艺术课程一样,以及关于什么是画笔以及在各种情况下应该使用哪种画笔的教学。

回答

要回答为什么这些不是首先要教的东西:本科课程通常会训练我们成为硕士生。只有当我们开始选择自己的课程(通常在以后的几年中)时,我们才可以选择了解学术界以外使用的东西。这就是为什么他们专注于算法,数据结构,为我们呈现未解决的问题等的原因。

我个人认为他们这样做是很好的。编程并不像我们许多人想象的那么容易。许多人为此而苦苦挣扎。我希望这些人先弄清楚for循环的工作原理,然后再弄清楚Perforce是什么。

回答

对我们问题的最简单答案是,计算机科学和软件开发领域都是非常新的,并且了解得不是很好。尽管现代所有科学和工程学科的发展都在迅速发展,但其他领域也有很多经验可以借鉴,人们对它们的工作原理也有了更广泛的共识。

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

土木工程师拥有数千年的桥梁,其中包含大量信息。另一方面,软件开发人员只有几十年的信息,其中大部分都是保密的,因为组织几乎没有动机来整理和发布有关其开发人员效率的信息,即使他们正在收集这些信息(大多数情况下也是如此)。 ')。

领域也有些混乱。软件开发或者软件"工程"与计算机科学的确不同。软件开发人员需要计算机科学方面的知识,但是在算法复杂性或者并行性推理的边界上工作并不是每天工作的程序员所要做的;同样,真正的"计算机科学家"将编写大量无法使用或者没有做任何有趣事情的一次性代码,并且不会从实际软件产品的严格程度中受益匪浅。

互联网和开放源代码社区的出现可能提供了足够的数据来开始最终回答这些问题,但是即使明天有答案,他们可能仍需要100年的时间才能渗透到国际社会,每个人都同意应该在学校教书。

最后,有一些经济方面的考虑。这是一个相对较短的时间,因为几乎所有参与软件开发的人都可以廉价,轻松地访问专用计算机来运行所需的任何开发工具。几十年前,完全将一台机器专用于运行测试,甚至包含无限的源代码历史记录,对于许多人来说似乎简直是昂贵的代价。

回答

我们提到的所有三件事(单元测试,版本控制,敏捷开发)都在格罗宁根大学的计算科学课程中进行了一定程度的讲授。这是否是一件好事,我将悬而未决。但并非没有大学会教我们"实用知识",这是不正确的。

回答

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

大学倾向于更多地依靠"科学"端(算法,数据结构,编译器等),因为这些东西比当前的行业最佳实践"永恒"得多,后者每年都在发展和变化。例如,版本控制在过去5或者10年中发生了惊人的变化,但是big-O仍然是big-O,并且哈希,btree和递归仍然像40年前一样有用。他们的想法通常是为我们提供足够的基础,然后我们可以使用git之类的工具,并在被告知基础数据结构是SHA-1哈希的无环有向图并且开发人员已经努力工作时理解了含义优化syscall的数量,使其与io绑定。

现在,考虑一下我们在哪里学到的所有知识,如果答案是"大学",那么理解最后一句话,他们做的还不错。

回答

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

我不知道为什么不会讲授版本控制,但是其中一部分可能是项目的规模。我从来没有任何一个项目足以进行版本控制,而我的意思是说超过1000行代码并花了整个学期来编写。我想他们认为如果需要,我们会自学。我曾经有任何小组项目都应该是结对编程项目,如果两个人都在同一台计算机上,为什么还要使用版本控制?

我不知道为什么不教授敏捷开发,但是它可能又回到了程序大小的问题。尽管敏捷开发在运行于个人计算机和小型服务器上的新软件中很常见,但通常不用于IBM大型机等系统或者问题域(如银行或者医疗等以文档为准的领域)中。这也可能与这样的事实有关,即敏捷发展并不是在20年前左右,当时许多教授都受到了培训。

回答

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

在我们的课程中,我们学习了"个人软件过程",其中涉及诸如记录在项目上花费的时间,良好的注释等,但没有提及诸如版本控制之类的专业基础知识。

回答

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

但是,他们并未详细介绍单元测试,而是只是支付了一项讲座的合格服务费用。学到了如何编写有效的单元测试,而不仅仅是"什么是单元测试",这真是太好了。

至于版本控制,从第二年开始,我们就在编程项目中使用它(CVS)。

我也确实同意Glyph所说的话。 CS是一个不成熟的领域,实际上只是在过去的50年中,我们不知道我们应该学习什么,什么才是过去的时尚。给它150年的时间,事情可能会更加平静。现实世界项目失败的数量清楚地表明这是一个不成熟的行业。想象一下,如果80%的建筑项目失败了!

回答

他们不教授此类主题,因为大多数学校都是学术性的,而不是贸易性的。也就是说,它们旨在教授思想和理论,而不是训练我们进入职业生涯。质量保证的整个概念与计算机科学无关,只不过是通过了数学证明。此外,质量保证实践和开发工作流程在一家开发公司与另一家开发公司之间存在巨大差异,因此在学校里教它们会浪费时间和金钱。

回答

最简单的答案是,我们正在学习计算机科学,并且列出的内容与计算机科学的学术领域并没有真正的联系。软件开发可能是我们使用计算机科学所做的事情,是建立在我们所学知识的基础之上的事情……但是计算机科学和软件开发不是一回事。

教会我们版本控制或者如何编写有效的单元测试的课程,这将教会我们一种交易,即(良好的)软件开发。

回答

我一年级学习了所有这些东西,除了敏捷开发。

所有关于选择合适的学校,恕我直言。如果我们进入前十名,我们将很快学到所有这些东西。

就一般的CS教育而言,我们基本上是在要求教授很多东西(各种语言,数据结构,运行时效率,事物在位级上的实际工作方式)。我想提出一个问题:为什么孩子们不让他们自己去学习有关软件工程的更多信息?

回答

我认为这取决于我们所使用的计算机科学程序的类型,既有针对研究和科学方面的程序,又有一些针对实现方面的程序。我特别拒绝某些只有教授留在学术界的学校。如果我们没有教授没有"使用"他们所教的内容,那么所有这些实际上都在他们的脑海中。

Plug:我在DePaul大学获得了Comp Sci的学士学位和在Soft Eng的MS学位,主要是由兼职老师/教授教授的,这对我来说很好,因为我希望他们前一天有个轶事并将其与班级联系起来。
同样,这是一所通勤/非全日制学校,大多数学生都有使用所学知识的工作。

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

在我上学期间,总是进行单元测试。即使他们开始使用Java,他们还是让我们在所有项目中都使用了ANT和JUnit。这是构建配置和单元测试的良好起点。

我参加的大约3到4个课程中都包含了极限编程。我记得他们都是从12个不同方面开始的,从结对编程到单元测试(请参见上文)。现在看来,重点放在敏捷上。

因此,快速的答案是,是的,那里的学校比其他学校更务实。

回答

一切都是一时的流行。大学一年级的学习将比大学一年级的学习更多。计算机科学与计算机无关。

College为我们提供了一个包含所有工具的工具箱。这是螺丝刀,是月牙扳手。我们可能会在大学里一次使用每种工具。当我们进入现实世界时,便是真正了解自己所拥有的东西。我们可以从其余部分中挑选出有用的东西,以防万一,我们想留在工作台上的那些东西,以及每天都放在口袋里的那些东西。

Tqm,Iso,Cmm,Agile等。这些都是它们将会流行并且将会消失的时尚,成功的秘诀不只是常识。所有成功的工程师和公司都使用一些常识,这就是使他们成功的原因,很少有人需要为其起名。问题是我们不能出售常识,经理不能通过培训和购买常识而没有醒目的名字来向公司证明其价值。在上面写上一个名字,他们的上司已经在一些新闻文章或者杂志上读到了,而经理则保留了他们的工作,而我们却保留了工作。实际上,很少有声称遵循这些做法的公司这样做。大多数人会给顾问写一张支票,并向某个俱乐部获得他们的年度和/或者终身证书,以便他们可以在其网站上贴上图形或者在产品随附的包装盒上贴上标签。到那里,看到它,它发生了。这是业务的全部内容,有时我们必须偷工减料才能保持盈利,并保持大门打开和开灯。所有这些实践的铁杆追随者都认为,最后一种是一种时尚,而这不是一种时尚,而最后一种确实太昂贵而无法遵循,这不是一种时尚。最后一个是假的,我们刚刚雇用了一名顾问,这是真实的。像编程语言一样,它们也会发展。

我们了解业务现实,大学系统以及我们在其中所扮演的角色的能力是关键。像生活中的一切一样,选择自己的战斗。它不是大学,企业,政府或者任何其他人的工作来教我们想要我们需要或者想要知道的。寻找第一名是工作。同样,我们不能责怪其他人为我们提供了这样做的时间,我们必须这样做。我们会从马上摔下来,我们不是受害者,起床再走,没有任何借口,生活不公平。一定要利用讲义,不要假装独立。当然要付会费,不要从公司那里吸取讲义,而不会给他们一些东西(当时最好的东西?)作为回报。

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

这些问题没有统一的答案,我们必须找出自己的观点,接受并捍卫它。改变主意,忍受它,并捍卫它。

质疑一切……如果我触摸炉子上的火锅,我真的会被烧死吗?害怕的心理影响会导致不仅仅是被烧毁的伤害吗?有没有安全的方法来测试答案而不会受到伤害?

当我买得起时,我会在宿舍中购买并最终融化晶体管,电容,电阻等,所有这些都有明显的难闻的气味。为立体声音响购买一个耳放要比在第一代晶体管课程后的第二天尝试购买一个耳放便宜得多,而且容易得多。当然,Linus例外,与购买Linus相比,只购买一个操作系统要比编写一个操作系统容易。

大学内部和外部的世界都将采用这些公式(cmm,敏捷等)来解决问题,当下一个公式出现时,它们将以同样的速度丢弃它们。我们不必使用版本控制就可以成功,成功与否都与成功一样多(实际上,由于行业的发展,到目前为止,没有版本控制的成功很多。)同样,只需进行最少的测试就可以成功(以计算机行业中的知名人士为例)。我们可以通过测试自己的代码来获得成功,也可以通过遵循永远不要测试自己的代码的规则来获得成功。我们可以成功使用emacs,也可以成功使用vi。我们必须确定哪种组合适合我们,如果幸运的话,可以找到一个适合工作场所。随着时间的推移,从工具到语言,从编程风格到恐惧,版本控制,文档等方面,对我们有用的东西都会发生变化。我们将结婚生子,并决定与大公司一起躲在大公司的角落健康保险套餐,无聊的工作,让孩子开心,而不是成为一家小型创业公司的热门程序员。

当我们离开大学并进入现实世界时,请与"老朋友"一起聆听并与他们进行辩论。他们有数十年到数百年的综合经验,陷入了陷阱,我们可以避免和/或者自行测试(也许我们意识到不必触摸火锅就能发现它会烧死我们)。大多数人将至少看到其中一种或者两种时尚来来去去,尤其是它们被烧得有多严重,以及从中恢复过来所做的事情。他们知道许多不同的测试方式,以及测试样式的名称也已出现和消失。什么有效,什么无效。风险在哪里以及如何避免在切线上浪费时间。随着年龄的增长,我们将成为旧计时器,将其向前传递。通过尝试教那些跟随人,为我们所学的知识付出代价。记住要教他们如何钓鱼,不要只给他们一条鱼。有时,我们必须让它们失败,然后才能成功,以免它们被严重烧毁。

我现在真正想说的是,现在我们处在一种罕见的情况下,我们可以目睹平行宇宙的演化(并可能影响它)。是的,与说物理相比,计算机科学是一门年轻的科学。但与此同时,它已经发展了许多倍。根据我们在哪里工作以及与谁一起工作,我们可能会观察到硬件工程师。硬件世界中的编程语言当然不是什么新鲜事物,但是它的发展速度不如软件世界。软件有几十年的领先优势。硬件一直认为软件工程师是二等公民。我们的工作很轻松,他们的工作很辛苦。 (请注意,我实际上既是硬件工程师,也是软件工程师)。有趣的是,现在他们仍在处理我们认为是基本或者婴儿问题的东西。为什么我需要使用版本控制,所以我是唯一在该芯片上工作的人。如果公司认为我们值得使用它,甚至不知道如何使用它,那么我们使用gcc或者其他廉价编译器或者免费IDE的经验可能无法与我使用的昂贵工具相提并论,他们会为我们购买一份。一长串其他借口。我很高兴能同时学习vhdl和verilog,并在一周之内都能从这样的硬件工程师那里敢于冒险(尽管我的文凭说电气工程师我的职位是软件工程师)在这两个方面都变得富有成效。我想学习这些语言,当我可以使用这些工具时,我一直呆在办公室过夜,自学成才。从那时起,那个工程师特别意识到我说的是真的,语言只是语法,编程基础是相同的,工具都具有相同的作用。它的苹果和苹果不是苹果和橙子。

总的来说,尽管仍然很难发出这样的信息,即这两个并行的行业之一在语言,编程习惯,源代码控制,测试,工具,编程环境等方面拥有比其他行业更多的经验。我要解决的问题是在开发硬件设计时采用它们,创建价格合理的功能模拟器,可以将其与处理器的模拟(虚拟机)配合使用,以便我们可以开始测试硬件并开发测试和交付软件的时间早于我们使用芯片的时间。对此没有什么"新鲜"的东西,但是我们没有机制来获取最新代码,跟踪代码中的更改以查看我们需要集中精力在哪里。没有机制来跟踪定义用户(编程)硬件接口的文档。一个黄金拷贝以二进制形式存在于某人的电子邮件收件箱中,仅在以下情况下发生更改,好吧,我们不必阅读Verilog即可了解正在发生的情况。等等,verilog多大了?我整周花在我们身上的那个错误是三周前发现并修复的?因此,我们只是飞往某个度假胜地并参加派对六个月,以等待硬件人员完成任务并将其丢给我们,还是我们借此机会尝试保持耐心和乐观,并教他们有一些不那么侵入性的常识性方法可以让他们既完成工作,备份工作又共享自己的东西以供同行评审...

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

像任何其他行业一样,大学的工作是保持盈利。他们必须聘请合适的学者来带来合适的学生,合适的研究经费和合适的研究种类,以使大学盈利。他们必须提供合适的班级,以吸引合适的学生并培养合适的毕业生,以便随着数十年的过去,雇主们不仅在大学附近而且希望遥远的地方将认识到这所大学培养出了生产性和可盈利的雇员。 (是的,有时我们必须在正确的运动中吸引合适的运动员,以获取正确的电视时间,正确的名称识别和体育收入)。有些大学会教C ++和Java,有些则不会。有些人会发明CMM,有些人会教敏捷,而有些人则不会。如果大学具有任何价值,那么这里就有我们需要学习的东西。他们不会教我们所有需要学习的东西,但是会有所帮助。了解到那里的东西后,请在工具箱中收集合理数量的各种形式的工具。离开大学,找到一份工作。如果工具箱糟透了,也许会找到另一所大学,永远不要提第一所。如果可以的话,请使用这些工具并自行构建一些新工具。如果这是一个非常不错的工具箱,请对那所大学和我们从中学到的知识和好的学者说些好话,并偿还学校给他们的钱。即使我们没有在大学工具的通用目录中获得所有可能的工具,我们仍将获得一定的子集。即使你不毕业...

回答

单元测试和版本控制都是在我上大学的第二年计算机科学课程中讲授的。单元测试属于测试的一部分,该部分还包括白盒和黑盒之间的差异,并且在三年级的编程任务中有很多标记用于良好的错误处理,可以轻松地从单元测试中获得。

我认为,在学术环境中教授敏捷开发可能相当困难。虽然我确实从理论上了解了瀑布法,但直到毕业并进入与学术界大不相同的现实世界后,我才在野外看到它。在第3年中,我处理所有奇数错误案例,并且几乎通过了一项作业,使我从未触及该作业试图教会我有关信号量的内容。

另外,敏捷已经存在了多久了?我们指的是哪种形式的敏捷?根据我所见,它有许多不同的实现。

回答

我不认为敏捷编程是一种时尚,但是与此同时,我很难想到教师可以为我们提供项目以让我们学习的一种方法。除非他们为我们提供项目A构建,项目B在a上展开。问题是时间和范围。在4个月的课程中,这将非常困难。

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

数据结构和算法可以在类设置中进行处理。坦率地说,他们还要花更多的精力来理解然后进行单元测试和版本控制。尝试记住大学的一部分是教你教自己。拼贴没有完全相同的任务。或者至少没有达到相同的程度。恕我直言。

回答

所有这些都可以轻松地(简短地)放在有关软件开发实践的一堂课中。它不是大多数CS课程的一部分,因为那与CS无关,尽管我确实认为对这些内容的一些介绍很有用。我学校有这样一堂课。它没有涵盖版本控制,但涵盖了UML,需求收集,开发方法(各种敏捷和瀑布式开发),单元测试,集成测试等,并且要求我们以4-5的团队合作来开发项目(在Java中相当简单的Clue盗用)。如果我们认为需要进一步的软件工程课程,可以将其作为选修课。

尽管在我参加的任何课程中都从未提到过版本控制,但我的大多数朋友还是将其用于个人项目,课程分配等,因此,好像我们没有接触过它。在团队分配过程中,没有自己捡拾东西的人被同学强迫使用。

大学的目的是教授概念和理论,因为这些都是我们自己很难掌握的东西。版本控制是一个工具,非常容易使用。稍微使用一下,阅读网络上的一些教程,我们已经准备就绪。如果我们需要讲座和家庭作业来弄清楚如何从SVN中进行检查,那么实际上很困难的事情会遇到很多麻烦。

记住,在课外,有很多方法可以在大学里学习东西;利用这一点。我们要花很多钱去上课并使用这些设施,所以请充分利用它并去参加LUG和ACM会议,参加项目团队(总是有一些ME在建造需要程序员的机器人)或者管理人文部门服务器的工作。从材料工程大楼的装卸场中转移计算机,通过快速的宿舍互联网连接下载Linux iso,然后进行娱乐。

回答

大多数大学软件项目必须适合一个班级的范围,这实际上意味着需要5到6周的项目,其中需要1-4个合理的,没有经验的程序员。仅当我们将单元测试和源代码控制扩展到涉及更多人员的长期项目时,单元测试和源代码控制才具有说服力。结果,很难将这些技术以一种看起来似乎毫无意义的要求的方式构建到一个类项目中。

回答

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

同样对于单元测试,为什么要选择单元测试?当然,可用性测试,系统测试,用户验收测试和工厂验收测试更重要吗?好吧,除非我们将代码交付给维护部门,否则我们认为自己的工作已经完成:)

考虑一下我每天使用的其他概念,这对了解软件和计算机系统基础知识的学生没有多大用处:

  • 良好的评论做法
  • 符合标准(不仅是国际标准,还包括团队编码标准)
  • 文件资料
  • 变更控制(不一定与用于存储差异的版本控制相同,更多地是关于更改内容和更改原因的原因)
  • 可用性发展

以上是所有"软技能",我们无需编写良好的代码。

但是,如果我们缺少诸如数据结构和算法之类的"硬"技能,那么编写好的代码的机会几乎是不可能的。

回答

就像学生一样,每个学院都是不同的。有些大学,或者更准确地说,有些教授抵制变革或者懒惰。幸运的是大多数不是。理论,概念,历史等对任何CS课程都至关重要。但是,也要为学生准备好他们的工作环境。毫不奇怪,我所在地区的社区大学提供非常实用的最新CS课程。大型,知名和有名望的大学就没有那么多了。

回答

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