Aunque no es una idea nueva, parece haber habido un gran aumento en el interés en la artesanía del software en los últimos años (en particular, el título completo del libro Clean Code, a menudo recomendado, es Clean Code: A Handbook of Agile Software Craftsmanship ).
Personalmente, veo la artesanía del software como una buena ingeniería de software con un interés adicional en garantizar que el resultado final sea un placer trabajar con él (tanto como usuario final y como alguien que mantiene ese software), y también que su enfoque está más en el nivel de codificación de cosas que las cosas de proceso de nivel superior.
Para establecer una analogía: había muchos edificios construidos en los años 50 y 60 en un estilo muy moderno que tenía muy poca cuenta de las personas que vivirían en ellos o cómo esos edificios envejecerían con el tiempo. Muchos de esos edificios se convirtieron rápidamente en barrios marginales o han sido demolidos mucho antes de su vida útil esperada. Estoy seguro de que la mayoría de los desarrolladores con algunos años bajo sus cinturones habrán experimentado bases de código similares.
¿Cuáles son las cosas específicas que un artesano de software podría hacer que un ingeniero de software (posiblemente uno malo) podría no hacer?
fuente
Respuestas:
Yo diría que la única diferencia entre un profesional y un artesano es cuidar con un poco de pasión mezclada . No existe una práctica específica y observable que clasifique a uno como artesano, sino más bien una colección de cualidades:
Un poco de pasión cubre todo esto sin sudar.
fuente
Como dijo un profesor mío una vez (parafraseado): "Como ingeniero de software, no es solo su trabajo entregar software. Es su trabajo entregar software que haga felices a sus clientes".
Nada, un ingeniero es un artesano ... pero más. La ingeniería se basa en la artesanía.
Como artesano e ingeniero, ustedes son individuos calificados, a través de una combinación de educación y experiencia. Sigue los procedimientos establecidos. También eres pragmático y te das cuenta de lo que está roto y necesita ser mejor.
Sin embargo, un ingeniero agrega preocupaciones de economía, teoría y ciencia además de eso. Le preocupa obtener el mayor beneficio al menor costo. Desea aplicar teorías de psicología, sociología, gestión, interacciones humano-computadora y ciencias de la computación para resolver sus problemas (tanto interpersonales como técnicos). Y definitivamente tienes una educación para respaldar tus experiencias.
fuente
El movimiento de la artesanía del software se inició en reacción a las fallas y los resultados insatisfactorios de la ingeniería de software "tradicional" que (junto con el descuido de algunos desarrolladores) hoy en día llevan a la desconfianza de las partes interesadas y los usuarios hacia nuestra profesión.
Su objetivo es doble: restaurar la confianza en los programadores y, para hacerlo, elevar el nivel de calidad del software y las habilidades de los desarrolladores.
La artesanía de Sw promueve prácticas técnicas como:
Y prácticas de equipo / organización:
Entonces, diría que la diferencia entre los 2 es clara: la artesanía del software intenta abordar una gran parte de los problemas que ha tenido la ingeniería del software en más de 40 años de existencia que hoy hacen que nuestra disciplina parezca poco confiable y esté paralizada con una historia de fallas.
fuente
Yendo a http://manifesto.softwarecraftsmanship.org/ derivaría lo siguiente.
Un artesano es diferente de las percepciones tradicionales de un "ingeniero" porque
fuente
El tío Bob de alguna manera insinuó que la programación es una disciplina muy joven que aún no tiene un cuerpo estable de leyes o reglas reconocidas por los gobiernos (¿o fue Frederick Brooks?). No estoy haciendo una cita literal aquí.
No puede revocar a nadie el permiso para programar debido a mala práctica. La programación carece de un conjunto de leyes y reglas que sean legalmente aplicadas por la legislación que conforma una "profesión". Un médico mata a un paciente debido a su incompetencia y se arriesga a que se le quite el título o permiso de su médico.
Un programador hace un programa defectuoso o hace que un proyecto falle debido a la incompetencia y es libre de continuar la programación.
Creo que eso es más o menos lo que hace que la programación sea un oficio. Un fabricante de ollas de barro no hace dos ollas idénticas. Tampoco has oído hablar de un fabricante de vasijas de barro obligado a retirar ollas defectuosas. La programación sigue siendo un tipo de trabajo muy manual y personal. A veces incluso se puede saber quién escribió una pieza de código a juzgar por el estilo de la misma.
fuente
Refactorización a patrones.
Es decir, cree algo que satisfaga el 90% de los requisitos de software, luego refactorice todo el proyecto en un diseño limpio y elegante.
Normalmente, la ingeniería de software le impediría hacer esto, porque cumplir el 90% de los requisitos significa que el software tiene suficiente valor comercial para el cliente que no debe modificarse de manera significativa (excepto las correcciones de errores de alta prioridad).
La ingeniería de software le recomendaría estabilizar el software en este punto.
Además, si un proyecto no comienza con ese diseño elegante desde el principio, se consideraría un proyecto mal ejecutado (independientemente del resultado del proyecto), según la ingeniería de software.
Solución de espiga.
Un diseño inspirado en una solución de punta normalmente no es aceptable de acuerdo con la metodología de ingeniería de software vigente.
Desprecio , por cualquier razón.
En ingeniería de software, se permite que ocurra cualquier tipo de desaprobación solo al final del ciclo de vida de un sistema de software. Esto debe planificarse como parte del SDLC.
En la práctica, es bastante común que las deficiencias de una parte específica de la interfaz del software se descubran unos años después de la producción, y esa parte específica se puede desaprobar en la mitad del ciclo de vida, sin invalidar el resto del software. Esto habría requerido una nueva certificación de todo el sistema de software después de la depreciación, de acuerdo con la ingeniería de software.
Al final, la artesanía del software es un esfuerzo personal para el buen juicio de los individuos, mientras que la ingeniería del software es un cuerpo de conocimiento conservador. Permitir ese buen juicio en la toma de decisiones del proyecto es lo que separa la artesanía del software de la ingeniería del software.
fuente
Yo diría que tener pruebas unitarias que cubran el 100% del código sería una buena opción. Como eso permite que se elimine el exceso de material.
A veces comparo el desarrollo de software con la escultura. No es lo que agregas, es lo que quitas.
Obviamente puedes llevar eso demasiado lejos. Nadie va a decir que una pequeña piedra brillante es una buena escultura: S
fuente