为什么我们在大学学习Java?[关闭]


25

Java通常在学术界发现。背后的原因是什么?


9
Java IDE不像Microsoft生态系统那样具有许可费用。您向大学录取的大量学费中有更多。
mjhilton

16
什么?您可以免费获得Microsoft Visual Studio Express。
quant_dev

12
实际上,如果您是学生以及其他所有Microsoft应用程序,实际上大多数时候您都可以免费获得Visual Studio。
艾琳(Erin)

5
因为你想在毕业时赚钱对吗?花4年时间研究real世界上没人使用的东西对学生或想要雇用学生的公司没有好处。

5
@JarrodRoberson,只有一些公司使用Java,大学应该真正地教育您学习更多种语言,以便为现实世界做好更好的准备。当有许多其他思维和开发方式时,您不想被限制为Java程序员。
CaffGeek

Answers:


73

一个少数大学有谁是充分众所周知,许多(如果不是大多数)决定围绕着这个人的好恶,观点,味道等,就比如一个人,得克萨斯州A&M拥有了Bjarne Stroustrup的工作人员; 对于他们的课程倾向于强调C ++的人来说,可能不足为奇。

大多数大学虽然有所不同。首先,为学生的利益做出的决定往往要比学生做出更多的决定。在许多情况下,最大的唯一标准是“哪种语言需要我们付出最少的努力?” 他们中的大多数人在懒惰方面也很谨慎-他们不仅希望学习最少高级概念的语言,而且想要(例如)创新,更新或拥抱新事物最慢的语言。

其次,大多数决定是由委员会做出的。这意味着最终决定很少(如果有的话)是任何人真正想要的-这正是委员会最少的成员(尤其是影响力最大的成员)特别令人反感的地方。这就像采摘冰淇淋的味道。一个人真的很喜欢草莓,但另一个人对草莓过敏。另一个人真的很喜欢巧克力,但其他人无法忍受。另一个人认为朗姆酒葡萄干很棒,但另外两个人担心提到“朗姆酒”会被解释为鼓励酗酒-因此他们最终以香草味为食,尽管这并不是任何人真正想要的。

最后,即使它通常与前两个标准孤立地产生的大多数结果直接相反,它们通常也需要(或至少希望)被视为对行业需求的响应。

Java是这三个的交集:

  1. 它所包含的每个概念在1980年就已广为人知。除了什么是OOP的最基本概念外,没有太多要了解的知识了。
  2. 这是无味,无味,无毒,可生物降解的,政治上正确的选择。
  3. SQL几乎是历史上唯一存在时间很长且(可能)很少创新的其他语言。尽管它们几乎不是您所说的快速发展的目标,但COBOL和Fortran仍然比Java具有更多的创新能力。
  4. 它被广泛使用。当您开始研究时,教授和PHB具有相似的标准。

请注意,我并不是说(例如)关于Java的知识比对OOP的最基本的概念要了解的更多,只是为了完成可接受的教学工作而要做的所有事情就是这些。


由于对此答案的意见分歧,因此从此处删除了所有评论。
显示名称

1
FWIW,我更喜欢香草。
与莫妮卡(Monica)进行的轻度比赛

我签名支持您的答案
user2445942 2014年

22

在Java出现之前,我在90年代初学习了计算机科学。我们的教授遵循的方法如下。

第一年:Pascal编程和算法入门课程。为什么选择帕斯卡?因为它是一种干净的语言,旨在教授编程的概念,但没有用于黑客的设施。当然,我们的学生知道当时最流行的语言是C,并且有一种新的语言越来越流行:C ++。因此,我们一直在阅读和讨论这些语言,并独自进行使用它们的小型项目。因此,我们的想法是:在课堂上,我们认真学习理论(帕斯卡),而在家里,我们学习如何破解(C)。:-)

在第二年中,我们开设了操作系统课程,要求我们进行C和汇编方面的练习。教授没有给我们完整的C语言课程(仅几节课),因为(1)我们在第一年就已经学习过编程课程,并且(2)他说,每位了解编程概念的计算机科学家都应该能够阅读一本书并学习一种新的编程语言。课程进行得很顺利,我们都发现C和汇编语言是您自己学习或与其他学生在走廊里讨论的实用话题,这很正常,但不值得继续学习。

在第三年中,我们开设了一门编程语言课程,研究了编程语言的不同范式(命令式,函数式,逻辑式,面向对象),学习了通用概念和实现技术,并修订了主要编程语言(Pascal, C,Modula2,Simula,Lisp,C ++,Prolog)。我们的教授在课程开始时告诉我们的是:您不应通过考虑课程结束时知道多少种编程语言来评估本课程,而应该考虑已学过的所有一般概念,它们是如何彼此相关,它们的优点,如何在哪种语言中使用它们。然后,学习特定的语言仅需阅读一本书,查看现有代码,尝试在特定项目中使用它,等等。

我发现这种方法非常合适且有效。我认为大学不应该以培养优秀的程序员为目标,而是要提供可以理解编程和编程语言的丰富知识。成为一名优秀的程序员只是其副作用。我现在正在考虑申请需要Ada的工作,尽管我以前从未在Ada进行过任何认真的编程,但我对此并不感到害怕。

回到讲授Java的问题。我猜Java通常用于教学,因为它足够中立,并且可以使用也与业界紧密相关的语言来解释编程的原理。

就我个人而言,我仍然会在第一门课程中使用Pascal或类似的语言,因为这将使我能够区分控制结构和数据结构,这些结构在Java /面向对象的语言中紧密集成。因此,在我看来,Pascal可以更逐步地介绍编程的基本概念。

此外,计算机科学家(和优秀的程序员)应了解基本机制/运行时结构,例如堆栈,堆,参数传递,内存分配,指针,或如何在不使用内置函数的情况下实现抽象数据类型。语言(列表,集合等)。Java从程序员那里带走了很多东西(这当然很好),但是初学者应该了解这些东西。也许在Java的第一门编程课程之后,您也应该参加一门关于编程语言概念的更通用的课程。

这只是我的经验和意见。


1
当我在大学一年级的时候,我们为编程课程(在计算机系统课程中的一些汇编)做了Ada。第二年的语言风格非常相似。第三年,我们确切地被告知:“每位了解编程概念的计算机科学家都应该能够读一本书并学习一种新的编程语言”。到年底,我们接受了C,C ++,Java的自学,并且使用了什么语言(例如Python)来完成项目。这是我为现实世界准备的最好的准备,它是如何快速,动态地学习的
艾米(Amy)

(+1)与Pascal相关的编程语言最好用于教学编程,因为它的父亲“ Niklaus Wirth”精心设计了用于教学的语言。;-)
umlcat 2011年

@umlcat:谢谢。是的,我认为拥有C或C ++可以破坏规则和破解是很好的。但是在违反规则之前,您必须知道自己正在违反什么规则。为此,使用像Pascal这样的干净编程语言来学习如何在“理想世界”中编程是非常有用的。然后,至少您知道黑客入侵时的行为。:-)
乔治

@乔治:我认为应该先教学生Pascal,然后再教C / C ++,然后再教Java。我不是指一个或另一个,而是所有它们都以特定顺序排列。有些学校不愿教另一种。PDI也使用C和Java。希望对您
有所

@umlcat:我完全同意。我还要添加一些Lisp,Haskell,Prolog:人们知道的编程范例越多越好。
乔治

10

Java问世时我在学校。我的大学几乎一夜之间就改变了。在学术界,人们对Java感到不快。刚出道时我还是个小学生,到高四时,几乎所有的学术界都在迅速改变他们的课程。不仅在我的大学,而且在任何地方。真的那么快。我们的第二个入门课程是Pascal,并在不到一年的时间内迅速转换为Java。他们为什么这么快转换?两大原因。

一位学者想教授理论和算法。可以帮助您学习不需要大量经验的算法的语言是最好的:Scheme,Python,Java,Smalltalk等。语言越多,您对学习真实算法的注意力就会越分散。当时,脚本语言是二等公民,雇主以廉价,快速,肮脏为由而反对。学者们把它们看作是更多的模仿者,但是雇主想要的也受到了学者们的欢迎。

这将我们带入下一个原因。雇主希望有一定的语言经验,当时是C / C ++。但是,C / C ++需要大量的学习经验,并且有很多特殊情况,并且烦人的事。我们学习了C / C ++的课程,但没有学习较低的课程。当时,雇主对CS计划感到生气,因为学生们并不是C / C ++专家。

Java席卷整个行业的速度几乎与学术界一样快。所以最终学术界得到了他们想要的。易于学习的高级语言,以及雇主想要的语言。太完美了。我大概在我离开三年后回到了一个学术界,他说你可以在每门CS科目中找到一本Java书籍。这就是Java接管学术界的速度。

我个人认为Java并没有使CS变得愚蠢,我认为这实际上是一件好事,因为学生即使在校期间也可以学习CS,参加开源以及找到工作。我仍然相信,作为CS学生,您应该学习许多语言,而不仅仅是Java。但是,如果他们都使用python,Joel也会讨厌python。


如果您的学校在90年代中期仍在使用Pascal,那么无论如何他们都应该进行大修。我的第一个CS课是在Pascal,但是那是在1980年!但是,有趣的是,这只是入门课程-上层课程使用C(用于OS内部),Modula(用于编译器设计),Prolog和某些研究生课程甚至使用Ada。我不明白为什么学校仍然不这样做。
TMN 2010年

1
直到1995年,大多数或全部仍在使用Pascal,其中一些移交给了Modula。Mine于1995年开始为年长者引入C ++,并保留了Pascal为大三学生。我认为他们现在已经用Java替换了Pascal(它们确实需要一种低级语言,因为很多工作都涉及到与硬件的交互,因此C ++可能仍然存在)。
jwenting 2011年

在Pascal入门课程之后,我们大量使用了C / C ++。Prolog,LISP,Scheme,Smalltalk和Assembly都用于中级班级。随着1990年代政府减少技术消费的重要性,Ada逐渐被淘汰,直到1990年代后期才被提及。我认为Java的危险与Java无关,而与单一文化和学习有关。我现在是Flex开发人员,Adobe上周结束了我的谋生能力。我并不担心,因为我有很长的不只使用一种语言的历史。我有Java,Ruby,Php,Python依靠。
chubbsondubs 2011年

8

这样做的原因有几个:

  • 就业市场上的普遍现象-如果大学希望他们的学生就业(并向大学推荐更多学生),他们需要教授相关的语言。
  • 简化课程
  • 评分更容易,作业也更容易实施。
  • 收集了垃圾,因此无需教指针和手动内存管理

请注意,出于许多相同的原因,有许多学校教授C#。还有更多的原因,其中一些原因更特定于个别学校。本质上,Java已成为过去的面向对象的“ BASIC”。


还有很多出色的Java书籍,例如使用BlueJ简化了OOP,例如Java的第一个对象。但是,在C#中,我没有看到这样的学习书,它们使您从头开始,并且能很好地学习。你是否同意我的观点?
戈马2010年

我会。教学是一项非常艰巨的任务,而教师仍在学习如何最好地教学。您会发现许多在线学校,例如Strayer都使用C#,而砖石学校则倾向于Java。可能是因为在线学校迎合了已经在工作的学生。基本的编程书籍可以适用于任何语言,因此有可用的材料。
Berin Loritsch

“收集了垃圾,因此无需教指针和手动内存管理。” 如果您作为软件工程师不了解指针和内存管理,或者不了解它们如何工作,那么您会缺少一些非常重要的知识。
右对齐

Java的可能没有*语法,但它是非常困难的使用没有指针的一个基本的了解。
2011年

@WTP,这就是为什么Java通常用于入门课程(以前使用Pascal或Modula的地方),后来又引入了C(++)的原因。
jwenting 2011年

6

我喜欢Joel Spolsky的帖子,标题为Java学校的危险。我认为Berin Loristch在简化课程方面是正确的,它也适用于现实世界。

我多次听到以下话:“计算机科学学位不是学习编程的学位,而是学习理论的学位”。只要学习了该理论,语言就不一定要紧(尽管它不应妨碍)。Java是一种相对容易掌握的语言,它允许您花费更多时间来学习一切背后的理论。这是MIT使用Scheme的原因之一(据我所知)。


2
Mit几年前停止使用 Scheme-cemerick.com)/ 2009/03/24 /…
nate c

@nate c-是的,我不确定。尽管如此,Python还是很容易学习的。不过感谢您的链接!
杰蒂

如果我要上课,我会完全和学生们扯在一起。我鼓励您编写自己的编程语言,并且您只能在整个课程过程中使用该编程语言。
berlinbrown2

1
@柏林-我想这就是为什么你不是老师的原因:)
杰蒂2011年

3

上面给出的许多答案都是不错的答案,但它们漏掉了一些东西。

Java是一种多平台语言。一个学生可以使用他的Mac,另一个可以使用她的PC,以及另一个她的学生Unix帐户。相同的代码将执行相同的操作。想一想,对于老师和学校的IT部门来说,支持要多么容易。

这是Java诞生时的真正重要性。这个笑话是“一次编写代码,到处调试”,但确实确实使硬件和操作系统脱颖而出。


也许这可以解释为什么选择Java而不是C,C ++或C#,但是Ruby和Python(以及其他)可以很好地在跨平台上工作。
埃里克·威尔逊

好点子。我认为,出于多种原因,CS部门也倾向于使用强类型语言。同样,Java在美国也有领先优势。Ruby直到1999年或更​​晚才真正出现在Java上,而Python直到2000年问世才相当有限。
马修·弗林

1

我听说教授说他们使用Java进行教学是因为:

  • 使用较新的范例(OOP,某些泛型)
  • 语法上非常简单,尽管很冗长
  • 没有高级概念,例如高阶函数,闭包,currying或continuation,它们可能会使仍在学习基本概念的人感到困惑
  • 很多为此编写的库
  • 由于存在gc,学生不会因为调试内存泄漏而陷入困境

就个人而言,我很高兴我在伯克利获得CS学位时使用了Scheme进行教学。尽管直到几年后我才意识到语言的真正优雅。


1

一点背景

我参加了我们学校提供的唯一的Java课。这是从90年代末到2000年初。Java还在发展,但还没有开始普及。来自C语言的大量开发,使Java正常运行所需的所有样板代码使我有些沮丧。我不能专注于我的任务。我不能只使用“打开”打开文件。我必须先定义类,然后再定义导入等。

我当时是计算机工程专业,所以我先学习汇编程序设计,然后学习C,然后学习C ++,Scheme,以及那门Java课程。它主要是面向C的学校课程。使用C教授算法课。

当我进入行业时,Java显然是主导者。也许它是从后端COBOL系统到Java Web业务应用程序转换的唯一参与者。Java在2000年初就在商业领域取得了长足的进步。

同时,我并不了解所有的Java框架,但是我知道如何编写代码并适应Java环境。如果我参加了有关良好Java编码标准的培训课程,那么我可能会以更好的Java风格或对Java生态系统的了解开始。

回想起来,我认为这并不重要。

要回答您的问题:为什么我们在大学学习Java?

应该教Java,但不要在所有课程中都使用Java:

如果您正在学习计算机科学,则应该在大学的某个时候学习Java。它在商业世界中很流行。您应该学习Java甚至C#。我绝对不会讲Java作为入门编程课程。而且,Java当然不应成为所有课程中使用的主要语言。

关于Java批评:

Java一直受到很多批评。我一直在阅读Java杂志,这些杂志都带有问号“ Java是否已为企业准备就绪?”提及Java。Java平台仍然是广泛使用的平台。但是,对于大多数常规编程任务,Java可以正常工作。而且使用Java没有任何重大问题。它不会伤害您的技能。如果您仅依赖Java库而不了解其底层内容,则可能会如此。但是Java不会造成任何形式的大脑损害(某些开发人员实际上相信这是事实)。

另外,开发人员为什么不攻击C或C ++?至少是C ++。命令式编程范例非常相似。而且我永远不会考虑用C ++编写Web应用程序,但我可能会使用Java。

这是我设置课程的方式:

  1. 入门课程:Scheme,Python,汇编语言,C(全部三个)
  2. 算法课程:C,Haskell,Python(全部三个)
  3. 操作系统课程/网络课程:C / C ++
  4. GUI开发:Java Swing,Win32上的C ++
  5. 面向对象编程:(这很棘手,我不会上OOP课程)。C ++,Java,C#
  6. 企业?开发:Java,C#,Python
  7. 语言设计,编译器:Haskell,Scala,C,汇编,Scheme,Common Lisp,Prolog。

我在课程表中列出的语言非常普遍。许多学校都在教多种语言而没有问题。在行业中,您将使用许多不同的编程语言。您将使用您从未听说过的语言。

除非他们完全想让您远离Java或只想教Java,否则学校中的Java主题不是问题。在这两种情况下,学校都是不合理的。

(抱歉Ruby lang)


(-1)对于“入门课程”而言,“汇编语言”过于复杂。我的意思不是“不教它”,我的意思是“以后我们会教它”
umlcat

1

抱歉,答案很长很无聊:

(1)您的意思是:

“为什么我们要在大学学习Java作为第一门编程语言?”

(2)还是您的意思是:

“无论如何,即使我们在学习Java之前也学习其他编程语言,为什么我们还是在大学学习Java?”

听起来您确实是在说两个问题。

对于(1):

我不认为Java(或.NET C#和Visual Basic)应该作为第一门编程语言来教授。结构化和模块化Pascal应该是第一位的,即使它听起来陈旧过时。

许多人认为,应该仅仅因为其“炒作”或“趋势”而立即教人们面向对象的编程或函数式编程。

我将“结构化Pascal”学习为“面向对象编程”的小版本,而不是类似的东西。我将结构化程序视为单个小对象。

在那之后,我建议继续使用功能语言和对象Pascal。

之后是C,C ++,C#,VB.Net,Java。

我不喜欢Java或C#作为第一门编程语言的主要原因是,它们混合了“指针”,“对象的指针”和“对象”本身(“引用”)的概念。

我认为学生应该牢记这些概念之间的差异和相似之处。Java中Strings对象的比较就是这种奇怪的很好的例子:

String A = "Mars";
String A = "Venus";

// pointer comparison or object comparison ???
if (A == B)
{
  DoSomething();
}

对于(2):

我认为应该在学校教授Java或C#,因为它们具有一些更新的良好功能,并且同时具有实际用途。


0

如果您正在学习计算机科学,则应该在大学的某个时候学习Java。它在商业世界中很流行。您应该学习Java甚至C#。我绝对不会讲Java作为入门编程课程。而且,Java当然不应成为所有课程中使用的主要语言。

我不能不同意。在我的大学里,Java是您进入我的学校的CS&E程序所必须学习的语言。Java非常容易教。因为您可以将自己限制在“非程序员”可以学习的某些概念上。

我也不知道您是否愿意将Java作为入门编程课程来教授。您基本上说过,您绝对不会教它吗?

简单的原因已经说明。Java没有许可费。您可以使用基本的测试编辑器来教它。它肯定是出于错误的原因。

我不同意先前的回答,即Java并没有使学生通过它“笨拙”,它确实表明了他们在使用诸如C和C ++的数组和列表之类的简单概念时遇到问题。


我要指出,无知与“愚蠢”不一样。人们“通过” Java可能不知道那些“简单概念”,因为他们没有被教过。这并不意味着如果他们花一些时间来解决这个问题,他们就不会明白。
杰蒂2011年

0

CJava的转换是在错误的时间发生的。

在2000年左右的某个时候。我在大学里上了最后一门C类

  • C ++具有太多的功能,不会使新手感到困惑。(现在仍然如此。并且计划添加一些。)

  • .NET不够成熟,甚至比今天贵。

  • 物镜C很,苹果的用法在雷达之下飞舞(周围没有iPhone


当时还有其他.NET问题?没有可移植的运行时- 没有单声道可用。
ZJR

没有文本编辑器的中立性。(文本编辑器的战争是丑陋的,但却是真实的)和默认的IDE,它使学生沉迷于模拟电镀
ZJR

顺便说一句,我更希望世界采用目标C道路,但苹果并不是那个唯一的孩子,甚至它的商业模式也不会那么疯狂。
ZJR

0

我感到不得不在这里添加答案,因为我真的看不到这些答案中的任何一个实际上涵盖了我的观点。

我是一个业余程序员。当涉及到“计算机”和“编程”时,我处于领先地位。我于2007年完成了本科学位,而两年后的2009年获得了硕士学位。我曾使用过多种语言,包括汇编语言,QuickBASIC,C,C ++,Java,PHP,Perl,Python,BASH脚本,Javascript,COBOL等。

恕我直言,一种用于向学生教授编程的语言是我们目前所处时代的指示器。例如,在1980年代,汇编语言是低级语言,而C语言被认为是高级语言。

在1990年代,C ++,Java,Perl等语言之所以变得重要,主要是因为其水平比C高得多,并且体现了快速发展的原则。因此,他们有点停止了对CS学生的教学,而是教C语言来表达算法。在过去的十年中,这种情况已慢慢改变了,当时C被认为是太低级的语言,无法有效地获取算法的本质,而又没有太多的“系统”专业知识。这实际上非常重要,因为CS课程的重点应该比实际更“理论”,并且每次有人想要编写算法时,如果他/她陷入内存分配和指针算术的困扰,那么您将不会任何地方。

即使在今天,如果您正在攻读硕士CS课程,您仍必须完成某些“系统”要求(在美国至少是这样,对于美国的大学来说应该没有太大的不同),这要求学生能够对系统级应用程序进行编程,并且在某些情况下,甚至达到内核级别的黑客攻击就可以真正满足要求。因此,尽管C 不是学校教授的事实上的语言,但是如果您想专门研究系统或高性能计算或类似的领域,它就很重要。

我还要提到的另一点是,C语言需要很多纪律才能正确处理,而Java之类的语言对此类约束却有些放松。这样一来,无需RA / TA即可启动GDB调试学生的程序即可轻松地进行课程:)


0

我认为其中很大一部分就是行业中正在使用的东西。

我的CS计划有一个工业咨询委员会,由本地技术和航空航天公司的高级职员组成,他们对课程有很多投入。入门级CS班在我开始的那一年(1986年)就放弃了Pascal,而选择了C,主要是受IAB的要求。同样,由于当地的航空航天公司不得不将Ada用于国防部的工作,因此有人在一些高级课程中教授Ada。

Java现在无处不在,尤其是在Android设备开始腾飞的今天。从教学的角度来看很烂,但是C也是如此。


0

因为他们希望减少课程的学生减少,所以恕我直言,这本身就是失败。也许至少在这里,几乎没人再认真对待大学学位的原因之一。

Java语言太简单了,它没有教导PC拥有有​​限的资源范例。同时,迫使人们陷入“没有另一层抽象无法解决的问题”的思路。

是的,这对OOP概念和玩具问题很有用,但是它教导从错误的角度解决问题。在这里使用整洁的结构,其余部分拧紧。

但是,学术界以对AI,OWL和其他玩具技术的梦想着称。当他们继续研究此类事物时,有时也会有人在此发明一些惊人的东西,但是如果您想成为一名优秀的开发人员,则必须独立学习。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.