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

在今年夏天,我有幸能够进入Google夏季守则。 我学到了很多东西(可能比我学完大学课程的总和还要多)。 我真的好奇,为什么他们没有教我在学校早些时候学的东西。 仅举几例:

  • unit testing
  • 版本控制
  • 敏捷开发

在我看来,他们花了大量的时间在数据结构和algorithm等其他方面进行教学。 虽然我仍然认为早期学习非常重要,但他们为什么不把更多的这三个教给他们呢? 还是只是我的学校没有教这个东西呢?

不要误解我的意思,我认为大学总是教最stream行的编程时尚是不可取的,但是我的教授们不应该教我一些其他的东西,“在开始编码之前画一个图表”。

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

例如,尽pipe最近在材料科学方面取得了进展,但是土木工程师已经知道如何build造一个不会倒塌的大约2000年的拱形结构,而且这种结构在大学里可以被教授和学习,而且争议相对较less。 尽pipe我完全同意你关于软件开发人员应该学习的技术,但是这个协议是基于个人经验和非正式的推理。 为了成为一个被社会接受的“最佳实践”,我们需要收集非常昂贵的定量数据:版本控制有多大帮助? 它如何帮助? unit testing? 我们可以推测各种技术的有效性,但实际上certificate效果是非常昂贵的。 我们需要运用一个完整的,现实的软件项目,从头到尾,无数次,与具有相同专业知识的程序员组合,使用不同的技术。 至less我们需要大量关于这些项目不愿发布的项目的数据。

土木工程师有成千上万年的桥梁看,有大量的信息。 另一方面,软件开发人员只有几十年的信息,其中大部分信息都是保密的,因为即使他们正在收集信息,组织也很less有动机整理和发布信息, “T)。

还有一些领域的混乱。 软件开发,或软件“工程”,是不同于计算机科学的东西。 软件开发人员需要具备计算机科学方面的工作知识,但在algorithm复杂性或并行性推理的边界工作并不是每天工作的程序员都会做的事情; 同样,一个真正的“计算机科学家”将会写出大量的丢弃代码,这些代码只是不起作用,或者没有做任何有趣的事情,也不会像实际的软件产品那样受到严格的好处。

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

最后还有一些经济考虑。 因为几乎所有参与软件开发的人都能够廉价,方便地访问专用的机器来运行他们想要的任何开发工具,所以时间相对较短。 几十年前,完全奉献一台机器来运行你的testing,甚至是拥有无限的源代码历史,对许多人来说,看起来都是很费力的。

因为我们的老师:

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

学生应该把事情交给自己。 我们做到了,结果很好,不是吗?

达·芬奇写道,

那些没有科学就迷恋实践的人,就好像飞行员没有方向舵或指南针一样,从来没有确定的去向。 实践应始终基于对理论的充分理解。

好的学校教授理论(数据结构,algorithm等)和实践(unit testing,版本控制等)。 这需要教师的适当的混合,以便这个硬币的两面都可以正确的教授。 完全由理论types组成的没有实际经验的教师是不会做的。 同样,完全由从业者组成的教师也不会这样做。 你需要一个混合,好的学校有这个。

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

大学倾向于更多地依靠“科学”(algorithm,数据结构,编译器等),因为这些东西比当前的行业最佳实践更加“永恒”,它们每年都在发生变化。 例如,版本控制在过去的5到10年里经历了惊人的变化,但是大O仍然是大O,哈希,树和recursion仍然和40年前一样有用。 他们的想法通常是给你足够的基础,然后你可以拿起像git这样的工具,并理解当你被告知底层数据结构是一个SHA-1哈希的非循环有向图,并且开发者已经努力工作时优化系统调用的数量,使其成为io-bound。

现在,想想你在哪里学到了要理解最后一句话的所有知识 – 如果答案是“大学”,那么他们的工作就没有问题。

当我还是俄勒冈工学院的一名兼职教师时,我教了这些东西。 他们被教导,只是稀疏。

一切都是一时的stream行。 在大学第一年你会学到更多的东西,比你在大学里的所有年份都要多。 计算机科学与电脑无关。

学院为您提供了一个工具箱,充满了工具。 这是一把螺丝刀,那是一把新月形扳手。 你可能会在大学里使用每个工具。 当你进入现实世界的时候,是你真正了解你所拥有的。 你把剩下的有用的东西清理出来,哪些你想在家里放在工作台上,以防万一,你每天都把东西放在口袋里。

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

你理解商业,大学系统和你的angular色的能力是关键。 就像生活中的任何事情一样,select你的战斗。 它不是大学或企业或政府或任何其他人的工作来教你想要你需要或想知道的。 这是你的工作,寻找第一名。 同样,你不能责怪任何人为你提供这样的时间,你必须这样做。 你会掉下马,你不是受害者,起床回来,没有任何借口,生活是不公平的处理它。 请利用讲义,不要假装是独立的。 当然,付出你的会费,不要吮吸一个公司干的讲义,而不是给他们一些东西(当时最好的?)作为回报。

为什么人们会认为敏捷或者其他的是一种时尚? 他们为什么认为他们不是? 为什么教授教你这样编程? 为了避免gotos或避免常量或避免这个和那个? 是否因为它产生更可靠的代码? 更好的执行代码? 减less人为错误? 还是因为文件/程序的分级比较容易,给他们更多的时间进行研究? 是因为他们不知道如何编程,他们只是跟着别人关于这个主题的书? 他们是否教过你不可以维护,可靠,高性能的代码? 你甚至不能“select任何两个”可靠和高性能的可维护干预? 有时你牺牲性能的可靠性。 有时你不关心可靠性或性能,你只是想从另一个会计软件程序的版本117.34.2到版本118.0.0。 您的商业模式来自销售版本升级和技术支持,而且就旧软件开发人员而言,软件开发人员可以采用相同的方式编写相同的代码。 用大学生的新鲜食品代替烧掉的食品,继续销售升级。

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

质疑一切…如果我触摸炉子上的火锅,我真的会烧吗? 害怕的心理效应是否会造成更多的伤害而不是被烧毁? 有没有一种安全的方式来testing答案而不受伤害?

当我负担得起的时候,我会买我的宿舍里的晶体pipe,电容器,电阻器等,并最终熔化,所有这些都有一个独特的难闻的气味。 购买立体声放大器要比在第一个晶体pipe级别之后build立一个放大器便宜多了。 Linus当然是一个例外,购买操作系统比写一个操作系统更容易…虽然你在那时学到的东西与Linus学到的不同,但你可以做的更多。

大学内外的世界将采用这些公式(cmm,敏捷等)来解决问题,当下一个问题出来时,他们将会同样快地下降。 你不需要使用版本控制来取得成功,就有同样多的成功(事实上,由于行业的年龄,迄今为止还没有版本控制的成功。 同样的,你也可以通过最less的testing来获得成功(以计算机行业真正的大名为例)。 你可以通过testing自己的代码来获得成功,也可以通过遵循不应该testing自己的代码的规则来获得成功。 你可以成功使用emacs,你可以使用vi成功。 你必须决定什么样的组合适合你,如果你幸运find一个工作的地方,与你同意。 随着时间的推移,对你有用的东西将会改变,从工具到语言,再到编程风格,恐惧,版本控制,文档等。你会结婚生子,决定你可能想躲在那个大公司的angular落健康保险包与无聊的工作,享受你的孩子,而不是在小创业的热门程序员。

当你走出大学,进入现实世界时,应该倾听并和“老前辈”一起工作。 他们有几十年到几百年的综合经验,陷入陷阱,你可能会避免和自己testing(也许你意识到你不必触摸火锅,发现它会烧你)。 大多数人会看到这些时尚中至less有一两个stream行起来,特别是他们被烧得多么严重,他们做了什么来恢复。 他们知道许多不同的testing方法,以及testing样式的名称已经过去和过去。 什么工作,什么没有。 风险在哪里,如何避免在切线上浪费时间。 当你成熟,你成为老计时器,把它传递。 通过试图教导那些跟随你的人来付出你学到的东西。 记得要教他们如何钓鱼,不要给他们一条鱼。 有时你必须让他们失败才能成功,防止他们被烧得太厉害。

我现在想说的是,现在我们正处于一个罕见的情况,在这种情况下,我们可以看到一个平行宇宙的演化(也许影响它)。 是的计算机科学相对于物理学而言是一门年轻的科学。 但与此同时,它已经演变了很多次。 根据你的工作地点和你和谁一起工作,你可能会看到硬件工程师。 硬件世界中的编程语言当然不是什么新鲜事物,但它并没有像软件世界那样迅速发展。 软件有几十年的开始。 硬件一直认为软件工程师是二等公民。 我们的工作很容易,他们的工作很难。 (注意我实际上是一个硬件和软件工程师)。 有趣的是,现在他们仍然在处理我们会考虑的基本问题或婴儿问题。 为什么我需要使用版本控制,我是唯一在这个芯片上工作的人。 你使用gcc或其他便宜的编译器或免费的IDE的经验不可能与我使用的昂贵的工具相比较,如果公司认为你足够使用它,甚至知道如何使用它,他们会买你一个副本。 还有一长串其他借口。 我很高兴能够学习vhdl和verilog,并在一周之内从这样一个硬件工程师几乎敢于(尽pipe我的文凭说电气工程师,我的工作职位是软件工程师)敢于生产。 我想学习这些语言,当我可以使用这些工具时,我在办公室呆了一夜,自学了一些东西。 从那时起,那个工程师特别意识到我所说的是真的,语言只是语法,编程基础是一样的,工具都是一样的。 它的苹果和苹果不是苹果和橘子。

总的来说,虽然这两个并行行业之一在语言,编程习惯,源代码控制,testing,工具,编程环境等方面比其他方面有更多的经验,但仍然很难发出这样的信息。 我试图解决的问题是在开发硬件devise的同时,创build经济实惠的function模拟器,以便与处理器的仿真(虚拟机)配合使用,以便我们可以开始testing硬件并开发testing,可交付的软件早在我们去硅之前。 不,没有什么新的东西,但是我们没有机制获得最新的代码,跟踪代码中的变化,看看我们需要集中时间的地方。 没有跟踪定义硬件用户(编程)接口的文档的机制。 一个金色的副本是在二进制forms的某人的电子邮件收件箱中,只有当你不得不阅读verilog才能find正在发生的事情时才会改变。 等等,这个verilog是多大的? 我整个星期在你身上度过的这个错误在三个星期前就已经解决了,并且修复了 那么,我们只是飞到一个休假地点和派对六个月,等待硬件人员完成他们的任务,把它扔在墙上给我们,还是我们借此机会试图耐心和乐观,并教他们,他们有一些常识性的方法不是让他们既能做好自己的工作,也能做好自己的工作,分享自己的东西来进行同行评议。

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

像其他企业一样,大学的工作就是保持盈利。 他们必须聘请合适的学者来提供合适的学生和正确的研究经费和正确的研究来使大学有利可图。 他们必须提供适当的课程,让合适的学生和正确的gradle生出现,这样几十年来,通过雇主都在大学附近,希望远在将认识到,这所大学生产生产和盈利的雇员。 (是的,有时你必须吸引合适的运动员参加正确的运动,以获得合适的电视时间和适当的姓名识别和运动收入)。 有些大学会教C ++和Java,有些则永远不会。 有的会发明CMM,有的会教敏捷,有的会做。 如果大学有什么价值,那么你就有学习的地方。 他们不会教你所有要学的东西,但是他们会有一些有用的东西。 在那里学习一些东西,在工具箱中收集合理数量的各种forms的工具。 离开大学找工作。 如果你的工具箱糟糕,可能find另一所大学,而从不提第一所大学。 如果它是一个好的工具箱,使用这些工具,并在你自己的时间build立一些新的。 如果它是一个非常好的工具箱,说说那所大学的优秀的东西,那么你学到了很好的东西,并且从学校那里得到了回报。 即使你没有得到大学工具的通用目录中的每一个可能的工具,你将走出一个特定的子集。 即使你不gradle…

哦,上帝不要让我开始

我曾经在一所有信誉的大学里担任过cs主任,告诉我面向对象编程只是一种“时尚”,所以他们没有提供像C ++

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

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

教你版本控制的课程,或者如何编写有效的unit testing……这会教你一个交易 ,即(好的)软件开发。

那么大学的事情就是他们需要教授真正普遍的东西。 像敏捷开发这样的东西还是很新的,尽pipe在互联网上谈论了多less东西,但它并没有在任何地方使用,所以把它教给全class学生可能只会让一些在敏捷商店降落的人受益。

然而版本控制是这些日子里不可原谅的事情。 每个人都需要理解它是一个和编译器几乎一样有用的工具,CVS已经有20多年的历史了。 任何程序员离开大学都至less需要理解这些概念。 幸运的是,如果您在大学从事任何小组工作,您可能有幸与已经了解版本控制的人打交道,并说服您的小组使用它。 我知道我很高兴那个人在我的小组里。

unit testing也是非常不可原谅的。 我唯一要说的是,这本书还没有出现在testing驱动的开发之上,并且为了100%的代码覆盖率,总是有时会比它的价值更麻烦。 但是unit testing是非常有价值的,应该在软件工程课程中讲述。 我想,这些东西中的一部分正在进入一些大学,但还没有达到全部。

为什么不呢? 我获得CS学位的经历几乎相同。 原因是教编程的人不会编程,据我所知。 没有必要把这些东西用于authentication,老师也不熟悉这些东西,学生们从来没有把任何重要的项目作为课程的一部分。 实际上教授编程没有什么动机,而不是教授CS理论或Java语法。

计算机科学家认为他们是math家而不是工程师,所以他们更喜欢教math部分而不是工程部分。 testing,版本控制和文档不会比任何其他工程学科更加stream行。

这取决于大学。 我从2003年gradle于澳大利亚高校。 在那个时候,我们学习了UML,unit testing,XP(以及其他敏捷方法)以及所有正式的东西,如Z,algorithm和数据结构,操作系统等。

虽然没有详细介绍unit testing,但更多的是通过一次讲座的服务。 学习如何编写有效的unit testing本来是件好事,而不仅仅是“什么是unit testing”。

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

我也非常同意Glyph所说的。 CS是这样一个不成熟的领域,只是在过去的50年里,我们不知道我们应该学习什么,什么只是一时的stream行。 给它一个150年,那么事情可能会更安定下来。 失败的现实世界项目的数量很明显,这是一个不成熟的行业。 想象一下,如果80%的build设项目失败!

在软件开发实践中,所有这些都可以很容易地被覆盖(很浅)。 这不是大多数CS课程的一部分,因为这不是CS的内容,尽pipe我认为对这些内容的报道是有用的。 我的学校有这样的课。 它不包括版本控制,但它包括了UML,需求收集,开发方法(各种敏捷和瀑布),unit testing,集成testing等,并要求我们在4-5的团队中开发一个项目(在Java中是一个相当简单的线索剥离)。 如果您觉得需要更多的软件工程课程,可以选修。

尽pipe我从来没有在任何课堂上提到过版本控制,但我的大部分朋友都把它用于个人项目,课堂作业等等,所以我们并没有接触到它。 没有自己拿起来的人在团队任务中被同class同学强迫使用。

大学是为了传授概念和理论,因为这些是难以自拔的东西。 版本控制是一个工具,很容易拾取。 使用一下,阅读networking上的一些教程,你就全部设置好了。 如果你需要讲课和做家庭作业来弄清楚如何从SVN中检查某些东西,那么在实际上很困难的事情上你会遇到很多麻烦。

请记住,除了课堂之外,还有很多方法可以在大学学习东西。 利用这一点。 你要花很多钱去参加课程和使用这些设施,所以把所有它值得去的东西都拿出来,然后去参加LUG和ACM会议,参加项目团队(总是有一些MEbuild立一个需要程序员的机器人),或者得到一个负责pipe理人文部门服务器的工作。 从“材料工程”大楼的装载台中倒下一台计算机,用快速宿舍networking连接下载Linux iso,然后玩耍。

我认为问题在于大学不会觉得他们需要教你做专业,而是专注于编程的学术方面。 我原以为至less应该参考行业中使用的最新方法和技术,因为这些东西也是有学术价值的。

在我们的课程中,我们被教授了个人软件过程,包括录制时间,项目评论等等,但没有提到版本控制等专业基础知识。

我在大学学到了所有的东西。 也许这取决于你select的课程? 我的课程非常多样化(软件devise,UIdevise,电子商务,AI,函数式编程等)。 软件devise接触到devise模式和unit testing(涉及各种事物的一个大型项目)。 UIdevise…我们是一个从事项目工作的三人小组。 没有版本控制我们什么也做不了,所以我们得到了这个。 灵活的开发是我们的教授不断告诉我们的,但是他们把它留给每个组来使用它。

我发现很多大学的学生都select了“简单”的课程或课程,这样他们的GPA就会很高。 其他人则专注于他们想要学习的内容,并在很大程度上探索寻找哪些领域会使他们感兴趣。 然后有些人确切地知道他们感兴趣的是…哪些是好的,除了他们往往没有多样化的课程。

要回答为什么这些事情不是被教导的第一件事情:本科课程通常培训你成为一名硕士生。 只有一旦你开始select自己的课程(通常发生在晚年),你可以select学习在学术界以外使用的东西。 这就是为什么他们专注于algorithm,数据结构,为您提供未解决的问题等。

我个人认为他们这样做是好的。 编程并不像我们许多人看起来那么容易; 很多人与它斗争。 我宁愿这些人首先了解一个for循环是如何工作的,然后再找出Perforce的怪物。

他们不教这样的话题,因为大多math校是学术的,而不是贸易。 也就是说,他们的目的是传授思想和理论,而不是培养你的职业。 除了通过mathcertificate之外,QA的整个概念与计算机科学无关。 此外,QA的做法和开发stream程各不相同,因此在学校教学是浪费你的时间和金钱。

我学到了大一新生的一切,除了敏捷开发之外。

这完全是关于select合适的学校,恕我直言。 如果你进入前十,你会很快学到所有的东西。

就一般的CS教育而言,我们基本上是要求教授们教这么多(各种风格的语言,数据结构,运行时间效率,以及事情在比特级别上的实际工作情况)。 我想提出这个问题,为什么孩子们不要自己去了解更多关于软件工程的知识呢?

你已经命名为3,其中一些我认为对理解计算机系统(例如版本控制)来说几乎没有那么重要。 这些东西是工作的一部分,你可以成为一个好的程序员/计算机科学家而不需要知道它。

类似的unit testing – 为什么selectunit testing? 当然,可用性testing,系统testing,用户验收testing和工厂验收testing更重要? 那么,他们是除非你认为你的工作完成后,代码被运到维修部门:)

想想我每天使用的其他概念,这对于一个学习软件和计算机系统基础知识的学生是没有用的:

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

以上都是“软技能”,你不需要编写好的代码。

但是,如果你缺less像数据结构和algorithm这样的“硬”技能,那么你写好代码的机会几乎是不可能的。

就像学生一样,每个学院都不一样。 一些大学,或者更准确地说,一些教授是抗拒改变或懒惰的。 幸好大多数不是。 理论,概念,历史等对任何CS课程都是至关重要的。 但是为学生准备工作环境也是如此。 毫不奇怪,我所在地区的社区学院提供非常适用的CS课程。 与大型的,有名望的大学不同,

这只是因为数据结构和algorithm构成了计算的核心,因此更为重要。 unit testing,版本控制和敏捷方法学只是交易的工具(如果有必要的话,他们可以在工作中select它们)。

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

我同意你的意思。 我刚刚开始在软件开发领域工作,而且我已经开始学习敏捷开发,这是我从来没有在大学教过的东西。

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

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

只有像Titus这样的人才能让我们得到任何真正帮助编程的学者 – 在这里阅读他对这个话题的评论

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

在你事业发展的最好时刻,我希望你能够gradle,在你的名字后面写信是很好的。 🙂

您提到的所有三件事(unit testing,版本控制,敏捷开发)在格罗宁根大学的计算科学专业都有一定程度的教学。 不pipe这件事是否是件好事,我将作为一个悬而未决的问题离开。 但没有大学教你“实用的东西”。

这些是基于我在转换专业之前在CS课程中的有限经验,以及作为大型软件公司实习生的经历。 unit testing没有被教导,因为大部分的程序,你必须创build足够大,需要自动化testing,保证了一组特定的input,所以可以手动testing一切。 教你如何自动化testing也可能会干扰项目的分级,因为大多数项目都是用脚本来进行自动化testing,快速浏览代码以确保你没有int foo1; int foo2; 并使用适当的缩进。

我不知道为什么版本控制不会被教授,但是其中的一部分可能是项目的大小。 我从来没有一个足够大的版本控制项目,而我的意思是超过1000行的代码,并花了整整一个学期的时间写下来。 我想他们认为如果你需要的话,你会把它教给你自己。 我曾经有过的任何团队项目都应该是配对编程项目,为什么要在同一台计算机上使用版本控制?

我不知道为什么敏捷开发不会被教授,但是它可能会回到与程序大小相同的东西。 虽然adgile的开发与在个人电脑和小型服务器上运行的新软件是相同的,但是它通常不被用在诸如IBM大型机之类的系统上,或者在诸如以文档为主的银行或医疗等问题领域。 这也可能与20多年前许多教授接受培训并不合适。

主要原因是许多大多数大学认为自己的目标不同于贸易学校。 因此,他们要教导学生如何学习 ,以及学科的基本原则。 此外,algorithm和数据结构将适用于任何编程语言,并且不依赖于特定的工具(可能还可能不会被gradle使用)。

In Computer Science, that means algorithms, data structures, computer theory, compiler theory, etc. The stuff that you're listing is less about understanding how to program, how to solve problems, etc. It's about the practice of programming (which, incidentally, is an amazing book for anyone in college with the intention of working as a programmer). Now, much of this will not be used at an entry level code monkey position, leading some people to think it isn't useful. 我不同意。 I think it can be extremely useful. However, it doesn't mean that after you get your CS degree, you know everything you'll ever need to work as a programmer.

Which also isn't to say that the things you mention aren't useful. They are. You'll have trouble working on as a programmer if you don't learn them, and I do think they should be taught in college, at least to a certain extent. I would look at teaching version control, unit testing, etc, at the same way I would look at an undergraduate programming in art, and the teaching of what paint brushes are and which ones should be used for various cases.

I think it depends on what type of Computer Science program you are in there are the ones that aim toward the Research and Science side and there are ones that gear toward the Implementation side. I specially declined against certain schools that only had professors that stayed in the academic world. If you don't have professors that havent been "using" what they teach, its all in their head, literally.

Plug: Having taking BS in Comp Sci and MS in Soft Eng at DePaul University, I was mostly taught by instructors/professors who taught part time, which was fine by me because I would rather have them come in with a anecdote from the previous day and relate it to class. Also this being a mostly commuter/part-time school, most of the students have jobs in using what they are learning.

The process of learning still starts with the all the theory, but then we usually get asked "how many of you actually use this in your job?" and the typical answer is "we use it but in a stripped down or simplier way" and then we go into the practical real world scenarios.

During my schooling unit testing was always present. Even though they start you out on Java, they made us use ANT and JUnit for all project. Which was a good starting on build configuration and unit testing.

And Extreme Programing was included in about 3 or 4 of the classes i took. I remember they all started out with the 12 different aspects, from pair programing to unit testing(see above). And now it seems like the focus is on Agile.

So the quick answer is yes there are schools out there that have a more pragmatic approach then others.

Unit testing and version control were both taught in 2nd year Computer Science courses where I went to university. Unit testing fell under the part of testing that also included differences between white and black box and a good chunk of the marks in 3rd year programming assignments went for good error handling that can easily come from unit testing.

Agile development may be rather hard to teach in an academic setting I'd think. While I did learn about the Waterfall method in theory, I didn't get to see it in the field until after I graduated and moved into the real world that can be quite different from academia, eg in 3rd year I do all the odd error cases and nearly pass an assignment where I never touched the heart of what the assignment tried to teach me about Semaphores.

Also, how long has agile been around and which form of agile did you mean? There are many different implementations of it from what I've seen.

I don't think agile programming is a fad, but at the same time I'd be hard pressed to think of a way a teacher could give you projects to allow you to learn it.. Unless they gave you project A build a, project B expand on a. The problem is time and scope. In a 4 month course it would be hard.

Version control and unit testing methods are ever changing and dependant on the language, or the person who defines them.

The data structures and algo's are something that can be worked on in a class setting. Honestly too, they take quite a bit more effort to understand then unit testing and versioning. Try to remember part of university is to teach you to teach yourself. Collage does not quite have the same mandate. Or at least not to the same extent. 恕我直言。