El programador pragmático. Edición especial
Autor/a : David Thomas, Andrew Hunt
"Uno de los libros más significativos de mi vida".-OBIE FERNANDEZ, autor de The Rails Way
"Hace veinte años, la primera edición de El programador pragmático cambió por completo la trayectoria de mi carrera. Esta edición podría hacer lo mismo por la suya".-MIKE COHN, autor de Succeeding with Agile, Agile Estimating and Planning y User Stories Applied
"... lleno de consejos prácticos, tanto técnicos como profesionales, que le servirán a usted y a sus proyectos durante muchos años".-ANDREA GOULET, CEO de Corgibytes y fundadora de LegacyCode.Rocks
"... un rayo puede caer dos veces en el mismo sitio, y este libro es la prueba".-VM (VICKY) BRASSEUR, directora de Open Source Strategy, Juniper Networks
Índice
Prólogo Prefacio de la segunda edición Del prefacio de la primera edición 1. Una filosofía pragmática 1. Es su vida 2. El gato se comió mi código fuente - Confianza del equipo - Asuma la responsabilidad 3. Entropía del software - Primero, no haga daño 4. Sopa de piedras y ranas hervidas - El lado de los aldeanos 5. Software lo bastante bueno - Implique a sus usuarios en la compensación - Saber cuándo parar 6. Su cartera de conocimientos - Su cartera de conocimientos - La creación de su cartera - Objetivos - Oportunidades para el aprendizaje - Pensamiento crítico 7. ¡Comuníquese! - Conozca a su público - Sepa lo que quiere decir - Elija el momento - Elija un estilo Dele un buen aspecto Involucre a su público Sepa escuchar Responda a la gente Documentación Resumen 2. Un enfoque pragmático 8. La esencia del buen diseño - ETC es un valor, no una regla 9. DRY: los males de la duplicación - DRY es más que código - Duplicación en el código - Duplicación en la documentación - Duplicación relativa a la representación 10. Ortogonalidad - ¿Qué es la ortogonalidad? - Beneficios de la ortogonalidad - Diseño - Herramientas y bibliotecas - Creación de código - Pruebas - Documentación - Vivir con ortogonalidad 11. Reversibilidad - Reversibilidad - Arquitectura flexible 12. Balas trazadoras - Código que brilla en la oscuridad - Las balas trazadoras no siempre dan en el blanco - Código trazador versus creación de prototipos 13. Prototipos y notas en post-its - Cosas para las que puede crear prototipos - Cómo utilizar prototipos - Crear prototipos de arquitectura - Cómo no utilizar prototipos 14. Lenguajes de dominio - Algunos lenguajes de dominio del mundo real - Características de los lenguajes de dominio - Compensaciones entre lenguajes internos y externos - Un lenguaje de dominio interno de bajo coste 15. Estimaciones - ¿Cuánta exactitud es suficiente exactitud? - ¿De dónde vienen las estimaciones? - Estimar el calendario de los proyectos - Qué decir cuando le pidan una estimación 3. Las herramientas básicas 16. El poder del texto simple - ¿Qué es el texto simple? - El poder del texto - Mínimo común denominador 17. Jugar con el intérprete de comandos - Su propio intérprete de comandos 18. Edición potente - ¿Qué significa "fluidez"? - Avanzar hacia la fluidez 19. Control de versiones - Empieza en la fuente - Ramificaciones - Control de versiones como centro de proyectos 20. Depuración - Psicología de la depuración - Mentalidad de la depuración - Por dónde empezar - Estrategias de depuración - Programador en tierras extrañas - La búsqueda binaria - El elemento sorpresa - Lista de comprobación de depuración 21. Manipulación de texto 22. Cuadernos de bitácora de ingeniería 4. Paranoia pragmática 23. Diseño por contrato - DBC - Implementar DBC - DBC y fallo total temprano - Invariantes semánticas - Contratos dinámicos y agentes 24. Los programas muertos no mienten - La captura y liberación es para la pesca - Fallo total, no basura 25. Programación asertiva - Aserciones y efectos secundarios - Deje las aserciones activadas 26. Cómo equilibrar los recursos - Anidar asignaciones - Objetos y excepciones - Equilibrio y excepciones - Cuando no podemos equilibrar los recursos - Comprobar el equilibrio 27. No vaya más rápido que sus faros - Cisnes negros 5. O se adapta o se rompe 28. Desacoplamiento - Train Wrecks - Los males de la globalización - La herencia añade acoplamiento - De nuevo, todo tiene que ver con el cambio 29. Malabares con el mundo real - Eventos - Máquinas de estados finitos - El patrón Observer - Publish/Subscribe - Programación reactiva, streams y eventos - Los eventos son ubicuos 30. Transformar la programación - Encontrar transformaciones - ¿Por qué es esto tan genial? - ¿Qué pasa con el manejo de errores? - Las transformaciones transforman la programación 31. Impuesto sobre la herencia - Algo de historia - Problema de usar la herencia al compartir código - Las alternativas son mejores - La herencia rara vez es la respuesta 32. Configuración - Configuración estática - Configuración como servicio - No escriba código dodo 6. Concurrencia Todo es concurrente 33. Romper el acoplamiento temporal - Buscar la concurrencia - Oportunidades para la concurrencia - Oportunidades para el paralelismo - Identificar oportunidades es la parte fácil 34. Estado compartido es estado incorrecto - Actualizaciones no atómicas - Transacciones de recursos múltiples - Actualizaciones no transaccionales - Otros tipos de accesos exclusivos - Doctor, me hago daño. . . 35. Actores y procesos - Los actores solo pueden ser concurrentes - Un actor simple - Sin concurrencia explícita - Erlang prepara el escenario 36. Pizarras - Una pizarra en acción - Los sistemas de mensajería pueden ser como pizarras - Pero no es tan simple... 7. Mientras escribe código 37. Escuche a su cerebro reptiliano - Miedo a la página en blanco - Luche contra sí mismo - Cómo hablar lagarto - ¡Hora de jugar! - No solo su código - No solo código 38. Programar por casualidad - Cómo programar por casualidad - Cómo programar de forma deliberada 39. Velocidad de los algoritmos - ¿Qué queremos decir con estimar algoritmos? - Notación Big O - Estimación con sentido común - Velocidad de los algoritmos en la práctica 40. Refactorización - ¿Cuándo deberíamos refactorizar? - ¿Cómo refactorizamos? 41. Probar para escribir código - Pensar en las pruebas - Escritura de código guiada por pruebas - TDD: necesita saber adónde va - De vuelta al código - Pruebas unitarias - Pruebas en relación con el contrato - Pruebas ad hoc - Construya una ventana de pruebas - Una cultura de pruebas 42. Pruebas basadas en propiedades - Contratos, invariantes y propiedades - Generación de datos de prueba - Encontrar asunciones malas - Las pruebas basadas en propiedades nos sorprenden a menudo - Las pruebas basadas en propiedades también ayudan al diseño 43. Tenga cuidado ahí fuera - El otro 90 % - Principios de seguridad básicos - Sentido común vs. criptografía 44. Poner nombre a las cosas - Respetar la cultura - Coherencia - Cambiar nombres es aún más difícil 8. Antes del proyecto 45. El pozo de los requisitos - El mito de los requisitos - Programar como terapia - Los requisitos son un proceso - Póngase en la piel del cliente - Requisitos frente a política - Requisitos frente a realidad - Documentar requisitos - Sobreespecificación - Solo una cosita más... - Mantenga un glosario 46. Resolver rompecabezas imposibles - Grados de libertad - ¡No se estorbe a sí mismo! - La suerte favorece a la mente preparada 47. Trabajar juntos - Programación en pareja - Programación en grupo - ¿Qué debería hacer? 48. La esencia de la agilidad - Nunca puede haber un proceso ágil - Entonces, ¿qué hacemos? - Y esto dirige el diseño 9. Proyectos pragmáticos 49. Equipos pragmáticos - Sin ventanas rotas - Ranas hervidas - Planifique su cartera de conocimientos - Comunique la presencia del equipo - No se repitan - Balas trazadoras en equipos - Automatización - Saber cuándo dejar de añadir pintura 50. Los cocos no sirven - El contexto importa - La talla única no le queda bien a nadie - El objetivo real 51. Kit pragmático básico - Dirija con el control de versiones - Pruebas despiadadas y continuas - Reforzar la red - Automatización completa 52. Deleite a sus usuarios 53. Orgullo y prejuicio Posfacio Bibliografía Posibles respuestas a los ejercicios Índice alfabético