Si alguien le ofrece una declaración no verificada sobre las prácticas de desarrollo de software, ¿responde con “cita requerida”? [cerrado]

14

Recientemente asistí a una conferencia dada por Greg Wilson (Jefe Científico de Carpintería de Software). Del resumen:

La idea de que las afirmaciones sobre las prácticas de desarrollo de software deben basarse en evidencia aún es ajena a los desarrolladores de software, pero esto finalmente está comenzando a cambiar: cualquier académico que afirme que una herramienta o práctica en particular hace que el desarrollo de software sea más rápido, más barato o más confiable es ahora esperaba respaldar esa afirmación con algún tipo de estudio empírico.

En general, la conferencia fue muy informativa y me dejó pensando bastante profundamente sobre mi enfoque del desarrollo. En particular, ahora me encuentro buscando citas para respaldar muchas declaraciones. Anteriormente, me había acostumbrado a repetir las verdades ofrecidas, tal vez con una nota mental para comprobarlo más tarde.

Dicho sin rodeos, estaba siendo crédulo .

Aquí hay un ejemplo tomado de la conferencia:

"Si más del 25% del código necesita refactorización, es más rápido reescribirlo".

Suena plausible, pero ¿es cierto? ¿Dónde está el estudio respaldando esto? ¿Es cierto para todos los idiomas? Y así.

OK, es bastante posible llevar esto al extremo y no creer nada por nadie a menos que lo haya derivado usted mismo de los primeros principios. De esa manera se encuentra la locura (o tal vez las matemáticas ;-)). Pero, si alguien se le acerca con una declaración en la línea de "Oye, al hacer esto en [elegir el idioma del momento] podremos aumentar la productividad en [elegir un múltiplo del 10]%", ¿estás dispuesto a simplemente aceptarlo, o vas a pedir pruebas comprobadas?

Si es lo último (y espero que lo sea) entonces

  1. ¿A dónde irías para encontrar esta evidencia?
  2. ¿Qué tan estricto serías?

En resumen, si alguien le ofrece una declaración no verificada, ¿responderá con "cita requerida"?

Gary Rowe
fuente
2
¿En cuántos campos, fuera de la ciencia, la gente exige evidencia empírica? En mi observación, no tantos como quisiera.
David Thornley
1
¿Qué tal algunos comentarios sobre los votos cerrados? "Demasiado localizado" y "No es una pregunta real" no se explica por sí mismo en este contexto.
Inaimathi
1
Sí, a mí también me gustaría saber el razonamiento detrás de los votos cerrados.
Robert Harvey
@Robert Gracias por la edición. Mucho menos inflamatorio en la reflexión.
Gary Rowe
1
Gran pregunta Vi al Prof. Wilson hablar en CUSEC el año pasado y también me influyó mucho lo que tenía que decir. La mejor parte fue cuando un estudiante lo desafió a citar su reclamo de que los reclamos deberían ser citados, y lo hizo sin perder el ritmo.
Matthew leyó el

Respuestas:

3

El problema con este tipo de declaraciones es que incluso si tuviera evidencia empírica que respalde la afirmación, sería muy difícil determinar si el estudio que condujo a la evidencia se aplica a su situación actual.

Casi todo en la profesión tiene una advertencia, o varias, por lo que cada mejora en un lugar tiene la probabilidad de ser perjudicial en otro lugar.

Las personas que viven en las trincheras conocen la diferencia a través de la experiencia y, en general, no tienen los fondos / tiempo / recursos para intentar demostrarlo a través de un estudio científico.

Las personas que intentan demostrarlo a través de un estudio científico obviamente tienen recursos para dedicar a tales estudios y, por lo tanto, es muy probable que le vendan algo, por lo que diría que debería aplicar aún más estrictamente su propia experiencia personal a cualquier cosa que afirme estar respaldado por investigaciones empíricas.

Si alguien le dijera "Si más del 2% del código necesita refactorización, es más rápido reescribirlo", sabría que es falso tanto como si alguien le dijera "Solo si más del 98% del código necesita refactorización, es más rápido reescribirlo ". El lugar donde se encuentra el número real depende de lo que esté haciendo y qué tan lejos de ideal sea el código actual.

La idea de que después de cierto punto es más fácil hacer un refactor nuclear es obviamente cierto en muchos casos, pero el porcentaje real es más un ejemplo que debe considerar a través de la lente de la experiencia y la situación actual de su (equipo).

Cuenta
fuente
+1 para un análisis exhaustivo de la declaración de ejemplo. ¿Realmente crees que toda investigación científica tiene un ángulo comercial que debe ser explotado? (Perdona mi ingenuidad pero tengo curiosidad genuina sobre esto)
Gary Rowe
@Gary: No todo es perfecto, pero es muy difícil, si no imposible, determinar el sesgo de un estudio desde el exterior. Doblemente cuando no hay métricas acordadas que cubran toda la situación
Bill
8
Si alguien le ofrece una declaración no verificada sobre las prácticas de desarrollo de software, ¿responde con “cita requerida”?

No, lo publico aquí y veo si recibe votos positivos. ¡La prueba social es mejor que ninguna prueba!

Steven A. Lowe
fuente
2
Es posible que llegue a algún lugar con este modelo, pero me estremezco al pensar en un papel citando a los programadores. SE como fuente.
Inaimathi
@Inaimathi: ¡es al menos tan confiable como wikipedia, si no más!
Steven A. Lowe
+1 para buscar pruebas, siempre un buen consejo. ¿Cuántos votos a favor antes de creerlo? ;-)
Gary Rowe
1
@ Gary: en SO, diez. en este sitio, veinte. en meta, cien, a menos que implique unicornios y gofres, en cuyo caso debe ser cierto
Steven A. Lowe
Me encanta la referencia del unicornio - debe conseguirme uno de ellos
Gary Rowe
4

Muchos desarrolladores basan sus decisiones momento a momento en la experiencia en las trincheras que trabajan con el código y los clientes a los que sirve ese código.

Cuando una clase o método se ha fragmentado tanto por correcciones de errores y solicitudes de cambio de clientes que se ha vuelto imposible de mantener, un desarrollador a veces tomará la decisión de reescribirlo en lugar de refactorizarlo, bajo la teoría de que ahorrará tiempo y esfuerzo a largo plazo , porque el código resultante será de mayor calidad.

Este tipo de experiencia de inteligencia es lo que los departamentos de recursos humanos llaman "capital humano". Es una de las cosas que hace que los desarrolladores experimentados sean valiosos, y una de las razones por las que las buenas empresas hacen cosas para tratar de preservar la longevidad de sus empleados.

No parece justo ni práctico pedir a los desarrolladores experimentados que presenten un estudio y datos empíricos como prueba de que sus técnicas son válidas. La experiencia no funciona de esa manera. Por el contrario, la experiencia es algo así como un "sentido sentido". En el mundo de la refactorización, a menudo lo llamamos "olor".

En última instancia, una declaración como "Si más del 25% del código necesita ser refactorizado, es más rápido reescribirlo" no puede probarse que funcione en todas las circunstancias, por lo que la declaración [cita requerida] es realmente una forma de informar al programador dogmático que busca forzar sus puntos de vista sobre los demás de que no siempre es "Su camino o la autopista".

Robert Harvey
fuente
Ahh, el bueno de capital humano y de los recursos humanos, esas frases maravillosas gemelas que promueven la deshumanización permanente de los trabajadores en todas partes ...
Aaronaught
@Aaronaught: La ejecución de un concepto a veces puede ser inferior al elevado vocabulario utilizado para describirlo. Es por eso que las personas escépticas a veces piden pruebas.
Robert Harvey
¿No sería bueno que la ejecución de esos conceptos particulares se quedara corta?
Aaronaught
+1 por un buen uso de la defensa "cita requerida" contra un programador dogmático - muy útil
Gary Rowe
4

Creo que con cualquier cosa que nunca sepas hasta que lo pruebes. Incluso con pruebas para respaldar una declaración, siempre es posible doblegar los hechos en beneficio de su punto. Dicho esto, no deberías probar todas las cosas nuevas que afectan a las redes. Haz tu mejor juicio. Recuerde, si algo es demasiado bueno para ser verdad, probablemente lo sea. Pregúntese siempre por qué necesita adoptar algo. ¿Qué tienes que ganar? ¿Tiene sentido desde una perspectiva comercial? Nunca cegado excepto algo en la fe.

Carlosfocker
fuente
+1 por preguntar "por qué necesitas adoptar algo". A veces, alejarse del borde de ataque es algo bueno.
Gary Rowe
Creo que con demasiada frecuencia los desarrolladores quedan atrapados en la siguiente mejor opción sin analizarla y comprender cómo podría beneficiarlos y disuadirlos. He visto situaciones en las que las organizaciones adoptan algo como Asp.Net MVC sobre Asp.Net Webforms pero no adoptan TDD.
Carlosfocker
3

El ejemplo de la conferencia es una heurística, una regla general y nada más. Eso debería ser implícitamente obvio.

Las heurísticas son como cualquier otra cosa: están sujetas a un determinado contexto y dependen de cualquier cantidad de suposiciones no declaradas, y su utilidad puede ser muy no determinista. Tanto juicio arbitrario entra en encontrarlos útiles como en formularlos en primer lugar.

¿Eso significa que no tienen valor? Yo no diría eso en absoluto.

La heurística es uno de los enfoques que podemos adoptar para abordar los problemas de NP completo y, en muchos aspectos, la ingeniería de software es en sí misma un problema de NP completo.

Adam Crossland
fuente
Buenos puntos. =)
Pablo
1

Depende. :) Cuando la declaración de alguien contradice la experiencia repetida, reflexionada y verificada personalmente, entonces sí, me gustaría ver algún tipo de referencia de un estudio. Por otro lado, si alguien se hace eco de una idea que has visto y vivido muchas veces, no hay mucha reacción provocada (aunque eso no significa que la idea sea infalible).

Como ejemplo, el libro "Code Complete" cita decenas de estudios en cada capítulo para exponer sus puntos, a veces sobre asuntos aparentemente pequeños (como sangría y espaciado, o longitud de nombre variable). Recuerdo a algunos desarrolladores (más jóvenes) a quienes les presenté el libro que pensaban que ese nivel de detalle y evidencia era una tontería. Pero unos meses más tarde con más experiencia en codificación de producción y después de algunas revisiones de código, algunos de esos mismos desarrolladores tuvieron la honestidad de admitir que sí, incluso el número de espacios en sangría sí importa. Los buenos comentarios importan. La encapsulación importa. etcétera etcétera.

Por otro lado, cuando un vendedor afirma que un nuevo IDE es 50% más productivo, mi primera reacción es bull $% ^ &!

limist
fuente
1
Depende, pero incluso los ejemplos completos de código dependen de su situación. Por ejemplo: si tiene un formateador de análisis y su herramienta de diferencias ignora los espacios en blanco, entonces el argumento de sangría se vuelve bastante trivial
Bill
1
+1 para el ejemplo de Code Complete (también es cierto para Rapid Development del mismo autor Steve McConnell).
Gary Rowe
@Bill Es interesante que, a medida que la tecnología mejora, los problemas que requerían pruebas antes desaparecen. Me pregunto si este es un efecto que reduce nuestra necesidad de pedir pruebas.
Gary Rowe
1
@gary No creo que esto (en el sentido general) sea un caso de mejora tanto como de variación. Los ejemplos completos de código definitivamente se refieren a un conjunto de herramientas específico en un punto específico en el tiempo, por lo que son ambos, pero el tipo "cuándo refactorizar" tiene mucho más que ver con la situación que con la tecnología. Piense en un software crítico de seguridad en un vehículo frente a una solución de procesamiento de datos. Los requisitos de prueba serán mucho más altos en el sistema de seguridad, por lo que el punto de refactorización siempre será mucho más alto antes de que haya una ganancia neta.
Bill
1

¿No es algo que depende de muchas variables intangibles (variables que no tienen forma de ser medidas científicamente)?

En mi opinión, están hablando de un método empírico para medir las emociones. Algo que ni siquiera Spock podría lograr. =)

Pablo
fuente
1
+1 para una versión interesante. Dejando a un lado el ejemplo lanudo (intencionalmente), si alguien le dijera que Rails es un marco mejor que SpringMVC, ¿cómo determinaría su validez?
Gary Rowe
Como afirma Benjamin Graham en su libro clásico sobre inversión ("Análisis de seguridad"), las herramientas (de inversión) debían medirse en dos aspectos diferentes, pero solitarios: lo cualitativo (intangible, sentimientos) y lo cuantitativo (números reales, matemáticas , computación, lógica).
Pablo
El cuantitativo es lo que estás midiendo a través de un método científico. Lo cualitativo es lo que mides a través de tu propio instinto. No es posible juzgar emoción versus emoción sin tener emociones sobre el análisis.
Pablo
Por decir lo menos, cuando hablamos de opiniones y diferencias en ellas, simplemente no podemos acordar un método razonable, científico y tangible para medir el resumen.
Pablo
Mi respuesta es que solo podemos medir aspectos técnicos, no pensamientos / opiniones abstractas. Además, no quiero sonar como un idiota. Esos mensajes no pretendían ser una especie de respuesta tonta.
Pablo