我想知道你们是否了解Windows的内部工作方式(内核,中断等),以及你是否发现自己已经成为一名优秀的开发人员了?
您是否发现知识越多,作为开发人员的良好座右铭就越好?
我发现自己正在研究很多东西,想得更多,我会成为更好的开发者。当然,实践和经验也会发挥作用。
答案 0 :(得分:8)
这绝对没有头脑 - 绝对(假设您主要是Windows平台上的开发人员)。了解汽车发动机的工作原理将使许多常见的编程任务(调试,性能工作等)变得更加容易。
Windows Internals是标准参考。
答案 1 :(得分:6)
我相信了解事情是如何发挥作用的。 CLR / .NET到C ++,原生于ASM,ASM到CPU架构,从逻辑门构建寄存器和操作,来自MOSFET的逻辑门,来自量子物理的晶体管以及后者来自各自的数学设备(组理论等)。
理解低级别不仅会让你思考与众不同,而且会感觉与众不同 - 就像你掌控着事物一样,站在巨人的肩膀上。
答案 2 :(得分:4)
我不认为人们需要内部的特殊或秘密知识,例如那些可能扩展到Windows团队成员或具有源代码访问权限的人,但我绝对认为理解内部可以帮助您成为更好的开发人员。
以线程为例,如果你打算以一种适度的方式构建一个使用线程的应用程序 - 了解windows如何工作,线程如何工作,内存进程如何工作都是能够做好工作的关键用那个代码。
我同意你的法令,但我不同意经验/实践/知识相互排斥。这种经验的网络是你从那次经历中获得的知识。还有一个智慧的组成部分来体验和练习,但这些通常是无形的情境元素,你将来会应用这些元素来避免错误。底线知识是经验的结晶。
以这种方式思考,你知道有多少人拥有30多年的IT经验,想到他们并占据前两名。现在进入那个记忆库,想一想你所知道的那些超级聪明的人,他们对这么多事情了解得太多,并选出前两者。你现在有了最后的4 - 如果你必须选择一个开始一个项目的人是谁?我们总是选择超级聪明的家伙。
答案 3 :(得分:4)
更多的知识总是更好,而且只要知道你正在使用的任何抽象层,获得多层次的知识就更有价值。
一个好的经验法则是,您应该对您工作的图层下方的图层有一个很好的了解。因此,例如,如果你编写了很多.NET代码,你应该知道CLR是如何工作的。如果你写了很多网络应用程序,你应该了解HTTP。如果您编写直接使用HTTP的代码,那么您应该了解TCP / IP。如果要实现TCP / IP堆栈,则需要了解以太网的工作原理。
如果您正在编写本机Win32代码,或者操作系统性能问题对您正在执行的操作至关重要,那么了解Windows内部实际上非常有用。在更高的抽象级别,它可能没那么有用,但它永远不会伤害。
答案 4 :(得分:3)
是的,理解Windows内部帮助我成为更好的程序员。它还教导了许多不良做法,糟糕的想法和糟糕的设计概念。
我强烈建议学习OS X或Linux内部作为替代方案。这将花费更少的时间,更有意义,更高效。
阅读代码。阅读大量代码。阅读大量好的代码。 jQuery,Django,AIR框架源代码,Linux内核,编译器。
尝试学习编程语言,向您介绍新的方法,如Lisp,Ruby,Python或Javascript。 OOP很好,但是.net和Java似乎采用了洗脑方法,并将其提升到某种宗教水平,而不是仅仅是你工具箱中的一个好工具。
如果您不理解您正在阅读的代码,则可能意味着您走在正确的轨道上,并学习新技术。
我建议使用mac只是因为你会发现自己想让你的用户界面更简单,更容易。如果你想成为一名优秀的程序员,拥有一个良好的环境非常重要。让工程师比自己更好地工作(如果可以的话),使用采用“工程师”方法和“实验者”方法的框架和语言,并使用包含比您更好的代码的操作系统。
我还会推荐“Coders at Work”一书。
答案 5 :(得分:2)
这取决于。许多了解系统内部的程序员开始编写优化代码来利用这些知识。这有三个非常严重的副作用:
1。)没有这些知识的其他人更难扩展或支持代码。
2.。)系统内部可能会更改,恕不另行通知,而接口通常是版本化的,并且公开讨论更改。
3。)接口通常在平台版本和硬件上保持一致,内部不具备这种一致性。
简而言之,那里有许多破碎,不受支持的代码,因为它依赖于供应商更改的内部流程,恕不另行通知。
答案 6 :(得分:1)
C语言之父说,#34;你不需要学习语言的所有功能来编写优秀的代码。更好地理解问题,更好地编写代码。"知识总是更好。