2009-03-25 12 views
6

Recuerdo el viejo enfoque efectivo de estudiar un nuevo marco. Siempre fue la mejor forma de leer un buen libro sobre el tema, digamos MFC. Cuando traté de omitir una gran cantidad de material para acelerar la codificación, resultó más tarde que sería más rápido leer todo el libro primero. No había buenas maneras de estudiar un marco en partes pequeñas. O al menos no los vi entonces.Estrategias efectivas para estudiar marcos/bibliotecas parcialmente

Los últimos años sucedieron muchas cosas nuevas: mejores resultados de búsqueda de Google, blogs de programación, mucha más gente involucrada en discusiones de Internet, muchos frameworks de código abierto.

En este momento, cuando escribimos un software, muchas veces dependemos de marcos/bibliotecas de terceros (generalmente de código abierto). Y muchas veces necesitamos saber solo una pequeña cantidad de su funcionalidad para usarlos. Se trata simplemente de encontrar la forma más sencilla de usar un pequeño subconjunto de la biblioteca sin pesimizaciones innecesarias.

¿Qué hace para estudiar lo menos posible del marco y aún así usarlo efectivamente?

Por ejemplo, suponga que necesita indizar un conjunto de documentos con Lucene. Y debe resaltar los fragmentos de búsqueda. No le importan los stemmers, almacenando el índice en un archivo frente a múltiples archivos, consultas borrosas y muchas otras cosas que ocuparán su cerebro si estudia en profundidad a Lucene.

¿Cuáles son sus estrategias, enfoques, trucos para ahorrar su tiempo?

Enumeraré lo que haría, aunque creo que se puede mejorar mi proceso.

  • Buscar "lucene tutorial", "lucene highlight example" y así sucesivamente. Intente estimar el puntaje de confianza de los artículos no oficiales (publicaciones de blog) en función de la fecha de publicación, el número y el tono de los comentarios. Si no hay una respuesta definitiva, recopile nuevas palabras clave de búsqueda y enlaces en el destino.
  • Buscar tutoriales realmente rápidos/guías para novatos en el sitio oficial
  • Estimar qué tan valiosos son los javadocs para un novato. (Lea Lucene highlight package summary)
  • Busque ejemplos simples que vienen con una biblioteca, relacionados con lo que necesita. (Estudie "src/demo/org/apache/lucene/demo")
  • Pregunte acerca del "ejemplo simple de búsqueda de Lucene" en la lista de correos de Lucene. No puede obtener una respuesta o incluso obtener una mala reputación si hace una pregunta tonta. Y a menudo no sabes si tu pregunta es tonta porque no has estudiado el marco en profundidad.
  • Preguntarlo en Stackoverflow u otro servicio de control de calidad "¿podría darme un ejemplo práctico de palabras clave de búsqueda resaltadas en Lucene". Sin embargo, esta pregunta es muy específica y no puede obtener respuestas o un puntaje malo.
  • Calcule qué tan fácil es obtener la respuesta del código de la estructura si está abierto.

¿Cuáles son sus rutas de estudio/búsqueda? Escríbalas en orden de prioridad si es posible.

Respuesta

4

Utilizo una técnica de tres fases para evaluar las API.

1) Descubrimiento - En esta fase busco StackOverflow, CodeProject, Google y grupos de noticias con tantas combinaciones diferentes de frases de búsqueda como sea posible y agrego todo lo que pueda satisfacer mis necesidades en una lista enorme.

2) Filtrar/Clasificar - Para cada elemento que encontré en mi fase de recolección trato de averiguar si se ajusta a mis necesidades. Para hacer esto, me meto directamente en la documentación de la API y me aseguro de que tenga todas las características que necesito. Los resultados de esto entran en una lista ponderada con las mejores soluciones en la parte superior y todo el cruft filtrado.

3) Prototipo: tomo los mejores contendientes e intento hacer una pequeña implementación para llegar a todas las características importantes. Lo que mejor se adapte al proyecto aquí gana. Si por alguna razón surge un problema con la mejor opción durante la implementación, es posible recurrir a otras implementaciones.

Por supuesto, hay una gran cantidad de factores para elegir la mejor API para el proyecto. Algunos importantes:

  1. ¿Cuánto aumentará el tamaño de mi distribución?
  2. ¿Qué tan bien encaja la API con el estilo de mi código existente?
  3. ¿Tiene alta calidad/cualquier documentación?
  4. ¿Lo usan muchas personas?
  5. ¿Qué tan activa es la comunidad?
  6. ¿Qué tan activo es el equipo de desarrollo?
  7. ¿Cuán receptivo es el equipo de desarrollo para fallar las solicitudes de parches?
  8. ¿El equipo de desarrollo aceptará mis parches?
  9. ¿Puedo ampliarlo para que se ajuste a mis necesidades?
  10. ¿Qué tan costoso será implementar en general?

... Y por supuesto muchos más. Todo depende mucho del proyecto.

En cuanto al ahorro de tiempo, diría que tratar de ahorrar demasiado aquí solo volverá para morderte más tarde. El tiempo invertido en seleccionar una buena biblioteca es al menos tan importante como el tiempo dedicado a implementarlo. Además, piense en el camino, en seis meses preferiría estar felizmente codificando o preferiría estar discutiendo con un equipo de desarrollo xenófobo :). Pasar un par de días más haciendo una evaluación exhaustiva de sus elecciones puede ahorrarle mucho dolor más adelante.

-1

¿Cuáles son sus estrategias, enfoques, trucos para ahorrar su tiempo?

Bueno, busco. En general, nunca hago preguntas y prefiero investigarme a mí mismo.Si lo peor empeora, leeré la documentación. En algunos casos (por ejemplo, cuando estaba haciendo algún trabajo con SharpSVN) tuve que mirar la fuente, específicamente los casos de prueba, para obtener información sobre cómo funcionaba la API.

En general, debo ser honesto, la mayor parte de mi 'estudio' y 'aprendizaje' es por accidente.

Por ejemplo, hace unos pocos segundos, descubrí cómo obtener la carpeta "Reciente" en C#. No tenía idea de cómo hacer eso antes de ver la pregunta, considerando que era interesante, y luego buscar.

Así que para mí el verdadero 'truco' es que me quedo en foros, respondo preguntas y accidentalmente recojo conocimiento. Luego, cuando llegue el momento de investigar algo; lo más probable es que sepa un poco al respecto, y la búsqueda es más fácil y puedo enfocarme en la implementación [generalmente implementando primero un programa de prueba] y progresar desde allí.

+0

La documentación casi siempre acelera la comprensión. También andar por los foros definitivamente no es eficiente (pregunta de OP), sino una buena manera de expandir su red de conocimiento. – Griffin

1

1) Búsqueda en Google de mi tarea

2) mira ejemplos con unas pocas bibliotecas diferentes , no hay necesidad de atarme a Lucene por ejemplo, si no sé qué otras opciones tengo .

3) Mira la fecha de la última actualización de la página principal, si no se ha actualizado en los 6 meses dejan (con algunas excepciones)

4) Búsqueda de tarea muestra con biblioteca (no lea tutoriales todavía)

5) ¿Puedo entender lo que está pasando sin un tutorial? Si es así continuar si no hay arranque de vuelta en 1

6) tratar de implementar la tarea

7) mirarme fallan

8) Leer un tutorial

9) Trate de poner en práctica la tarea

10) Míreme fallar y pregunte en StackOverflow, o envíe un correo electrónico a los autores, publique en el grupo de usuarios (si es amigable)

11) Si pudiera hacer la tarea, consideraré el marco que vale la pena estudiar y leeré el tutorial principal durante 2 horas (si no cabe en 2 horas simplemente ignoro lo que queda hasta que lo necesito)

1

No tengo receta, en el sentido de un conjunto de pasos que siempre sigo, eso se debe en gran parte a que todo lo que aprendo es diferente. Algunas cosas son radicalmente nuevas para mí (Dojo, por ejemplo, no tengo fluidez en el script Java, así que es una gran tarea), algunas mejoras de conocimientos previos (conozco EJB 2 bien, así que aprender EJB 3 mientras estoy en la superficie es nuevo con todo sus anotaciones, se basan en conceptos.)

Aunque mi estrategia general es que describiría como "Espiral y Parque". Intento rodear el paisaje primero, comprender la forma general, I Park conceptos que no tengo obtener todavía, no dejes que me preocupe. Luego voy un poco más profundo en algunas áreas, pero una vez más trato de no obsesionarme con una, Spiralling abajo en el tema. Espero comenzar a despegar y entender, pero también necesito estacionar más cosas.

Inicialmente Quiero respuestas a preguntas tales como:

  • ¿Qué es?
  • ¿Por qué debería usar esto en lugar de esa otra cosa que ya sé
  • ¿Qué es posible? Cualquier punto dulce interesante. "Por ejemplo, ooh, mire esa buena actualización impulsada por AJAX"

Hago una gran cantidad de lecturas sin formato.

Luego quiero hacer más exploraciones sobre los hows. Comienzo a buscar errores y buenos consejos. (Por ejemplo, en Java:. ¿Por qué es .equals "Wibble" (var) una construcción útil?)

técnicas específicas y fuentes de información:

  • Lo más importante: hacer! Tan pronto como sea posible, quiero trabajar un tutorial o dos. Probablemente tenga que hacer el primer circuito de la espiral, pero luego quiero tocar y experimentar.
  • documentos Visión general
  • documentos del producto
  • foros y grupos de discusión, aprendizaje respondiendo preguntas es mi técnica preferida.
  • si es posible, trato de encontrar gurús. Soy afortunado de tener en mis colegas inmediatos una gran cantidad de conocimiento y experiencia.
+0

+1 para realizar un seguimiento de "errores". Pueden convertirse en grandes barreras para comprender más adelante. – Griffin

1
  1. Guías de inicio rápido.
  2. Un vistazo rápido a la documentación de API si está disponible.
  3. Lectura de códigos de muestra.
  4. jugando alrededor de TIENES QUE ENGAÑAR ALREDEDOR (perdón por las tapas).

Si se trata de una pequeña biblioteca/API con una pequeña comunidad o ninguna, siempre puede ponerse en contacto con el desarrollador y pedir ayuda porque probablemente estará más que feliz de poder ayudarlo; está feliz de que una persona más esté usando su API.

0

Nunca leería javadoc. Como a menudo no hay ninguno. Y cuando hay, lo más probable es que no esté actualizado. Entonces uno se confunde en el mejor de los casos.

Comience con el tutorial más simple que encuentre en unos minutos. A menudo, el tutorial lo llevará a fuentes adicionales al final, por lo que la mayoría de las veces uno está en un camino que sigue y sigue, más y más.

2

La respuesta a su pregunta depende de dónde se encuentre en el continuo de generalidad/especificidad. ¿Quieres resolver un problema inmediato? ¿Estás buscando desarrollar una comprensión profunda de la biblioteca? Lo más probable es que estés en algún lugar entre esos extremos. Jeff Atwood has a post acerca de cómo los programadores se mueven entre estos niveles, en función de su necesidad.

Al principio, lea algo sobre el diseño de alto nivel del marco o la biblioteca (o el idioma, o la tecnología que sea), preferiblemente por uno de los diseñadores.Trate de determinar qué problemas están tratando de abordar, cuáles son los principios de organización detrás del diseño y cuáles son las características centrales. Esto formará el marco conceptual a partir del cual se comprenderá el futuro.

Ahora salta a él. Crea algo No copie y pegue el código de alguien. En cambio, cuando las cosas no funcionan, lea los mensajes de error en detalle y la ayuda sobre esos mensajes de error, y descubra por qué ocurrió ese error. Puede ser frustrante, cuando las cosas no funcionan, pero te obliga a pensar, y es entonces cuando aprendes.

1

Las listas de correo son un gran recurso siempre que haga su tarea antes de hacer preguntas.

Lista de correo archivos son invaluables para la mayoría de las preguntas que he tenido sobre cosas relacionadas con CoreAudio.

0

Realmente depende de qué tema es y cuánta información contiene. Aprender con el ejemplo es una buena manera de comenzar un tema completamente nuevo para ti, especialmente si tienes conocimiento de otras bibliotecas o idiomas similares. Puede tomar un tema con el que esté familiarizado y decir "Entiendo cómo implementar usando X, veamos cómo se hace al usar Y".

Cuestiones relacionadas