He estado programando (obsesivamente) desde que tenía 12 años. Conozco bastante bien el espectro de lenguajes, desde ensamblador, a C ++, a Javascript, a Haskell, Lisp y Qi. Pero todos mis proyectos han sido solos.
Obtuve mi título en ingeniería química, no CS o ingeniería informática, pero por primera vez este otoño estaré trabajando en un gran proyecto de programación con otras personas, y no tengo idea de cómo prepararme. He estado usando Windows toda mi vida, pero este proyecto va a ser muy unix, así que compré una Mac recientemente con la esperanza de familiarizarme con el entorno.
Tuve la suerte de participar en un hackathon con algunos amigos el año pasado, ambos mayores de CS, y, lo suficientemente emocionante, ganamos. Pero cuando trabajé con ellos me di cuenta de que su flujo de trabajo era muy diferente al mío. Utilizaron Git para el control de versiones. Nunca lo había usado en ese momento, pero desde entonces he aprendido todo lo que puedo al respecto. También utilizaron muchos marcos y bibliotecas. Tenía que saber qué era Rails durante la noche para el hackathon (por otro lado, no sabían qué alcance o cierre léxico). Todo nuestro código funcionó bien, pero no entendieron el mío, y yo no entendí el suyo.
Escucho referencias a cosas que los programadores reales hacen a diario: pruebas unitarias, revisiones de código, pero solo tengo el más vago sentido de lo que son. Normalmente no tengo muchos errores en mis pequeños proyectos, por lo que nunca he necesitado un sistema de seguimiento de errores o pruebas para ellos.
Y lo último es que me lleva mucho tiempo entender el código de otras personas. Las convenciones de nomenclatura variable (que varían con cada nuevo idioma) son difíciles (__mzkwpSomRidicAbbrev), y encuentro difícil el acoplamiento flexible. Eso no quiere decir que no acople las cosas libremente; creo que soy bastante bueno para mi propio trabajo, pero cuando descargo algo como el kernel de Linux o el código fuente de Chromium para verlo, paso horas intentando para descubrir cómo se conectan todos estos directorios y archivos con nombres extraños. Es un pecado de programación reinventar la rueda, pero a menudo encuentro que es más rápido escribir la funcionalidad yo mismo que pasar horas diseccionando alguna biblioteca.
Obviamente, las personas que hacen esto para ganarse la vida no tienen estos problemas, y tendré que llegar a ese punto yo mismo.
Pregunta: ¿Cuáles son algunos pasos que puedo seguir para comenzar a "integrarme" con todos los demás?
¡Gracias!