¿Deberían los métodos de desarrollo aplastar el individualismo de un desarrollador?

9

Estoy en mi último semestre de la universidad y estoy tomando un curso de ingeniería de software. En la clase aprendemos sobre varios métodos de desarrollo de software. En lo que nos centramos y en lo que desarrollamos nuestro proyecto fue en el método de cascada.

Siento que el instructor puede haberlo implementado mal. En nuestros diagramas de clases, tuvimos que enumerar TODAS las propiedades y métodos, incluidos los privados. He leído algunos libros, a saber, Clean Code, que dicen mantener las funciones lo más cortas y enfocadas posible. Parece tedioso enumerar cada pequeña función en nuestros diagramas si no ayudan a otros desarrolladores (son privados, nadie más los usará). Además, es posible que no piense en cada pequeña función al diseñar el programa, pueden aparecer al refactorizar.

¿El instructor nos dijo mal al pedirnos que enumeremos cada función? Y, ¿estos métodos de diseño aplastan el individualismo del desarrollador para escribir código de la mejor manera que puedan entenderlo?

David Peterman
fuente
20
Es bastante malo que su clase esté enseñando el método Waterfall, que es un ejemplo canónico de malos procesos para el desarrollo de software.
whatsisname
66
Yo diría que esta clase te ha enseñado mucho.
JeffO
77
En realidad, la cascada original tiene iteraciones que se retroalimentan entre sí. Es la enseñanza incorrecta de Waterfall a lo largo de los años lo que ha destruido su utilidad. Incluso con algo como Scrum, los pasos por los que pasa una historia en un Sprint emula el de una cascada en sí mismo. Los diagramas UML solo son útiles para el diseño de alto nivel. Tan pronto como se escriba el código, cualquier documento escrito antes de ese código ya no está actualizado. Esta es la realización de la ingeniería. Al final, el código tiene que ser la documentación.
Andrew T Finnell
10
Casi todos los desarrolladores han visto casos de individualismo del desarrollador que deberían haber sido aplastados. (Aunque probablemente no por metodología de cascada).
psr
2
@whatsisname, estoy totalmente en desacuerdo. Cada desarrollador debe aprender el desarrollo de Waterfall para ENTENDERLO y EXPERIMENTARLO como un ejemplo canónico de mal desarrollo de software. Además, muchas tiendas siguen siendo Cascada para bien o para mal y es importante que los graduados estén preparados para eso.
maple_shaft

Respuestas:

10

¿Le preguntaste al instructor por qué tenías que enumerar todos los métodos?

Es posible que, al igual que gran parte de lo que se pide en un entorno de aula, la intención no fuera hacer que los diagramas de clase sean más útiles para los desarrolladores, sino ayudarlos a usted y a sus compañeros a pensar en cómo diseñarían sus clases. Cuando los estudiantes están aprendiendo cómo descomponer problemas más grandes en problemas más pequeños, probablemente les sea útil pensar qué métodos privados probablemente necesitarían. Y probablemente sea útil que el instructor tenga una mejor idea de qué métodos están pensando implementar los estudiantes para intervenir antes en el proceso si el diseño de alguien está mal pensado. La documentación en un entorno de clase suele ser mucho más complicada que la documentación en un entorno del mundo real porque el instructor '

Por supuesto, también es posible que el instructor crea que este nivel de documentación es útil en un proyecto real. Si ese es el caso, el instructor probablemente esté desactualizado o provenga de un nicho particular en el que este nivel de planificación y documentación sea apropiado. Si está construyendo el sistema de navegación para el transbordador espacial o diseñando dispositivos médicos, por ejemplo, generalmente es mucho más apropiado invertir mucho en el diseño por adelantado en lugar de refactorizar el código durante el desarrollo. Si está desarrollando un sitio de redes sociales, por otro lado, un enfoque más ágil es más apropiado.

Justin Cave
fuente
+1 para señalar cómo se necesita un diseño diferente para diferentes propósitos. Buenos puntos sobre el diseño de clase también; preguntar al instructor es una buena idea
Ethel Evans
1
Recuerde la regla para aprobar un curso universitario: descubra lo que quiere el profesor y entrégalo.
Christopher Mahan
9

No, el instructor tiene razón al decirle que enumere todas las propiedades y métodos por adelantado si está utilizando el método de cascada. Wikipedia señala una crítica a la cascada:

Muchos argumentan que el modelo de cascada es una mala idea en la práctica, ya que creen que es imposible para cualquier proyecto no trivial terminar perfectamente una fase del ciclo de vida de un producto de software antes de pasar a las siguientes fases y aprender de ellas. Por ejemplo, los clientes pueden no saber exactamente qué requisitos necesitan antes de revisar un prototipo en funcionamiento y comentarlo. Pueden cambiar sus requisitos constantemente. Los diseñadores y programadores pueden tener poco control sobre esto. Si los clientes cambian sus requisitos después de finalizar el diseño, el diseño debe modificarse para acomodar los nuevos requisitos. Esto significa efectivamente invalidar una buena cantidad de horas de trabajo, lo que significa un mayor costo, especialmente si una gran cantidad de los recursos del proyecto ya se han invertido en Big Design Up Front.

Estos métodos de diseño no aplastan al implementador del individualismo del diseño, ya que todavía hay partes para interpretar y formas de poner toques únicos en la estructura, por ejemplo, una imagen dada un esqueleto y agregar el músculo y otros tejidos para crear un animal preguntándose cuánto libertad tuviste que diseñar ese animal?

Usted ha encontrado una deficiencia de la cascada, sí, pero todo tiene sus puntos fuertes y débiles.

JB King
fuente
4

En la clase aprendemos sobre varios métodos de desarrollo de software. En lo que nos centramos y en lo que desarrollamos nuestro proyecto fue en el método de cascada.

Probablemente aprendió el modelo clásico de Waterfall, que la persona atribuida al introducirlo en el mundo del desarrollo de software declaró desde el principio que no era apropiado para desarrollar sistemas de software a gran escala. Probablemente le interese leer el documento de Winston Royce titulado Gestión del desarrollo de sistemas de software grandes para obtener más información sobre los problemas con lo que mucha gente considera el modelo de la cascada.

Sin embargo, el modelo Waterfall es bueno para enseñar el ciclo de vida del desarrollo de software a medida que avanza y puede pasar tiempo aprendiendo y realizando ingeniería de requisitos, diseño arquitectónico, diseño detallado, implementación, prueba y mantenimiento en fases muy claras y distintas.

En nuestros diagramas de clases, tuvimos que enumerar TODAS las propiedades y métodos, incluidos los privados. He leído algunos libros, a saber, Clean Code, que dicen mantener las funciones lo más cortas y enfocadas posible. Parece tedioso enumerar cada pequeña función en nuestros diagramas si no ayudan a otros desarrolladores (son privados, nadie más los usará). Además, es posible que no piense en cada pequeña función al diseñar el programa, pueden aparecer al refactorizar.

Todos estos son puntos muy válidos.

Enumerar todas las propiedades y métodos durante la fase de diseño, incluso cuando se utiliza Waterfall, probablemente sea exagerado. Definitivamente debe enumerar todo lo que es público, junto con las propiedades esenciales. En realidad, todo lo demás es un detalle de implementación que puede obtener mediante ingeniería inversa de su implementación en diagramas.

El consejo de Clean Code (nunca lo he leído, solo sigo lo que publicaste) parece ser justo y aplicable incluso cuando utilizo la metodología Waterfall. Puede diseñar sus clases y métodos con respecto al Principio de responsabilidad única , la separación de preocupaciones y otros principios de SOLID . Waterfall no te dice cómo diseñar, justo cuando necesitas hacerlo. Dicho esto, es más difícil por adelantado a medida que aprende y piensa en mejores formas de hacerlo durante la implementación.

Creo que esto señala el hecho de que debe haber una iteración entre el diseño y la implementación muy claramente, un problema que Waterfall tradicional no tiene en cuenta.

Thomas Owens
fuente
1
@pillmuncher Tan pocas personas lo han leído, es un poco triste.
Thomas Owens
3
Lo más triste de ese documento es que la mayoría de la gente realmente descubrió la cascada a través de él, mientras que es un documento que desacredita a fondo la práctica.
Joeri Sebrechts
3

Parece tedioso enumerar cada pequeña función en nuestros diagramas si no ayudan a otros desarrolladores (son privados, nadie más los usará).

Si cree que esto es tedioso, espere hasta obtener una programación de trabajo real. Considere, por un momento, que el software puede no ser una carrera viable para usted.

Además, es posible que no piense en cada pequeña función al diseñar el programa, pueden aparecer al refactorizar.

¿Entonces?

¿Nos dijo mal el instructor al pedirnos que enumeremos cada función?

No. Es un requisito común.

Y, ¿estos métodos de diseño aplastan al implementador del individualismo de diseño (el desarrollador) para escribir código de la mejor manera que puedan entenderlo?

Si. La destrucción de las personas es una parte importante del desarrollo de software. Toda individualidad será eliminada de todos los programadores en todo momento de todas las formas posibles. Dice que en algún lugar de las "Reglas de programación de Dios" transmitidas de alguna montaña a algún profeta.

No. Solo te estás resistiendo al tedio. Supéralo y vuelve al trabajo.

S.Lott
fuente
1
@FreshDaddy. "Ellos (en su mayor parte) nunca verán funciones privadas". Falso. Después de ganar la lotería, otros programadores se harán cargo de su código y verán las funciones privadas. También. Algunos lenguajes (por ejemplo, Python) evitan este tipo de privacidad.
S.Lott
2
@ S.Lott: enumerar todas las funciones privadas no es un requisito común en absoluto. Sucede, no me malinterpreten, pero una "lista completa de todas las funciones privadas antes de escribir el código" es ciertamente bastante rara. Hay un "tedio necesario" y luego hay un "tedio inútil". Teniendo en cuenta que los programadores están en el negocio de eliminar el "tedio inútil", los clientes del mundo real casi nunca solicitarían algo tan costoso e inútil como esto, a menos que fuera un código de tipo "vida o muerte".
Morgan Herlocker
1
@ironcode: '' enumerar todas las funciones privadas antes de escribir código 'es ciertamente bastante raro'. No en mi experiencia. Es cómo la gente aprende a hacer diseño. Los programadores junior a menudo están sujetos a este estándar hasta que puedan demostrar que su trabajo no requiere este nivel de supervisión. Generalmente menos de un año. Una organización que tomó n00bs de la escuela y los lanzó a la programación sin supervisión en su mayoría solo está creando grandes problemas. Este nivel de supervisión es esencial para asegurarse de que el código tenga muchas posibilidades de funcionar.
S.Lott
1
@S Lott: mi lema es que si el desarrollo de software es tedioso, lo estás haciendo mal. Somos programadores Automatizamos el tedio. No nos repetimos en código, y tampoco hay razón para repetirnos en la documentación.
Kevin Cline
1
@kevin: esta respuesta es puro sarcasmo. Como tal, es completamente inapropiado, y lo he marcado.
Michael Borgwardt
1

La programación es el arte de trabajar dentro de las limitaciones. La CPU proporciona un conjunto de instrucciones limitado; IO está limitado por el diseño del hardware; Las API del sistema operativo se crean para fomentar ciertos comportamientos y restringir otros; Los lenguajes de alto nivel a menudo están diseñados para promover un conjunto de modismos sobre otros ...

Y las metodologías también están diseñadas para restringir.

Su desafío, en todos los aspectos del proceso de desarrollo, es realizar su visión dentro de esas limitaciones. ¿Te golpearás la cabeza contra cada pared levantada por hardware, lenguaje, API y metodología? ¿O encontrará una manera de armonizar lo que desea lograr con lo que está permitido y alentado?

¿ Realmente crees que tu instructor desea leer interminables páginas de minucias? Luego pruebe esa teoría: divida un programa y documente cada átomo. Cuando su escritorio se hunde bajo el peso, sospecho que descubrirá que su verdadero deseo es algo diferente de lo que espera.

O prepare la documentación como mejor le parezca. Que quede claro, que sea comprensible, que se lea como una novela de Dashiell Hammett. Y luego siéntate y habla con él, muéstrale lo que has hecho, convencerlo de su mérito.

Shog9
fuente
1

Creo que el instructor es brillante por hacerte hacer este proyecto, y por lo tanto, enseñarte los pros y los contras (en su mayoría) del desarrollo de Waterfall.

afeygin
fuente
1

Una simple regla general para medir la complejidad del análisis del proyecto es "¿Puede el desarrollador o la empresa para la que trabaja puede ser responsable de que ocurra algo bastante dramático (que generalmente incluye la muerte o una gran cantidad de dinero perdido) con el software creado?".

Tuve la misma experiencia que tú en algunos de mis cursos. Las personas que tenían experiencia en la industria militar nos enseñarían análisis. Y eso sería un análisis completo y exhaustivo, planeando todo el curso del proyecto, incluso en los detalles más pequeños. No puede permitirse muchas iteraciones con este tipo de proyecto (también la explosión de bombas puede estar bien, la explosión de presupuesto no lo está), por lo que no hay lugar para la creatividad aquí, debe seguir el plan.

Por otro lado, si has leído un poco, ciertamente has leído sobre metodologías ágiles. Generalmente hay menos documentación y más espacio para que el desarrollador use su creatividad mientras desarrolla una solución al problema que encuentra.

En conclusión, cuanta más experiencia obtenga, mejor, y lo que su instructor le muestre se aplica en alguna parte de la industria. Solo tenga en cuenta que ciertamente hay tantas formas de administrar y diseñar un proyecto como codificarlos. Y encontrarás defensores y críticos para todos ellos. Pruébalos mientras estudias y elige el que más te guste.

Matthieu
fuente
Y tenga cuidado con "¿Puede matar a las personas si se cuelga?", Hay otro tipo llamado "¿Alguien puede ir a la cárcel si imprime datos incorrectos?" requisitos, hasta el más mínimo detalle.
Christopher Mahan
@ Christopher: ajusté mi respuesta en consecuencia, gracias por el comentario :)
Matthieu
0

Algunas clases de ingeniería de software, como la que tuve, se imparten en un estilo extraño donde 'el fracaso es el éxito', el éxito es una oportunidad desperdiciada para aprender del fracaso, y más es menos y menos es más. Si este es uno de esos, simplemente quédese con las tareas y disfrute de la rareza.

Trabajo
fuente
0

Creo que tu instructor está fuera de contacto. El software comercial rara vez se diseña o documenta hasta ese punto. Es demasiado costoso y la documentación resultante no se puede mantener sin más gastos. En mi opinión, tales prácticas son un legado de los días en que la codificación a menudo se realizaba en lenguaje ensamblador. Habría gastado mejor su tiempo probando prácticas más ágiles: desarrollo basado en pruebas, programación de pares, refactorización continua.

¿El instructor "te dijo mal"?

Creo que sí.

Asignar trabajo aburrido a los trabajadores de propiedad intelectual es un desperdicio. En la escuela, el trabajo aburrido tiene poco o ningún valor pedagógico, excepto tal vez para atraer a los estudiantes al trabajo aburrido. Dichos ejercicios tienen consecuencias negativas, tanto para los estudiantes como para la industria. Los estudiantes se ven perjudicados porque pierden su tiempo. La industria se ve perjudicada porque algunos estudiantes pueden concluir que dicho tedio es necesario y útil. No es ninguno. En treinta años en software, el único trabajo que puedo pensar que fue aburrido y útil fue cambiar las cintas de respaldo. Había robots que podían hacer eso, pero eran prohibitivamente caros.

Kevin Cline
fuente
2
Me atrevo a decir que nunca has trabajado para una empresa que gana dinero con contratos gubernamentales. (editar) Usted dijo Software comercial ... Mi afirmación no tiene sentido ahora.
Andrew T Finnell
@ Andrew Finnel: La verdad es muy dolorosa, en muchos niveles.
Peter Rowell el
2
@ Andrew - He trabajado para DOD2167. Fue horrible e improductivo como se practicaba. Más tarde trabajé para otra compañía que está haciendo un desarrollo ágil para el gobierno con entregas frecuentes. El cliente está muy contento. Tenían una aplicación útil en seis meses y obtienen nuevas funciones trimestralmente.
Kevin Cline
@ Andrew Tengo más de 2 años de experiencia en el trabajo del Departamento de Defensa de los EE. UU., Como empleado del gobierno y como contratista. Se están adoptando métodos ágiles. Un equipo en el que trabajé estaba usando activamente Scrum, produciendo "suficiente" documentación "justo a tiempo". Sí, la documentación (incluso la documentación "suficiente") es significativamente más extensa que en muchos otros lugares, pero eso generalmente depende de la cantidad de partes involucradas (los contratos pueden cambiar de manos, otras partes pueden desarrollar otros sistemas, etc.) y / o La seguridad o la importancia vital de los sistemas que se están desarrollando.
Thomas Owens
2
@ Andrew no son solo los gobiernos. He visto 40 páginas de especificaciones para "productos"; normalmente puede seleccionar todo de esta tabla y darme la tubería delimitada por favor. Nadie puede molestarse en leerlos ...
Ben