作为一名C#/Java程序员,我非常需要知道一个事实:Windows编程使用Win32SDK/MFC/wxWidget已经过时了吗?
现在这些技术在软件行业的受欢迎程度如何?
作为一名C#/Java程序员,我现在是否需要学习Win32SDK/MFC/wxWidget?
我认为学习Win32 SDK很有用,因为它可以帮助你了解Windows的内部工作原理。我发现学习钩子和子类化非常有趣。所以如果你感兴趣,那么你应该去学习。然而,你可能并不需要了解Win32。尽管它在今天还没有过时,但将来可能会。
我对MFC没有太大的兴趣,因为它需要付费版的Visual Studio。
即使您不打算编写或维护C/C++应用程序,也要学习Win32。
现在不必学习MFC/wxWidget。 MFC附带其源代码,因此您可以学习一些类如何实现对Win32的包装器,但这更适合于C ++程序员。尽管Visual Studio仍支持这种较旧的技术,但MFC的受欢迎程度已经降低。只有在需要时才学习MFC/wxWidget,如果您需要维护一些旧代码。
使用C#/Java,您可以解决很多问题,但是有时您需要直接使用Win32来完成某些任务,出于各种原因。也许某些功能在.NET/Java中根本不存在,或者存在错误,可以通过直接转到Win32来避免。也许您要解决的特定问题具有不寻常或严格的要求,并且您会考虑使用一些Win32调用作为必要的本机代码的一部分。真的有很多例子/情况。
学习Win32的另一个原因是,.NET/Java都是更高级别的抽象(这本身就是好事),但是了解内部工作原理确实有助于理解以下原因:
除非Microsoft的流行操作系统基于其他内容,否则Win32不会过时。曾经,Microsoft打算在Vista中用.NET替换Win32/64,但这没有实现。即使未来出现取代Win32/64的任何内容,您仍需要了解操作系统SDK。冒险像推销员一样说,学习Win32实际上将帮助您编写更健壮的应用程序,并极大地帮助您的调试技能,这是帮助您保持就业的两个重要因素。我永远不会雇用没有至少一些Win32经验的Windows程序员。
我建议阅读Richter/Nasarre撰写的《通过C/C++理解Windows》这本书,作为Win32相关优秀书籍之一(尽管显然是面向C/C++的,但这些作者在解释Win32方面做得非常出色)。我是一名架构师,我建议所有新项目使用较新的技术,如.NET或Java。根据我自己使用C++和.NET的经验,生产力的差异是巨大的。
有两个例外: - 我在一家软件公司工作,我们受客户要求的约束,通常包括编程环境。因此,如果客户只有使用MFC的人,我们将制作一个MFC项目。但这种情况越来越少。如果我们有选择,我们会选择.NET或Java。 - 您有一支专家团队熟练掌握这些旧技术,并且他们在使用这些技术时非常高效。
像您这样的人有很多工作机会,所以我建议不要为了工作目的而学习它们。我们有一些MFC应用程序,但这部分是因为这是我们拥有的,另一部分是因为我们更相信C++的性能,对于他们来说性能非常重要。
我不会称C ++或MFC过时,但新的工作较少。 (我非常不想再支持Win32程序了。)新的C ++标准应该在200B发布,并且人们将继续开发它,Microsoft已经向MFC添加了新类,所以显然仍然存在兴趣和持续的工作。
对于专业发展,我建议您学习一些不同的东西,但那将是像Lisp或Haskell之类的东西,而不是C ++,就我所知,了解MFC没有特别的优点。
实际上,微软强制企业使用他们最新和最伟大的技术。因为有人必须移植遗留代码,所以总会有人需要了解这两种技术。
许多小型设备(手机)或游戏需要更轻量级的解决方案。如果你打算在这些领域工作,那么你肯定需要这些技术。
你需要决定自己想要去哪里。一旦你有了地图,就可以为旅程准备正确的物资。
相比Win32,我觉得Java很难用。有人需要削减大约90%的内置库。
我不认为Win32等是过时的。正如其他人所说,这真的取决于应用程序。作为一名游戏开发者,我使用Win32较少,而使用DirectX要多得多。我可以将Windows代码翻倍或翻三倍,它仍然只占项目的极小部分。
但是,如果您正在编写一个主要界面应用程序,并且具有相对较小且轻量级的后端,则.NET可能是一个不错的选择。
至于Haskell,我发现它在几乎所有方面都是一种真正糟糕的语言。在我看来,它似乎服务于某些抽象的数学定义“函数式”,而不是“可编程”的真正定义。
Win32 SDK现在主要用于一些小众市场,因为某些原因无法使用更现代的技术(遗留的Win32系统、游戏、系统驱动程序、Windows嵌入式系统)。如果你不打算在这些市场上追求职业生涯,那么现在学习Win32就没有必要了。并不是说它没有用处,也没有新东西可以教给你,但我们必须面对现实,即使在我们说话的时候,还有很多新技术不断涌现。我有十几种技术/语言在等待列表中等待学习和实验。你肯定可以找到更有趣、更有前途的技术来学习。
性能关键的应用程序(游戏)通常使用C++ Win32 API。
C#和.NET实际上是构建在Win32 API之上的。为了访问一些高级功能,这些功能不能通过C#和.NET公开,您需要使用 Pinvoke来手动将C Win32函数暴露给您的C#应用程序。