El mindset del
programador profesional

Amhed Herrera - Marzo 2015

Egresado PUCMM - 2004


Software Engineer - Rev.com

Disclaimer

The Clean Coder

¿Qué nos hace profesionales?

¿Y en las demás profesiones?

Que pasaría si...

introduzco un bug y le cuesta RD$200,000 a la empresa?

El developer profesional se preocupa por la calidad de su código

Cuando modificar un módulo existente lo deja mejor que como estaba antes

  • Cuando le toca hacer nuevas funcionalidades lo prueba, lo prueba de nuevo, le hace unit testing, y se asegura de que todo esté como debería antes de pasarselo a QA

  • Sabe que su carrera es su responsabilidad. Además del trabajo, debe dedicarle 10-20 horas adicionales a la semana aprendiendo por sí solo

1. Saber decir "no"

Manager

Si un manager exige una fecha específica de entrega de un proyecto sin antes consultar con la persona encargada de estimar los tiempos no está siendo un profesional. 

Developer

Si el programador no explica que la fecha de entrega no es posible, él tampoco está siendo un profesional.

Resultado: 
El proyecto se retrasará, los devs amanecerán, y el proyecto tendrá bugs. 

El dev profesional trabaja de cerca con el manager para aclarar esas dudas, y aprende a definir las expectativas de su trabajo.

2. Saber decir "sí"

Las tres partes de un compromiso:

1. You say you’ll do it.

2. You mean it.

3. You actually do it.

 

Compromiso quiere decir responsabilidad completa

¿Qué pasa si mis resultados dependen de condiciones externas?

3. Tu Proceso
de trabajo

Cosas que afectan la calidad de tu código

  • Ambiente de trabajo no propicio
  • Ambiente de trabajo con muchas interrupciones
    • Compañeros de trabajo
    • Email / Facebook / Reddit / 9Gag
  • Trabajar demasiado

Cosas que afectan la calidad de tu código

Tu actitud ante la resolución de problemas

 

¿Qué haces cuando te topas con un
problema que no sabes cómo solucionar?

Pair Programming

Idiosincrasia

4. La calidad de nuestro código

¿Qué vendría siendo
código de calidad?

  • Es fácil de leer por otros devs (y por tí mismo)
  • Evita la repetición (DRY)
  • Separa responsabilidades
  • Implementa patrones y disciplinas
  • Tiene un estilo consistente
  • Posee pruebas

Unit Testing

TDD? BDD? Unit Testing? Acceptance Testing? Integration Testing?

Código sin pruebas no puede validar su calidad

Test-Driven Development

  • Provee certeza de que no has roto funcionalidad existente (porque todo el código previo posee tests)

  • Reduce la tasa de defectos nuevos entre

  • Te provee un seguro de vida para poder hacer refactoring/mejorar código existente

  • Los tests documentan como el código debe ser usado

  • Permite crear estructuras con acoplamiento bajo

5. Comunicación

Tu Curriculum

Ortografía?

ni llo mismo me entiendo pero a bese ce pasan

Requerimientos

  • Debe poderse completar en un sprint (7 a 14 días)

  • Debe de poderse traducir a pruebas unitarias

  • Debe ser escrito en conjunto por el developer y el product owner/manager.

  • Debe ser lo suficientemente claro para que tanto el project manager como el developer entiendan cuando se acepta como completado.

     

Un buen requerimiento

  • PM: Necesitamos subtítulos
  • Dev: Tenemos que discutir como será la interfaz gráfica, como evitar que los clientes actuales no se confundan con ese nuevo servicio, y necesitamos estimar los cambios a nivel del código
  • PM: OK, pero necesitamos una forma manual de que los clientes nos indiquen que desean el servicio mientras tanto
  • Dev: OK, vamos a poner un checkbox para que la gente indique que desea el servicio. Algo temporal mientras sacamos el offering completo.

Conversando los requerimientos (PM y Dev)

  • PM: OK, se puede hacer en esta semana?
  • Dev: hagamos el requerimiento [discusión de 15/20 mins]
  • PM: OK, es mismo es lo que necesitamos, que tiempo?
  • Dev: creo que esto tomaría como mucho un día de trabajo, confirmemos con los demás developers:
    • Dev A: Sí, entre 0.5 y 1 punto
    • Dev B: Sí, 1 punto parece suficiente
    • Dev: Estimado en 1 punto y planificado para el próximo sprint

Conversando los requerimientos (PM y Dev)

¿Por qué tanto "tiempo"?

Para un feature tan sencillo

Porque existe un proceso

  • 2 Code Reviews. Un compañero revisó mi código

  • 3 Unit tests nuevos para la propiedad que guarda el checkbox

  • 3 Unit tests nuevos para un modelo client-side en javascript

  • 2 Unit tests para el proceso que crea una orden nueva, para validar que se crea el ticket de servicio

  • Probar el código completado en un staging server

Tiempo aproximado:  7 horas

6. Programas fuera del trabajo

Code Katas

Sitios para empezar con Code Katas

Open Source

7. Aplicas el
mindset correcto

The principle is competing against yourself. It's about self-improvement about being better than you were the day before

Steve Young

Stay Hungry. Stay Foolish.

Steve Jobs

¿Qué más puedo hacer para seguir aprendiendo?

Libros

  • The Pragmatic Programmer
  • Clean Code
  • Coders at Work
  • Practical Object Oriented Design
  • The Passionate Programmer
  • Design Patterns (Gang of Four) 

 

http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read

Recursos en Línea

  • Pluralsight
  • Code Academy
  • Team Treehouse
  • Mozilla Developer Network

Read other 
people's code

Stack Overflow

Mentorship

Gracias!

Made with Slides.com