Каковы минимальные знания CLR программист .NET должен быть хорошим программистом?

Каковы минимальные знания CLR программист .NET должен быть хорошим программистом?Можете ли вы дать мне один / многие вы думаете, является / являются наиболее важными предметами:GC?, AppDomain?, Темы?, Процессы?, Сборки / Fusion?

Я буду очень признателен, если вы разместите ссылки на статьи, блоги, книги или другие на эту тему, где больше информации можно найти.

Обновление: Я заметил из некоторых комментариев, что мой вопрос не был ясен для некоторых. Когда я говорю CLR я не имею в виду .Net Framework. Речь идет не о запоминании библиотек .NET, а о том, как работает среда выполнения (в которой эти библиотеки живут в рабочее время).

Мой вопрос был непосредственно вдохновлен Джон Роббинс автор книги "Отладка приложений для Microsoft "#174; .NET" книги (что я рекомендую) и коллега здесь цитируется Джеффри Рихтер на Wintellect. В одной из вступительных глав он говорит: «... любой программист .NET должен знать, что такое зондирование и как сборки загружаются в время выполнения». Как вы думаете, есть ли такие вещи?

Последнее обновление: После прочтения первых 5 глав "CLR через C" Я должен сказать всем, кто читает это. Если вы еще не все читае, прочитайте эту книгу!

Когда мы говорим о мире .NET CLR это то, что все, что мы делаем зависит от.

Ответ на: "Каковы минимальные знания CLR программист .NET должен быть хорошим программистом?"

Количество ответов:7

Обновлено: чтение соответствующих частей книги CLR через C ' Джеффри Рихтер. эта книга может быть хорошей ссылкой.

Большинство из них намного глубже, чем такие вещи многие разработчики падают на в моем опыте. Большинство непонятых (и важных) аспектов в моем опыте:

  • Типы значений против типов ссылок
  • Переменные против объектов
  • Pass by ref vs pass by value
  • Делегаты и события
  • Различие между языком, время выполнения и рамки
  • Бокс
  • Сбор мусора

На "переменных против объектов" фронт, вот три заявления о коде

string x = "hello";
  • (Очень плохо) x is a string with 5 letters является строка с 5 буквами
  • (слегка лучше) x is a reference to a string with 5 letters является ссылка на строку с 5 буквами
  • ( ( Правильно) Значение x is a reference to a string with 5 letters является отсылкой к строке с 5 буквами

Очевидно, что первые два в порядке в "случайном" разговоре, но только если все участники понимают реальную ситуацию.

Джон ответ хорошо. Это все довольно основные, но важные области, которые многие разработчики не имеют хорошего понимания. Я думаю, зная разницу между значением и ссылкой типов связей в базовое понимание того, как GC в .NET ведет себя, но, что более важно, хорошее понимание шаблона Dispose имеет важное значение.

Остальные области вы упоминаете либо очень глубокие знания о CLR себя или более продвинутые концепции, которые не широко используются (пока). «.NET 4.0 начнет меняться с введением параллельных расширений и MEF».

Должны знать об управлении памятью, делегаты

Джон ответ, кажется, довольно полный для меня (плюс делегатов), но я думаю, что принципиально отделяет хороший программист от среднего один отвечает на вопроси, а не как. Это здорово знать, как происходит сбор мусора и как работают типы значений и типов ссылок, но это совершенно другой уровень, чтобы понять, когда использовать тип значения против типа ссылки. Это разница между говорить на языке против предоставления речи на языке (это все о том, как мы применяем знания у нас есть и как мы приходим к этим решениям).

Одна вещь, которая может быть очень сложно понять это отложенное исполнение и любит.

Как вы объясните, как метод, который возвращает IEnumerable работ? Что на самом деле делает делегат? такие вещи.

великий программист не может быть измерена количеством вещей, которые он знает о CLR. Конечно, это хорошее начало, но он должен также знать OOP / D / A и много других вещей, как дизайн шаблоны, передовой практики, O / RM концепции и т.д.

Факт, я бы сказал, что "большой программист .Net" не нужно много знать о CLR на всех до тех пор, как он имеет большие знания об общей теории программирования и концепций ...

Я предпочел бы нанять "большой Java разработчик" с большим общими знаниями и опытом в Java для работы .Net, то "мастер" в .Net, которые имеют мало опыта и думает, что O / RM является запас тикер и сохраненные процедуры являются отличным способом "абстрагироваться от базы данных"...

Я видел профессиональных учителей в .Net полностью не в этом действительно простые вещи, не нарушая спины из-за отсутствия "общих знаний", а они в то же время "знать все" есть знать о .Net и CLR ...