当Joel Spolsky和Jeff Atwood在他们的播客中就程序员是否应该学习C而开始存在分歧时,无论他们的行业和交付平台如何,它在开发者社区中引发了一场爆炸性的辩论,这可能仍然在今天的某些群体中肆虐.我一直在阅读一些程序员博主的一些段落,他们对此事采取了行动.来自双方的争论当然具有重要性,我所没有发现的是一个与开发人员专注于.NET Framework的观点截然不同的视角.几乎所有人都在评论一般的程序员观点.
我想要的是什么?回想一下杰夫阿特伍德的观点,即大多数时候开发者处于如此高水平的花费将是学习业务/领域,除了学习技术以实现这些领域要求所需的一切.在我的工作经历中,这是对许多人工作生活的非常准确的描述.现在假设.NET开发人员可以派生的"课外"学习的时候,应该是为C?
为了记录,我自己在学校里学习过C,我完全理解和欣赏支持者的推理.但是,在考虑事情时,我个人认为.NET开发人员不应该直接进入C.因为,我希望更多的开发人员需要花些时间学习的东西是 - MSIL和CLR.
也许我被一群不同寻常的同事困住了,我不知道,但在我看来很多人并没有意识到他们的C#或VB代码在JIT进入之前首先在IL编译并使其成为原始机器码.大多数人不知道的IL,并且在如何不感兴趣准确的CLR处理他们编写的代码.通过C#阅读Jeffrey Richter的CLR对我来说在很多方面都让我感到震惊; 很高兴我读到它,尽管同事们认为它"太低了".我不是IL的专家,但是在基础知识方面,我发现自己更容易跟随他的文本,因为我已经熟悉了IL的堆栈行为.我发现自己拆解程序集以查看在编写某些代码时IL的结果.
我学习了CLR和MSIL,因为我知道这是我下面的直接层.允许我执行自己的工作层的图层.C,实际上是进一步下降.更接近我们的"现实"的是CLR和MSIL.这就是为什么我会建议其他人去那些,因为我没有看到足够的人在钻研那层.或者,您的团队是否已全部熟悉MSIL?
你当然应该.变得过于专业化和专注(并且相应地,具有有限的市场技能)的最好方法是仅使用单一类型的语言,并避免所有其他语言"与您当前的任务无关".
每个程序员都应该有一些现代JIT'd OO语言(C#/ Java),一种更低级别的简单语言(C,FORTRAN等),一种非常高级的解释语言(Python,Ruby等),以及功能语言(Scheme,Lisp,Haskell等).即使你不是每天都使用它们,扩展你的思想过程,这些知识授予是非常有用的.
我已经知道C并且在1.1天内帮助了我,在.NET基础库中还有许多东西还没有,我必须从Platform SDK中调用P/Invoke.
我的看法是,我们应该总是花时间学习一些我们还不知道的东西.为了回答你的问题,我认为学习C并不是必不可少的,但如果你有空闲时间,C语言是一门很好的语言学习,并且与其他任何语言一样有效.
没错,C远低于链条.了解MSIL可以帮助开发人员了解如何更好地优化他们的应用程序.至于学习C或MSIL,为什么不两者兼而有之?:)