Каково минимальное знание CLR, программист .NET должен быть хорошим программистом?
Когда мы говорим о мире .NET, CLR - это то, от чего зависит все, что мы делаем.
Каково минимальное знание CLR, программист .NET должен быть хорошим программистом?
Можете ли вы дать мне один/много, которые, по вашему мнению, являются/являются наиболее важными темами:
GC?, AppDomain?, Threads?, Processes?, Assemblies/Fusion?
Я очень буду признателен, если вы разместите ссылки на статьи, блоги, книги или другое по теме, где можно найти дополнительную информацию.
Обновление: я заметил из некоторых комментариев, что мой вопрос не ясен для некоторых. Когда я говорю CLR, я не имею в виду .NET Framework. Это НЕ о том, чтобы запомнить библиотеки .NET, а скорее понять, как работает среда исполнения (в которой живут эти библиотеки во время выполнения).
Мой вопрос был непосредственно вдохновлен Джоном Роббинсом, автором книги "Отладка приложений для Microsoft®.NET" (которую я рекомендую), и коллега здесь привел Джеффри Рихтера в Wintellect. В одной из вводных глав он говорит, что "... любой .NET-программист должен знать, что такое зондирование и как сборки загружаются во время выполнения". Вы думаете, что есть другие подобные вещи?
Последнее обновление: прочитав первые 5 глав "CLR через С#", я должен сказать всем, кто это читает. Если вы еще не готовы, прочитайте эту книгу!
Ответы
Ответ 1
Большинство из них намного глубже, чем то, что многие разработчики падают в моем опыте. Большинство непонятых (и важных) аспектов в моем опыте:
- Типы значений по сравнению с ссылочными типами
- Переменные против объектов
- Передать по ссылке vs pass по значению
- Делегаты и события
- Отличие между языком, временем выполнения и структурой
- Бокс
- Сбор мусора
На фронте "переменные против объектов" представлены три описания кода
string x = "hello";
- (Очень плохо)
x
- строка с 5 буквами
- (Чуть лучше)
x
- ссылка на строку с 5 буквами
- (Правильно) Значение
x
является ссылкой на строку с 5 буквами
Очевидно, что первые два в порядке "случайного" разговора, но только если все участники понимают реальную ситуацию.
Ответ 2
Обновлено: чтение соответствующих частей книги CLR через С# Джеффри Рихтера.. эта книга может быть хорошей ссылкой..
Ответ 3
Отличный программист не может быть измерен количеством вещей, которые он знает о CLR. Уверен, это хорошее начало, но он также должен знать OOP/D/A и многие другие вещи, такие как шаблоны проектирования, лучшие практики, концепции O/RM и т.д.
Факт: я бы сказал, что "отличный программист .Net" не обязательно должен много знать о CLR, если у него есть большие знания об общей теории и концепциях программирования...
Я предпочел бы нанять "отличного разработчика Java" с большими знаниями и опытом в Java для .NET-заданий, а затем "мастером" в .NET, у которого мало опыта и считает, что O/RM является биржевым тикером и хранимыми процедурами являются отличным способом "абстрагироваться от базы данных"...
Я видел, как профессиональные учителя в .Net полностью терпят неудачу в выполнении действительно простых вещей, не нарушая их спины из-за отсутствия "общих знаний", в то время как они в то же время "знают все", что нужно знать о .Net и CLR...
Ответ 4
Должны знать о управлении памятью, делегатах
Ответ 5
Ответ на Jon, кажется, довольно полный для меня (плюс делегаты), но я думаю, что принципиально отделяет хорошего программиста от среднего, отвечающего на вопросы, а не на то, как. Замечательно знать, как работают сборки мусора и как используются типы значений и ссылочные типы, но это целый другой уровень, чтобы понять, когда использовать тип значения по сравнению с ссылочным типом. Это различие между разговором на языке и выражением речи на языке (все это о том, как мы применяем знания, которые у нас есть, и как мы достигаем этих решений).
Ответ 6
Джон ответил хорошо. Все это довольно простые, но важные области, о которых многие разработчики не очень хорошо понимают. Я думаю, что знание различия между значениями и ссылочными типами связано с базовым пониманием того, как ведет себя GC в .NET, но, что более важно, важно хорошее понимание шаблона Dispose.
Остальные области, о которых вы упоминаете, являются либо очень глубокими знаниями о самой CLR, либо более продвинутых концепциях, которые пока не широко используются (пока). [.NET 4.0 начнет изменять некоторые из них с введением параллельных расширений и MEF.]
Ответ 7
Одна вещь, которая может быть очень сложной, - это отсроченное исполнение и подобные.
Как вы объясните, как работает метод, возвращающий IEnumerable? Что действительно делает делегат? такие вещи.