最近一直在思考一个问题,那就是.net程序员的发展,应该往上走还是往下走的事情。 所谓往上走,我的理解是朝着系统架构方向发展,从原来的编码工作转向架构、设计、分析等等工作。 而往下走,是研究.net底层原理和实现,可能大部分就是对IL和CLR的研究。 最近和一个在.net领域刚刚工作,并且很有激情往.net方向发展的同学讨论关于学习IL代码的事情,对方咨询过他们的PM,表示,那个东西学不学无所谓,是否学习IL对学习.net本身影响不大。 说实话 ,我对.net学习也不是很深,可能是我接触.net比较早的缘故吧,在我刚刚开始学习.net的时候,大部分的书籍资料都很强调IL,可能那个时候.net刚刚问世,人们更关心.net和native的区别,其实那个时候我听到的比较不是来自于.net何java,而是c#和C++。人们更多讨论C#和C++孰优孰劣。 关于架构的事情我还不了解,关于IL的了解更少,但是我总感觉,虽然我们不需要用IL来编码,但是对IL的理解可以让我们明白.net代码是如何执行的,至少我们会知道C#里的每种操作转化后的的操作是什么,虽然IL还不是机器指令,但是不同的操作转换到IL上对性能的影响也是可见一斑的。 也许,.net还不太常用在实时系统中,大部分都是作为service程序或者asp.net的server端代码。也许细微的性能问题对系统开销影响还不大。 所以我也开始怀疑,研究IL是否对.net很重要。就连写C或者C++的人都不怎么看ASM了。除非是写实时性很强的东西,比如单片机,否则,底层的东西对我们已经不重要了,尤其.NET还有GC,不少底层的东西已经无须我们干预了。 但是无论如何,我想,学习一些IL方面的知识还是对写.net有帮助的,不说给你EXE或者DLL让你分析原理这等非IL不可的工作,单就是解决程序结构和性能问题,学习IL还是值得的,何况IL比C#难不多少,可读性比ASM要强多得多。所以,茶余饭后有时间看看IL还是学学那个东西吧。