Realmente no puedo decir que aprendí las siguientes lecciones por mi cuenta. Como dice la famosa cita de Newton “de pie sobre los hombros de gigantes”.
Aprendí estas lecciones trabajando duro, y leyendo todo lo que pude obtener durante los últimos 19 años, 5 años de universidad, 14 años de programación.
Estas lecciones me han servido bien. Ojalá te sean útiles como a mí.
Consigue tu mente correcta Obtener buenos conocimientos de programación requiere práctica y estudio, durante muchos años. Lea la publicación de Peter Norvig. Enseñe a usted mismo a programar en diez años.
- ¿Cuáles son los consejos para hacer?
- ¿Cuáles son algunos consejos de conducción y hacks?
- Artes marciales: ¿Cuáles son los mejores consejos para combatir a varias personas a la vez?
- ¿Cuáles son algunos consejos para aprender el violín rápidamente?
- Cómo ahorrar electricidad con algunos trucos.
Iterar El refinamiento sucesivo es cómo conseguimos un gran código y excelentes productos. Al iterar rápidamente, nuestro objetivo es eliminar lo que funciona y lo que no funciona de la manera más rápida y económica posible. Esta es la idea central detrás de The Lean Startup.
Más simple es generalmente mejor . Vea la charla de Rich Hickey Simple Made Easy y lea las Reglas de simplicidad de Kent Beck . Cuando comencé la programación, pensé que mi código era demasiado simple. Como resultado, la simplicidad es una buena calidad de código! Cuando trabajas en grandes bases de código, la simplicidad puede perderse.
Los códigos están escritos principalmente para compañeros de trabajo, no compiladores . La prueba final es que su código es lo suficientemente simple: ¿pueden sus compañeros programadores con antecedentes similares entender su código? Si sus compañeros de trabajo tienen dificultades para entender su código, investigue por qué. Tal vez sea su código que es demasiado complejo. Tal vez no hubo suficientes pruebas. Tal vez usaste un algoritmo poco común. La conversación sobre el código es clave.
Un problema que percibes es un problema que tienes . No estoy seguro de dónde escuché esto, pero se me ha pegado a lo largo de mi carrera. Si ve una ineficiencia, un error, cualquier tipo de problema, es necesario que actúe para rectificarlo. Tal vez agregarlo a una base de datos de errores es suficiente. Tal vez plantear el problema si los compañeros desarrolladores. O tal vez hacer la reparación a ti mismo. Esto se relaciona muy bien con No vivir con ventanas rotas de The Pragmatic Programmer.
No seas listo No intentes escribir código complicado a propósito para mostrar lo inteligente que eres. Escribir código simple, claro, reutilizable. Piensa Simplicidad, Claridad, Generalidad. Lea “La práctica de la programación” por Brian Kernighan y Rob Pike. Hablando de Brian Kernighan, también leyó El lenguaje de programación C de Brian Kernighan y Dennis Ritchie.
Los principios de SRP (principio de responsabilidad única) y DRY (no se repita) avanzan mucho hacia el código limpio. Lea “Código limpio” por el tío Bob Martin (Robert C. Martin)
No lo vas a necesitar ( YAGNI ) se aplica la mayor parte del tiempo. En general, solo se diseña para los requisitos de hoy, para prevenir sobre ingeniería. Dicho esto, a veces es necesario diseñar para el crecimiento futuro. Hay un equilibrio, depende de ti encontrarlo.
El código con obviamente ningún error es inmensamente mejor que el código sin errores obvios.
Ser capaz de razonar acerca de su código es de suma importancia para la alta calidad.
Los requisitos rara vez se convierten en piedra. Como ingeniero / programador, usted tiene la responsabilidad de cuestionar cosas que parecen poco claras, dudosas y cuestionables. A veces, cuando a la gente no le gustan las preguntas, realmente necesita hacer preguntas con mayor atención, aunque posiblemente con una discreción cuidadosa. (Cortesía de Bryan Kelly)
Comience con por qué . Vea la charla de Simon Sinek Cómo los grandes líderes inspiran la acción. ¡Esta es mi charla favorita de todos los tiempos! El mensaje de Simon “la gente no compra lo que haces, compra por qué lo haces ” resuena conmigo. Así que cualquier proyecto en el que trabaje, quiero saber el panorama general. Quiero saber el “por qué”.
Cuando profundizo en un proyecto, puedo perder el enfoque; en esos momentos quiero reflexionar sobre el “por qué” estoy trabajando en este proyecto, por qué este proyecto es importante para el mundo. Eso me da claridad y puedo concentrarme en las tareas que me ayudan a orientarme en la dirección correcta. Sin saber “por qué”, solo estoy volando a ciegas, sin propósito, lo cual es un desperdicio. Saber “por qué” me ayuda a priorizar y me da energía.
Relacionado con el concepto de por qué, muchas veces trabajas para otra persona y es su “por qué” lo que te impulsa. Quizás esté trabajando para un CEO que tenga una visión de cómo el mundo puede ser un lugar mejor. No importa dónde se encuentre en la “cadena de mando”, usted es un líder. Se requiere liderazgo en todos los niveles para que una empresa tenga éxito, incluso para aquellos que no son líderes designados. Recomiendo encarecidamente leer “Extreme Ownership: How US Navy SEALs Lead and Win”. Esto se relaciona con “Comience con por qué” porque si no entiende “Por qué” o no está de acuerdo con los líderes que están por encima de usted, es su responsabilidad averiguar los líderes “Por qué” . ¿Cómo puedes guiar a otros si no entiendes por qué?
Mi segunda charla favorita de todos los tiempos es Inventing on Principle de Bret Victor. Esta charla se enlaza con “Comenzar con por qué” en mi mente. Bret habla sobre su principio rector “Los creadores necesitan una conexión inmediata con lo que crean”. Este principio sirve como una guía para todo lo que Bret hace. Esta es una charla de 3 partes, y la parte 3 es quizás la más importante. Es una sola pregunta ” ¿Cuál es su principio guía? “Para mí, esto está relacionado con la charla de Simon Sinek” Empieza con por qué “, ya que” Por qué “de Simon es muy similar al” Principio de guía “de Bret.
Creo que una de las razones por las que estamos aquí en esta tierra es para descubrir nuestro por qué. Y para hacer eso, creo que necesitamos conocernos a nosotros mismos. Conocer nuestro principio rector. Es algo muy profundo.
Los clientes realmente no saben lo que quieren , y eso incluye a su gerente. Es su trabajo para obtener sus verdaderas necesidades.
A pesar del proceso que siga, se requiere cierta cantidad de diseño inicial : cuánto debe ser proporcional a la complejidad. Lea “Diseño impulsado por dominio” por Eric Evans .
Los patrones de diseño no se utilizan tanto como se podría pensar. Reconocer patrones comunes es importante. No trate los patrones como un martillo buscando un clavo. Lea “Refactoring to Patterns” por Joshua Kerievsky . Lea la respuesta de Steven Grimm a ¿Cuáles son los patrones de diseño más importantes que los ingenieros de software deben saber para trabajar en Google, Amazon y Facebook?
Los principios SÓLIDOS (Principio de Responsabilidad Única, Principio Abierto / Cerrado, Principio de Sustitución de Liskov, Principio de Segregación de Interfaz, Principio de Inversión de Dependencia) son mucho más importantes que los patrones de diseño. Lea el artículo de tío Bob Principios de OOD
Cuidado con el dogma . Generalmente hay más de una forma de hacer las cosas. El término “mejor práctica” está sobreutilizado. Existen algunas buenas prácticas en el desarrollo de software, pero tenga cuidado de que alguien le diga que algo es la “mejor” forma de hacer algo.
Nadie lo tiene todo resuelto . Algunos saben más que otros. Siempre trata de ser el peor miembro de la banda. Lea “El programador apasionado” por Chad Fowler .
Vea la charla de Barbara Liskov “El poder de la abstracción” http://www.infoq.com/presentatio…. Muchas veces he visto a los desarrolladores crear abstracciones sin sentido.
La peor abstracción que he visto es una clase de Java llamada BeanFacade. Este nombre de clase se derivó al juntar el concepto de un Java Bean con el patrón de Fachada. En Java, esto es algo común: concatenar nombres para formar nombres nuevos. Pero la abstracción resultante no tiene sentido. Bien podría haber sido nombrado X, o FooBar. Ten cuidado con las abstracciones que dejas en tus bases de código. Si estás luchando para nombrar cosas, quizás no tienes la abstracción correcta.
En mi opinión, el libro Dominio del diseño de Eric Evan trata sobre la elección de las abstracciones apropiadas y la evolución adecuada a lo largo del tiempo.
No hay tal cosa como perfecto . Siempre puedes ser mejor. “Lo perfecto es el enemigo de lo bueno” – Voltaire.
Si no diseñas para escalabilidad, tu código no se escalará. Si no diseñas por seguridad, tu código no será seguro. Lo mismo se aplica para todos los servicios.
Tú no eres tu código . La crítica de tu código no es una crítica de ti.
Recuerda, es un deporte de equipo. Los grandes productos son construidos por equipos. Lea el libro “5 disfunciones de un equipo” de Patrick Lencioni, o vea su charla sobre el libro. Es un gran libro sobre cómo funcionan los grandes equipos.
No te quedes a oscuras . Comparte tu trabajo sin terminar con otros de buena gana. Lea “Dinámicas de desarrollo de software” por Jim McCarthy
Pon a prueba tu trabajo . Intenta escribir pruebas antes de codificar. Pruebe TDD. Prueba la BDD. Lea “Trabajando efectivamente con el código legado” por Michael Feathers .
Aprende múltiples paradigmas. OOP , Funcional , etc. Su código OO mejorará después de estudiar lenguajes funcionales como Haskell y Lisp .
Vea la nota de apertura de OOPSLA 97 por Alan Kay , “La revolución de la computadora todavía no ha sucedido”.
Nunca dejes de aprender . Lee tantos libros como puedas, pero no solo libros técnicos. Lea “Zen y el arte del mantenimiento de la motocicleta” por Robert M. Pirsig .
Lea “El programador pragmático” por Andy Hunt y Dave Thomas .
Lea “Code Complete 2” por Steve McConnell
Leer SICP (Estructura e Interpretación de Programas de Computación) por Harold Abelson, Gerald Jay Sussman y Julie Sussman. No se limite a leerlo de principio a fin. Siga junto con un entorno Scheme (p. Ej., Racket) y escriba un código.
No pida permiso para refactorizar, probar, documentar, etc. Es todo parte de la “programación”. No pidas permiso para hacer tu trabajo.
Cuida tu trabajo. Cuida a tus clientes. El código que escribimos permite a los usuarios de nuestro código hacer su trabajo, sin que nuestro software se interponga en su camino.
Siempre pregunte “¿Qué problema estoy tratando de resolver”? Esta es una gran pregunta para hacer para aclarar qué es exactamente lo que está haciendo. Te ayuda a enfocarte. Esto se relaciona muy bien con ” Start With Why ” de Simon Sinke.
En general, apéguese a resolver un problema a la vez . Cuando detecte otros problemas, anótelos y vuelva a ellos más tarde.
Estar donde estas Esta es una lección de vida que se aplica al desarrollo de software. Cuando te comprometes a hacer algo, enfócate en hacerlo. Cuando lave los platos, concéntrese en lavarlos; olvídese de todas las cosas que lo estresaron ese día. Si está pasando tiempo con su familia, permanezca allí, apague su teléfono, olvide ese problema difícil con el que ha estado luchando. Cuando estés en una reunión, participa: concéntrate en la conversación y olvídate del trabajo que se está acumulando. Lee “Zen Mind, Beginner’s Mind” por Shunryu Suzuki
SRP tiene aplicaciones más amplias que solo para codificar.
“La optimización prematura es la raíz de todo mal” – Donald Knuth . Comience con un algoritmo de fuerza bruta hasta que encuentre una razón para cambiar.
Pregunte “¿qué es lo más simple que puede funcionar?” Lea “Explicación de la programación eXtreme” por Kent Beck . La primera versión es supuestamente más extrema que la segunda.
Estar bien contigo Nunca lo sabrás todo, eso es imposible. Sigue aprendiendo, pero no te metas en lo que no sabes. Mira la charla de Kent Beck Facilidad en el trabajo.
Para mí, la charla de Kent fue un soplo de aire fresco. He sido desarrollador durante más de una década y media, y en ocasiones me atasca la idea de que la gente más joven ya sabe las cosas que sé y más, y soy un desarrollador viejo y bien pagado. Este no es el caso (espero), pero este pensamiento me impulsa a aprender continuamente para no quedarme atrás. La charla de Kent es genial porque te ayuda a recordar que está bien donde estás. Incluso si hay un prodigio adolescente que puede codificar círculos a tu alrededor, en general eso es atípico. Nunca soy complaciente, pero ¿qué tan fuerte debo empujar para mantenerme al día?
Se humilde Todos están en diferentes puntos de aprendizaje en su carrera. Ayuda a otros en su camino. Pide ayuda cuando la necesites. Devolver a la comunidad. Vea la charla de Leon Gersing “Verdad, mito y realidad en el desarrollo de software”
Realmente disfruté la charla de Leon. Escribe “Hello World” en un nuevo idioma, luego bórralo. La comparación con otros desarrolladores ayuda a comprender de dónde vienen y te ayuda a que te comprendas a ti mismo.
También me gusta la charla de Leon porque une la programación con el Zen, ambos temas me parecen intrigantes. Comprender exactamente qué es el “Zen” es una curva mental, que termina en un lugar donde el Zen es todo y el Zen no es nada. Y un viejo maestro zen golpea a un estudiante, y el estudiante finalmente “entiendes” … o no.
Para mí, estoy aquí para averiguar por qué estoy aquí. Me gusta “codificar”. ¿Cómo ayuda eso a que el mundo sea un lugar mejor? ¿Quién soy yo, de verdad? ¿Puedo encontrar un significado estudiando zen? ¿Taoísmo? No sé si alguna vez sabré el significado de la vida, pero nunca dejaré de buscar.
Está bien ser normal – Lea el artículo Elogiando al desarrollador promedio – Por qué el mito del programador “10x” es tan destructivo por Matt Asay. Matt Asay hace referencia al discurso de Jacob Kaplan-Moss en PyCon 2015.
La multitarea es una ilusión. Las computadoras se salen con la suya porque pueden cambiar de contexto muy rápido (la mayoría de las veces). El cambio de contexto para nosotros, simples mortales, tiene un alto costo. Haz una cosa a la vez, y hazlo bien.
9 mujeres no pueden tener un bebé en un mes. Lee “El mes del hombre mítico” por Fred Brooks .
No hay cuchara. Sólo un recordatorio para aligerar un poco. Que te diviertas.