我应该学习操作系统特定的语言还是像Java这样的语言?

6

我很矛盾。我想开始为OS X制作应用程序。有一个特别不足的市场我想开发,但我不知道是否应该只使用Cocoa和Objective C为Mac开发或者使用Java和JavaFX进行开发。

我的问题是,Java是否足够强大,能够像Objective C在Mac和C#(.net)在Windows上处理相同的事情?


1
添加了osx标签,因为问题似乎特定于OS X。这样做可以更好地引起OS X社区的注意。 - Adam Crossland
2
也许我不应该这么说,因为我的评论可能被认为是非常主观的,但是为什么你要在一个开发者不受尊重的封闭平台上进行开发呢?http://www.eff.org/deeplinks/2010/03/iphone-developer-program-license-agreement-all - Andrei Ciobanu
1
安德烈,我想本指的是Mac,而不是iPhone/iPad。Mac开发和Windows开发一样开放。当然,肯定没有Linux开发那么开放。作为长期的Cocoa开发者,我不喜欢因为iPhone开发协议太烂而被诋毁。可怕的iPhone开发协议状态并不代表Cocoa的不好。事实上,Cocoa是一个不错且优雅的框架! - Yuji
看看一些用Java编写的OSX应用程序,然后自己决定。两个大的应用程序是:Eclipse(SWT)和Limewire(SWT或Swing,记不清了)。查看其他应用程序。这将有助于为您的决策提供信息。 - Dan Rosenstark
8个回答

5
如果你想开发(专门针对)OSX(和/或iPhone,iPad),那么最好的选择是学习Objective-C(和Cocoa框架),以实现本地外观(和行为)应用程序并利用操作系统的强大功能。如果你有一些纯C经验,学习Objective-C语法并不难。探索提供的框架和功能(Cocoa)是更耗费时间的部分(其他语言也是如此)。

我不是一个OS X极客,但最近在新闻中看到了iPhone和iPad的开发者协议要求开发必须完全使用本地API。我猜这可能不适用于桌面应用程序,但另一方面,iPhone市场几乎没有“未满足”的需求,所以这可能不是@Ben所说的问题。 - Adam Crossland
是的,苹果现在积极反对/禁止使用交叉编译器。在某些圈子中有很多关于这个话题的讨论(例如Adobe与苹果之间的讨论)。 - ChristopheD
非常感谢您的快速回复。我想我会选择Objective C。 - Ben
如果你碰巧有一些纯C的经验,为什么你会期望OP已经有这方面的经验呢?为什么不直接说“如果你已经有一些Objective-C的经验”,然后就可以了呢。我认为,作为第一门编程语言来学习Objective-C相当困难。 - Dan Rosenstark
好的,OP没有表达对其他编程语言熟悉的程度......第一门语言通常是最困难的(涉及最多新概念)。我同意这个说法:Objective-C可能不是一个理想的初学者编程语言(尽管这并不是真正的问题)。 - ChristopheD

4

通常情况下,Mac用户会避免那些不能像他们期望的那样运行的应用程序。如果你真的认为你可以“触及”这个市场,那么你需要准备好花费精力去了解这个市场 - 而本地开发工具将使这个任务更容易。


2

Java非常强大,但是仍然有一些你想在操作系统上完成的事情,尤其是UI方面,因为你可以从Java访问Windows和OS X库,所以在使用特定技术时会产生复杂性。例如,WPF为Windows创建了非常漂亮的GUI,而Java在创建这些方面不如它。

通常这取决于您想要创建的应用程序类型,是用于业务、企业使用,其中UI不是一个大问题,但可移植性是吗?那就选择Java。如果您想为特定市场创建外观吸引人或速度快的工具?那就选择操作系统特定的语言。


2
你需要换个角度看待问题。你需要学习编程,但对于初学者来说,Java并不总是最好的选择。
不要因为“更好”而选择一种语言。如果你想开发OS X应用程序,你应该学习Objective C。
然后在未来的某个时候,你可能会意识到需要使用Java。没问题,你已经是一名开发人员了,学习Java将变得轻松愉快。
所以关键是要学会编程。

2
如果您的目标市场是OS X用户,那么最好选择针对该平台本地化开发的工具。如果您想创建一个通用应用程序,并将OS X作为其中一个平台,则应使用Java或其他平台无关语言进行编写。这实际上取决于您希望应用程序有多可移植,应用程序将具有哪些功能以及您拥有的应用程序类型。在做出决定之前,建议先检查哪种语言最适合您的需求(特性、库、平台等)。请注意保留HTML标签,不要添加解释。

2
无论你选择哪种编程语言,重要的是你学会它。变量、循环、决策逻辑等原则几乎在每种语言中都存在。从一种语言到另一种语言,唯一改变的是语法和功能(例如:在C/C ++中手动进行内存管理,而在Java和.NET中使用托管内存)。
虽然与你的情况无关,但一般来说,你可能想选择最具就业前景的编程语言。Java和.NET的工作机会比Pascal多。

2

Java虽然强大,但并未真正成为桌面应用程序开发的平台。然而,由于Java企业版的出现,它在开发Web应用程序方面非常受欢迎。

Java在桌面应用程序市场上缺乏渗透的原因可能可以追溯到最初GUI开发框架AWT的质量不佳。Swing改进了这一点,并在多年来一直得到改进,但仍有一些怪癖。这主要是因为Swing自己绘制屏幕组件,而不是使用底层平台。

如果您想要一个看起来和感觉像本地应用程序的应用程序,那么您应该使用Cocoa。如果您真的想在Java中进行编程,那么您应该考虑使用Eclipse RCP。这是一个Java GUI框架,它使用本地操作系统小部件。

在我看来,缺乏桌面应用程序的原因更可能是人们对桌面应用程序缺乏兴趣。Web应用程序、云计算和HTML5都旨在实现维护的整合... - OMG Ponies
1
我曾犹豫是否要开始一场关于桌面Java的讨论。然而,我所说的并不是最近的历史,而是十多年前Java被定位为桌面应用程序时的情况。即使在今天,商业和开源桌面应用程序仍然普遍存在,但其中极少数是用Java编写的。 - Tendayi Mawushe
@OMG Ponies,他谈到了Java在桌面应用程序数量众多的情况下缺乏渗透力。答案是正确的:自Swing诞生以来,它一直备受厌恶(也备受喜爱)。 - Dan Rosenstark
@yar,@Tendayi:比较SWING应用程序和基于Java的Web应用程序的数量... - OMG Ponies
@OMG Ponies,通常的论点是我们会问,“为什么我们不选择 Swing 作为桌面应用程序?”但是我想你也可以问,“为什么 Java 开发人员不开发桌面应用程序呢?”,但我认为这个问题本末倒置了。 - Dan Rosenstark

0
我应该学习一种特定于操作系统的语言还是像Java这样的语言吗?
是的,你应该。
我的意思是,计算机语言是工具。 一个好的工匠在他的工具箱里有几个工具。 你不会在"plumbingoverflow.com"上找到人们询问“我应该学习如何使用管钳还是喷灯”。

那是个很好的类比。哦,对不起,我的意思是那并不是一个好的类比。楼主想在OSX上开始开发,并且想知道Java应用程序是否可以本地化。你的回答:“尽可能获得所有工具。” 这完全没有帮助。 - Dan Rosenstark
我参考一下问题的标题。正确答案是“两者都是”。决定最适合工作的最佳工具的最好方法是尝试它们。根据我的经验,那些专注于某种特定语言的程序员往往不如那些掌握广泛语言并渴望学习更多的人优秀。 - JeremyP
当然,那是正确的,但对于一个刚开始入门的人来说,这并不是建议。 - Dan Rosenstark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接