我确定有人一定会特别询问这个问题,但是从我所看到的情况来看,似乎没有人这样做(有关学习win32的问题,但这并不包括是否值得这样做)。
我非常有兴趣深入了解我使用的所有系统(我主要使用C#编程,至少是在专业领域),因此我想知道 - 学习win32是否值得,或者是否过度?我在浪费时间吗?我可以获得的知识是否值得这样做?
在StackOverflow上有类似/相关的问题:
我确定有人一定会特别询问这个问题,但是从我所看到的情况来看,似乎没有人这样做(有关学习win32的问题,但这并不包括是否值得这样做)。
我非常有兴趣深入了解我使用的所有系统(我主要使用C#编程,至少是在专业领域),因此我想知道 - 学习win32是否值得,或者是否过度?我在浪费时间吗?我可以获得的知识是否值得这样做?
在StackOverflow上有类似/相关的问题:
如果您计划未来从事Windows开发,那么了解Win32的工作原理将会非常有价值。它可以让您深入了解像Windows、消息和GDI等.NET级别无法展示的内容。
我不建议您尝试使用Win32编写所有应用程序,但我认为任何Windows开发人员都会受益于使用C/C++编写简单的Win32应用程序。
对于诸如WPF之类的技术来说,这种情况并不是那么明显,因为它们不太依赖于Win32,但是了解Win32的工作原理将有助于您理解或欣赏WPF中的某些设计决策。
这个问题很像“学习汇编语言是否值得”,答案也是一样的:
“是的,因为你将理解基础知识,并能够比那些只在抽象层面工作的人更深入地认识问题。”
然而,同样的道理,你大概不会直接编写Win32 API 99.5%的时间。
当他们发明C语言来取代汇编语言时,人们可能会问:“学习汇编语言是否值得?”学习两者的价值在于能够转而使用汇编语言来完成C语言无法实现的任务(例如触发中断)。
同样的道理也适用于Win32。有些事情在C#中是无法实现的。如果你不了解Win32 API,则会将某些事情视为不可能。然而,一旦你知道自己缺少什么,就能在这些罕见的情况下“转向Win32”并完成它们。
另一个看待问题的方式是:编程就是要同时能够以多个抽象级别进行思考。例如,如果你知道你的语言使用不可变字符串,你就不会编写一个将单个字符添加到其中一个字符串10,000次的算法,因为这样会很慢。如果你了解Win32 API,你就能够考虑你在C#中编写的每一行代码实际上是如何实现的,这将帮助你编写更好的代码。
对我来说,学习一个我不使用的API(我假设“深入”是暗示的)是浪费时间。我宁愿花费有限的时间和脑力学习新概念或探索新工具,而不是熟悉现有的我现在不需要使用的工具。当我需要一个特定的工具而我又没有或者必须使用我不熟悉的工具时,那就是深入学习的时候。在此之前,我可能会进行足够的调查,以了解它是否对我有用,但不会更多。
是的,你应该学习Windows的基础知识(很多内容都在Win32之前)。为什么呢?就像我了解榫卯接口的工作原理一样,尽管我不会自己制作家具,或者了解内燃机的工作原理,尽管我不会自己维修汽车。
你在更高层次的抽象上工作,这很好,但当抽象泄漏时 - 这不是“如果”,而是“何时” - 如果你不了解Windows的基础知识,你会迷失方向。如果你不知道至少一些API,当你需要调用不可用于.Net的功能时,你将毫无头绪。
除此之外,难道不是出于好奇心的缘故吗?