¿Cómo se lee el código de otro? [cerrado]

23

Casi todos los programadores avanzados dicen que es muy útil leer el código de otros profesionales. Por lo general, aconsejan código abierto.

¿Lo lees o no? Si lo hace, ¿con qué frecuencia y cuál es el procedimiento para leer el código? Además, es un poco difícil para los novatos lidiar con SVN: un montón de archivos. ¿Cual es la solución?

Sergey
fuente

Respuestas:

25

¿Lo lees o no?

Sí.

Si lo haces, con qué frecuencia

Diario. Constantemente. Trabajo con numerosos proyectos de código abierto (principalmente relacionados con Python) y debo leer el código fuente porque es la documentación más precisa.

¿Y cuál es el procedimiento para leer el código?

Um. Abrir y leer.

Además, es un poco difícil para los novatos lidiar con SVN: un montón de archivos. ¿Cual es la solución?

Abrir y leer. Entonces lee más.

No es fácil. Nada lo hace fácil. No hay camino real para entender. Se necesita trabajo.

S.Lott
fuente
Gracias por tu respuesta. ¿Cuál es la forma de definir si el código es bueno o no? ¿Porque no todos los proyectos de código abierto son realizados por verdaderos profesionales?
Sergey
1
@Sergey: "¿Cuál es la forma de definir si el código es bueno o no?" Lee el código. "Bueno" es subjetivo. Si es útil y puedes entenderlo, es bueno. Si es confuso o no funciona, no es bueno. Hay muchos, muchos atributos de calidad: mantenible, seguro, adaptable, de alto rendimiento, etc., etc., etc., el código puede ser bueno en uno y menos bueno en otro.
S.Lott
77
No pude resistirme: osnews.com/images/comics/wtfm.jpg
Gary Willoughby
@Sergey: incluso si es el mejor código jamás escrito, si no puede leerlo (debido a su nivel de experiencia), no le servirá de nada. Aunque puede ver que no es el mejor uso de su tiempo, se verá expuesto a un código mal escrito, por lo que también podría aprender la diferencia. Como dijo S.Lott, se necesita trabajo y tiempo.
JeffO
Si bien admiro a aquellos que pueden sentarse y leer código como si leyeran una novela, a veces me resulta un poco tedioso. Me he dado cuenta de que para mí 'leer código' no describe realmente las actividades que realizo: una mejor frase para lo que hago es 'comprender el código' e implica leer la documentación, recorrerla en un depurador e incluso leer las pruebas. Escribí una larga publicación sobre la lectura de códigos - technikhil.wordpress.com/2010/07/06/how-to-read-code-a-primer
Nikhil
9

Hay varias capas en el enigma que tienes. Primero, comience en el nivel alto, una vista de pájaro, por así decirlo. Una vez que revise un proyecto, habrá un montón de archivos en una estructura de directorio. Eso es lo mismo si está buscando código abierto o código cerrado (el código fuente es el código fuente después de todo). Entonces comience con esto:

  • ¿Cómo se organizan los archivos fuente? ¿Puede decir por el nombre del archivo o el nombre del directorio que contiene lo que puede encontrar dentro? A los programadores nos gustan los nombres predecibles y la estructura lógica. Debería poder tener una idea aproximada de dónde buscar un problema específico.
  • ¿Cuál es la naturaleza de la aplicación, está basada en la web, línea de comandos, GUI? La razón por la que esto es importante es que desea saber dónde comenzar a rastrear la ejecución. Si está basado en la web, desea comenzar donde la aplicación comienza a procesar la solicitud. Si se basa en un marco, mucho mejor. Una vez que conozca el marco, por lo general, puede entender el código que está allí. De lo contrario, comenzará con el punto de entrada respectivo para la línea de comando / aplicación GUI.
  • Obtenga una hoja de papel y un lápiz, o si tiene suerte, una pizarra y marcadores de borrado en seco. Dé los nombres de los componentes (o use los que se proporcionan en el código) y dibuje líneas entre los cuadros con flechas para que pueda ver cómo se procesan las cosas. Alternativamente, si está buscando un algoritmo, esboce las estructuras de datos de una manera que pueda comprender y esboce cómo se manipula.

Se necesita práctica, pero definitivamente es factible. Cuanto más sepa sobre las bibliotecas y los marcos que usa la aplicación, más sabrá cómo debe organizarse el código y dónde buscar respuestas a preguntas específicas. Algunos códigos son un poco más difíciles de seguir, especialmente si son bastante indirectos. Por eso necesitas el lápiz y el papel. Finalmente, una bombilla se apaga en tu cabeza y lo consigues. Eso es cuando leer el resto del código tiene mucho más sentido.

Berin Loritsch
fuente
Un aspecto de la lectura de código es la abstracción. Cosas como descubrir cómo están organizadas las fuentes definitivamente abstraerán el proceso de lectura de código.
David Gao
5

No es leer como lees una novela, sino más bien cómo lees un libro de referencia. Una buena manera es elegir un error recientemente corregido de un mensaje de verificación, hacer una diferencia de lo que cambió y leer las partes relevantes hasta que comprenda tanto el problema como la solución. Las vulnerabilidades de seguridad bien publicitadas son errores divertidos para elegir porque hay mucha discusión sobre ellos en los foros. Luego, escoge uno de los errores de "fruta baja" del rastreador de errores y lee hasta que entiendas cómo solucionarlo tú mismo. La mayoría de los profesionales de lectura de códigos son incidentales en el curso de la corrección de errores o la adición de funciones.

Por lo general, los mejores ejemplos de código apenas se notan. Los comprenderá instantáneamente sin leerlos más de una vez. Hacen que parezca que es extremadamente fácil de escribir, a pesar de que un código tan bueno generalmente pasa por muchos borradores. Produce la sensación paradójica de que, por supuesto, el código dado es la forma obvia de hacerlo, aunque no es la primera forma en que pensaba.

Cuando encuentre un código como ese, intente comprender el conocimiento que se generó al escribirlo y los principios de diseño involucrados, de modo que cuando se encuentre en una situación similar en el futuro, con suerte pueda aplicar los mismos principios.

Karl Bielefeldt
fuente
4

Un truco que uso con bastante frecuencia cuando leo alguna función complicada, el segmento de código es comenzar a refactorizarlo en algo más legible sin cambiar la lógica.

Michał Piaskowski
fuente
1
+1: Yo también. // Una vez tuve un jefe que notó la refactorización y me acusó de perder el tiempo. No pudo entenderlo. Qué tonto.
Jim G.
2

¿Cómo es difícil lidiar con "un montón de archivos"? No es diferente de cuando escribe su propio código, excepto que no tiene conocimiento previo de su organización a menos que esté documentado.

Si usted, como programador reclamado, no puede entender la estructura del proyecto a partir de "un grupo de archivos", ya sea un proyecto extremadamente mal organizado, o si es un programador inepto (o, en casos extremos, ambos).

Comience a leer, trate de encontrar algunos puntos de entrada o clases / métodos dinámicos esenciales y construya una comprensión de cómo todo se une a partir de ahí. No será instantáneo, llevará tiempo, pero se puede hacer incluso si no hay documentación en absoluto.

jwenting
fuente
3
"Tomará tiempo" para "construir un entendimiento" es más o menos la definición de "difícil". El hecho de que se trate de una dificultad que debemos enfrentar todos los días no lo hace menos difícil. "¿Dónde hago este cambio?" Es una pregunta común incluso entre los profesionales. Además, el control de la fuente y el manejo de grandes bases de código es uno de los grandes agujeros en la educación universitaria. Creo que hice uno o dos proyectos en la universidad que requerían más de un archivo fuente, y solo obtuvieron alrededor de 10 archivos.
Karl Bielefeldt
0

Lo mejor que puede esperar al leer el código de otro proyecto, ya sea una API o una pieza de software, es que las variables, las funciones y los nombres de macro no se abrevian de manera ambigua o se nombran para que pueda descubrir su intención.

Pero aparte de eso, se necesita una cantidad decente de conocimiento distribuido en el lenguaje, las técnicas de programación y también sobre el propósito del código en sí mismo para poder sumergirse en un código complejo.

Actualmente estoy tratando de ver cómo Lua hace algo de su magia, pero estoy llegando al punto anterior donde muchos de los identificadores se nombran vagamente y se abrevian al punto donde no puedo entender qué línea está intentando hacer lo que sé tiene que hacerse en algún punto del código de función ... Las variables de una sola letra frecuentes y los nombres de macro / función abreviados me están haciendo pensar.

Nick Bedford
fuente
0

Después de mirar el "Primero, comience en el nivel alto, una vista de pájaro" como sugirió @Berin Loritsch, puede buscar pruebas de unidad y / o pruebas de integración, si las hay.

Las pruebas unitarias son interesantes para ver cómo funcionan los (api) detalles.

Las pruebas de integración generalmente ofrecen una buena visión general de los procesos de negocio

k3b
fuente