Recursos que te ayudarán al inicio de tu carrera

Los primeros años de mi carrera fueron una época de intenso aprendizaje.
Encontré la realidad de ser ingeniero de software y tuve que adquirir muchas habilidades que no sabía que necesitaba. Mirando hacia atrás, seguro que habría sido bueno saber las cosas que sé ahora.
Por lo tanto, escribí esta guía para ayudar a otros basándome en las experiencias de los desarrolladores a los que fui mentor en sus primeros años como profesionales, y las de mí mismo y algunos de mis colegas.
Yo cubriré:
- Cómo sacar el máximo partido a las entrevistas,
- Cómo sobrevivir (y prosperar) en su trabajo como ingeniero de software,
- Y qué recursos considerar al considerar la mejora continua.
Entrevistas
Al comenzar su carrera en Ingeniería de Software, tendrá que enfrentarse a un hecho indiscutible. Las entrevistas apestan.
Pueden ser horribles para todos los involucrados. Habiendo sido tanto entrevistador como entrevistado, puedo dar fe de que las entrevistas son un gran sumidero, extremadamente estresante y un indicador realmente malo del desempeño laboral futuro. Sin embargo, son un mal necesario para el que usted y su currículum deben estar preparados.
Preparándose para la batalla
Si está considerando una carrera en Ingeniería de Software, asegúrese de aprender algunas de las preguntas de entrevistas de programación más frecuentes, como 'FizzBuzz':
“Escriba un programa que imprima los números del 1 al 100. Pero para los múltiplos de tres imprima 'Fizz' en lugar del número y para los múltiplos de cinco imprima 'Buzz'. Para números que son múltiplos de tres y cinco, escriba 'FizzBuzz' ”. (Coding Horror)Suena bastante simple, ¿verdad?
Bueno, la gran mayoría de los entrevistados fallan en esta simple prueba, y mucho menos en sus variantes más complejas.
Personalmente, he visto a muchos candidatos para puestos de alto nivel fallar en esta prueba mientras tienen acceso completo a Internet . Así que asegúrese de que si un lenguaje de programación aparece en su currículum, sepa cómo hacer al menos FizzBuzz en él. De lo contrario, está perdiendo el tiempo de todos, incluido el suyo.
Por supuesto, necesitará saber más que solo FizzBuzz para sobrevivir a sus entrevistas. También debe asegurarse de saber:
- Estructuras y algoritmos de datos básicos: como listas enlazadas, matrices, árboles y clases.
- Errores comunes en el idioma que elijas, como si las cadenas son inmutables y cómo se administra la memoria.
- Conceptos de programación orientada a objetos como clase versus objeto y herencia.
Al comienzo de su carrera, deberá destacar en este tipo de preguntas, ya que no tiene la experiencia para demostrar que será bueno en el trabajo. Hay dos recursos que siempre recomiendo al prepararme para entrevistas:
- "Cracking the Coding Interview", un libro fantástico que incluye muchos problemas de codificación y sus soluciones, así como resúmenes de lo que necesita saber para resolverlos.
- CodeWars, un sitio web que tiene una gran colección de problemas de codificación que puede resolver en el navegador utilizando una amplia selección de idiomas. La parte más útil es ver cómo otros usuarios resolvieron el mismo problema. Podrá ver diferentes enfoques para el mismo problema y aprender nuevas herramientas en el idioma que elija.
Date esa ventaja extra
Hay varias cosas que puede hacer que le darán ese pequeño extra.

Primero, aprenda a comunicar sus experiencias . Debe tener un discurso de ascensor que resuma su currículum en una narrativa coherente y atractiva.
¡Además, conozca su propio currículum! Suena tonto, pero he visto a muchos entrevistados luchar para explicar un elemento en particular en su currículum. Debería poder responder preguntas sobre cualquier experiencia que incluya en su currículum y explicar cómo lo convirtió en un mejor candidato para el puesto.
A continuación, tenga ejemplos de código para mostrar en GitHub (u otro repositorio público).
Ver para creer y que los entrevistadores puedan ver su código harán maravillas. Además, demuestra que comprende los sistemas de control de versiones.
Las muestras de código no tienen que ser demasiado complejas, pero deben estar limpias y mostrar buenas prácticas de codificación. Esta es su oportunidad de mostrar cómo codifica sin la presión de tiempo de una entrevista de codificación.
Una vez que haya hecho todo lo anterior, es hora de considerar participar en un proyecto de código abierto . Le mostrará que puede trabajar en una base de código existente y colaborar con otros programadores.
Esto será lo más cerca que pueda estar de la programación en un entorno industrial sin estar realmente en un entorno industrial. Este es, con mucho, el elemento más difícil y que consume más tiempo hasta ahora, así que resérvelo hasta que haya completado la fruta más baja que mencioné anteriormente.
Entrevistar a su entrevistador
En la prisa y el estrés de la búsqueda de empleo, muchos candidatos olvidan que la entrevista es una calle de doble sentido. A medida que la empresa está tratando de averiguar si usted es la persona adecuada para el trabajo, debe averiguar si la empresa es la adecuada para usted.
Asegúrese de poder hacer algunas de las preguntas a continuación, incluso si está en un correo electrónico de seguimiento. Tenga en cuenta que, a menudo, las empresas pueden intentar no seguir las mejores prácticas de ingeniería como un beneficio, así que lea entre líneas.
Aquí hay algunas preguntas de ejemplo que puede hacer:
"¿Cómo sería un día laboral típico para mí?"
Es importante saber qué esperar de un puesto en particular porque los trabajos de Ingeniería de Software varían bastante. Es posible que deba mantener los servidores o hablar directamente con los clientes, por ejemplo.
Bandera roja: " No estoy seguro". → Significa que las personas que te entrevistan no estarán en tu equipo o no tienen una idea clara de por qué te están contratando.
"¿Cómo prueba su software?"
Idealmente, se debe utilizar una combinación de pruebas unitarias, pruebas manuales y pruebas automatizadas para verificar la calidad del código.
Bandera roja: " Simplemente no escribimos errores, jaja". → Esas personas son exactamente las que escriben errores.
"¿Qué sistema de control de versiones usas?"
Los sistemas de control de versiones son extremadamente útiles para la colaboración y no existen razones para no utilizar uno en un entorno profesional.
Bandera roja n. ° 1: "¿Eh, sistema de control de versiones?" → Corre muy, muy lejos.

Bandera roja n. ° 2: "
"¿Hacen revisiones por pares?"
Las revisiones por pares, o hacer que otra persona mire su código antes de que entre en la base del código, es una forma fantástica de detectar errores tontos y es una oportunidad de capacitación vital al comenzar su carrera.
Bandera roja: "¡Confiamos el uno en el otro!" → Es muy probable que los desarrolladores senior sean muy protectores con su código y no sean buenos para recibir comentarios.
"¿Qué programas tienes para la educación continua?"
Ser un ingeniero de software significa aprender constantemente a medida que las tecnologías aparecen, maduran y se vuelven obsoletas a un ritmo vertiginoso. Como tal, muchas empresas tienen un presupuesto de capacitación que utilizan para pagar clases universitarias y en línea, conferencias o charlas internas.
Bandera roja: "¿Te refieres a leer cosas en línea en tu tiempo libre?" → La empresa tiene problemas de efectivo o ve a los desarrolladores como reemplazables y no como inversiones a largo plazo.

"¿Cuál es el proceso de desarrollo de software que utiliza?"
El proceso es vital para la ingeniería de software, independientemente de los detalles reales. Los detalles de lo que constituye el proceso óptimo están sujetos a un intenso debate, pero la mera existencia de una forma acordada de trabajar en un proyecto minimiza el caos y asegura que todos estén en la misma página.
Bandera roja: "Nuestro proceso está inspirado en el jazz de forma libre". → Lo más probable es que todo el departamento esté en modo extinción de incendios, saltando de emergencia en emergencia sin un objetivo claro.
"¿Cómo abordan la deuda técnica?"
La deuda técnica es una acumulación de tecnologías obsoletas y soluciones rápidas pero sucias en la base del código. Abordarlo es importante para la salud a largo plazo del código y debe hacerse de forma continua.

Bandera roja: "Nos centramos exclusivamente en las nuevas funciones". → Su base de código es un desastre o lo será pronto.
"¿Cómo es la cultura de su empresa?"
La cultura de la empresa puede ser un concepto muy vago, pero incluso cosas pequeñas como una oficina abierta frente a cubículos cambiarán su interacción diaria con sus colegas de manera significativa. No hay banderas rojas generales, pero asegúrese de que su respuesta sea algo con lo que pueda vivir más de 40 horas a la semana durante años.
Trabajando como ingeniero de software
En esta etapa, si se desempeñó bien en sus entrevistas y le gustó cómo los entrevistadores respondieron a sus preguntas, es probable que lo contraten.
¡Felicidades, eres oficialmente ingeniero!

¿Ahora que? Bueno, es hora de volver a aprender muchas cosas sobre codificación y trabajo. Y como somos programadores, comencemos hablando de código.
Buen código industrial
Un buen código de industria tiene las siguientes propiedades, en ese orden:
- Legible , porque el código se lee y se mantiene con más frecuencia de lo que se escribe. La intención del código debe quedar clara para otros desarrolladores años después de haberlo escrito.
- Defensivo, como seguir las mejores prácticas de codificación defensiva. La codificación defensiva es un tema en sí mismo, pero la esencia es: debe asegurarse de que el uso inadecuado de las clases y métodos que ha escrito no provocará que su código bloquee el software.
- Optimizado , que es el último en esta lista porque la mayoría de las veces, no tendrá que preocuparse por eso. Eso no significa que deba escribir un código incorrecto que haga algo en O (n³) cuando existe una solución lineal. Pero los desarrolladores generalmente están ansiosos por intentar optimizar en exceso cuando no es necesario, a menudo en detrimento de la legibilidad y defendibilidad del código. Siempre debería poder demostrar que en realidad se necesita una cierta optimización que sacrifique esas propiedades.
Ahora que sabe cómo escribir un buen código industrial:
No estarás haciendo mucha codificación
Puede ser una sorpresa, pero la mayoría de las veces no escribirás código nuevo, sino que estarás:
- Depuración
- Leyendo código existente
- En reuniones o escribiendo correos electrónicos
- Investigar qué hacer para no escribir código
Por lo tanto, otras habilidades además de la codificación serán igualmente vitales para su carrera.
Código de lectura y depuración

- Necesitará mucho más que depurar usando declaraciones de impresión. Todos los lenguajes y las pilas de tecnología más utilizados tienen una variedad de herramientas poderosas. Aprenda a usarlos, ya que simplificarán la depuración y le ahorrarán innumerables horas.
- Comprende la base del código. La mayoría de las pilas de tecnología tienen algún tipo de herramientas de generación de gráficos de código que lo ayudarán a comprender la estructura de la base del código. Los IDE empresariales generalmente tienen esa funcionalidad incorporada. También puede explorar el código utilizando herramientas como ReSharper, grep o Sourcegraph.
- Comprende el producto. Y sted sorprendería la cantidad de desarrolladores no saben cómo el software se supone que el trabajo antes de tratar de “arreglar” la misma. Solo lee la documentación.
Organiza tus pensamientos
Dado que gran parte de su tiempo lo dedicará a la comunicación, la investigación y la multitarea, necesita algunas herramientas para ayudar a mantener todo en orden.
- Listas de TODO / Tasking: Su empresa ya debería tener algún tipo de software de tareas, pero también ayuda tener un sistema personal. Utilice notas adhesivas o software como Trello o Todoist.
- Notas: siempre tome notas en las reuniones, trabaje para mejorar la documentación existente y cree una base de conocimientos personal. Use Evernote, OneNote o un cuaderno, como en los viejos tiempos. Puede parecer una exageración, pero se lo agradecerá un año después cuando vuelva a visitar ese oscuro proceso de compilación que tardó 3 días en descubrir la primera vez. Nunca conocí a un buen ingeniero de software que no tomara notas extensas.
- Gráficos / Visualizaciones: los seres humanos son criaturas visuales y la creación de gráficos de procesos y arquitecturas le ayudará a usted y a otras personas a comprender temas complejos. Los diagramas son particularmente útiles cuando se comunica con colegas no técnicos. Utilice Lucidchart, Visio o una pizarra simple.
Sepa cuándo usar bibliotecas
Respuesta corta: casi todo el tiempo.
Respuesta larga: el 99% de las veces, no debes reinventar la rueda. En la mayoría de los puestos de Ingeniería de Software, implementar un tipo particular de tipo es una completa pérdida de tiempo. Eso no significa que no deba saber cómo funcionan los algoritmos y las estructuras de datos que usa, ya que eso lo ayudará a decidir qué usar y cuándo.
Para ser un ingeniero de software eficiente, debe comprender las bibliotecas que tiene a su disposición. Las bibliotecas estándar de los lenguajes más populares son extremadamente útiles y más grandes de lo que cabría esperar. Además, la base de código también puede utilizar bibliotecas especializadas adicionales. Lea su documentación y sepa cuándo usarlos.
Tampoco debe tener miedo de sugerir bibliotecas adicionales si le permiten ahorrar tiempo. Sin embargo, debe asegurarse de elegir una buena biblioteca para uso industrial. Una buena biblioteca es:
- Código abierto , para que pueda verificar la calidad del código usted mismo y potencialmente corregir errores que son críticos para su aplicación.
- Con licencia bajo una licencia permisiva como MIT y BSD , para que su empresa no tenga ningún problema al usarlo. Tenga cuidado con GPL, no sea que abra toda su base de código por accidente.
- Maduro , es decir, ha estado disponible durante algún tiempo y tiene un rico conjunto de características.
- Mantenido , con nuevos lanzamientos que salen a menudo.
- Utilizado por otras empresas o proyectos , que actúa como un sello de aprobación y asegura que cuenta con el apoyo de la industria para un mantenimiento continuo.
Mejora continua
Además de aprender las habilidades que lo harán mejor en su trabajo diario, también necesitará mejorar continuamente sus habilidades y aprender otras nuevas, a fin de crear nuevas oportunidades profesionales para usted.
Las oportunidades para aprender son muchas y muchas de ellas bastante asequibles:
- Cursos en línea: no debe perderse la oportunidad de aprender de los mejores profesores en el campo en un formato flexible. Consulte Coursera, Udacity y edX (entre muchos) para obtener cursos que pueden complementar sus habilidades existentes.
- Títulos de maestría en línea: una tendencia reciente entre las universidades mejor calificadas, los títulos de maestría en línea son una forma flexible de continuar su educación formal. También son generalmente menos costosos gracias a los títulos en el campus, y la mayoría de los programas cuestan ~ $ 10,000 por todo el título. Georgia Tech, UT y UC San Diego son algunas de las universidades que ofrecen dichos títulos. Personalmente recomiendo la Maestría en línea de Georgia Tech, de la cual me gradué este año.
- Blogs: los blogs son una parte importante de la comunidad de desarrolladores (no es de extrañar aquí, ya que estás leyendo uno en este momento). Blogs como Coding Horror, Joel on Software o incluso sitios web más divertidos como The Daily WTF pueden darte una buena idea de qué hacer y qué no hacer como ingeniero de software. Navegar por Medium, r / programming, HackerNews u otros feeds también le llevará a buenos artículos y blogs.
- Conferencias: Por último, pero no menos importante, las conferencias son una oportunidad de aprendizaje increíble y definitivamente debe aprovechar el presupuesto de capacitación de su empresa para asistir a ellas. Una lista muy incompleta de buenas conferencias para revisar (junto con su tema): GOTO; (General), Strange Loop (General), PyCon (Python), CPPCon (C ++), DEF CON (Seguridad), Fluent (Web dev). ¡Todos estos también tienen videos de (la mayoría) de las charlas en YouTube, por lo que podrá aprender algo incluso si no puede asistir!
Con suerte, este artículo le ha proporcionado el conocimiento de lo que puede esperar desde el comienzo de su carrera como ingeniero de software y le ha proporcionado las herramientas para desempeñarse bien en este emocionante viaje. ¡Gracias por leer! Si tiene alguna pregunta o sugerencia, deje un comentario o envíe un tweet a @AlexievValeri.