PDF de programación - El camino a un mejor programador

Imágen de pdf El camino a un mejor programador

El camino a un mejor programadorgráfica de visualizaciones

Publicado el 24 de Abril del 2017
2.126 visualizaciones desde el 24 de Abril del 2017
1,5 MB
46 paginas
Creado hace 7a (19/01/2013)
El camino a un mejor programador

Índice general

Licencia

Agradecimientos

Prólogo

Lecciones de aprender un lenguaje funcional

Documentación activa

Siete problemas al probar programas

Calidad en software

Integración continua

Desarrollo dirigido por pruebas

Bibliografía

III

1

2

3

5

12

17

26

29

33

43

El camino a un mejor programador

1 / 44

Licencia

Esta obra se distribuye bajo la licencia Creative Commons Reconocimiento-CompartirIgual 3.0. Esto significa que usted puede:

copiar, distribuir y comunicar públicamente la obra

remezclar: transformar la obra

hacer un uso comercial de esta obra

Bajo las condiciones siguientes:

Reconocimiento: debe reconocer los créditos de la obra de la manera especificada por el autor o el licenciador (pero no de una
manera que sugiera que tiene su apoyo o apoyan el uso que hace de su obra).

Compartir bajo la misma licencia: si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra
generada bajo una licencia idéntica a ésta.

Entendiendo que:

Renuncia: alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor

Dominio público: cuando la obra o alguno de sus elementos se halle en el dominio público según la ley vigente aplicable, esta
situación no quedará afectada por la licencia.

Otros derechos: los derechos siguientes no quedan afectados por la licencia de ninguna manera:

• Los derechos derivados de usos legítimos u otras limitaciones reconocidas por ley no se ven afectados por lo anterior.
• Los derechos morales del autor;
• Derechos que pueden ostentar otras personas sobre la propia obra o su uso, como por ejemplo derechos de imagen o de

privacidad.

Aviso: al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra.

El camino a un mejor programador

2 / 44

Agradecimientos

A todos aquellos que ayudaron de una manera u otra en la creación de este libro, con consejos, apoyo o ideas. Las siguientes
personas se merecen una mención especial:

Sara Pettersson, por la portada

Mario Hernández, por el prólogo

Carlos Ble, por ayudar con la revisión de varios artículos y por sus ideas y consejos

Juanje Ojeda, por sus ideas y empuje iniciales

El camino a un mejor programador

3 / 44

Prólogo

Se cuenta que una vez le preguntaron a Miguel Ángel cómo había procedido para esculpir el David. Su respuesta fue que lo que
había hecho era, simplemente, eliminar del bloque de piedra original todo lo que sobraba. Independientemente de la verosimilitud
de esta anécdota, podemos encontrar en ella la enseñanza de una actitud a tomar para abordar problemas prácticos de desarrollo
en ingeniería.
Si la pregunta se le hiciese a un escultor que modelase en barro la respuesta equivalente sería, posiblemente, que lo que había
hecho era rellenar el espacio disponiendo el barro estrictamente necesario en las zonas adecuadas. Estas dos respuestas se refieren
a dos aproximaciones para abordar procesos constructivos: la sustractiva, natural en la escultura en piedra, en la que se eliminan
elementos de una solución primigenia hasta que se cumple con las restricciones de la solución definitiva, y la aditiva en la que se
aborda el problema partiendo de una solución inicial vacía, añadiendo elementos según ciertos criterios con el fin de conseguir
que la solución final cumpla los objetivos de diseño. Estas dos son aproximaciones extrapolables a otras disciplinas y en general,
en muchos otros casos, la solución se alcanza con aproximaciones mixtas, en las que se opera con acciones aditivas y sustractivas
combinadas.
El desarrollo de software es una disciplina práctica relativamente nueva que tiene poco más de medio siglo de existencia, pero que
conceptualmente es hija de las disciplinas clásicas constructivas englobadas bajo el paraguas de las ingenierías y la arquitectura.
De ellas hereda una de las habilidades que necesita un buen informático; la de resolver problemas. Por ella me refiero a la
capacidad, en palabras de Allen Downey, el autor de «Think Python. How to Think Like a Computer Scientist», para formular
problemas, pensar en soluciones de manera creativa, y expresarlas de forma clara y precisa. A esto se debe probablemente mucha
de la genialidad de Miguel Ángel.
Volviendo a las disciplinas clásicas de la ingeniería y la arquitectura, el objetivo de estas no es el de las ciencias clásicas de carácter
analítico, es decir, no intenta entender, explicar y describir algo ya existente como lo hacen la física, la química o la biología, sino
más bien sintético, es decir, orientado a desarrollar y construir cosas nuevas que satisfagan un objetivo expresado normalmente por
la función definida a priori que debe cumplir el resultado. En este ámbito, el conocimiento acerca de cómo realizar bien las tareas
de desarrollo de nuevas soluciones es un trabajo de destilación que se produce en ciclos de vida resumibles en «observación-
análisis-propuestas de solución-realización práctica-evaluación de resultados-refinamiento, para alcanzar el nivel de aceptación-
corrección para iniciar de nuevo el ciclo o descarte de la propuesta» según corresponda. Estos procesos se realizan iterativamente
en el tiempo, constituyendo la fuente del conocimiento práctico del saber hacer de la disciplina y que se terminan expresando
como recetas metodológicas y conjuntos de buenas prácticas para ejecutar los proyectos y tareas futuros. Su fin es llevar esos
proyectos a buen término en forma de una solución que sea eficiente y efectiva y cumpla las restricciones impuestas al mínimo
coste de realización posible medido en horas-hombre. Este proceso es análogo, de nuevo, a los desarrollos de la ingeniería y
la arquitectura primigenia, donde los constructores y albañiles desarrollaban su conocimiento y metodologías de forma práctica
enfrentándose a retos y problemas nuevos. Ello permitió, por ejemplo, construir las grandes obras de ingeniería civil durante la
época de esplendor de Roma, como es el caso de los acueductos, palacios o coliseos, o la gran arquitectura revolucionaria de las
catedrales de estilo gótico. Esas construcciones fueron productos pero también retos, que permitieron desarrollar conocimiento
y metodologías que se explotaron y depuraron durante siglos.
La realización de proyectos en disciplinas sintéticas es pues una combinación virtuosa de la concepción y uso de las herramientas
adecuadas para el desarrollo, con el conocimiento, las habilidades con esas herramientas y procesos y la experiencia disponible
en la mente de quienes los ejecutan, que se manifiesta en la capacidad de resolución de problemas y se expresa como recetas
metodológicas y conjuntos de buenas prácticas para llevar a buen fin los proyectos por parte de equipos de personas cualificadas.
Una buena ingeniería o una buena arquitectura podrían entenderse en el sentido de Miguel Ángel como las disciplinas que tienen
por objetivo el uso adecuado del conjunto de herramientas, conocimiento y habilidades combinados con una metodología que
permite construir lo nuevo que se propone cumpliendo los objetivos de diseño, buscando quedarnos con lo estrictamente necesario
en sentido constructivo y eliminando lo superfluo.

El camino a un mejor programador

4 / 44

¿Cuál es la diferencia entre el desarrollo de proyectos de programación y el desarrollo de proyectos de ingeniería o arquitectura
más o menos convencionales? Pues, conceptualmente el único conjunto de diferencias surge, básicamente, de la naturaleza del
objeto de trabajo. En el caso de los últimos, el objeto lo constituyen tangibles físicos, mientras que en el caso del primero,
el objeto es fundamentalmente un intangible: todo lo relacionado con la información y sus transformaciones. Además, por la
naturaleza de su resultado y al contrario que en otras disciplinas constructivas, el objeto de la ejecución de proyectos software
no está sometido a ley física alguna, excepto la que regula la entropía. De hecho, una gran parte de la actividad metodológica
en el desarrollo de proyectos está dirigida a luchar contra la degradación y el desorden. Esta situación es la que establece la
particularidad de la ejecución de proyectos software como cuerpo disciplinar, y es la que delimita el territorio sobre el que se
tienen que desarrollar herramientas, conocimiento y metodologías.
Este libro pretende ser una aportación a la recopilación y la transmisión del conocimiento y la experiencia de un grupo de buenos
y experimentados programadores profesionales en el desarrollo de proyectos de programación. Constituye pues un documento
valioso para aquellas personas interesados en el mundo profesional del software.
Un valor interesante del libro reside en que se dedica a temas que no suelen formar parte del flujo de conocimientos que se mane-
jan usualmente en los procesos de formación básica de los desarrolladores e ingenieros de software, como son los que aparecen
en el índice de este documento: el desarrollo de software bajo el paradigma de programación funcional, la documentación activa,
la prueba de programas, la calidad del software o los procesos de integración continua. Más bien podemos entenderlo como un
texto que intenta servir como transmisor de conocimiento experto desde quienes tienen años de experiencia profesional en el
campo y se dirige hacia un amplio espectro de informáticos, tanto experimentados en otros saberes, como noveles en estos temas.
En este sentido constituye una obra de valor en los ámbitos que le compete.
Espero y confío en que esta contribución sirva para los fines que se propusieron sus autores y resulte de utilidad para sus lectores.
Mario Hernández
Catedrático de Universidad en Ciencias de la Computación e Inteligencia Artificial
Las Palmas de Gran Canaria, octubre de 2012

El camino a un mejor programador

5 / 44

Lecciones de aprender un lenguaje funcional

Esteban Manchado Velázquez
Los lenguajes funcionales son una familia de lenguajes que la mayoría de lo
  • Links de descarga
http://lwp-l.com/pdf3165

Comentarios de: El camino a un mejor programador (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad