Todo el mundo siempre dice que pueden superar las "10 líneas por desarrollador por día" del "Mes del Hombre Mítico", y al comenzar un proyecto, generalmente puedo obtener un par de cientos de líneas en un día.
Pero en mi empleador anterior, todos los desarrolladores eran muy agudos, pero era un gran proyecto, más de un millón de líneas de código, con requisitos de certificación muy onerosos e interconectado con otros proyectos de varias millones de líneas. En algún momento, como ejercicio de curiosidad, tracé líneas de código en el producto de envío en mi grupo (sin contar las herramientas que desarrollamos), y efectivamente, incrementalmente, llegó a alrededor de 12 líneas de adición neta por desarrollador por día. Sin contar los cambios, el código de prueba o el hecho de que los desarrolladores no estaban trabajando en el código real del proyecto todos los días.
¿Cómo están las otras personas? ¿Y qué tipo de requisitos enfrenta (imagino que es un factor)?
Respuestas:
Creo que la cantidad de líneas agregadas depende en gran medida del estado del proyecto, la tasa de adición a un nuevo proyecto será mucho mayor que la tasa de un proyecto inicial.
El trabajo es diferente entre los dos: en un proyecto grande, generalmente pasa la mayor parte del tiempo calculando las relaciones entre las partes, y solo una pequeña cantidad para cambiar / agregar realmente. mientras que en un nuevo proyecto, principalmente escribes ... hasta que sea lo suficientemente grande y la tasa disminuya.
fuente
En uno de mis proyectos actuales, en algunos módulos, estoy orgulloso de haber contribuido con un recuento negativo de líneas a la base del código. Identificar qué áreas del código han crecido complejidad innecesaria y pueden simplificarse con un diseño más limpio y claro es una habilidad útil.
Por supuesto, algunos problemas son inherentemente complejos y requieren soluciones complejas, pero en la mayoría de los proyectos grandes las áreas que han tenido requisitos mal definidos o cambiantes tienden a tener soluciones demasiado complejas con un mayor número de problemas por línea.
Dado un problema a resolver, prefiero la solución que reduce el recuento de líneas. Por supuesto, al comienzo de un proyecto pequeño puedo generar más de diez líneas de código por día, pero tiendo a no pensar en la cantidad de código que he escrito, solo en lo que hace y qué tan bien lo hace. Ciertamente no trataría de superar diez líneas por día o considerarlo un logro hacerlo.
fuente
Me gusta esta cita:
Algunas veces has contribuido más eliminando código que agregando
fuente
Debería dejar de usar esta métrica, no tiene sentido en su mayor parte. La cohesión, el acoplamiento y la complejidad son métricas más importantes que las líneas de código.
fuente
Soy el único desarrollador de tiempo completo en nuestra empresa y he escrito 500,000 líneas de código OCaml y F # en los últimos 7 años, lo que equivale a unas 200 líneas de código por día. Sin embargo, la gran mayoría de ese código son ejemplos tutoriales que consisten en cientos de proyectos separados, cada uno de unos cientos de líneas de largo. Además, hay mucha duplicación entre OCaml y F #. No mantenemos ninguna base de código interna mayor a 50kLOC.
Además de desarrollar y mantener nuestro propio software, también he consultado a muchos clientes en la industria durante los últimos 7 años. Para el primer cliente , escribí 2,000 líneas de OCaml durante 3 meses, que son 20 líneas de código por día. Para el siguiente cliente , cuatro de nosotros escribimos un compilador que generó millones de líneas de código C / C ++ / Python / Java / OCaml, así como documentación en 6 meses, que es de 2,000 líneas de código por día por desarrollador. Para otro cliente, reemplacé 50kLOC de C ++ con 6kLOC de F # en 6 meses, que es -352 líneas de código por día. Para otro cliente más , estoy reescribiendo 15kLOC de OCaml en F #, que tendrá el mismo tamaño, así que 0 líneas de código por día.
Para nuestro cliente actual , reemplazaré 1,600,000 líneas de código C ++ y Mathematica con ~ 160kLOC de F # en 1 año (escribiendo un compilador a medida) que será -6,000 líneas de código por día. Este será mi proyecto más exitoso hasta la fecha y le ahorrará a nuestro cliente millones de dólares al año en costos continuos. Creo que todos deberían apuntar a escribir -6,000 líneas de código por día.
fuente
Sin verificar realmente mi copia de "The Mythical Man-Month" (todos los que leen esto realmente deberían tener una copia disponible), hubo un capítulo en el que Brooks observó la productividad por líneas escritas. El punto interesante, para él, no era el número real de líneas escritas por día, sino el hecho de que parecía ser más o menos lo mismo en ensamblador y en PL / I (creo que ese era el lenguaje de nivel superior utilizado).
Brooks no estaba dispuesto a arrojar algún tipo de cifra arbitraria de productividad, pero estaba trabajando a partir de datos en proyectos reales, y por lo que puedo recordar, podrían haber sido 12 líneas / día en promedio.
Señaló que podría esperarse que la productividad varíe. Dijo que los compiladores eran tres veces más difíciles que los programas de aplicación, y los sistemas operativos tres veces más difíciles que los compiladores. (Parece que le ha gustado usar multiplicadores de tres para separar las categorías).
No sé si él apreció las diferencias individuales entre la productividad del programador (aunque en un argumento de orden de magnitud postuló un factor de siete diferencias), pero como sabemos, una productividad superior no es solo una cuestión de escribir más código, pero también escribiendo el código correcto para hacer el trabajo.
También está la cuestión del medio ambiente. Brooks especuló un poco sobre qué haría que los desarrolladores fueran más rápidos o más lentos. Al igual que muchas personas, se preguntó si las modas actuales (depuración interactiva utilizando sistemas de tiempo compartido) eran mejores que las antiguas (planificación previa cuidadosa para una toma de dos horas con toda la máquina).
Dado eso, no tendría en cuenta ningún número de productividad real que se le ocurrió como inútil; El valor continuo del libro está en los principios y las lecciones más generales que las personas persisten en no aprender. (Oye, si todos los hubieran aprendido, el libro sería de interés histórico solamente, al igual que todos los argumentos de Freud de que hay algo así como una mente subconsciente).
fuente
Es fácil obtener un par de cientos de líneas de código por día. Pero trate de obtener un par de cientos de líneas de código de calidad por día y no es tan fácil. Supere eso con la depuración y pasando por días con pocas o ninguna línea nueva por día y el promedio disminuirá bastante rápido. He pasado semanas depurando problemas difíciles y la respuesta es 1 o 2 líneas de código.
fuente
Sería mucho mejor darse cuenta de que hablar de líneas físicas de código no tiene mucho sentido. El número de líneas físicas de código (LoC) depende tanto del estilo de codificación que puede variar de un orden de magnitud de un desarrollador a otro.
En el mundo .NET hay una manera conveniente de contar la LoC. Punto de secuencia . Un punto de secuencia es una unidad de depuración, es la parte del código resaltada en rojo oscuro al poner un punto de interrupción. Con el punto de secuencia podemos hablar de LoC lógico , y esta métrica se puede comparar en varios lenguajes .NET. La métrica del código lógico LoC es compatible con la mayoría de las herramientas .NET, incluida la métrica del código VisualStudio, NDepend o NCover.
Por ejemplo, aquí hay un método de 8 LoC (los puntos de secuencia de paréntesis iniciales y finales no se tienen en cuenta):
La producción de LoC debe contarse a largo plazo. Algunos días escupirás más de 200 LoC, otros días pasarás 8 horas reparando un error sin siquiera agregar un LoC. Algunos días limpiarás el código muerto y eliminarás el LoC, algunos días pasarás todo el tiempo refactorizando el código existente y no agregando ningún LoC nuevo al total.
Personalmente, cuento una única LoC en mi propio puntaje de productividad solo cuando:
En esta condición, mi puntaje personal en los últimos 5 años codificando la herramienta NDepend para desarrolladores .NET es un promedio de 80 LoC físicos por día sin sacrificar de ninguna manera la calidad del código . El ritmo es sostenido y no veo que disminuya en el corto plazo. Con todo, NDepend es una base de código C # que actualmente pesa alrededor de 115K LoC físico
Para aquellos que odian contar LoC (vi muchos de ellos en los comentarios aquí), atestiguo que una vez calibrado adecuadamente, contar LoC es una excelente herramienta de estimación . Después de codificar y medir docenas de características logradas en mi contexto particular de desarrollo, llegué al punto en el que puedo estimar con precisión el tamaño de cualquier característica TODO en LoC y el tiempo que me llevará entregarla a producción.
fuente
No hay tal cosa como una bala de plata.
Una sola métrica como esa es inútil por sí misma.
Por ejemplo, tengo mi propia biblioteca de clases. Actualmente, las siguientes estadísticas son verdaderas:
Supongamos que no escribo ningún comentario, es decir, 127.323 líneas de código. Con su relación, esa biblioteca de códigos me tomaría alrededor de 10610 días para escribir. Eso es 29 años.
Ciertamente no pasé 29 años escribiendo ese código, ya que todo es C #, y C # no ha existido tanto tiempo.
Ahora, puede argumentar que el código no es tan bueno, ya que obviamente debo haber superado su métrica de 12 líneas por día, y sí, aceptaré eso, pero si voy a reducir la línea de tiempo a cuando se lanzó 1.0 (y no comencé a hacerlo hasta que se lanzó 2.0), que es 2002-02-13, aproximadamente 2600 días, el promedio es de 48 líneas de código por día.
¿Todas esas líneas de código son buenas? Diablos no. ¿Pero hasta 12 líneas de código al día?
Diablos no.
Todo depende
Puede tener un programador de primer nivel produciendo código en el orden de miles de líneas por día, y un programador mediano produciendo código en el orden de cientos de líneas por día, y la calidad es la misma.
Y sí, habrá errores.
El total que quieres es el saldo. La cantidad de código ha cambiado, versus la cantidad de errores encontrados, versus la complejidad del código, versus la dificultad de corregir esos errores.
fuente
Steve McConnell ofrece una estadística interesante en su libro "Estimación de software" (p. 62 Tabla 5.2). Distingue entre los tipos de proyecto (Aviónico, Negocio, Telco, etc.) y el tamaño del proyecto 10 kLOC, 100 kLOC, 250 kLOC. Los números se dan para cada combinación en LOC / StaffMonth. EG Avionic: 200, 50, 40 Sistemas de intranet (internos): 4000, 800, 600 Sistemas integrados: 300, 70, 60
Lo que significa: por ejemplo. para el proyecto Avionic 250-kLOC hay 40 (LOC / mes) / 22 (días / mes) == <2LOC / día!
fuente
Creo que esto proviene de los días de desarrollo de la cascada , donde la fase de desarrollo real de un proyecto podría ser tan poco como 20-30% del tiempo total del proyecto. Tome las líneas de código totales y divídalas por el tiempo completo del proyecto y obtendrá alrededor de 10 líneas / día. Divídase solo por el período de codificación, y se acercará a lo que la gente cita.
fuente
Nuestra base de código es de aproximadamente 2.2MLoC para un esfuerzo de aproximadamente 150 años-hombre. Eso hace alrededor de 75 líneas de c ++ o c # por desarrollador por día, durante toda la vida del proyecto.
fuente
Creo que el tamaño del proyecto y la cantidad de desarrolladores involucrados son factores importantes en esto. Estoy muy por encima de esto en mi carrera, pero he trabajado solo todo el tiempo, así que no hay pérdida por trabajar con otros programadores.
fuente
Buena planificación, buen diseño y buenos programadores. Obtiene todo ese conjunto y no pasará 30 minutos escribiendo una línea. Sí, todos los proyectos requieren que se detenga y planifique, piense, discuta, pruebe y depure, pero a dos líneas por día cada compañía necesitaría un ejército para que los tetris funcionen ...
En pocas palabras, si estuvieras trabajando para mí a 2 líneas por hora, será mejor que me consigas muchos ataúdes y masajees mis pies para que no te despidan.
fuente
Uno sospecha que esta parte perenne de gerente-dulce fue acuñada cuando todo era una aplicación de sistema escrita en C porque, si nada más, el número mágico variaría en órdenes de magnitud según el idioma, la escala y la naturaleza de la aplicación. Y luego tienes que descartar comentarios y atributos. Y en última instancia, ¿a quién le importa la cantidad de líneas de código escritas? ¿Se supone que debes terminar cuando alcances las 10K líneas? 100K? Tan arbitrario.
Es inutil.
fuente