从长远来看,最好的方法是什么:C,Objective C或者C ++?

时间:2020-03-06 14:29:52  来源:igfitidea点击:

我真正想回到的一件事是C ++编程,但是我不确定是否应该回到C ++(我已经掌握了一些基本的控制台编程知识)还是应该研究C还是Objective C?我正在研究长期以及易于编写的代码(例如好的编辑器,编译器等),以及设置和运行起来最快的方法。

为此,我们会建议使用哪种软件来使用建议的语言?

[编辑]

有人提到在不知道我在做什么的情况下很难提出建议。目前,我没有任何特定的程序,我只是想从这三种语言中的一种开始,以进行长期的投资和工作,或者作为其他目标的切入点。

解决方案

如果我们认为苹果有朝一日能统治世界,那么目标C。

现在,我认为iPhone Cocoa的开发正处于发展中。因此,Obj-C个人而言。

如果我们主要在Windows上工作,则建议使用C ++。 Microsoft在新的C ++ / CLI和本机C ++编译器后面进行了大量工作。随着新的TR1和C ++ 0X的增加,过去存在的许多问题都得到了解决。

我会说选择任何我们喜欢的语言并坚持一会儿。同时,将重点放在算法上。这些是程序的组成部分。语言只是一种语言。

如果我们已经学会/掌握了一种语言,那么切换到另一种语言只是几个星期的问题,特别是如果我们使用相同的语言族(例如C,C ++,Objective C,Java,Cetc。)。

如果我们只想专注于Windows操作系统,那么我建议直接从C(.Net Framework)开始

取决于我们在做什么。如果必须选择一个,我会说C ++。它比Obj-C跨平台更多,比C更少痛苦。但是,如果我们正在进行Mac编程,则需要了解Objective-C。如果我们正在执行任何嵌入式编程或者任何内核黑客攻击,则可能要使用C。

我们可以忽略任何未先询问我们实际要做什么的答案。没有这些信息,答案或者是错误的,误导性的,或者就是根本不相关的。

为什么不使用C ++而不是C或者Objective C是有原因的?迄今为止,C ++拥有最广泛的社区,最大的现有代码库,并且在这三个方面都拥有最出色的功能。如果我们认为这是不对的,请澄清(严重的是,我真的很感兴趣)。

此外,就.NET而言,C ++是MS唯一支持的一种(当然,如果我们计划有一天迁移到.NET)。

从C开始,如果需要面向对象,则可以将知识扩展到C ++。目标C是像Apple Script这样的晦涩事物,只有Apple开发人员才听说过(如果有的话),我们对这种语言不会走得太远(对这种语言的支持者没有冒犯)。

C非常容易学习(与C ++相比),并且我们对于以后可能要学习的任何其他语言(尤其是C ++)都有很好的基础知识。

关于Loren Segal的回答,当我们想在C和C ++之间进行选择时,我们想要做什么并不重要。这只是一个偏好问题。两者都具有用于所有内容的库(因为C ++库通常只是围绕C库的面向对象包装器),都具有庞大的社区,稳定的IDE和编译器。

我真的只能说C和C ++。如果仅因为C和C ++中包含大量遗留代码,那么学习任何一种语言都不会有害。

Pure C通常是操作系统,驱动程序开发或者嵌入式开发环境的唯一选择。其他用途包括性能非常关键的时间-我们希望尽可能"接近"机器内部。知道C并不会带来任何伤害,因为C的这些应用似乎不会很快消失。 C也是许多* nix应用程序的"通用语言"。因此,如果我们想为许多开放源代码项目(apache / svn / cvs / etc)做出贡献,那么必须具备C知识。

根据我的经验,C ++是在我们希望"接近机器"时使用的,就像在为C进行编码时一样,但是我们希望通过某些OOP包括更高级别的抽象。 C ++的主要优点(也是最大的缺点)在于它的多种范例。它为我们提供了几乎可以用C完成的所有工作以及许多面向对象的功能。例如,我们可以在创建类,进行继承/多态时根据需要重用许多超优化的C代码,并根据需要进行"面向对象"的操作。甚至还有一些方法可以将一些函数式编程加入其中...

C ++通常被批评为对太多人来说太多了。评论家说,作为一种尝试做所有事情的方法,它在任何事情上都不是很擅长。 C ++曾经是桌面应用程序的"通用语言",但是Java和.Net确实使许多企业用户丧失了视力。尽管如此,许多既关心性能又使用大量额外的,有用的,通常足够满足我们目的的功能的应用程序会选择C ++,而这些功能只有在C ++中才可用。

英特尔在C ++库上投入了大量资金,以使其能够在其处理器上运行。由于英特尔最近似乎在PC处理器领域占据主导地位,因此这似乎是一个不错的选择。

我的看法:

在显示的三个选择中,最好的初始选择可能是C。一旦我们知道C,掌握了它的怪癖并且精通它,那么学习C ++或者Objective-C可能就很简单了。 (我们最难的地方将是在世界的面向对象方面。)

目前,在Mac上最常使用Objective-C,但是有些人忘记了Objective-C的GNU工具,并且GNUStep也支持该工具。 (当前的Mac OS X很大程度上基于旧的NextSTEP,而GNUStep或者多或者少是其中的一个。)关于Objective-C的事情是,它在这两种环境之外并未得到广泛使用-使它成为一种狭窄的环境。 (与Obj-C一样,就像其他任何现代OO语言一样,我们花在学习框架类上的时间要比实际的基础语法/词法规则花费更多的时间。)

我主要是一名开发人员。那付了我的账单,而且做得很好。 C不在清单上,我怀疑我知道为什么:听起来我们正在寻找更接近金属的地方,而不再是抽象的东西。我明白了,我认为这是长期职业发展的正确选择。首先,我在代码和代码框之间进行了许多抽象(首先是使用Java,然后是VB6,然后是.NET),因此,我现在在业余时间努力与其他代码一起"追赶"。世界-我目前正在阅读K&R书。诚然,我不需要专业人士来接近金属-但我确实个人需要尽可能地了解机器。

(此外,具有讽刺意味的是,我正在考虑通过Objective-C重新投入可可开发。我几年前曾经在此推销,现在我认为我更适合"获得"它了……我个人感觉C的预备知识将使进入Objective-C变得更加容易,顺畅,并使我不太可能在代码中引入与内存相关的灾难性错误!)

归根结底,我认为拥有C的已有知识(尽管这对我而言显然不是必需的!)是一件非常棒的事情,并且随着时间的推移,可能会转移到其他语言(我们会这样做,除非我们进行OS,驱动程序或者嵌入式工作),并且更轻松,更流畅。我并不是说"没有它就无法解决",而是基于问题表达方式……我认为这是该情况的正确答案。

无论我们随后关注哪种其他编程语言,Pure C都是一个很好的基础。特别是,Objective-C只是基本的C代码,上面充斥着Smalltalk想法。我认为,尽管C ++远离C语言,但它仍然清楚地表明C是最有用的语言。在Objective-C中,我们通常会下降到C。在Ruby,Python,Erlang和无数其他语言中,我们也经常会进入C模式。这也是我们始终可以在触摸的每台计算机上使用的一种语言。

因此,根据我个人的观点,每个程序员都应该真正了解C。至少要了解一点。

我对问题的看法稍有不同,最终会建议我们学习Objective-C。我有两个原因。

其中一种,Obj-C观察OO模型的方式非常不同,因为它通常以C ++之类的语言实现。 Obj-C基于Smalltalk,因此所有"方法调用"都作为发送到适当对象的消息来实现。由于有了这个程序员,才能够将其扩展到一些非常有趣且功能强大的技术中。学习新语言的部分原因应该始终是扩大我们对事物如何工作的看法-在这方面,Obj-C比C或者C ++具有更大的潜力。

至少在Mac上,两个(Obj-C)背后有一个非常强大的框架,并带有出色的工具链。 C和C ++在任何平台上实际上都没有相同的内聚框架,尽管Microsoft的实现可能很接近。仅仅与Cocoa一起工作就足以使我相信Obj-C是一门很棒的语言。图书馆经过深思熟虑,使我嫉妒那些每天使用图书馆的人。

第三,Obj-C是C的超集,因此通过学习它,我们将已经熟悉C的语法。此外,C Standard库还很贫乏并且可以很快地学习。 C ++稍好一些,可以使用增强功能,但是增强功能与可可的内聚力相差甚远。

最终,我们需要确定优先级。如果我们只是想学习新知识,可以使用Obj-C。

在成为C ++开发人员10年左右之后,我最近学习了Objective-C(因为我开始和Cocoa一起玩)。

我发现除了C ++之外,学习Objective-C的经验也非常有启发性,即使我可能不会在任何实际项目中使用Objective-C。

Objective-C和C ++都在C的基础上增加了一层面向对象的编程。但是它们却以几乎完全相反的方式来实现。似乎每次C ++做出一个设计决定时,objective-C都会做出相反的选择。例如,C ++使用静态类型,而Objective-C使用动态类型。或者,(最近)objective-C使用的垃圾回收是C ++所没有的。

这确实使我以一种更好的方式理解了面向对象编程的概念以及与之相关的设计选择。