Este artículo trata sobre mi experiencia buscando trabajo en Japón, las dificultades de adaptación y algunos consejos útiles para programadores principiantes.
Educación
Me gradué de la Universidad Estatal de Moscú con una Licenciatura en la Facultad Lomonosov de Matemáticas Computacionales y Cibernética. Este programa es algo así como una combinación de educación en Matemáticas y Ciencias de la Computación.
Los primeros dos años cubren de manera muy completa los fundamentos de las Matemáticas Superiores y la Programación. En el tercer año se elige una dirección más específica al ingresar a uno de los 16 programas. Cuando llegó mi turno, elegí casi por casualidad el Departamento de Programación de Sistemas, donde tomamos cursos como: sistemas operativos, bases de datos, compiladores, procesamiento del lenguaje natural, programación web, aprendizaje automático y gráficos por computadora.
Experiencia laboral antes de Amazon
Mail Ru Group en Rusia: 1,5 años. A tiempo parcial, ya que combiné el trabajo con los estudios durante los años de tercer y cuarto curso. Fue allí donde adquirí la experiencia necesaria como desarrollador novato, lo que me ayudó más adelante en mi carrera.
Rakuten en Japón: 6 meses. Trabajé en Rakuten solo medio año y, sinceramente, puedo decir que cometí un error con el equipo en el que me metí. ¡Pero de cualquier situación se puede aprender algo!
Aplicando a Amazon
Proceso de aplicación
El proceso de aplicación fue bastante estándar - tenía mi currículum, creé un perfil de LinkedIn y comencé a agregar a mis amigos y sus conocidos de mi industria como contactos. Eventualmente fui contactado por una agencia de reclutamiento y comencé el proceso de enviar mi currículum a Amazon e Indeed. Además de eso, también apliqué a Google a través de su sitio web oficial.
Mi recomendación general aquí es construir conexiones dentro de tu industria, ya que te ayudarán en el futuro.
Para grandes empresas, se recomienda aplicar a través de referencias (recomendaciones de empleados internos), ya que esto ayuda a que tu currículum pase la selección inicial automática.
Preparándose para una entrevista
La siguiente etapa es una entrevista, que generalmente consta de 3 partes:
Tareas de programación
Diseño de sistemas
Preguntas sobre habilidades blandas
Programación. El libro Cracking the Coding Interview es muy adecuado para prepararse para este tipo de entrevista, así como resolver problemas en leetcode (sección "Top interview questions"). También puedes mirar codeforces, algoexpert (de pago). Además, hay muchos canales de YouTube donde se explican algoritmos.
Diseño de sistemas. Esto es más complicado. De nuevo, puedes mirar el libro Cracking the Coding Interview, pero principalmente terminé buscando en Google desafíos para Entrevistas de Diseño de Sistemas.
Habilidades blandas. Aquí te aconsejo que describas todos tus proyectos significativos según la metodología STAR, para que puedas dar rápidamente ejemplos de diferentes situaciones de tu experiencia profesional. Ejemplo de preguntas: "Cuéntame sobre una vez que estuviste en desacuerdo con un gerente.", "Cuéntame sobre una vez que tuviste plazos muy ajustados y no tuviste tiempo para terminar un proyecto." etc.
Entrevista
El proceso de entrevista es bastante estándar para todas las grandes empresas internacionales (FAANG) y consiste en:
Llamada con un reclutador para discutir tu situación actual, qué estás haciendo ahora, qué países estás considerando, qué áreas de trabajo te interesan.
Prueba en línea. Generalmente te dan 1.5 horas, durante las cuales necesitas resolver 2 tareas de programación competitiva. Un ejemplo de sitio al que te enviarán es codility.
Entrevista por video (evaluación telefónica). La entrevista dura 45-60 minutos. Durante la entrevista te dan dos tareas, y tienes que explicar tu línea de pensamiento, describir la solución, nombrar las complejidades correctas de tu algoritmo y escribir el código. Amazon también te hace preguntas sobre habilidades blandas durante 15-20 minutos.
Entrevistas presenciales (onsite). Vienes a la oficina de la empresa durante uno de los días laborables y pasas por 4-5 entrevistas seguidas con un descanso para almorzar después de la segunda entrevista. La mayoría de las veces, una de las entrevistas es sobre Diseño de Sistemas, y todas las demás son algo similares a la evaluación telefónica, solo que esta vez es cara a cara. Para el almuerzo, uno de los empleados se encargará de ti, a quien puedes hacerle cualquier pregunta sobre la empresa.
Otro punto importante:
Entrevista a tu empleador. No le había dado mucha importancia hasta ahora, pero entrevistar es un proceso bidireccional. No solo la empresa está tratando de averiguar si eres adecuado para ellos, sino que tú también necesitas determinar si quieres trabajar para esa empresa. Piensa cuidadosamente en las preguntas que le harás a tu posible gerente. ¿Quieres entender si los empleados de esta empresa están calificados? ¿El ambiente de trabajo es cómodo? ¿Los procesos dentro de la empresa están bien ajustados?
Habilidades a desarrollar
Habilidades blandas
Capacidad para ver la causa raíz del problema, y no intentar resolver ciegamente la tarea que se te ha asignado. ¿Por qué surgió tu tarea en primer lugar? Tal vez esté dirigida a resolver un caso especial que puedes generalizar y resolver un grupo de problemas en su lugar. No limites tu pensamiento a la tarea que tu gerente te ha dado.
Comunicación oportuna. Recuerda que estás trabajando en equipo, y es muy importante comunicar el estado de tu tarea de manera oportuna. De lo contrario, puedes ralentizar a todo el equipo.
Capacidad para trabajar de forma independiente. Es importante ser un ingeniero autónomo que no requiera microgestión. Debes ser capaz de obtener respuestas a la mayoría de las preguntas que tengas por tu cuenta. No lo confundas con quedarte atascado en un problema. Si te encuentras con un problema que no puedes resolver por ti mismo (ya has agotado todas las opciones disponibles), entonces contacta a tu gerente o mentor para obtener ayuda.
Capacidad para pedir y recibir retroalimentación. Antes de tomar decisiones clave mientras trabajas en un proyecto, considera diferentes enfoques y enumera los pros y contras de ambos. Muestra tus pensamientos a tus colegas y averigua qué piensan al respecto.
Capacidad para transmitir información. En cualquier etapa de tu carrera, tendrás que llevar a cabo discusiones y sugerir tus ideas a diferentes personas. Es importante poder transmitir tu punto de vista de manera concisa y clara. Mejor aún si puedes documentarlo bien por escrito.
Habilidades técnicas
Diseño de sistemas. Cuando trabajes en un proyecto maduro, trata de entender cómo funciona el sistema en su conjunto y cuáles fueron las razones de todas las decisiones clave. El Diseño de Arquitectura de Sistemas es una de las habilidades más esenciales para un Ingeniero de Software. ¿Almacenas datos en caché? ¿Cómo se realiza el balanceo de carga? ¿Qué sucede si uno de tus servidores se cae?
Proceso de implementación. El despliegue es una parte muy importante del proceso de desarrollo. ¿Cómo puedes implementar el sistema de manera que tu servicio no deje de procesar las solicitudes de los clientes?
Pruebas de estrés. Las pruebas de estrés son muy útiles para sistemas de alta carga. Si estás trabajando en uno de estos, te recomiendo que aprendas más sobre este tema.
Análisis de registros. Esto no se suele enseñar en las universidades, pero es una habilidad muy importante. ¿Por qué tu sistema está dando resultados incorrectos en algunas entradas? ¿Cómo entender dónde está el error? ¿Cómo analizar los registros y procesarlos correctamente?
Acostumbrándome a Japón
Mi primera empresa en Japón (Rakuten) es considerada una de las compañías japonesas líderes en cuanto a la creación de un ambiente laboral internacional. Por lo tanto, la adaptación a la cultura japonesa fue mucho más fácil para mí que si hubiera trabajado en una empresa japonesa típica (he oído que es bastante malo allí).
A pesar de lo anterior, aún me encontré con una gestión japonesa ineficiente. Aquí hay algunas características negativas de la cultura laboral japonesa en mi opinión:
Sistema jerárquico fuerte. El jefe siempre tiene la razón.
El enfoque no está en el resultado, sino en el proceso. Esto lleva a que las personas se queden en el trabajo durante 12 horas, trabajando de manera muuuuy ineficiente. Muchas personas permanecen en la oficina desde la mañana hasta la noche.
Responsabilidad poco clara. En la cultura laboral japonesa, es muy difícil conseguir que una persona asuma la responsabilidad de algo.
A pesar de esto, también hay ventajas:
Trabajo de alta calidad. Los japoneses harán todo como se les indica, siguen estrictamente las instrucciones. Lo más probable es que sea lento, pero revisado 100 veces.
Menos disputas, ya que las decisiones de la dirección suelen ser inamovibles.
Personalmente, me encontré con todos los problemas mencionados, pero gracias a Rakuten en una forma más suave.
Hablando del trabajo en sí, no puedo identificar ningún problema. No hubo nada extraordinario que difiriera de mi trabajo en Mail Ru. La única incomodidad fue que tuve que adaptarme a trabajar en inglés.
Vale la pena decir que en empresas tan grandes como Rakuten, Amazon y Mail Ru, mucho depende del equipo en el que te coloquen. En dos equipos dentro del mismo departamento, todo puede estar organizado de manera completamente diferente.
En el caso de Amazon, la situación es completamente diferente. Como trabajo en un departamento con sede en Silicon Valley, tenemos un ambiente muy occidental. No vi ningún signo de la cultura laboral japonesa descrita anteriormente.
Mi día típico en Amazon
Horario laboral. Antes de que comenzara toda la situación del coronavirus, solía trabajar desde las 11 AM hasta las 7-8 PM. Dos veces por semana teníamos reuniones matutinas con parte de nuestro equipo de Silicon Valley, por lo que teníamos que empezar a las 9 AM.
Las horas totales de trabajo generalmente dependen de los plazos del proyecto. En general, la jornada laboral es de 9-10 horas (incluyendo el almuerzo), pero si los plazos son ajustados, puede llegar a 12-15 horas y trabajo extra los fines de semana. De nuevo, mucho depende del equipo con el que trabajes.
Reuniones. En este momento, nuestro equipo tiene solo 2 reuniones semanales, durante una de las cuales informamos sobre el estado actual de las tareas en las que estamos trabajando. Se utiliza un Kanban Board (como Trello) para la visualización, y algunas tareas también se dividen en sprints de scrum.
Durante la segunda reunión practicamos el intercambio de conocimientos, que puede ser útil para otros colegas. A menudo discutimos posibles soluciones a problemas que afectan a todos los miembros del equipo.
Además, tengo reuniones individuales semanales con mi gerente y mentor, donde podemos discutir cualquier cosa, desde el clima de hoy hasta el plan del próximo año para obtener un ascenso.
Responsabilidades laborales. Todos los equipos están estructurados de manera diferente, pero en mi caso, cada uno de los desarrolladores trabaja en su propio proyecto, o a veces 2 desarrolladores en un proyecto. Además, tenemos responsabilidades que se dividen equitativamente entre todos los miembros del equipo. Por ejemplo, actualizar la configuración de algunos sistemas.
Cada equipo de Amazon tiene algo llamado "oncall" - una persona responsable de procesar todas las solicitudes recibidas por el equipo. Podría ser explicar cómo funciona tu sistema, o verificar por qué falló uno de tus componentes. Generalmente, el deber de oncall se rota semanalmente entre todos los miembros del equipo.
Gimnasio. Trato de ir al gimnasio antes del trabajo 2-3 veces por semana. Afortunadamente, vivo a 12 minutos a pie de la oficina y hay un gimnasio en el camino, así que no gasto mucho tiempo en el trayecto (este fue uno de los principales criterios para elegir un apartamento).
Cafeterías. Bueno, la comida en Japón es muy deliciosa y baja en calorías. Por lo tanto, generalmente como en dos cafeterías internas de nuestra oficina (disponibles solo para empleados).
Horario. El horario es totalmente libre. Lo principal que se requiere de ti es el resultado de tu trabajo. Mientras cumplas con todas tus responsabilidades, nadie te forzará a seguir un horario.
Por supuesto, es deseable que te reúnas con tus colegas durante el trabajo, ya que pueden necesitarte para discutir urgentemente algunos asuntos laborales. Además, ¡sería bueno mantener buenas relaciones con tus colegas y pasar más tiempo con ellos!
Salario
No puedo revelar la cantidad exacta, pero para Tokio, se puede encontrar un rango salarial bastante preciso en Japan Dev. Si estás interesado en otras ciudades, te recomendaría consultar los salarios en Glassdoor.
El salario es suficiente para una vida cómoda para mí y mi esposa en Tokio. Esto incluye el alquiler en una de las áreas centrales, reuniones semanales con amigos, ir a cafeterías y al karaoke :) Al mismo tiempo, durante los meses sin grandes gastos, puedes ahorrar hasta el 30-40% de tu salario.
Diversidad en Amazon
A veces tengo la sensación de que en Amazon Japón solo trabajan extranjeros, especialmente entre los ingenieros de software (por supuesto, en el lado comercial hay muchos japoneses). Por ejemplo, en nuestro departamento de búsqueda, solo hay 5 japoneses de un total de aproximadamente 40 personas. Hace un año, cuando conseguí mi primer trabajo en Amazon, había 5 desarrolladores de habla rusa en nuestro departamento.
Ventajas y desventajas
Lo que más me gusta de mi trabajo es el hecho de que aprendo algo nuevo cada día. No se trata necesariamente de tecnologías innovadoras, sino que a menudo se aprenden habilidades blandas muy importantes: gestión de proyectos, habilidades empresariales, comunicación entre los miembros del equipo para lograr el resultado más eficiente.
Además, siempre puedes tomar la iniciativa al elegir los proyectos en los que quieres trabajar. ¿Te interesan los sistemas de alta carga? El gerente intentará encontrar la tarea más adecuada para ti y, en algunos casos, te apoyará cuando te muevas a otro equipo dentro de la empresa.
Creo que, como todos los demás, no me gusta mucho trabajar en tareas repetitivas a las que tengo que dedicar cierta cantidad de tiempo semanalmente. Estas son las tareas que son bastante difíciles de automatizar.
Además, en situaciones en las que estás trabajando en proyectos importantes, puedes encontrarte con burocracia de una forma u otra, lo que sin duda ralentiza tu trabajo.
Últimas palabras de consejo
Necesitas entender qué te interesa y qué es exactamente lo que quieres construir. Pensar en términos de qué lenguaje deberías aprender primero no es del todo correcto. ¿Te gustan las páginas web? ¡Empieza creando una página sencilla! ¿Alguna vez has querido ser desarrollador de juegos? Intenta implementar un juego simple. Ahora hay tanta información en Internet, ¡solo necesitas querer usarla!