UNIX和Windows开发之间的差异

时间:2009-04-25 16:35:46

标签: c# .net c++ windows

我已经在Linux中用C和C ++编程了大约3年,最近一直有兴趣为企业开发商业软件。假设我找到了一个我认为可以成功的利基市场,但他们只使用Windows。但是,我对Windows API没有任何经验。我有几个问题:

我应该学习.NET吗?

我是否需要学习C#才能使用.NET,或者我能坚持使用C ++吗?

使用-no-cygwin选项在Cygwin下使用GCC进行编译的情绪是什么?我对可移植性很感兴趣,我担心如果我开始编写VC ++,我可能会被W​​indows绑定。

在哪里做我必读的好地方?

关于从Linux转换到Windows编程,您能告诉我什么?

13 个答案:

答案 0 :(得分:13)

我遇到了完全相同的问题,我很高兴我尝试了.NET。我希望这些信息可以帮到你:

我应该学习.NET吗?

我会高度推荐它。

我是否需要学习C#才能使用.NET,或者我能坚持使用C ++吗?

你可以坚持使用C ++,但我相信你会喜欢学习C#,请尝试一下。你也可以把它们混合起来。 .NET的主要挑战是学习所有可以帮助你的库(因此你不需要重新发明轮子)。经常使用msdn并尝试get a map of the fundamental classes and assemblies

如果您来自C ++,那么这是一种有趣的体验,您不应该遇到重大问题。

我的基本阅读在哪里?

我会从一些简单的事情开始,查看免费的Visual Studio工具,软件和示例here,转到MSDN文档并编译MSDN中的一些示例(如何access files,... )。如您所见,您将并排找到C#和C ++示例。

当然,最终需要阅读像C# via CLR这样的书籍。

<强>可移植性

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

未来投资

投资学习.NET框架将得到回报。今天学习所有新工具的成本很高,使用.NET,你知道你可以发展。出现了新的功能和语言,但基本类仍然存在,因此您的时间/精力投入得到了更多的控制。

答案 1 :(得分:5)

我应该学习.Net吗?

取决于您是否认为这对您所关注的利基有利。例如,如果您的利基是一个桌面应用程序,那么开始可能是一个好主意,因为恕我直言,开发WinForms,WPF GUI比C ++版本容易得多,

我是否需要学习C#才能使用.Net,还是可以坚持使用C ++?

C#不是必需的,使用C ++ / CLI可以在使用C ++的同时利用.Net。但是,我倾向于仅使用C ++ / CLI来专注于托管代码和本机代码之间的互操作。它特别擅长这种发展。如果您切换到更主流的应用程序,我认为您会发现C#或VB.Net将更好地为您提供服务。大多数在线样本都面向这些语言。特别是工具的很大一部分非常适合这些语言(WinForms和WPF设计人员开始)。

担心编写非可移植代码并与VC ++绑定

我确信这个意见会略显不受欢迎。但是你已经提到过,你所处的利基是针对Windows的。如果你只在Windows上运行它,那么编写可移植代码有什么意义呢?这不是Windows偏见,如果平台被颠倒,我会做出完全相同的论点。

我不是说便携式代码是件坏事。这实际上是一件非常好的事情。但是如果没有使用便携性的可能性,为什么不利用这个平台?

答案 2 :(得分:3)

答案取决于您希望实施的计划类型。

如果您想实现一些系统实用程序,那么答案与* nx世界几乎相同:您必须在C中编程以获得最佳结果并且非常了解Win API。

对于其他事情,C#可能是今天的方式。它是现有dotNet语言中最好的语言IMO。

学习Windows API是一件好事,但我建议使用一些脚本语言来加快实验速度(Lua with Alien library,Python,AutoIt等...)。关于它的好处是你可能知道其中一些来自* nx社区。

由于您担心可移植性,我建议您使用C#特别注意操作系统特定的事情,如路径分隔符,文件名区分大小写等。您可以在MonoDeveloper网站上找到一些关于它的好文章。 Java也是一个很好的方式 - 我不是专家,但据我所知,它交易了一些语言的复杂性和速度以及原生的感觉(从C#角度来看)以获得更好的可移植性。

最新的MonoDevelop让你甚至可以加载Visual Studio项目,尽管我从来没有这样做过。

答案 3 :(得分:2)

我应该学习.NET吗?

我是否需要学习C#才能使用.NET,或者我能坚持使用C ++吗?

从技术上讲,不,你不必学习.NET的C#。

如果我开始为VC ++写作,我可能会被W​​indows绑定。

这是一家Windows商店,对吗?谁关心Windows程序是否可移植,如果您的唯一目标是Windows

我的基本阅读在哪里?

#1。

关于从Linux转换到Windows编程,你能告诉我什么呢?

购买Windows机器和Visual Studio。不要尝试半Unix。花费大量时间和精力学习Microsoft Way。就像Unix Way一样,有一种MS Way。两者都适用于各自的系统。

祝你好运,玩得开心!

答案 4 :(得分:2)

您将向企业销售商业Windows软件。查看业务。弄清楚他们购买了什么,并检查推荐的平台信息。这将使您对他们拥有什么以及瞄准目标有一个很好的了解。

你可能想学习.NET(嘿,你不得不学习一个新的框架),如果你擅长C ++,C#也不会很难学。这似乎是当今标准的开发环境,可能是有充分理由的。

如果您担心可移植性,请在C ++中编写后端并隔离与系统相关的部分。如果您要向企业销售Windows软件,它必须看起来像Windows软件。它必须按照他们的预期行事。不要因为跨平台的任何优势而损害用户界面;相反,逻辑上分开UI。您可以随后为其他平台重写它。

同样,继续使用Visual Studio。这是一个很好的环境,虽然我有时会想念gcc,gdb和make,但它可能会让你更加意识到你正在编写一个Windows程序。如果你使用Cygwin和gcc,你可能不会像Windows程序员一样思考,这意味着它看起来不像Windows程序,这意味着你的潜在客户会遇到问题,这意味着更少的钱和更多的机会。后期推动者占领市场。

我发现转向Windows编程并不困难。请注意,您正在学习一些新东西,并且有些东西在Windows中是标准的,而不是在Unix中。如果你不害怕学习新东西,你会做得很好。

还有一件事:Unix应用程序经常因笨重的UI而臭名昭着。 Unix用户倾向于更加技术化的人,他们不会过多地关注事物的外观并且对丑陋的界面更加宽容。在Windows商业软件世界中,外观和易用性很重要,而实际用户很可能是计算机心理模型非常不准确的人,如果将它们咬在脸上,他们将无法识别一行Python代码

您将需要一个相当吸引人的用户界面,可以让那些不关心计算机本身的人轻松使用。这对我们很多人来说是一个延伸。如果您认为iPhone没有什么特别之处,那么您非常需要另一种观点。阅读用户界面,找到具有某种艺术感的人和一些可用性的想法,任何东西。 UI设计与编程不同,很多人只有其中一种(在这里,人们往往是熟练的程序员,可能有一些UI技能)。

答案 5 :(得分:1)

可以使用C ++进行.NET开发,但它将是C ++(C ++ / CLI)的一个稍微修改过的版本。说实话,你也可以学习C#。 (我个人认为C#是一种很漂亮的语言,但我们去了。)

在框架本身方面还需要学习更多东西而不是语言 - 即使语言已经获得了特性,但是图书馆的发展速度也越来越快。

所有这些仍然比学习Win32原生API更简单(IMO)。

对于基本阅读,我建议使用“Cuts 3.0 in a Nutshell”和“CLR via C#”。 (链接即将来临,我没有过时地摆桌子吃饭......)

答案 6 :(得分:1)

如果您对代码的可移植性感兴趣,必须同时生成Linux版本和Windows版本。如果您在考虑可移植性的同时尝试编写Windows代码,那么您的代码将始终以Windows特定元素结束。

如果你打算使用Windows,你也可以学习C#。 C#实际上很酷;它比C ++有更多的Lisp功能。学习它是直截了当的。您最好的学习资源是Google,但如果您是图书学习者,请购买任何有关C#的书籍。

答案 7 :(得分:1)

一切都取决于。如果您选择使用C ++并且您正在开发GUI应用程序,那么有几个GUI框架可供选择(wxWidgetsGTK),其中大多数也是平台可移植的。如果您只是专门针对Windows,那么将.NET库作为一个依赖项不是问题,并且您不介意学习一种新的(但仍然熟悉的)语言所涉及的时间,那么C#可能会更好情况下。

答案 8 :(得分:1)

许多人似乎忽略了“UNIX和Windows开发之间的差异”的原始问题,因此我将稍微谈谈这一点。


关于我应该学习C#:

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


关于C#的其他类似语言:

Java是另一种与C#非常相似的语言。 Java IMO是C#和IMO的父亲,我更喜欢Java。

我给你一个比喻来解释我对Java的偏好。 Java有这个儿子C#看到了他父亲的所有成功。儿子嫉妒并试图做他父亲正在做的事情。

在这种情况下,MS是一个新贵的儿子,试图抢走年长的父亲。然而,新贵C#缺少一些关键的东西IMO:

  • 真正的跨平台
  • 较小的技巧库,拥有较短的C#生命周期(或者我喜欢称之为一小盒预制的legos)
  • 我更喜欢Java以上两个要点。

[1 - 脚注]当我说“像C#这样的语言”时,我指的是其他语言具有相似的功能。具体的功能如:垃圾收集,从一开始就面向100%的对象(与OO中的C ++黑客攻击),内置于xml-type-documentation(想想javadoc)并且可以灵活地执行许多不同的操作。


关于我应该学习.NET:

我只做了一小部分/中等数量的C#但是从少量的C#中我注意到当你做任何C#时,几乎都需要.NET。 (我知道C#非常非常乱用.NET而且很难剥离。)我理解它的方式可能是错的... C#的大部分/全部标准主库是C#,因此你需要.NET如果你正在做C#。


回到原始问题“UNIX和Windows开发之间的差异”:

  • Windows 开发并不是多样化的IMO ...只有一个开发环境,并且该环境是MS编译器和MS IDE都在其 Visual Studio产品系列。
  • Windows 开发主要关注 GUI驱动的工具。
  • Linux 开发更加多样化,有数百个编译器/文本编辑器/ IDE /等。 (我说它是多种多样的,但实际上大多数Linux开发实际上非常相似使用一系列常用工具:GCC / GDB / GREP / FIND / VIM / EMACS / CTAGS / CSCOPE 和一些选择的源代码库。)
  • Linux 开发侧重于命令行界面驱动的工具。

答案 9 :(得分:0)

这是一个很好的问题。您需要确定的第一件事是您是否需要编写跨平台代码。如果你这样做,那么C / C ++是使用一些跨平台UI库的最佳途径。

如果没有,那么我强烈推荐使用Visual Studio 2008 SP1的.NET 3.5。我还建议使用WPF而不是WinForms作为用户界面。

绝不是MSFT对本机代码开发进行反投资;但C#.NET 3.5 WPF和相关工具是应用程序开发的未来 - 特别是对于业务线类型。

我相信你会发现这非常有成效且容易学习。您还可以免费获得免费的here

开发工具

答案 10 :(得分:0)

您使用哪些基于Linux的GUI库? QT? GTK?有可能是这些库的Windows端口。如果您需要保持平台独立,请坚持您所知道的。如果您认为自己只需要成为Windows,那么只有这样才能切换.NET解决方案。

答案 11 :(得分:0)

  

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

使用C#。 C#和.net是一个很好的组合。

另外,没有严格的编程相关,但有点Unix vs Windows。 Unix总是有一个出色的shell,让程序员的生活更轻松。 Windows现在也有。了解一下Powershell以及如何编写cmd-lets,它将为您节省大量时间。

Powershell是雷德蒙德最好的事情之一。

http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx

答案 12 :(得分:0)

没有。不学习.NET - 学习C#..它就像操场上的东西一样。一旦掌握了它......你将能够在1/10的时间内完成项目..

但是使用C#/ .NET,你会学习坏习惯。我现在回到C ++。我有C ++ 12年,然后C#5年,现在C ++ 6个月。

尽管完成项目需要大约6倍的时间...(6个月对1个月),我觉得C ++代码具有艺术感觉,而C#代码是通用的。喜欢BestBuy。

我完全反C ++ / CLI或其他所谓的。如果你需要进入CLR级别..运行,不要再回到C ++ ..或者你最终会花费你所有的时间来处理一些任意的C#设计“功能”,如事件同步..

我的下一个目标可能是.NET Powershell来管理我的C ++服务器应用程序。

我在10年前做过Unix to Windows移动..我尝试回到FreeBSD或Linux ...我曾经喜欢vi ..但VS到目前为止是迄今为止最好的IDE。只需获得vs2010 pro + reshaper并阅读这2本书。第一个是核心C#,但它的.NET 2.0,这很好..因为它最容易开始编写C ++样式代码。下一本书将持续数年。

http://www.amazon.com/2-0-Practical-Guide-Programmers-Guides/dp/0121674517

http://www.amazon.com/gp/reader/0735627045/ref=sib_dp_pt#reader-link

希望这会有所帮助。

也。没有理由不在2012年编写门户网站c ++代码.cmake + VS2010 + boost + crossroads-io