UNIX和Windows开发的区别

11

我已经在Linux下使用C和C++编程了大约3年时间,最近对开发商业软件很感兴趣。假设我找到了一个我认为自己可以成功的利基市场,但他们只使用Windows。然而,我完全没有使用Windows API的经验。我有几个问题:

我应该学习.NET吗?

我需要学习C#才能使用.NET,还是可以继续使用C++?

使用GCC在Cygwin下编译时是否采用--no-cygwin选项比较好?我对可移植性很感兴趣,并担心如果我开始使用VC++,可能会受限于Windows。

哪里是进行必要阅读的好地方?

你还能告诉我从Linux转向Windows编程的其他信息吗?

13个回答

13

我面临着完全相同的问题,我很高兴尝试了.NET。希望这些信息能对你有所帮助:

我应该学习.NET吗?

我强烈推荐学习它。

我需要学习C#才能使用.NET,还是可以继续使用C++?

你可以继续使用C++,但我相信你会喜欢学习C#,请尝试一下。你也可以将它们混合使用。使用msdn经常查阅,并尝试获取基本类和程序集的映射。 .NET的主要挑战在于学习所有现有的库(这样你就不需要重新发明轮子)。如果你来自C++,那么这将是一次有趣的体验,你不应该遇到太大的问题。

哪里是进行必要阅读的好地方?

我建议从一些简单的东西开始,检查免费的Visual Studio工具、软件和示例这里,去MSDN文档中编译一些实例(如如何访问文件,...)。正如你所看到的,你将找到C#和C++示例并排放置。

然后当然还需要阅读书籍,像通过CLR学习C#这样的书籍最终都需要阅读。

可移植性

确保在Mono和多个平台上运行您的代码。

未来投资

学习 .NET 框架是值得投资的。现在学习所有新工具的成本很高,但如果选择 .NET,您就可以不断进化。虽然会出现新的特性和语言,但基础类仍然保持不变,因此您的时间/精力投入可以更好地控制。


1
+1,尤其要注意.NET和C#可以通过Mono实现可移植性。 - Lucas

5

我应该学习 .Net 吗?

这取决于你是否认为它对你的领域有利。例如,如果你的领域是桌面应用程序,那么开始学习 .Net 是一个不错的选择,因为在我的看法中,使用 WinForms、WPF GUI 开发比使用 C++ 版本容易得多。

我需要学习 C# 才能使用 .Net 吗?还是可以继续使用 C++?

C# 不是必需品,使用 C++/CLI 可以让你利用 .Net 而仍然使用 C++。然而,我只倾向于将 C++/CLI 用于重点关注托管和本机代码之间互操作的组件。它在这种类型的开发中特别好用。如果你转向更主流的应用程序,我认为你会发现 C# 或 VB.Net 更适合你。大部分在线示例都是针对这些语言的。特别是很多工具都是专门针对这些语言进行设计的(例如 WinForms 和 WPF 设计器)。

担心编写非可移植代码并被绑定到 VC++ 上?

我相信这种观点可能会有些不受欢迎。但你已经提到了你所看的领域是特定于 Windows 的。如果你只会在 Windows 上运行代码,编写可移植代码有什么意义呢?这不是 Windows 偏见的体现,如果平台反过来了,我会提出完全相同的论点。

我并不是说可移植代码是一件坏事。事实上,它非常好。但如果没有使用可移植性的潜力,为什么不利用这个平台呢?


作为一名Unix的粉丝,我认同你在最后两段所说的观点。 - David Thornley

3
答案取决于您想要实现的程序类型。如果您想要实现一些系统实用程序,那么答案与*nix世界上的相同:为了获得最佳结果并熟知Win API,您需要使用C语言进行编程。对于其他事情来说,C#可能是今天最好的选择。在现有的dotNet语言中,我认为它是最好的语言。学习Windows API肯定是一件好事,但我建议使用一些脚本语言进行更快的实验(例如带有Alien库的Lua、Python、AutoIt等)。好处是您可能已经从*nix社区了解到其中一些。由于您担心可移植性,我建议您特别注意OS特定事项,如路径分隔符、文件名大小写敏感性等,使用C#。您可以在MonoDeveloper网站上找到一些不错的文章。Java也是一个不错的选择 - 我不是专家,但据我所知,它以更好的可移植性换取一些语言复杂性、速度和本地感觉(从C#的角度来看)。最新的MonoDevelop甚至可以加载Visual Studio项目,尽管我个人从未这样做过。

2

我应该学习.NET吗?

是的。

我需要学习C#才能使用.NET,还是可以继续使用C++?

严格来说,您不必为了使用.NET而学习C#。

如果我开始编写VC ++,我可能会被限制在Windows上。

这是一个Windows平台,如果您只关注Windows,谁会在意Windows程序是否可移植呢?

哪里是做必要阅读的好地方?

Stackoverflow。

你还能告诉我从Linux过渡到Windows编程还有什么需要注意的吗?

购买一台安装Windows系统的计算机和Visual Studio。不要试图半途而废。花时间和精力学习微软的方式。就像Unix有自己的方法一样,MS也有自己的方法。两者分别适用于它们的操作系统。

祝您好运并且玩得开心!


2
你将要向企业销售商用Windows软件。了解这些企业,弄清楚他们还购买什么,检查推荐的平台信息。这会给你一个很好的想法,他们拥有什么,以及应该瞄准什么。
你可能想学习.NET(嘿,无论如何,你都必须学习新的框架),如果你擅长C ++,那么学习C#不会很困难。现在似乎是标准的开发环境,可能有很好的理由。
如果你担心可移植性,请使用C ++编写后端并隔离系统相关部分。如果你将要向企业销售Windows软件,它必须看起来像Windows软件。它必须表现出他们的期望。为了跨平台而牺牲UI,不要这样做;相反,逻辑上分离UI。你总是可以稍后为其他平台重新编写它。
同样地,继续使用Visual Studio。它是一个不错的环境,虽然我有时会想念gcc,gdb和make,但它可能会让你更加意识到你正在编写Windows程序。如果你使用Cygwin和gcc,你可能不会像Windows程序员一样思考,这意味着它看起来不像Windows程序,这意味着你的潜在客户将会遇到问题,这意味着更少的钱和更大的机会被后来者占领市场。
我发现转向Windows编程并不困难。只是要意识到你正在学习新东西,并且在Windows中有一些标准,在Unix中没有这些标准。如果你不害怕学习新东西,你会做得很好。
还有一件事:Unix应用程序通常以笨重的用户界面而闻名。Unix用户往往是更技术化的人,他们不太关注外观,对丑陋的界面更加宽容。在Windows商业软件世界中,外观和易用性很重要,实际用户可能是对计算机有极不准确的心理模型的人,如果一行Python代码咬了他们的脸,他们也不会认识。
你需要一个相当吸引人的UI,可以轻松地被不关心计算机本身的人使用。这对我们许多人来说是个挑战。如果你认为iPhone没有什么特别之处,那么你就需要另一个观点。阅读有关用户界面的信息,找到其他具有艺术感和一些可用性概念的人,任何东西都可以。UI设计是一种与编程不同的技能,许多人只具备其中一种技能(在这里,人们往往是熟练的程序员,并且可能具有一些UI技能)。

1

你可以使用C++进行.NET开发,但它将是一个略微修改过的版本(C++/CLI)。老实说,你最好学习C#。(个人认为C#是一门优美的语言,但这只是我的看法。)

在框架本身方面,要学习的东西比语言多得多 - 尽管语言已经增加了很多功能,但库的增长速度更快。

我认为,所有这些都比学习Win32本地API简单(在我看来)。

对于必读内容,我建议阅读《C# 3.0入门》和《通过C#了解CLR》。(链接稍后会提供...)


那该死的家庭时间干扰了Jon Skeet的重要工作! - TheTXI
请注意,当Jon提到C++/CLI时,他指的是用于.NET Framework(托管)开发,而不是本机Windows API开发。 - Lucas

1

如果你关心代码的可移植性,你必须同时编写Linux版本和Windows版本。如果你试图在考虑可移植性的情况下编写Windows代码,你最终会在代码中出现Windows特定的元素。

如果你要使用Windows,那么你不妨学习C#。C#实际上非常酷,它比C++引入了更多的Lisp特性。学习它很简单。你最好的学习资源是Google,但如果你喜欢看书学习,可以购买任何一本关于C#的书籍。


1
这完全取决于情况。如果你选择使用C++并且正在开发一个GUI应用程序,有几个GUI框架可供选择(wxWidgetsGTK),其中大部分也是跨平台的。如果你只针对Windows进行开发,并且不介意依赖.NET库以及学习一门新的(但仍然熟悉的)语言所需的时间,那么在你的情况下,C#可能更好。

1

许多人似乎忽略了“UNIX和Windows开发之间的区别”这个最初的问题,所以我会谈一些关于它的内容。


关于是否应该学习C#:

我认为你需要在某个时候学习像C# [1]这样的语言。问题不在于你是否应该学习它,而在于你何时会学习它。


关于类似C#的替代语言:
Java是另一种与C#非常相似的语言。在我看来,Java是C#的鼻祖,我更喜欢Java。
我提供一个比喻来解释我对Java的偏爱。Java有个儿子C#,他看到了父亲的所有成功,并且嫉妒起来试图做和他父亲一样的事情。
在这种情况下,微软是一个试图超越老父亲的后起之秀。然而,我认为后起之秀的C#缺少几个关键点:
- 真正的跨平台 - 较短的生命周期拥有较小的技巧库(或者像我所说的,预构建乐高玩具盒较小) - 我更喜欢Java因为以上两个原因。
[1 - 脚注] 当我说“像C#这样的语言”时,我指的是有类似功能的其他语言。具体来说,像:自动内存管理、从一开始就100%面向对象(与C ++混合面向对象不同)、内置XML类型文档(类似于javadoc)并能够灵活地完成许多不同的事情。

关于是否应该学习.NET:

我只学过一点点C#,但从这少量的经验中,我发现在做任何C#相关的事情时,几乎都需要.NET。(我知道C#和.NET非常紧密地结合在一起,很难分开。)据我所知,大部分/全部C#的标准主要库都是C#编写的,因此如果你要使用C#,就必须要有.NET。


回到原始问题“UNIX和Windows开发的区别”:

  • Windows开发在我的看法下不够多样化... 只有一个开发环境,这个环境是微软编译器和微软IDE两者在他们的Visual Studio产品线中打包在一起。
  • Windows开发专注于图形用户界面驱动的工具。
  • Linux开发更加多样化,拥有数百种编译器/文本编辑器/集成开发环境等(我说它是多样化的,但实际上大多数Linux开发实际上非常相似,使用一些常见的工具:GCC/GDB/GREP/FIND/VIM/EMACS/CTAGS/CSCOPE以及某种源代码存储库)。
  • Linux开发专注于命令行接口驱动的工具。

0

这是一个很好的问题。首先,您需要确定是否需要编写跨平台代码。如果需要,则使用一些跨平台UI库,C/C++是最佳选择。

如果不需要,则强烈推荐使用Visual Studio 2008 SP1的.NET 3.5。我还建议您在UI方面使用WPF而不是WinForms。

微软绝不会停止本地代码开发的投资;但是,C# .NET 3.5 WPF和相关工具是应用程序开发的未来 - 特别是针对业务线的应用程序开发。

我相信您会发现这非常高效且易于学习。您也可以免费获得良好的开发工具here


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