More on this book
Kindle Notes & Highlights
tener cuidado con cosas que consideramos imposibles de alcanzar,
experto en People Management
adquirir un compromiso con nosotros mismos para llevar a cabo unas acciones cuyo beneficiario seremos nosotros mismos.
analizar la situación actual en la que nos encontramos y la situación deseada en la que nos gustaría encontrarnos una vez hayamos podido conseguir nuestros objetivos.
describamos claramente estos dos estados y que nos marquemos un plazo temporal
nos desafía a lograr las metas
definir una serie de tareas que contribuirán a su consecución. Estas tareas tienen que representar algo que realmente podamos hacer nosotros mismos,
poner puntos de verificación intermedia, que pueden ayudarnos a ver cómo vamos y, si es necesario, a recalibrar las tareas.
estimar lo que nos va a costar en tiempo y quién va a ser quien nos dé información sobre cómo lo estamos haciendo
es muy importante que contrastemos lo que recibimos con nuestra percepción personal:
un curso de formación vamos de asistentes más o menos activos, sin tener muy claro qué partes del curso nos beneficiarán más, qué partes menos.
el plan de desarrollo individual nos comprometemos en ir aprendiendo mediante el trabajo en tareas concretas que realmente consideramos que facilitarán la consecución de nuestros objetivos.
dueños absolutos de nuestras tareas, que podamos llevarlas a cabo de forma bastante autónoma y no dependamos de terceras partes cuyo rol quede poco definido.
Si durante la ejecución nos damos cuenta que un objetivo ya está conseguido o que otro objetivo no lo vamos a poder abarcar, en la siguiente reunión de seguimiento podemos modificar nuestro plan consensuándolo con nuestro People Manager.
sentimos que hemos realizado todo el esfuerzo posible para acometerlos. También éste es un ejercicio de aprendizaje, y lo que nos queda pendiente lo vamos a tener en cuenta de cara al siguiente plan que preparemos.
“Visualiza tus objetivos”.
La finalidad de un SCM es la de servir como punto de gestión de versiones relativamente estables, atómicas y completas del código.
únicamente los cambios de código que pasan un cierto grado de medidas de calidad deben ser subidos al repositorio.
servir de historial de los cambios realizados en el código.
quién introdujo una determinada funcionalidad y cuándo lo hizo, cuándo se arregló un bug o problema, o cuántas veces se ha r...
This highlight has been truncated due to consecutive passage length restrictions.
cuatro (o más) ojos ven mejor que dos
las revisiones de código. Se trata de uno de los procesos más importantes a la hora de desarrollar software correcto y mantenible, y consiste en solicitar a uno o más miembros del equipo que revisen el código escrito.
pre-commit y post-commit.
las revisiones pre-commit tratan de identificar posibles bugs, aspectos que se podrían mejorar, inconsistencias en la arquitectura o el estilo de código, duplicidades,
compartir el conocimiento del código entre los distintos miembros del equipo,
las revisiones pre-commit introducen todas las ventajas del proceso de peer-reviewing (revisión en grupo). Esto es habitual en las publicaciones científicas y la programación extrema.
facilita la tarea de tener commits controlados en las fases de estabilización del código.
El ciclo de vida: estabilizar para triunfar
Es importante que haya una o varias fases dedicadas a la estabilización del código, donde el objetivo es tratar de resolver problemas o fallos sin introducir funcionalidad nueva.
El objetivo final de los procesos descritos en este documento es conseguir un ciclo de vida estricto con fases de desarrollo bien diferenciadas que permitan crear software estable y mantenible
la programación funcional te hace más fuerte
la programación funcional es una herramienta útil en el cinturón del programador imperativo aunque no se utilicen lenguajes funcionales
lenguajes como LISP y ML,
estilo de programación en el que la transparencia referencial permite explotar los poderosos medios de composición que son el orden superior y la evaluación perezosa.
transparencia referencial
las expresiones se puedan sustituir por su valor. En el caso de las funciones, éstas sólo dependerán de sus argumentos y que no tendrán más efecto que generar su valor devuelto. De lo con...
This highlight has been truncated due to consecutive passage length restrictions.
es posible reemplazar la evaluación impaciente por otras estrategias como la evaluación perezosa en la que sólo se realizan los cálculos si el valor es realmente consumido y otras opciones más exóticas como la ejecución concurrente.
Haskell,
Estructuras de datos persistentes
transparencia referencial a una estructura de datos lo que obtenemos son valores constantes o inmutables ya que no hay forma de modificar su estado una vez construidos.
El orden superior que consiste en utilizar las funciones como ciudadanos de primera clase que pueden ser almacenadas en variables, pasadas como argumento o devueltas como resultado.
La versatilidad del orden superior puede constatarse comprobando que muchos de los patrones GoF1 se implementan de forma trivial mediante este mecanismo.
Strategy, Factory Method, Template Method, y Abstract Factory pueden ser directamente reemplazados por simples funciones
Uno de los principales beneficios de la PF es que habilita nuevas formas de composición que conducen a módulos más pequeños y más poderosos.
definir una biblioteca de funciones que encapsulen patrones típicos como transformar todos los elementos de una secuencia en otra (map), filtrar según un determinado predicado (filter) o realizar agregados (fold, sum). La clave radica en que estas funciones toman como argumento tanto las secuencias a manipular como funciones que modifican su comportamiento y que el resultado es componible de nuevo.
facilidad para razonar sobre el código y sus relaciones, uno de los temas de fondo de las arquitecturas software.
“locura es hacer la misma cosa una y otra vez esperando obtener diferentes resultados",
la transparencia referencial reduce dramáticamente el coste de creación y mantenimiento de suites de tests a todos los niveles.
un diseño con transparencia referencial tiene la ventaja de que las dependencias de datos entre funciones son explícitas y que su ejecución se puede realizar en paralelo sin mayor problema puesto que no es posible que haya dependencias ocultas. Además, las estructuras de datos inmutables presentan la ventaja de poder ser compartidas sin necesidad de establecer secciones críticas ni otros mecanismos de coordinación.
el orden superior está presente en cada vez más lenguajes y su ausencia se puede suplir por medio de interfaces o clases plantilla. Por otro lado, la transparencia referencial se puede conseguir evitando las asignaciones y otros efectos laterales como decisión de diseño y la evaluación perezosa es posible con algo más de infraestructura con construcciones como generadores e iteradores.

