JavaRush /Blog Java /Random-ES /Cómo un viejo humanista llegó a TI
PieIsLie
Nivel 35
Санкт-Петербург

Cómo un viejo humanista llegó a TI

Publicado en el grupo Random-ES
¡Fuegos artificiales! En realidad, durante mucho tiempo pensé qué escribiría exactamente en esta publicación y si lo escribiría o no. Dio la casualidad de que en diferentes períodos de los últimos dos años evalué mis posibilidades de conseguir un puesto de desarrollador Java de diferentes maneras: desde "tarde o temprano, definitivamente" hasta "no tengo ninguna posibilidad en TI". Cómo un viejo humanista llegó a TI - 1Sin embargo, han pasado casi exactamente dos años desde que me registré en JavaRush. Hace un par de meses recibí mi primera oferta, un poco después recibí la segunda y luego comencé un nuevo trabajo. Las historias de éxito me ayudaron mucho durante el curso, así que decidí publicar la mía. Dado que el curso se llevó a cabo en 2018, es posible que parte de la información no esté actualizada. Diré de inmediato que habrá mucho texto, porque... Intentaré hablarte sobre formación y búsqueda de empleo (requisitos, respuestas, especificaciones técnicas, entrevistas, etc.). También escribiré un par de consejos generales que me ayudaron personalmente y pueden ayudar a otros. Brevemente sobre mí: 32 años, 10 años de experiencia en gestión y ventas, educación en artes liberales y absolutamente ninguna formación técnica. Hace varios años intenté ingresar a C++ y luego a Python; lo único que obtuve fue dolor de cabeza. Por lo tanto, es difícil llamarme un desarrollador talentoso: más bien todo lo contrario.

ETAPA 1. Formación

Llegué a JavaRush conscientemente: una lista de precios mensual adecuada, una estructura clara del material, mucha práctica y la presencia de mi propia comunidad. El primer punto está claro, pero aprender un lenguaje sin estructura es bastante difícil y dicha formación seguramente dejará a una persona con graves lagunas en Java Core. La experiencia de las entrevistas y las especificaciones técnicas muestra que las preguntas sobre el "núcleo" se pueden utilizar para todo: desde el desplazamiento bit a bit y la conversión de genéricos hasta IO y serialización. La práctica es imprescindible; Todavía sólo puedo entender y recordar la mitad de las cosas si las escribo yo mismo. Bueno, comunidad: resolviste el problema; presume de ello en los comentarios; Si no lo ha decidido, puede hacer preguntas, pero lo más probable es que nadie le dé una solución preparada. Y volví a artículos personalizados sobre temas gratuitos incluso después de terminar el curso, hay muchas cosas buenas para empezar (especialmente la primera experiencia con frameworks usando ejemplos paso a paso + preguntas para entrevistas). En general, estoy agradecido con este proyecto por la base que recibí, pero no confiaría solo en JavaRush: el mismo Shildt es el que mejor se "superpone" sobre el tema en estudio y, a menudo, revela algunos puntos. En las reseñas ya se ha dicho mucho sobre tareas que a veces van más allá de la teoría y te obligan a buscar en Google. Para mí, esto es más una ventaja que una desventaja, y no es un hecho que ahora la situación sea la misma que cuando estudiaba. Un consejo inmediato para aquellos que, como yo, entran en Java “desde cero” : en algún momento puede que te aburras o te resulte difícil:
  1. Es difícil para todos empezar de cero, Dios no lo quiera, sólo el 5% de las personas llegan al final del curso. Tu tarea es convertirte en uno de ellos.

  2. Me interesé después de uno o dos meses, cuando las tareas se volvieron más difíciles e interesantes. Ser paciente.

  3. Lo principal es el progreso semanal. Después de dos semanas de descanso, ya es difícil regresar y no todo el mundo puede escribir todos los días durante varios meses seguidos. Establezca un límite de horas para la semana, por ejemplo, 15. Puede codificar 1,5 horas todos los días laborables y otras 3 o 4 horas ambos fines de semana, o puede tomarse un par de noches libres, pero el “límite de fin de semana” aumentar. De esta forma, el horario será flexible, pero regular. Por supuesto, entonces será posible medir el trabajo por tareas y proyectos, pero a nivel de sintaxis y núcleo, las horas bastarán.
En general, me tomó alrededor de 5 meses completar el curso (antes de acceder a las prácticas) , a pesar de que podía permitirme tanto vacaciones como escapadas cortas; Una vez más, trabajar cinco días a la semana solo dejaba libres los fines de semana y las tardes entre semana de 22 a 00. Por lo tanto, con un horario más flexible o un régimen de entrenamiento más rígido, puedes afrontarlo mucho antes. Luego planeé hacer unas prácticas, pero al final no funcionó.

ETAPA 2. Autoeducación

Así que no conseguí la pasantía: solo dejé un par de días para los requisitos técnicos hasta el final de la incorporación al grupo y no tuve tiempo de averiguar los requisitos: había demasiadas palabras desconocidas. Porque No quería esperar otros tres meses, decidí seguir adelante. Afortunadamente, existen guías y tutoriales en vídeo para todos los marcos populares. Durante los siguientes meses, trabajé con Spring MVC, Spring Boot + Data, Spring Security, Hibernate, jUnit, Maven, Git, RDBMS, dominé SQL y traté de juntarlo todo en un solo todo. Seis meses después, tuve proyectos que ahora dan miedo ver, pero adquirí experiencia práctica en el uso de marcos "para adultos" y un GitHub que podría mostrarse a pedido de un empleador potencial. Consejo :
  1. Cuanto antes aprenda sobre .gitignore, mejor. ;)

  2. Muchas guías incluyen varios marcos a la vez; usa esto y agrega el tuyo propio. Escribimos una tienda en línea usando Maven + Spring Boot + Data: agregamos autorización, pruebas unitarias y registro.

  3. Para proyectos web, puede tomar plantillas de interfaz gratuitas de Internet: es más agradable trabajar con ellas y se ven mejor como capturas de pantalla en el archivo README de Git. Al mismo tiempo, podrá recordar HTML y CSS; probablemente desee corregir los estilos y el diseño.

La forma más sencilla de crear un plan de desarrollo de este tipo es consultar HH para las vacantes de Desarrollador Java Junior/Middle y ver qué tecnologías y marcos se indican con mayor frecuencia. Anótelos, proponga especificaciones técnicas para ellos, fíjese los plazos de implementación. Aunque, tal vez si comenzara con una pasantía local, no tendría que dedicar varios meses a proyectos domésticos.

Lo que me faltaba (luego me quemé durante una entrevista)

  1. Algoritmos. Para evitar mis errores, recomiendo inmediatamente un libro breve en ruso, "Grocking Algorithms". ¿Cuál es la complejidad de los algoritmos, en qué consisten, por qué la clasificación rápida no es suficiente, una introducción a la teoría de grafos? Todo está ahí y en el lenguaje más comprensible.

  2. Colecciones "bajo el capó". No recuerdo si esto fue en JavaRush, pero es útil saber cómo funciona HashMap.get() o por qué no se garantiza que un HashSet conserve el orden de los elementos. Nuevamente, qué colecciones son seguras para subprocesos y por qué.

  3. SQL. Necesita al menos hasta JOIN: qué son, cómo funcionan, la capacidad de escribir un SELECT en dos tablas en papel sobre la marcha. Recomiendo www.sql-ex.ru: lo llevará al nivel deseado en uno o dos días.

  4. Spring Core: qué anotaciones hay, qué es un contexto, cómo se crean los beans, qué Bean Scope es seguro para subprocesos y cómo resolver la inyección mutua: todas las preguntas de la entrevista. Cómo devolver una página, cómo devolver JSON, etc. Actualmente estoy leyendo "Spring 5 para profesionales" en ruso, pero en general recomiendan "Spring in Action".

ETAPA 3. Búsqueda de empleo

De hecho, en los primeros meses después de completar los proyectos del hogar, envié alrededor de 30 respuestas a varias vacantes Junior\Trainee (a través de HH, LinkedIn, agencias de contratación), con resultados casi nulos. Me concentré solo en vacantes sin experiencia, indiqué honestamente una pila que conocía y escribí sobre mi alta capacidad de aprendizaje en cartas de presentación. El resultado fueron dos llamadas (una de las cuales terminó inmediatamente en mi inglés pre-intermedio), dos empresas más enviaron especificaciones técnicas, solo hubo una “reunión” y luego yo estaba allí solo resolviendo problemas de algoritmos en una hoja de papel, Después de lo cual RR.HH. simplemente se llevó los papeles y dijo: "Te llamaremos". Intenté conseguir un par de prácticas (no remuneradas y remuneradas condicionalmente): hice la especificación técnica, pero no pasé de la seguridad social final; pero ahora puedo decir que los aprendices definitivamente son reclutados por T-Systems, CFT, Andersen y EPAM (tienen críticas mixtas, decida usted mismo). En cuanto a mí, es una buena manera de ingresar al campo si tienes la oportunidad de sentarte sin ingresos durante varios meses y no morir =) En general, después de esta experiencia me deprimí un poco y puse en pausa toda la historia con la búsqueda. Durante casi seis meses, seguí trabajando en el perfil anterior, escribí algunas aplicaciones solo por diversión, pero ni siquiera las publiqué en Git. Hasta que conocí a un conocido, a quien le conté casualmente sobre los fracasos con las vacantes: en ese momento él ya estaba trabajando como desarrollador intermedio, pero comenzó de la misma manera: con el autoaprendizaje. Un conocido me dio un par de recomendaciones , que él mismo utilizó y que me ayudaron mucho en mi búsqueda de empleo en el futuro. Si los sigues o no, depende de ti, porque... De alguna manera, no son del todo honestos. Entonces, más citas:
  • De cualquier manera, incluya más de 6 meses de experiencia comercial en su currículum: pasantías, proyectos de graduación, trabajo independiente, trabajo remoto, lo que sea. Esto será de gran ayuda en la etapa de selección inicial de currículums por parte de RR.HH.;

  • elimine la palabra Junior y el salario esperado de su currículum; simplemente déjelo como desarrollador de Java y discuta el dinero individualmente con cada empresa;

  • Intente que RR.HH. nombre la “bifurcación” del salario propuesto antes de nombrar sus expectativas. Si una empresa ofrece entre 80.000 y 120.000 y usted busca 40.000 o más, algunos selectores lo tratarán con desdén;

  • Postúlate a todas las vacantes que se adapten a tus necesidades, incluso si requieren de 1 a 3 años de experiencia comercial.

Después de seguir todas estas recomendaciones, la situación de la búsqueda mejoró significativamente. En primer lugar, de aproximadamente 12 respuestas nuevas, la mitad terminó casi de inmediato en una reunión, Skype o TK (lo que ya era muy diferente de lo que se había ignorado en meses anteriores). En segundo lugar, la gente de RR.HH. empezó a escribirme, a lo que no respondí, en mensajería instantánea, por correo, en LinkedIn. En tercer lugar, los requisitos de experiencia comercial resultaron no ser demasiado estrictos: muchas empresas estaban dispuestas a comunicarse con un candidato que no se encontraba dentro del rango especificado de 1 a 3 años de práctica corporativa. Como resultado, una oferta para un junior y otra para un middle con un período de prueba. En total, la búsqueda duró dos meses. Consejo :
  1. Incluya en su currículum toda la pila de lenguajes, tecnologías y marcos con los que ha trabajado.

  2. Regístrese en LinkedIn: allí hay mucha gente de RR.HH. de diferentes empresas. Complete su perfil con cuidado; de hecho, este también es su currículum. Para desarrollar su red de contactos, agregue LIONs relevantes a su perfil; ellos aceptan solicitudes de todos los usuarios.

  3. Pruebe usted mismo las pruebas de Java gratuitas; a menudo se entregan en papel antes de la entrevista para jóvenes. Es mejor prepararse con antelación.

Algunas palabras sobre las entrevistas.
  1. Siempre preguntan por las colecciones: cuáles hay, en qué se diferencian, cuándo es el mejor momento para usarlas.

  2. Siempre en clases e interfaces abstractas: ¿pueden tener métodos, campos y cuáles?, ¿pueden heredarse, etc.?

  3. Casi siempre en subprocesos múltiples: lo que usó en su trabajo, palabras clave, métodos, ¿está familiarizado con util.concurrent?

  4. A menudo, cuando se trabaja con memoria: el montón, la pila y estas cadenas serán iguales, y estos objetos, por qué.

  5. A veces, sobre algoritmos: cuáles conoce, qué complejidad, por qué, ¿puede escribir un algoritmo ahora?

  6. A veces, según los patrones: cuáles conoce, cuáles usa, escriba un singleton o una fábrica.

  7. A veces, en SQL: tipos de JOIN, qué es una transacción, cómo realizarla en JDBC, escriba una breve consulta.

De hecho, todo depende en gran medida de la empresa : alguien no hace una sola pregunta sobre Java Core, pero pasa 40 minutos hablando sobre frameworks y SQL; Algunas personas no utilizan marcos populares en absoluto y sólo preguntan sobre algoritmos, tipos, colecciones y memoria. Aproximadamente la mitad de las reuniones comenzaron con pruebas, a veces en ruso, a veces en inglés (20 a 30 preguntas durante 20 a 30 minutos); Por lo general, preguntas del nivel "aquí está el código, se ejecutará o no, y si no, en qué línea" o "aquí hay varios objetos, serán iguales después de N operaciones". Unas palabras sobre las especificaciones técnicas : el 70% de las empresas que inician la comunicación me enviaron especificaciones técnicas antes o después de la reunión. Por lo general, la finalización se da desde un par de días hasta una semana, pero la mayoría de las veces los plazos se pueden retrasar un poco. Cualquier cosa puede usarse como especificaciones técnicas. Aquí están los ejemplos que hice:
  • Página de contactos comerciales del perfil de Salesforce con edición y adición de nuevos registros;

  • simulación de un ascensor en un edificio de varios pisos utilizando Spring State Machine con control de consola;

  • Aplicación de Android basada en la biblioteca LibGDX con salida de texto carácter por carácter cuando se presiona un botón;

  • Imitación REST del uso compartido de automóviles, con la adición de clientes mediante solicitud HTTP y devolución de JSON;

  • problema de ordenar un gráfico no dirigido a través de una celda libre;

  • buscar triángulos isósceles usando coordenadas de un archivo;

  • refactorización de código terminado usando Stream API;

  • Calculadora de interfaz de usuario con soporte para expresiones ternarias;

  • carrera de hilos con la escritura de los resultados en un archivo.

A veces se solicita que los métodos de cálculo se cubran con pruebas unitarias y que los métodos de consulta se cubran con pruebas de integración. Consejo :
  1. Intente no solo completar la tarea, sino también asegurarse de que el código cumpla con los principios de programación orientada a objetos.

  2. Verifique la eficiencia de su código: una vez me rechazaron porque, entre otras cosas, usé PrintStream en lugar de BufferedWriter.

  3. Planifica tu tiempo de ejecución con un margen del 50%: es mejor comenzar y terminar antes que hacer un git push a las ocho de la mañana de la fecha límite.

Bueno, todo lo que quería, creo que lo escribí. Lo más importante es que el agua desgasta las piedras. No se puede escribir mucho, mucho en Java, luego buscar trabajo durante mucho, mucho tiempo y al final no encontrar nada. Si un especialista en humanidades de 30 años lo logró, tú puedes hacerlo aún mejor. Lo principal es no tener miedo de las primeras llamadas, encargos técnicos y entrevistas: después de cada fracaso, tenía la garantía de aprender algo por mí mismo y mejorarlo; cuanto más tiempo, más confianza te sientes. Si en algún lugar resultó caótico o hay errores, le pido disculpas de antemano, escriba y lo corregiré. Espero que mi experiencia ayude al menos a alguien =)
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION