17

当我们谈论 .NET 世界时,我们所做的一切都依赖于 CLR。.NET 程序员必须具备的 CLR 最低知识是什么才能成为一名优秀的程序员?你能给我一个/许多你认为是/是最重要的主题:GC?、AppDomain?、Threads?、Processes?、Assemblies/Fusion?

如果您发布有关可以找到更多信息的主题的文章、博客、书籍或其他内容的链接,我将非常感激。

更新:我从一些评论中注意到我的问题有些人不清楚。当我说 CLR 时,我不是指 .Net Framework。这不是要记住 .NET 库,而是要了解执行环境(这些库在运行时所在的环境)如何工作。

我的问题直接受到“Debugging Applications for Microsoft® .NE​​T”一书(我推荐)的作者 John Robbins 的启发,他的同事在这里引用了 Wintellect 的 Jeffrey Richter。在其中一个介绍性章节中,他说“......任何 .NET 程序员都应该知道什么是探测以及如何将程序集加载到运行时”。你认为还有其他这样的事情吗?

最后更新:在阅读了“通过 C# 进行 CLR”的前 5 章后,我必须对阅读本文的任何人说。如果您还没有准备好,请阅读本书!

4

7 回答 7

33

根据我的经验,其中大多数比许多开发人员所迷恋的东西要深得多。在我的经验中,最容易被误解(也是重要)的方面:

  • 值类型与引用类型
  • 变量与对象
  • 按引用传递与按值传递
  • 代表和活动
  • 区分语言、运行时和框架
  • 拳击
  • 垃圾收集

在“变量 vs 对象”前面,这里是关于代码的三个陈述

string x = "hello";
  • (非常糟糕)x是一个包含 5 个字母的字符串
  • (稍微好一点)x是对包含 5 个字母的字符串的引用
  • (正确) 的值x是对包含 5 个字母的字符串的引用

显然,前两个在“随意”对话中是可以的,但前提是每个相关人员都了解真实情况。

于 2008-11-18T23:13:17.340 回答
5

一个伟大的程序员不能用他对 CLR 了解的数量来衡量。当然这是一个不错的开始,但他还必须了解 OOP/D/A 和许多其他知识,例如设计模式、最佳实践、O/RM 概念等。

事实上,我想说一个“伟大的 .Net 程序员”根本不需要对 CLR 有太多了解,只要他对一般编程理论和概念有很好的了解......

我宁愿聘请具有丰富的 Java 知识和经验的“出色的 Java 开发人员”来从事 .Net 工作,然后是 .Net 中的“大师”,他们几乎没有经验,并且认为 O/RM 是股票行情,存储过程非常棒“抽象数据库”的方法......

我见过.Net 中的专业教师由于缺乏“一般知识”而在做非常简单的事情时完全失败,而他们同时“了解所有”关于 .Net 和 CLR 的知识。 .

于 2008-12-02T00:22:24.500 回答
4

更新:阅读 Jeffrey Richter 通过 C# 编写的 CLR 一书的相关部分。这本书可以作为一个很好的参考。

于 2008-11-18T23:13:01.570 回答
1

应该了解内存管理,代表

于 2008-11-18T23:47:50.627 回答
1

Jon 的回答对我(加上代表)来说似乎很完整,但我认为从根本上区分优秀程序员与普通程序员的区别是回答为什么问题而不是如何回答问题。了解垃圾回收的工作原理以及值类型和引用类型的工作方式固然很棒,但了解何时使用值类型与引用类型则是另一个层面。这是用一种语言说话与用一种语言发表演讲之间的区别(这完全取决于我们如何应用我们所拥有的知识以及我们如何做出这些决定)。

于 2008-11-19T20:24:31.940 回答
0

乔恩的回答很好。这些都是很多开发人员没有很好理解的基本但重要的领域。我认为了解值类型和引用类型之间的区别与基本了解 .NET 中 GC 的行为方式有关,但更重要的是,对 Dispose 模式的良好理解很重要。

您提到的其他领域要么是关于 CLR 本身的非常深入的知识,要么是(尚未)广泛使用的更高级的概念。[.NET 4.0 将通过引入并行扩展和 MEF 开始改变其中的一些。]

于 2008-11-18T23:24:02.700 回答
0

一件很难掌握的事情是延迟执行之类的。

你如何解释返回 IEnumerable 的方法是如何工作的?代表的真正作用是什么?像这样的东西。

于 2008-12-02T00:06:24.610 回答