Hace unos meses completé mi primer año en Enthought Scientific Computing Solutions. Antes de eso, he trabajado dos veces en Google Summer of Code para Drupal – Open Source CMS. Hay muchas cosas que aprendí mientras trabajaba en varios proyectos:
- Las pruebas son tan importantes como escribir código.
Las pruebas, que a menudo se tratan como un ciudadano de segunda clase del proyecto, son en realidad una parte importante del proyecto. Son de gran ayuda para verificar si el código funciona como se esperaba y que cualquier cambio particular en el código rompió una parte del código base que funcionaba previamente. También son útiles para verificar si el sistema está construido según las especificaciones de requisitos. Después de tener pocas experiencias malas y perder mucho tiempo reparando piezas que no tenían pruebas, ahora uso el desarrollo basado en pruebas para la mayoría de mis nuevos proyectos / módulos. - La optimización prematura es la fuente de todos los males.
Lo más importante en la ingeniería de software es la entrega de código. Sin embargo, un código completo de trabajo es mejor que un código incompleto optimizado, asumiendo que la implementación de trabajo es utilizable hasta cierto punto. “Implementar primero, refactorizar y optimizar luego” . Esto es útil porque si ya tiene un código de trabajo, puede escribir pruebas en su contra y luego, cuando refactorice, puede ejecutar el mismo conjunto de pruebas en el código de refactorizado y verificar si está funcionando como es debido o no. También puede hacer un perfil de su código y verificar si el refactor fue útil o no. - El refactor es inevitable
El encabezado lo dice todo. No importa cuánto haya pensado en el diseño o la arquitectura del nuevo proyecto / módulo, su código necesitará un refactor, simplemente son inevitables.
Lectura adicional: Case 105 Navigation - Documente su código y proyecto
Cuando trabaje en un equipo, recuerde que su código será leído, utilizado y modificado por otros miembros del equipo. Trate de mantener su código lo más legible, claro y documentado posible para que otros puedan usarlo fácilmente.Al desarrollar bibliotecas / APIs, construya documentación! eso facilita que otros vean su proyecto y las diversas API que expone sin pasar por el código fuente y descubrir cómo se conectan e interactúan entre sí los diferentes módulos. Agregue código de ejemplo y casos de uso común a la documentación. El uso de su biblioteca / proyecto también puede depender de qué tan bien esté documentado.
- La depuración es una buena manera de aprender cosas nuevas.
Aprendí muchas cosas de la depuración. Comúnmente, los errores son causados porque no pensamos en ciertos casos de borde o la plataforma se comporta de una manera ligeramente diferente o el entorno tiene una configuración diferente. La depuración y el descubrimiento de dichos errores te hacen pensar en tales casos cuando escribes un tipo de código similar en el futuro y consideras esos escenarios mientras desarrollas. A veces, la depuración también puede ayudarte a darte cuenta de lo estúpido que puedes ser (a veces)También descubres las peculiaridades de diferentes proyectos / bibliotecas y cómo se diferencian entre sí.
Por ejemplo, en PostgreSQL, por defecto, los valores de la columna UTF8 VARCHAR distinguen entre mayúsculas y minúsculas, pero en MySQL, los valores de la columna UTF8 VARCHAR son, por defecto, no distinguen entre mayúsculas y minúsculas, para usar valores que distingan entre mayúsculas y minúsculas, la intercalación debe ser UTF8_CS. - Estimación del tiempo
Regla de ochenta y veinte: “80% del código toma 20% de tu tiempo, y el otro 20% tomará 80% de tu tiempo”.
Lo creas o no, los desarrolladores son muy malos en la estimación del tiempo. El tiempo estimado para completar y el tiempo real tomado generalmente son muy diferentes. Personalmente cuadruplico el tiempo estimado para estimaciones pequeñas y aproximadamente el doble para estimaciones grandes. Por ejemplo, si calculo el tiempo requerido en 15 minutos, entonces citaré una hora, o si estimo en 3 días, citaré de 4 a 5 días. - No hay una buena arquitectura ni una mala arquitectura, todos son compensaciones
“Diseñar para el presente con futuro en mente”.
Resuelva los problemas inmediatos a la mano, pero tenga en cuenta los casos de uso futuros mientras los resuelve. La arquitectura de su sistema dependerá principalmente de los requisitos, pero los requisitos cambian con el tiempo, así que asegúrese de que su diseño sea flexible hasta cierto punto. Las soluciones completamente genéricas a menudo agregan complejidad al código. Así que limite la cantidad de flexibilidad y modularidad dependiendo de su experiencia y requisitos, hay muchos otros factores para esto. - ¡El método de resolución de problemas del oso de peluche funciona!
Si te quedas atascado en un problema y sabes que puedes resolverlo, la solución parece esquiva. Utilice el método de resolución de problemas del oso de peluche.
“Levante un osito de peluche y explíquele el problema al osito de peluche. 9 veces de cada 10 podrá resolver el problema”. - La entrega de software no es suficiente, el soporte también es importante
Si la gente va a usar su software, tendrán problemas y tendrán preguntas. Es muy importante establecer un canal de comunicación que los usuarios puedan usar para contactarlo y hacer esas preguntas o proporcionar comentarios / sugerencias, explicar el caso de uso específico en el que podrían estar interesados. Tener una buena documentación es muy útil para reducir la sobrecarga de soporte. - Tomar la licencia en serio
Al escribir un código comercial, siempre considere la licencia de las bibliotecas que está utilizando. Esto es muy importante desde el punto de vista legal. También cuando esté liberando su código, use las licencias apropiadas. - Todo lo que hagas se sumará a tu experiencia.
Cada decisión incorrecta que tome, el error que cometa se agregará a su experiencia (solo trate de no repetirlos :-)) y también lo harán todas las decisiones correctas que tome. “Hagas lo que hagas, vas a aprender algo de eso :)”
Creo que he cubierto la mayoría de los puntos y seguiré actualizando esta publicación a medida que tenga tiempo.
- ¿De qué te burlaste (o estabas completamente en contra) hasta que lo probaste por ti mismo?
- ¿Qué te ha enseñado enseñar a otros sobre ti mismo, los demás y el mundo? ¿Qué sabiduría has derivado de estas experiencias?
- ¿Sería la vida aburrida si no hubiera religión?
- ¿Cuáles son algunas cosas interesantes que podrías aprender al ver dibujos animados?
- ¿Por qué es tan difícil para la mayoría de las personas encontrar y trabajar en un trabajo que les encanta? Claramente hay más personas descontentas con su trabajo que personas felices. ¿Los trabajos amables son más escasos que los trabajos que no lo son?