2008-11-18 13 views
16

Cuando hablamos del mundo .NET, CLR es de lo que todo lo que hacemos depende. ¿Cuál es el conocimiento mínimo de CLR que un programador de .NET debe tener para ser un buen programador? ¿Puede darme uno/muchos de los que cree que son/son los temas más importantes: GC ?, ¿DominioDominio ?, ¿Subprocesos ?, ¿Procesos ?, ¿Ensamblados/Fusión?¿Cuál es el conocimiento mínimo de CLR que un programador de .NET debe tener para ser un buen programador?

Agradeceré mucho si publica enlaces a artículos, blogs, libros u otros sobre el tema donde se puede encontrar más información.

Actualización: Noté por algunos comentarios que mi pregunta no estaba clara para algunos. Cuando digo CLR no me refiero a .Net Framework. NO se trata de memorizar bibliotecas .NET, sino de comprender cómo funciona el entorno de ejecución (en el que esas bibliotecas viven en tiempo de ejecución).

Mi pregunta fue inspirada directamente por John Robbins el autor del libro "Debugging Applications for Microsoft® .NET" (que recomiendo) y su colega aquí citado Jeffrey Richter en Wintellect. En uno de los capítulos introductorios está diciendo que "... cualquier programador de .NET debería saber qué es lo que está sondeando y cómo se cargan los ensamblajes en el tiempo de ejecución". ¿Crees que hay otras cosas así?

Última actualización: Después de haber leído los primeros 5 capítulos de "CLR a través de C#", debo decir a cualquiera que lea esto. ¡Si todavía no has leído este libro!

Respuesta

31

La mayoría de las personas son la forma más profunda que el tipo de cosas que muchos desarrolladores caen en en mi experiencia. La mayoría de los aspectos incomprendidos (e importantes) en mi experiencia:

  • tipos de valor frente a los tipos de referencia
  • variables vs objetos
  • paso por ref vs paso por valor
  • Delegados y eventos
  • Distinguir entre lenguaje , tiempo de ejecución y marco
  • Boxeo
  • Recogida de basura

En las "variables vs objetos" delanteros, aquí hay tres declaraciones sobre el código

string x = "hello"; 
  • (muy malo) x es una cadena con 5 letras
  • (ligeramente mejor) x es una referencia a una cadena con 5 letras
  • (correcta) El valor de x es una referencia a una cadena con 5 letras

Obviamente, los dos primeros están bien en una conversación "casual", pero solo si todos los involucrados entienden la situación real.

+0

plus Manejo de excepciones y recolección de basura –

+6

¿Boxeo? ¿Los desarrolladores de .Net realmente son elegidos por tanto? :) – EBGreen

+0

El manejo de excepciones es más un caso de buen diseño que la comprensión fundamental de lo que hacen las excepciones, en mi experiencia. Pero sí, agregaré GC a la lista. –

4

Actualizado: leer las partes pertinentes de la CLR libro a través de C# por el libro de Jeffrey Richter..this puede ser una buena referencia ..

+0

Ni siquiera he oído hablar de ese libro, sin embargo, he trabajado mucho con el CLR y puedo contarte todo sobre aplicaciones/ensamblajes/etc/etc. ¿De alguna manera estoy menos calificado para no haber leído un solo libro en particular? –

+0

No quise decir eso. Lo leí bastante tarde también. solo que es un buen lugar consolidado para muchas cosas relacionadas con clr. editaré mi publicación. –

+0

de acuerdo ... diferentes personas tienen diferentes caminos para alcanzar el conocimiento. –

0

La respuesta de Jon es buena. Esas son áreas bastante básicas pero importantes que muchos desarrolladores no entienden bien. Creo que saber la diferencia entre el valor y los tipos de referencia se relaciona con una comprensión básica de cómo funciona el GC.NET se comporta, pero, lo que es más importante, una buena comprensión del patrón Dispose es importante.

El resto de las áreas que menciona son conocimiento muy profundo sobre el CLR o conceptos más avanzados que no se usan ampliamente (aún). [.NET 4.0 comenzará a cambiar algunos de que con la introducción de las extensiones paralelas y MEF.]

+0

De acuerdo en que la comprensión IDisposable es importante. Sin embargo, no es un voto positivo porque es un concepto de marco y lenguaje. El CLR no sabe nada al respecto ... –

+0

El CLR sabe absolutamente de IDisposable ya que es integral al proceso de gestión de la memoria realizado por CLR –

1

debe saber acerca de gestión de memoria, delegados

1

respuesta de Jon parece ser bastante completa para mí (además de los delegados) pero creo que lo que separa fundamentalmente a un buen programador de un medio es responder a las preguntas sobre por qué en lugar de cómo. Es genial saber cómo funcionan las recolecciones de basura y cómo funcionan los tipos de valores y los tipos de referencia, pero es un nivel completamente diferente para comprender cuándo usar un tipo de valor frente al tipo de referencia. Es la diferencia entre hablar en un idioma o dar un discurso en un idioma (se trata de cómo aplicamos el conocimiento que tenemos y cómo llegamos a esas decisiones).

+1

Saber por qué es importante, pero hasta que no entienda cómo funciona una cosa, no puede responder de manera confiable por qué debería (o no debería) usarla bajo c dada ondiciones. –

+0

De acuerdo ... Solo comentaba que cómo se hace algo frente al por qué realmente separa la diferencia entre un desarrollador promedio y un gran desarrollador – user38734

0

Una cosa que puede ser realmente difícil de comprender es la ejecución diferida y los gustos.

¿Cómo se explica cómo funciona un método que devuelve un IEnumerable? ¿Qué hace realmente un delegado? ese tipo de cosas.

4

A gran programador no se puede medir por la cantidad de cosas que sabe sobre el CLR. Claro que es un buen comienzo, pero también debe saber OOP/D/A y muchas otras cosas como patrones de diseño, mejores prácticas, conceptos de O/RM, etc.

El hecho es que yo diría que es "genial .Net programador "no necesita saber mucho sobre el CLR en absoluto, siempre y cuando tenga un gran conocimiento sobre teoría y conceptos generales de programación ...

Preferiría contratar un" gran desarrollador de Java "con gran conocimiento general y experiencia en Java para un trabajo de .Net luego un "maestro" en .Net que tiene poca experiencia y piensa que O/RM es un ticker común y los procedimientos almacenados son una excelente forma de "abstraer la base de datos" ...

He visto pr maestros de oficio en .Net fallan por completo en hacer cosas realmente simples sin romperse la espalda debido a la falta de "conocimiento general" mientras que al mismo tiempo "saben todo" lo que hay que saber sobre .Net y el CLR ...

Cuestiones relacionadas