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!
Respuestas:
Creo que estás un poco ansioso y emocionado por trabajar para un grupo.
Ninguno de nosotros aprendió a trabajar en un grupo o equipo de los libros o se le dieron pasos pequeños o "Guía de Dummies para trabajar en equipos".
Simplemente aprendemos a trabajar CON grupos trabajando en grupos.
Todo lo que escuchaste acerca de los programadores profesionales, se acomodará gradualmente a medida que trabajes en equipo. Aprenderás sobre todos ellos uno por uno, como el control de versiones, las pruebas unitarias, etc.
Para mí, la conclusión es
Forma parte de un equipo.
fuente
Voy a elegir algunas de sus oraciones y hacer un par de puntos generales:
...
...
Creo que lo más importante que necesitarás aprender es esto:
Para un determinado nivel de capacidad desarrollador, un equipo de
n
desarrolladores hace menos que losn
tiempos de la obra que uno de los desarrolladores podrían hacer por sí solo - pero lo hacen todavía lo hacen más que cualquier persona se podría .La razón es simple: cuando trabajas con otras personas, debes pasar algo de tu tiempo intercambiando información con estas otras personas; mientras que cuando trabajas solo, todo el intercambio de información tiene lugar en tu cabeza. Que naturalmente es más rápido.
La otra cosa importante es:
Algunos de sus compañeros de trabajo serán menos capaces que usted, ciertamente en algunas habilidades; algunos incluso serán menos capaces que tú en todas las habilidades
Con estas dos ideas en mente, todo lo que he citado anteriormente tiene sentido. Muchas personas no "cierran". Las pruebas y las revisiones del código son para garantizar la calidad y disminuir el riesgo cuando el código es producido por un grupo de personas con habilidades mixtas . El seguimiento de errores se debe a que cuando produce sistemas suficientemente grandes, los errores son inevitables. Y las bibliotecas interminables con sus convenciones se deben a que sin convenciones hay demasiado código para aprender o escribir de nuevo cada vez que lo necesite.
Realmente, creo que la única forma de aprender a trabajar en equipo es hacerlo; pero espero que lo anterior te ayude a prepararte mentalmente. ¡Buena suerte!
fuente
La forma más eficiente es formar parte de un equipo.
Unirse a un equipo puede parecer difícil, ya que entiendo que todavía no eres parte de un equipo, como muchos estudiantes y muchas personas cuyo trabajo es trabajar sin otros desarrolladores.
Le recomendaría que participe en un proyecto de código abierto que es muy activo y favorece la comunicación frecuente en los canales modernos abiertos a todos (rastreador de problemas, lista de correo, wiki, etc.). La comunicación abierta es importante porque probablemente comenzará observando cómo interactúan otras personas, por lo que debe evitar los proyectos que dependen del correo electrónico entre desarrolladores principales o IRC no archivados.
Prefiere un proyecto que parezca acogedor, con varios colaboradores bastante frecuentes , en lugar de un proyecto con 1 persona que hace todo. Además, prefiera proyectos en los que a cualquiera se le permita tocar todo (en lugar de que cada desarrollador tenga su área delimitada), porque es más divertido y ofrece más oportunidades de comunicación.
Plug desvergonzado: ¡eres muy bienvenido aquí !
fuente
No reiteraré lo que todos los demás ya han dicho
"just do it"
, pero agregaré un punto adicional que no he visto mencionado: un buen gerente realmente lo ayudará a integrarse en el equipo.Si bien puede tener todas las cosas correctas sobre usted para la parte de programación del trabajo, podría perderse algunas de las cosas más interpersonales y relacionadas con el desarrollo de software. Un buen gerente lo guiará en las prácticas de los equipos (tanto en habilidades blandas como en habilidades duras) para ayudarlo a gelificar, y con suerte también le dirá si ha hecho o hace algo que se opone a esas prácticas; porque no puedes arreglar algo que no sabes que está roto.
fuente
Otro consejo que me gustaría darle es que no hay dos equipos iguales, y que incluso un equipo existente cambiará cuando una o más personas se unan.
Un equipo se origina en la interacción de individuos que se conocen e intentan entender cómo trabajar juntos hasta que encuentran una forma común (ver, por ejemplo, las etapas de desarrollo grupal de Tuckman ).
Por lo tanto, mi consejo sería no intentar encontrar respuestas a sus preguntas ahora, sino ver qué sucede cuando realmente comienza a trabajar en el nuevo equipo. Algunos de sus problemas pueden ser considerados no problemáticos por sus colegas, otros se considerarán relevantes y tendrá la posibilidad de discutirlos juntos o incluso promover su propia opinión sobre el tema. Y, por último, es probable que también abordes aspectos en los que no habías pensado.
Estoy de acuerdo con ElYusubov en que necesitas mucha paciencia y darte a ti y a los nuevos colegas un equipo para aprender a trabajar juntos hasta que te conviertas en un equipo. Si practicas algún deporte de equipo, ya deberías haber experimentado esto.
Un comentario final sobre pasar mucho tiempo entendiendo el código de otras personas. Trabajar en equipo significa que vas a trabajar en el código de otra persona y otros desarrolladores trabajarán en tu código. A veces, el código es demasiado complejo para ser reescrito desde cero. Una solución típica es pedirle al desarrollador original que revise sus cambios, para que tenga un poco más de confianza de que no está rompiendo nada en su código.
Esto fue para mí un gran salto en la transición de un programador en solitario a un programador de equipo: trabajas en un código que solo entiendes parcialmente y tienes que acostumbrarte. Esto implica mucha más comunicación con sus colegas, mucho respeto (sí, tienen convenciones de nomenclatura extrañas para sus variables, ¿y qué?) Y confianza mutua (aunque tienen un estilo de codificación diferente, sé que entregan código de trabajo) .
fuente
Ser un buen miembro del equipo significa comunicarse sin temor, confiar en sus universidades y superar obstáculos en un proyecto como equipo y
deliver project as a team.
Se necesita tiempo , paciente y requiere aprender para sentirse cómodo y seguro como programador. También es cierto que NO todos los programadores son buenos jugadores de equipo , y los jugadores de equipo comparten su éxito y aprenden lecciones de los fracasos.
Sería útil destacar algunos personajes de un buen miembro del equipo. .
a) Un buen miembro del equipo es una persona orientada a objetivos. lugar de orientarse a sí misma.
b) Cualidades: pensar más en el panorama general que en la autosatisfacción. Este es el punto clave. Todas las demás cualidades (como confiabilidad, comunicación constructiva) heredan de esta.
c) Cómo mejorar: Intente calificar cómo ha interactuado con su equipo durante el día, defina puntos buenos y malos, preste atención a ellos en las próximas reuniones. Además, trate de ver las decisiones del equipo desde muchos ángulos. Ubíquese en los roles del otro, piense cómo puede afectar el trabajo de los demás.
fuente
Primero, felicidades por ser el tipo de persona que parece disfrutar genuinamente la programación. Sin embargo, la programación no es el principio y el final de la entrega de sistemas útiles. Tendrás un desafío frente a ti y dependerá de ti si vuelves a los programas de pasatiempos o si vas a una carrera en la que puedes hacer lo que amas y recibir un pago por ello.
Usted está en desventaja porque no tiene educación en la creación de software. En esa educación se enseñan varias cosas (no solo cómo programar) que para los graduados de CS y los desarrolladores de software experimentados serán una segunda naturaleza. No es que aparezca a menudo en el lugar de trabajo (aunque lo hizo para mí, una vez), pero NP-hard es un ejemplo de un término que pueden entender y usted no. Probablemente carezca de antecedentes en teoría formal detrás de la computación, pero está bien, siempre y cuando esté dispuesto a aprender al respecto. Tal vez una maestría en CS en su futuro? Parece que parte de su código puede ser idiomático, en el sentido de que tiene un estilo de programación que le parece claro, pero no a los demás. Preste atención en las revisiones de códigos y esté dispuesto a aceptar críticas y aprender. Esto va a tomar trabajo, y puede sentirse frustrado,
Lo que tienes para tu no tiene precio. Realmente pareces disfrutar de la programación. Creo que también disfrutará los otros aspectos del desarrollo de sistemas, como el diseño, la arquitectura, las pruebas, la optimización, etc. La programación es una parte del rompecabezas y tendrá que aprender otras habilidades para ser un desarrollador de software. Dejando a un lado los hackatones, gran parte del negocio implica comunicación, aprendizaje mutuo, escucha y planificación. He trabajado con muchas personas que son graduados de CS y me gustó el desarrollo de software más que vender autos o pintar casas, pero no me gustaba mucho.
fuente