Windows内部知识?

我想知道你们中的任何一个人是否知道windows的内部工作(内核,中断等),如果你发现你已经成为了一个更好的开发人员?

你有没有发现越多的知识越好,作为一个开发人员的好座右铭?

我发现自己学习了很多东西,用更多的理解思考,我会成为一个更好的开发者。 当然,实践和经验也会发挥作用。

这是一个没有智慧的 – 绝对的(当然,假设你是一个主要在Windows平台上的开发者)。 关于汽车引擎工作原理的工作知识将会使得很多常见的编程任务(调试,性能工作等)变得更容易。

Windows内部是标准的参考。

我相信了解事物如何在底下工作是有价值的。 CLR / .NET到C ++,原生ASM,ASM到CPU架构,从逻辑门构建寄存器和操作,MOSFET的逻辑门,量子物理的晶体管和后者从各自的数学设备(群论等)。

了解低级别,不仅让你思考不同,而且感觉不同 – 就像你在控制事物,站在巨人的肩膀上。

我不认为需要特别的或秘密的内部知识,比如那些可以扩展到windows团队成员或者可以访问源代码的内部知识,但是我绝对认为理解内部组件可以帮助你成为一个更好的开发者。

以线程为例,如果要打造一个以适中的方式使用线程的应用程序 – 了解窗口的工作方式,线程是如何工作的,内存过程是如何工作的,这些都是能够很好的使用代码的关键。

我同意你的诏书,但我不同意经验/实践/知识是相互排斥的。 那个经验的净网络是你从这个经验中获得的知识。 经验和实践也有一个智慧的组成部分,但这些通常是你将来应用以避免错误的无形的情境因素。 底线知识是经验的沉淀。

用这种方式想想,你有多少人在IT方面拥有30多年的经验,认为他们是前两名。 现在进入那个记忆库,想想那些你知道的那些超级聪明的人,他们对这么多的事情都非常了解,并且选择了前两名。 你现在有了最后的4个 – 如果你必须选择一个来启动一个项目,它会是谁? 我们总是选择超级聪明的人。

更多的知识永远是更好的,并且知道许多层次的知识比知道你正在工作的任何抽象层次更有价值。

一个好的经验法则是,你应该对你工作的图层下面的图层有一个很好的了解。 所以,例如,如果你写了很多.NET代码,你应该知道CLR是如何工作的。 如果你写了很多的网络应用程序,你应该了解HTTP。 如果您直接编写使用HTTP的代码,那么您应该了解TCP / IP。 如果您正在实施TCP / IP协议栈,那么您需要了解以太网的工作原理。

如果您正在编写本机Win32代码,或者操作系统性能问题对您所做的事情至关重要,那么对Windows内部知识的确有帮助。 在较高的抽象层次上,它可能不太有用,但它从来没有受到伤害。

是的,了解Windows的内部帮助我成为一个更好的程序员。 这也教会了很多不好的做法,糟糕的想法和糟糕的设计理念。

我强烈建议学习OS X或Linux内部作为替代。 这将花费更少的时间,更有意义,更高效。

阅读代码。 阅读大量的代码。 阅读很多好的代码。 jQuery,Django,AIR框架源码,Linux内核,编译器。

尝试学习编程语言,向您介绍新的方法,如Lisp,Ruby,Python或Javascript。 面向对象是好的,但.net和Java似乎采取了洗脑的方法,并将其提升到某种宗教级别,而不是它只是一个在你的工具箱中的好工具。

如果你不明白你正在阅读的代码,这可能意味着你在正确的轨道上,并学习新的技术。

我建议让一个mac只是因为你会发现自己想让你的UI更简单和容易。 如果你想成为一名优秀的程序员,拥有一个良好的环境真的很重要。 用自己比自己更好的工程师(如果可以的话),使用采用“工程师”方法和“实验者”方法的框架和语言,并使用包含比您更好的代码的操作系统。

我也建议书“ 在工作中的编码 ”。

这取决于。 许多了解系统内部的程序员开始编写优化的代码来利用这些知识。 这有三个非常严重的副作用:

1.)没有这些知识的人很难扩展或支持代码。

2.)系统内部结构可能会在没有通知的情况下发生变化,而接口通常是版本化的,公开讨论的变化。

3.)跨平台修订和硬件的接口通常是一致的,内部没有这个一致性。

简而言之,那里有很多被破坏的,不可支持的代码,因为它依赖于供应商在没有通知的情况下改变的内部过程。

C语言之父说:“你不需要学习语言的所有功能来编写出色的代码,而是更好地理解问题,更好地编写代码。 有知识总是更好。