我已经在Linux中用C和C ++编程了大约3年,最近一直有兴趣为企业开发商业软件。假设我找到了一个我认为可以成功的利基市场,但他们只使用Windows。但是,我对Windows API没有任何经验。我有几个问题:
我应该学习.NET吗?
我是否需要学习C#才能使用.NET,或者我能坚持使用C ++吗?
使用-no-cygwin选项在Cygwin下使用GCC进行编译的情绪是什么?我对可移植性很感兴趣,我担心如果我开始编写VC ++,我可能会被Windows绑定。
在哪里做我必读的好地方?
关于从Linux转换到Windows编程,您能告诉我什么?
答案 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)
取决于您是否认为这对您所关注的利基有利。例如,如果您的利基是一个桌面应用程序,那么开始可能是一个好主意,因为恕我直言,开发WinForms,WPF GUI比C ++版本容易得多,
C#不是必需的,使用C ++ / CLI可以在使用C ++的同时利用.Net。但是,我倾向于仅使用C ++ / CLI来专注于托管代码和本机代码之间的互操作。它特别擅长这种发展。如果您切换到更主流的应用程序,我认为您会发现C#或VB.Net将更好地为您提供服务。大多数在线样本都面向这些语言。特别是工具的很大一部分非常适合这些语言(WinForms和WPF设计人员开始)。
我确信这个意见会略显不受欢迎。但是你已经提到过,你所处的利基是针对Windows的。如果你只在Windows上运行它,那么编写可移植代码有什么意义呢?这不是Windows偏见,如果平台被颠倒,我会做出完全相同的论点。
我不是说便携式代码是件坏事。这实际上是一件非常好的事情。但是如果没有使用便携性的可能性,为什么不利用这个平台?
答案 2 :(得分:3)
答案取决于您希望实施的计划类型。
如果您想实现一些系统实用程序,那么答案与* nx世界几乎相同:您必须在C中编程以获得最佳结果并且非常了解Win API。
对于其他事情,C#可能是今天的方式。它是现有dotNet语言中最好的语言IMO。
学习Windows API是一件好事,但我建议使用一些脚本语言来加快实验速度(Lua with Alien library,Python,AutoIt等...)。关于它的好处是你可能知道其中一些来自* nx社区。 p>
由于您担心可移植性,我建议您使用C#特别注意操作系统特定的事情,如路径分隔符,文件名区分大小写等。您可以在MonoDeveloper网站上找到一些关于它的好文章。 Java也是一个很好的方式 - 我不是专家,但据我所知,它交易了一些语言的复杂性和速度以及原生的感觉(从C#角度来看)以获得更好的可移植性。
最新的MonoDevelop让你甚至可以加载Visual Studio项目,尽管我从来没有这样做过。
答案 3 :(得分:2)
是
从技术上讲,不,你不必学习.NET的C#。
这是一家Windows商店,对吗?谁关心Windows程序是否可移植,如果您的唯一目标是Windows ?
#1。
购买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框架可供选择(wxWidgets,GTK),其中大多数也是平台可移植的。如果您只是专门针对Windows,那么将.NET库作为一个依赖项不是问题,并且您不介意学习一种新的(但仍然熟悉的)语言所涉及的时间,那么C#可能会更好情况下。
答案 8 :(得分:1)
许多人似乎忽略了“UNIX和Windows开发之间的差异”的原始问题,因此我将稍微谈谈这一点。
关于我应该学习C#:
我认为你需要在某些时候学习像C#[1]这样的语言。问题不在于您是否应该学习它,而是在何时学习它。
关于C#的其他类似语言:
Java是另一种与C#非常相似的语言。 Java IMO是C#和IMO的父亲,我更喜欢Java。
我给你一个比喻来解释我对Java的偏好。 Java有这个儿子C#看到了他父亲的所有成功。儿子嫉妒并试图做他父亲正在做的事情。
在这种情况下,MS是一个新贵的儿子,试图抢走年长的父亲。然而,新贵C#缺少一些关键的东西IMO:
[1 - 脚注]当我说“像C#这样的语言”时,我指的是其他语言具有相似的功能。具体的功能如:垃圾收集,从一开始就面向100%的对象(与OO中的C ++黑客攻击),内置于xml-type-documentation(想想javadoc)并且可以灵活地执行许多不同的操作。
关于我应该学习.NET:
我只做了一小部分/中等数量的C#但是从少量的C#中我注意到当你做任何C#时,几乎都需要.NET。 (我知道C#非常非常乱用.NET而且很难剥离。)我理解它的方式可能是错的... C#的大部分/全部标准主库是C#,因此你需要.NET如果你正在做C#。
回到原始问题“UNIX和Windows开发之间的差异”:
答案 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