Какое минимальное знание CLR, чтобы программист .NET должен был быть хорошим программистом? - PullRequest
16 голосов
/ 19 ноября 2008

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

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

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

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

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

Ответы [ 7 ]

32 голосов
/ 19 ноября 2008

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

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

На фронте "переменные против объектов" есть три утверждения о коде

string x = "hello";
  • (очень плохо) x строка из 5 букв
  • (чуть лучше) x - это ссылка на строку из 5 букв
  • (исправить) Значение x является ссылкой на строку из 5 букв

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

4 голосов
/ 02 декабря 2008

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

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

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

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

4 голосов
/ 19 ноября 2008

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

1 голос
/ 19 ноября 2008

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

1 голос
/ 19 ноября 2008

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

0 голосов
/ 02 декабря 2008

Одна вещь, которую очень сложно понять - это отложенное исполнение и лайки.

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

0 голосов
/ 19 ноября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...