7

我真正想要回归的一件事是 C++ 编程,但我不确定我应该回到 C++(我有一些基本的控制台编程知识)还是应该研究 C 或 Objective C?我正在关注长期和易于编码的问题,例如好的编辑器、编译器等,以及哪些是最快的设置和运行。

除此之外,您会建议使用什么软件来使用建议的语言?

[编辑]

有人提到,当我不知道我在做什么时,很难提出建议。目前我没有任何具体的计划,我只是考虑从这三种语言中的一种开始,以进行长期投资和工作,或者作为其他东西的跳板。

4

14 回答 14

8

如果您主要在 Windows 上工作,我建议您使用 C++。Microsoft 在新的 C++/CLI 和本机 C++ 编译器背后投入了大量工作。随着新的 TR1 和 C++0X 添加,过去存在的许多问题正在得到解决。

于 2008-09-21T01:31:20.610 回答
8

我会说 - 选择你喜欢的任何语言并坚持一段时间。同时专注于算法。这些是程序的构建块。语言只是一种语言。

如果您已经学习/掌握了一种语言,只需几周时间就可以切换到不同的语言,尤其是如果您使用同一语言系列(例如 C、C++、Objective C、Java、C# 等)

于 2008-09-21T01:32:44.023 回答
6

我真的只能说 C 和 C++。如果仅仅是因为有这么多遗留代码是在 C 和 C++ 中,那么学习两者都不会受到伤害。

纯 C 通常是操作系统、驱动程序开发或嵌入式开发环境的唯一选择。其他用途包括性能非常关键的时候——您希望尽可能“接近”机器内部。了解 C 永远不会有什么坏处,因为它的这些应用似乎不会很快消失。C 也是许多 *nix 应用程序的“通用语言”。因此,如果您想为很多开源项目(apache/svn/cvs/etc)做出贡献,了解 C 语言将是一项要求。

根据我的经验,当您希望像编写 C 代码一样“接近机器”时使用 C++,但您希望通过一些 OOP 来包含更高级别的抽象。C++ 的主要优势(也是最大的弱点)是它的多范式。它为您提供了几乎所有您可以在 C 中做的事情以及许多面向对象的功能。例如,您可以在创建类、进行继承/多态性时根据需要重用大量超优化的 C 代码——尽可能多的“面向对象”。甚至还有一些方法可以将一些函数式编程加入到混合中......

C++ 经常被批评为试图为太多人做太多事情。批评者说,作为一种尝试做所有事情的尝试,它在任何一件事上都不是很擅长。C++ 曾经是桌面应用程序的“通用语言”,但 Java 和 .Net 确实已经夺走了很多企业用户。尽管如此,许多既关心性能又使用大量额外的、有用的、通常只在 C++ 中可用的功能足够好的应用程序会选择 C++。

于 2008-09-21T01:54:28.400 回答
4

如果你认为苹果有一天会统治世界,那么目标 C。

现在我认为 iPhone Cocoa 的开发是它的所在。所以,Obj-C,就个人而言。

于 2008-09-21T01:29:03.703 回答
4

您可以忽略任何没有首先询问您实际要做什么的答案。如果没有这些信息,答案要么是错误的、具有误导性的,要么就是无关紧要的。

于 2008-09-21T01:38:33.057 回答
4

我的看法:

在您展示的三个选择中,您最好的初始选择可能是 C。一旦您了解 C、掌握其怪癖并精通它,学习 C++ 或 Objective-C 很可能是相当简单的。(您最难的点将在世界的面向对象方面。)

目前,在 Mac 上最常使用 Objective-C ,但有些人忘记了用于 Objective-C 的 GNU 工具,而 GNUStep 也支持这一点。(当前的 Mac OS X 很大程度上基于旧的 NextSTEP,GNUStep 或多或少是它的克隆。)然而,关于 Objective-C 的问题在于,它并没有在这两种环境之外广泛使用——这使它有点像狭窄的环境。(使用 Obj-C,就像几乎任何其他现代 OO 语言一样,您将花费更多的时间来学习框架类,而不是实际的底层语法/词法规则。)

我主要是 C# 开发人员。这支付了我的账单,而且做得很好。C# 不在您的列表中,我怀疑我知道原因:听起来您希望更接近金属,不那么抽象。我明白了——我认为这是长期职业发展的正确选择。我从我的代码和盒子之间的无数抽象开始(首先是专业的 Java,然后是 VB6,然后是 .NET),因此,我现在在业余时间努力工作以“赶上”其余的世界 - 我目前正在阅读K&R 书。诚然,我没有专业的需要去接近金属——但我确实觉得个人需要尽可能地了解这台机器。

(另外,具有讽刺意味的是,我正在考虑通过 Objective-C 重新进入 Cocoa 开发。我在几年前曾经使用它,我认为我现在更有能力“获得”它......我个人觉得对 C 的预知将使迁移到 Objective-C 变得更容易、更顺畅,并且使我不太可能在我的代码中引入灾难性的内存相关错误!)

归根结底,我认为拥有 C 的预先存在的知识(虽然这对我来说显然不是必需的!)是一件非常好的事情,并且随着时间的推移可能会转向其他语言(你做,除非你做操作系统、驱动程序或嵌入式工作)更容易和更流畅。我不是说“没有它你就活不下去”,我是说根据你的问题的措辞方式......我认为这是这种情况的正确答案。

于 2008-09-21T10:01:24.143 回答
2

我对您的问题的看法略有不同,最终建议您学习 Objective-C。我有几个原因。

第一,Obj-C 以一种非常不同的方式看待 OO 模型,因为它通常用 C++ 等语言实现。Obj-C 基于 Smalltalk,因此所有“方法调用”都实现为发送到适当对象的消息。由于这个程序员已经能够将其扩展为一些非常有趣且非常强大的技术。学习一门新语言的部分原因应该始终是扩展您对事物如何工作的看法——在这方面,Obj-C 比 C 或 C++ 具有更大的潜力。

第二,至少在 Mac 上,Obj-C 背后有一个极其强大的框架和一个优秀的工具链。C 和 C++ 在任何平台上都没有真正具有相同凝聚力的框架,尽管微软可能在它们的实现上接近。仅仅使用 Cocoa 就足以让我相信 Obj-C 是一门很棒的语言。图书馆经过深思熟虑,让我嫉妒那些每天都在使用它的人。

第三,Obj-C 是 C 的超集,所以通过学习它你已经熟悉了 C 的语法。另外,C 标准库非常贫乏,可以很快学会。C++ 稍微好一点,可以使用 boost,但是 boost 远没有 Cocoa 那样具有凝聚力。

最终你需要决定你的优先事项是什么。如果您只是想学习一些新东西,请使用 Obj-C。

于 2008-09-21T14:21:09.603 回答
1

取决于你在做什么。如果我必须选择一个,我会说 C++。它比 Obj-C 更跨平台,比 C 更轻松。但如果你在做 Mac 编程,你会想了解 Objective-C。如果你正在做任何嵌入式编程或任何内核黑客,你可能想要使用 C。

于 2008-09-21T01:35:33.593 回答
1

有没有理由不使用 C++ 而使用 C 或 Objective C?C++ 目前拥有迄今为止最广泛的社区、最大的现有代码库,并且是这三者中最好的。如果您认为这不是真的,请澄清(说真的,我真的很感兴趣)。

此外,就 .NET 而言,MS 仅支持 C++(当然,如果您计划有一天迁移到 .NET)。

于 2008-09-21T01:39:00.887 回答
1

从 C 开始,如果您需要面向对象,可以将您的知识扩展到 C++。Objective C 是一个像 Apple Script 这样的晦涩难懂的东西,只有 Apple 开发人员听说过(如果有的话),你不会对这种语言走得太远(无意冒犯该语言的粉丝)。

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

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

于 2008-09-21T01:40:48.340 回答
1

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

于 2008-09-21T02:57:26.690 回答
0

无论您随后专注于哪种其他编程语言,纯 C 都是一个很好的基础。尤其是 Objective-C 只是基本的 C 代码,上面散布着 smalltalk 的想法。尽管 C++ 与 C 相去甚远,但在我看来,C 仍然是最有用的语言。在 Objective-C 中,您经常使用 C。在 Ruby、Python、Erlang 和无数其他语言中,您也经常进入 C 模式。它也是一种您始终可以在您接触的每台计算机上使用的语言。

所以我个人认为每个程序员都应该真正了解C。至少一点点。

于 2008-09-21T11:05:39.043 回答
0

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

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

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

这真的让我更好地理解了面向对象编程的概念以及与之相关的设计选择。

于 2008-09-23T23:37:53.040 回答
-3

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

于 2008-09-21T01:33:18.030 回答