Java或C ++用于大学CS课程?


11

我正努力进入学校攻读CS学位。我所看的学校实际上为基础软件开发课程提供了基于Java和C ++的基础(面向对象的编程,设计模式之类的东西)。哪一条路是学生的选择,但只有时间去追踪。

知道了现在所知道的,如果可以选择的话,您是否会奠定Java或C ++的CS课程基础?

我当前的辩论目前看起来像这样:

一位好朋友(拥有AI博士学位)将Java视为更好的选择,而不管我做什么,只要稍后才提供更多的工作机会,尽管他可能因为所有工作都在Java中而有所偏见(他喜欢它)。我住在美国马萨诸塞州波士顿地区,并且看到相等数量的Java和C工作。

另一方面,虽然我还没有完全确定要完成的学位课程,但我倾向于为Mac开发,尽管能力有限,但我现在正在做。为此,我已经对C ++有了一定的了解,但是我还没有使用Java,并且在我的日常工作中查看我的项目时,我很快就认为不需要很快使用它了。至少两年。

我可能应该注意,我是一个成年人,在20年后重返学校(目前我没有任何学位),因此我正在寻求最大程度地利用机会和时间。我有点倾向于C ++,但是我仍然很矛盾,有些外部的客观建议会有所帮助。

或者,我可能只是在考虑这个问题。

更新:事实证明,语言选择不是我最初认为的那么明确。尽管有几门核心课程侧重于Java,但其他一些核心课程则主要针对C和Java,但也有一些其他核心课程相当不错。实际上,在花时间学习Java和Javascript之后,我的剩余学期将是在Objective-C中。上学期是C,Javascript和PHP,另外还有一些其他作业根据需要分配。由于事情在总体上几乎是分散的,而且我仍然可以得到答案,所以我现在正在努力设计课程,以便满足学位的所有要求,但要吸收尽可能多的语言。 。到目前为止,我的成绩并未受到影响。


1
学术研究环境中的每个人现在都在吹捧Java。此外,无论使用哪种语言,都需要向大学学习如何学习新语言。C ++和Java一样,但是并没有断言它们将在5年后出现。新的语言/技术总是在不断出现,因此您需要准备好接受它们并迅速变得熟练。
克里斯,2010年

1
@克里斯:这就是为什么我的建议是学习一些有助于进一步学习的东西,而不是现在流行的东西。我建议使用C ++或Python而不是Java(显然是出于不同的原因)。
David Thornley,2010年

无关紧要的语言。这是抽象的概念。正确理解概念,使学生可以在以后的生活中轻松学习任何东西。
J-16 SDiZ 2010年

1
我处于类似的情况:离开学校20年后回到学校参加CS。我的学校也有Java / C ++拆分轨道。在阅读了这里的所有内容,甚至给出了+1的最佳答案之后,我仍然会继续使用Java,这就是为什么(如果它对您有帮助的话):我来自Web开发(Javascript,PHP,Python) ,因此对Java库的支持是一个加号。假设我还花时间真正掌握了OOP原则,那么我认为转向C ++(如果有必要)不会那么困难。Java是脚本编写和编译之间的中间地带。
是hollenbeck 2010年

2
我认为我不同意每个答案。真的没关系。您将在两种语言中学习类似的概念,并且还将通过学习和职业学习未选择的其他语言以及其他语言。
Matsemann

Answers:


51

我个人会使用C ++,因为它将为您提供有关Java部分在幕后工作方式的见解(例如,指针)。从C ++迁移到Java相当简单,而反之则困难得多。

Java生态系统真正困难的是,它有大量的框架,库等-无论如何,它们不可能覆盖大学的所有内容。

在一天结束时它不会不管你学习的原则,多你选择什么语言,只要。

我的JUG会因为支持C ++而杀死我;-)


1
+1是关于Java eco系统的大小和转换说明的要点。
Jas

1
在大学学习大型生态系统的问题在于,这对您的整个职业生涯都无济于事。您最好学习较少的库和学习概念,或者熟悉实际的语言功能。
David Thornley,2010年

2
C ++的另外一个优势是您可以在.NET Framework上进行托管C ++,从而为您提供了在该运行时上学习C#,F#和任何其他语言的向导。Java对JVM和Scala之类的语言也有很好的引导,但是我不知道JVM C ++。
CodexArcanum 2010年

作为一个喜欢认为自己在C ++(和Java)方面相当出色的人,我不认为任何现代入门编程课程都应该使用C ++。太难了。如果这所大学根本不教C ++,那么请继续前进,但是对于入门课程,我会选择Java这样更简单,更漂亮的东西。也许,如果我不认为它们全都是邪恶的话,我甚至可能已经推荐了一种动态类型的语言。
迪克林

在Java出现之前的某些日子里,我们没有这个选择,我们都学习了C ++,所以我认为人们仍然首先学习C ++不会有任何问题。我猜Java的介绍比Turbo Pascal的介绍要好。
Bratch

18

我必须不同意大多数在这里提倡Java的人。即使您还没有学习计算机和微处理器体系结构,学习C ++也会为您提供许多有关计算机程序工作和操作方式的宝贵见解。

Nota bene,我不是在提倡 您不应该学习Java(更好的C#),因为它们是现代的,快速的应用程序开发语言,并且围绕它们构建了巨大的框架,使您可以使用许多“免费”功能,例如抽象的文件访问和类似的内容,但是真正的软件工程师应该至少知道一些C ++,C或至少是汇编程序,因为这是将您与script-kiddie类型区分开的地方。

一旦您对C ++相当熟练,并对内存管理和STL充满信心,选择Java / C#应该很容易。


同意,我很肯定如果您已经精通C ++,那么学习Java就会比如果您已经精通Java的C ++学习容易得多。
Carson63000

变得“精通C ++”的问题是,这将花费数年,并且您仍然只会学习OOP的一小部分。
亨利

Java不是一种快速的应用程序开发语言。它的级别可能比C ++稍高,但与Python,Ruby,Perl或Visual Basic的抽象级别相去甚远。
埃文·克罗斯克

@Evan-是的,Java是一种“快速”开发语言,因为它的庞大库无所不包(通常说任何Java开发人员都可以在工作时打开Java API文档),而且不必进行手动内存管理。设计Java的人之所以设计它,是因为他没有使用C ++的经验。加上如今已部署的Java应用程序的绝对数量(较低的进入门槛)是其“快速”的另一个论点。
Jas 2010年

9

提倡将Java作为第一选择的学校和学者应该接受检查(或干脆找到一份真正的工作。)我的意思是说,这是一个在过去的12年中从事Java应用程序和系统开发的人。Java是一种残酷的教学语言。

原因如下:除非有天赋,否则大多数学生可以(而且很可能永远不会)掌握面向对象,而无需了解模块化编程。而且,他们必须先了解过程语言的结构化程序,才能理解模块化程序设计。干净利落。证明(除其他外)的是,即使我们已经认识OO 3-4年了,但人们仍然在实践中写意大利面条。

此外,仅依靠基于gc的语言(无论是Java还是.NET)的人永远无法真正接近硬件。除非您的全部志向是创建动态网页,否则您猜怎么着?您需要熟悉该语言。

您到一所CS学校成为一名全面的计算机科学家和程序员(希望能有很多学分的实践语言,可以使用多种编程语言进行编程。)如果您只知道Java(或.NET或C或那么Python是什么),那么您就是“ Java程序员”(不是可以在Java上工作的程序员,而是“ Java程序员”)。这和说您是“锤子木匠”或“菲利普螺丝刀技工”一样有意义,不是吗。

一所好学校会让您接触C(或其他程序语言,例如Pascal或Ada),然后接触C ++和汇编语言,从而在初中/高三学习项目基石课程时就可以自己学习Java。另外,它还应该使您接触到功能语言,以便您理解将计算块作为参数传递,无副作用的计算,位置透明性等概念(即使在网络上也有实际应用)。

您需要知道什么是段错误。您需要知道分页,虚拟内存以及所有这些废话的含义。您需要知道如何分解模块中的问题(基于过程和面向对象的问题)。您需要知道OO系统是如何在幕后真正实现的(以便您了解成本。)您需要知道OO抽象在哪里中断(并且这样做的原因是,世界和复杂的问题不一定是面向对象的。)

您需要了解所有这些内容,以便成为一名全面的计算机科学家,能够在企业或非常低的级别上工作,以实现大型或小型商业或公共部门的系统级的东西规模。

一直在寻求将Java作为唯一的语言来统治它们的学者对行业真正的需求一无所知。无能为力。不可原谅的无能为力。当他们在象牙塔上工作时,会发生这种情况。

他们已经将计算机科学系变成了昂贵的四年制职业学校,开始生产一种编程语言技巧的小马。如果他们至少可以教给学生一些基本的业务/企业/组织技能(即放弃CS知识并采用MIS课程),这是可以原谅的,但是他们甚至不这样做,我认为这是一个很大的伤害对行业,经济乃至学生。

我建议您阅读Joel Spolsky关于“ Java Schools”的文章。

http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

总而言之,如果他们没有教您一种过程式编程语言(是像C或Ada这样的工业语言,或者像Pascal这样的足以用于教学的语言),并且他们会给您提供C ++(如果您很幸运)还是Java / C#。 (如果您不走运),我会去另一所学校。简单而简单,来自一个在相当长的一段时间内一直使用Java谋生的家伙。


从人谁知道Java,C和C ++相当好,谁没有毕业不久前,我将不得不同意。C(或C ++)VS Java-Java是“更轻松”的方式。也许如果我开始使用C ++(我认为它很棒,但不容易),而不是Java(而不是(Delphi(eww)+)Java),那我很有可能会变得沮丧,放弃并不会成为程序员(尽管也许我们只是一个糟糕的C ++老师)。但是,是的,学习C ++以了解Java的内部是绝对无价的。我猜这些天大约有95%的程序员“从来没有真正接近硬件”。
2013年

C(或C ++)VS Java-Java是“更轻松”的方式 ”-嗯,这是众所周知的。我不确定与我的帖子有什么关系,不过(?????)
luis.espinal 2013年

易于理解,易于教学,易于学习,因此,我不同意“ Java是一种糟糕的教学语言”,因此您应该首先学习C(也许更简单的过程语言也可以)。我也是说C或C ++是一个很好的知识,但不是一开始就可以理解,因为在这种情况下,您可能会吓跑除最顽固的程序员以外的所有程序员,因为我敢肯定,只有在了解了C或C ++之后,通过C ++进行编程。我并不是说我介意铁杆程序员的世界,但其他人可能会。是的,你说是全面的,但我说领先于Java或类似。
2013年

易于理解和教学并不一定意味着它是用于教学目的的适当语言。在使用Java 12年之后,我对此深信不疑。比C或C ++更好的一种教学语言,最好是Python,例如...或不强迫所有方法都归入类的任何语言,即一种真正的多范式语言,而不是Java中的所有东西都“应该”是一个对象,除了类和包之外,没有其他替代范围的好选择,依此类推。它限制了教授正确建模的能力。
luis.espinal

Java通过强迫您以面向名词的“一切为对象”模式学习编程,它为其他更适合实际世界建模的范例提供了较差的建模隐喻。战from的专业开发人员可以解决这个限制。学生不会,请原谅我,但是很少有大学教授具有通才的经验来了解这种区别。如果C / C ++过于严格,我会选择Java上的Python或Ruby(或者实际上是Lisp或BASIC)。
luis.espinal

4

我认为这很大程度上取决于您的个性。至少从我的角度来看,Java和C ++具有截然不同的方向,吸引了截然不同的人。

当您开始研究它时,Java实际上实际上是一个很大的类库,具有足够的语言来实例化对象并从该库调用方法。“学习Java”在很大程度上包括记忆(或至少意识到)库中的内容以及其组织方式,以便您可以在需要时找到所需的内容。

C ++很少强调提供预编写的代码。尽管它确实包含一个库(STL 1),但该库与所包含的代码无关,而与样式和一组原则有关。编写完全可以轻松识别为“ STL”代码的代码是完全可能的,即使它几乎不使用甚至根本不使用任何预编写的代码。

语言的使用方式也存在相当大的差异。Java非常重视保持语言的简单性。这使得构建以各种方式(例如,用于重构)操纵Java代码的工具变得容易。这也意味着您倾向于需要可以执行此操作的工具,因为重构通常涉及对大量代码的相当大的更改。

C ++是很多更复杂的语言,这意味着(除其他事项外),建设工具操作的C ++源代码是极其比Java的更困难。两者之间的平衡是,它的必要性大大降低了-重构工作可能涉及Java中数十个文件的数百次更改,这可以通过(例如)更改C ++中的单个模板参数来完成。

Java更加注重易学性。C ++更加注重易用性-但是(不幸的是)仅在您真正了解自己在做什么的情况下。

我不会主张其中之一。我对语言的看法远不如您对每种语言的预期有所了解,并诚实地看待自己以找出哪种语言更适合您时,才有意义。

1是的,我知道这不是很准确,但是我试图避免将其变成一本书...


3

我不敢相信人们提倡将C ++作为第一语言!与实际学习如何编程相比,您将花费大部分时间来编写样板并尝试解决语言的局限性和鱼钩。

Java是一种简单得多的语言,不会妨碍您的学习。

如果必须学习C ++,请学习Java的概念,然后转到C ++,或者如果要编写Mac软件,最好转到OBJ-C。Java和OBJ-C并不太相似。

仅供参考,我已经作为商业C ++开发人员工作了10年。


这不是我的母语。我是一名程序员,现在正在重返学校,以实际获得学位。我对C ++和Java的经验有限,但是我对C和Objective-C确实有经验。但是感谢您抽出宝贵的时间回答。
菲利普·里根

3
Java 妨碍您的学习。它将教您关于与语言无关的概念的全部非事实。
DeadMG 2012年

2

我建议使用C ++。我在大学里有一些Java课,一些是C ++课,从C ++学到的语言特定技能在以后学习其他语言时对我有更多帮助。另外,尽管我看到的Java比C ++职位空缺多,但大多数人都在寻找完整的Java堆栈,例如:

  • EJB 1.x / 2.0,JNDI,JMS,JTA / JTS,RMI,JDBC,Servlet,JSP,SAX / DOM,Web服务,SOAP,WSDL,UDDI,JAXB,JavaMail,WAP,WML,HTML
  • Tomcat,Apache Xalan,Apache Xerces,Jserv,JRun,JBuilder,TogetherJ,Web Logic 5.x / 6.x,Websphere 3.5 / 4

而且基于Java的课程可能不会比基于C ++的课程为您做的更好。


1
我要补充一点(至少在我的领域),C ++作业的薪资也比Java作业好得多(目标),并且通常更有趣(主观)。
Cercerilla

2

这很困难,因为无可否认,Java很容易学习。您将更早地使用Java。

C ++是一种更难以使用的语言。指针和内存管理在概念上和实践上很难使用。C ++不为您提供任何安全网。

从长远来看,了解C ++教给您的所有知识将很有用。从C ++到Java的过渡也比其他方向容易得多。

但是我确实想知道,在开始和进行很多学位项目期间,为了使某些事情在C ++中工作而必须要做的额外开销和调试,实际上是否会使您的项目更困难,更难以满足最后期限并且使您的生活更加沮丧。为了在C ++和Java中实现同一目标,我想说的是,几乎在每种情况下,您都可以在Java中更快地完成工作,并减少麻烦的问题。当您在一个学期末并且有五门课程需要在同一天完成他们的课程时,这可能是一件非常重要的事情。

另一面是,如果这些试验没有使您完全放弃,那么如果您精通C ++,它们将使您成为更好的程序员。而且,如果您的职业是C#,Java或python,并且不必在生活中碰到另一个指针,您将对它有更多的了解……


2

C ++更加灵活,提供了更深入的理解。毫无疑问,从C ++中获得的收益要比从Java中获得的收益更多。C ++也更难,因为它更复杂。

也就是说,C ++作业不像Java作业那么普遍。

Java及其后代C#是企业/企业big-iron编码空间的标准解决方案。我强烈建议您在第二年学习两者中的一种,并在完成学位课程时对它非常满意。它可以让你的工作太多容易。这并不意味着我认为这些工作平均具有重要的智力兴趣。我最近在落基山脉(Rocky Mountains)的craigslist软件工作中获得通过,大多数工作是C#/ Java,并且与所谓的“ CRUD ”软件有关。海事组织,这很无聊。


1

在大学期间同时教过C ++和Java之后,我强烈推荐Java

Java有助于学习过程,并鼓励良好的编程行为。Java的内置库非常有用,并且在每次安装时都可以轻松获得。使用每个Java安装中可用的内置库并与学生在Google搜索中找到的所有教程相匹配的内置库,能够在一句话中创建GUI应用程序,对于帮助学生超越语言并开始理解编程概念至关重要。

Java的IDE为初学者和继续学习的学生提供支持。尽早将强大的重构工具带入对话中(例如,在讨论OOP时)将帮助学生学习编写可维护的代码。

尽管C ++是一门有用的语言,但是用C ++学到的其他概念并不值得整个语言付出额外的努力。必须教一些额外的“陷阱”,以后可以引入(内存管理问题和缓冲区溢出等)。在继续学习算法复杂性和继承之类的概念之前,要求学生理解这些内容会降低您的速度,这种要求驾驶员在驾驶之前了解胎压的方式会使驾驶员的Ed减慢速度。当然,您需要知道这一点。但是您只需要知道它是某天会出错的东西,而不是将它作为更大概念的组成部分即可。


2
如果您在缓冲区溢出和内存管理方面遇到严重问题,那么您在教C ++错误。哪个标准容器会像缓冲区一样溢出?
David Thornley,2010年

数组?实际上,我可能在讲C ++错误。这是十年前的事了。
Alex Feinman

0

我认为要问自己的更大问题是您想成为一名优秀的程序员还是专注于计算机科学。如果CS是您的目标,并且您想走PHD之路,那么Java也许是您的最佳选择。Java提供了Java集合类,这些类具有许多预制的数据结构和算法。这样做的好处是双重的:首先,您可以在担心数据结构和算法的构造之前,先试用一下它们的数据结构和算法。其次,这为教授提供了更多的机会来讲授使用数据结构的CS原理,而不必担心细节问题。稍后,他们可以回去让他们的学生从头开始创建结构。

另一方面,C ++是一种较低级的语言。它迫使您考虑使用指针和垃圾回收。学习曲线有些陡峭,但最终,当您发现自己在使用外部框架进行编程时,会感觉不太像是在依靠隐藏的魔术。此外,许多较大的公司仍在使用C ++。从Java到C ++比从C ++到Java更困难。


现在,我的目标是仅仅从事软件开发,从而成为一名更好的程序员。在这一点上,我对深远的学术追求没有兴趣。
菲利普·里根
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.