Mucha gente en la comunidad de codificación habla sobre la mejora continua, la práctica deliberada y demás, pero cuando hablan de sus prácticas actuales es casi como si 'surgieran completamente de los lomos de Zeus' porque no escuchas cómo sus opiniones cambiaron con el tiempo o lo que aprendieron recientemente.
De vez en cuando voy a una charla, leo un libro o hablo con alguien y se abren un poco más y descubro que aprendo mucho de estas ideas.
Entonces, si tuviera que elegir una cosa de los últimos 12 meses que aprendió, ¿cuál sería?
learning
self-improvement
FinnNk
fuente
fuente
Después de aprender algo de Clojure , comencé a darme cuenta de la utilidad de la programación funcional , y mi estilo de codificación Java se ha visto muy afectado por eso. Contrariamente a la creencia popular, un lenguaje de programación funcional no es un prerrequisito absoluto para realizar alguna programación funcional.
Es posible incorporar bastantes elementos de programación funcional en un lenguaje imperativo como Java, e incluso si no siempre es idiomático, puede ser muy beneficioso en algunos problemas. Por ejemplo, las clases anónimas son aproximadamente iguales a los cierres, como se describe en wikipedia . La evaluación perezosa debería ser una norma más que algo inusual. La inmutabilidad difícilmente puede ser utilizada en exceso. Simplemente supere la idea (casi) obsoleta de que construir nuevos objetos en lugar de mutar los existentes es costoso debido al consumo de GC y montón: en el 99.9% de los casos simplemente no es relevante. De hecho, el procesamiento paralelo puede voltear incluso el argumento de la eficiencia al revés: crear nuevos objetos inmutables puede ser más barato que mutar los existentes, porque se elimina el bloqueo.
Más información sobre cómo hacer FP en Java puro aquí , aquí , aquí y aquí .
fuente
Incluso si tiene un equipo excelente y una administración competente para ese equipo, su trabajo aún no es seguro. La alta gerencia aún puede hacer cosas tontas, como disolver toda su Dirección.
En resumen: la política importa y, a veces, la política que te afecta no puedes controlarla.
fuente
Aprendí que el propósito de las pruebas de software es encontrar errores . Es no para verificar que el sistema es correcta.
Hay importantes factores psicológicos en juego: si su objetivo es demostrar que el programa es "correcto", gravitará hacia las pruebas que sabe que pasarán. Pero si su objetivo es encontrar errores, gravitará hacia las pruebas que realmente llevarán su sistema a los límites.
Incluso hay un cambio importante en el idioma que usa. Si una prueba encuentra un error, lo llamas exitoso . Si la prueba no lo hace [es decir, el programa pasa], usted lo llama fallido . Me sorprendí siguiendo las líneas del pensamiento de "verificación", y eso hace una gran diferencia.
Este efecto psicológico se discute más en The Art of Software Testing , un libro clásico que recomiendo encarecidamente. El autor, Myers, también recomienda que quien esté probando un programa no sea el autor, ni siquiera en la misma cadena de administración. Puede hacer esto si está codificando por su cuenta, por lo que requiere disciplina.
fuente
Hacer un desarrollo impulsado por la prueba desde el principio en una entrega al cliente para ver cómo afectaría la calidad del código, y solo se ejecuta desde el iniciador JUnit en Eclipse. Resultó en un mejor producto.
fuente
El verdadero valor de la programación sin ego.
En algún nivel, siempre supe que el ego y la programación no se mezclan, pero nunca razoné las consecuencias. La idea de que tienes que revisar activamente y encontrar fallas en tus propias prácticas es algo que recién comencé a darme cuenta el año pasado. También estoy aprendiendo a buscar activamente críticas de mis diseños (tanto en la interfaz de usuario como en el código).
Sin embargo, para ser honesto, todavía estoy aprendiendo a dejar caer el ego, y probablemente aprenderé a hacerlo durante el resto de mi carrera de programación.
fuente
Aquí está mi respuesta a mi propia pregunta:
Hace aproximadamente un año, hizo clic en que las pruebas de aceptación automatizadas no debían ser versiones automatizadas de las pruebas que nuestros evaluadores habrían hecho manualmente. Centrarse en las pruebas según especificaciones individuales en lugar de intentar alcanzar el máximo posible en una sola pasada hizo que las pruebas fueran mucho más simples, fáciles de leer y también ayuda a fomentar la entrega incremental.
fuente
Aprendí cómo un concepto matemático como Semirings se aplica a los algoritmos. Con esto, puede mostrar cómo algunos algoritmos son iguales, excepto para usar un semiring diferente. Esto no debería ser tan extraño para mí como programador, pero me voló la cabeza.
fuente
Además de la política que mencionó Frank Shearar , recientemente descubrí QUnit y JSCoverage que me alegraron el día. Y mes. Nunca pensé que sería posible probar JavaScript unitariamente con cobertura de código, pero ahí está ... :-)
fuente
Mis tres gracias principales por el último año de programación irían a lo siguiente (en orden descendente de importancia y agradecimiento):
El paradigma de programación funcional para abrir mi mente a otras formas, a menudo más elegantes y concisas, de expresar ideas y algoritmos en código. Siento que mi habilidad general de programación ha mejorado mucho en muy poco tiempo, gracias a las ideas de programación funcional.
(Mi agradecimiento personal a Tomáš Petříček por su excelente libro Programación funcional del mundo real ).
tanto la inyección de dependencia como las pruebas unitarias me han enseñado que la composición de objetos es posiblemente la mejor manera de crear sistemas complejos (orientados a objetos) (y que la herencia de clases no es tan importante como solía pensar). Ambos me han enseñado y me han hecho pensar en cómo componer los mejores sistemas y cómo escribir componentes que sean fáciles de usar, pero que sigan siendo lo suficientemente flexibles para su reutilización.
(Si tuviera que mencionar un buen recurso de enseñanza, diría el Arte de las pruebas unitarias de Roy Osherove ).
Todo esto en conjunto me ha llevado a escribir código que generalmente tiene menos errores que antes, porque ahora estoy escribiendo un código que es mucho más fácil de entender y equivocar que lo que publiqué anteriormente.
fuente
Lo que cambia en la industria del software en rápida evolución, la curva de aprendizaje siempre está aquí. "Si solo hubiera una manera de aprender sin tomarse el tiempo para aprender".
fuente
Aprendí que ser vendido a una nueva compañía puede mejorar su trabajo. Mi organización fue comprada a nuestra antigua empresa en mayo, y las cosas parecen seguir mejorando. La nueva compañía ha ahorrado poco o ningún gasto con nuestra nueva oficina, reemplazado nuestras máquinas de desarrollo obsoletas con equipos del siglo XXI, exhibió flexibilidad para administrar nuestros proyectos y, en general, nos hizo sentir más que bienvenidos.
Se siente un poco deprimente ser vendido (un poco como un siervo que tiene un nuevo señor feudal porque está atado a la tierra que cambió de manos), pero el resultado final ha sido mucho mejor de lo que esperaba.
fuente
Yo diría que usa las pruebas unitarias de Microsoft en Visual Studio 2010.
Me resultó muy fácil depurar un método de prueba específico.
Podría ejecutar en cualquier momento mi proyecto de prueba para ver si la aplicación de capa empresarial funciona bien. El proceso de prueba garantiza que mi equipo no debería tener problemas al implementar la solución completa para los visitantes de nuestro sitio web.
fuente
Python básico aprendido (usándolo para escribir scripts rápidos a veces)
Instalé ArchLinux en VM (tenía Ubuntu en VM antes, ¡mi PC ahora es rápida!)
Comenzó con MATLAB (especialmente para trazar gráficos y verificaciones numéricas rápidas)
Cambió a Mercurial (desde SVN) (¡ramificación y fusión!)
fuente
Aprender el patrón MVVM me ayudó a ser mucho menos hack.
fuente
Tuve que comenzar a mantener una aplicación web Python, así que decidí que también era un buen momento para aprender Vim . Ahora estoy usando el complemento IdeaVim para Intellij para mi desarrollo Java y Flex y definitivamente creo que ha hecho que mi escritura sea más rápida y eficiente.
fuente