Desarrollador en un sitio remoto: desde cero hasta un héroe

Recientemente, un número cada vez mayor de personas comienza a soñar acerca de cómo se quedarán en casa, escriben proyectos geniales en un equipo distribuido, acarician a un gato debajo de una taza de café casero y sacan un buen dinero para ello. Y, de hecho, no tiene nada de malo, miles de desarrolladores trabajan de esta manera. Sin embargo, los muchachos que no tienen suficiente experiencia a menudo comienzan a hablar de esto, y en realidad es poco probable que puedan obtener ese trabajo sin obtener experiencia en combate en la oficina.



Jones en el control remoto no son necesarios


Como les gusta decir a los muchachos de Toaster, en particular los curadores de la mayoría de las secciones, no necesitan ningún jones en un sitio remoto, al igual que la probabilidad de ganar algo de junio en freelance. Y realmente lo es. Pero también todos saben que siempre habrá una persona que hará lo que se consideró casi imposible.

Entonces, mi nombre es Sergey, soy un desarrollador empresarial, vivo en la ciudad de Ussuriysk (Primorsky Krai, 200,000 habitantes, +7 horas con Moscú), no tengo una educación especializada y no he trabajado en la oficina como desarrollador por un día. Y esta historia trata sobre cómo llegué a esa vida.

No me propongo inspirar a los muchachos de la provincia para que se apresuren y empiecen a buscar trabajo en un sitio remoto. Quiero mostrar esa gran cantidad de tiempo que pasé para convertirme en desarrollador (sin duda, si hubiera una "oficina" en mi ciudad, lo habría hecho mucho más rápido).

Despues de la universidad


Inicialmente, planeaba trabajar en el sector del juego, así que después de la escuela fui al "Servicio sociocultural y turismo", pero la ley de la Federación de Rusia sobre la prohibición de las actividades de juego salió el segundo año. Aunque vivo en el Territorio Primorsky, donde se suponía que el casino se construiría en 2012, todos los plazos se habían roto y, de hecho, cuando me gradué, no había nada. Más precisamente, había casinos subterráneos, pero estos eran los lugares donde definitivamente no querrías trabajar.

Como resultado, primero conseguí un trabajo en una empresa mayorista de arroz, luego dejé el lugar como instalador de conexión a Internet y luego en apoyo de 1C-Franchisee. Todo tomó alrededor de un año y medio. Como dicen, en manos de un diploma rojo de la universidad, y todas las puertas están abiertas frente a ti.

Soporte técnico


Todo este tiempo estuve buscando algo más adecuado, y un día en My Circle vi una vacante en soporte técnico nocturno. Pensé que, teniendo en cuenta mi zona horaria, 7 am en Vladivostok, son 0-00 en Moscú, puedo trabajar el turno de noche prácticamente durante el día. Respondí, hablé y conseguí un trabajo.

Naturalmente, así no se tomará a la persona izquierda en apoyo. Me ha gustado la construcción de sitios desde la escuela e hice varios sitios para mi equipo dotka y el club de juego local. Además, debido a mi educación, tenía suficiente inglés, lo que me permitió también brindar apoyo a clientes de Australia, Nueva Zelanda y EE. UU. De hecho, tenía el nivel de un buen webmaster con inglés, además de experiencia de soporte de 1C.

Seguir adelante


En uno de los congresos corporativos, hablé con los chicos del departamento de desarrollo, y me di cuenta de que los temas discutidos no eran algún tipo de "ciencia espacial", y que yo también podría intentarlo. Además, la educación formal, aunque era humanitaria, pero aún teníamos matemáticas, estadísticas, economía, contabilidad y programación, así que no tenía mucho miedo a las fórmulas y los números.

Era 2014, en todos lados gritaban que el php apesta, que Python es el futuro, etc. (¡Qué ingenuo y estúpido fui!). Entonces comencé a aprender programación de él. Como lo hice

1) Descargué los libros de Mark Lutz "Learning Python", "Programming in Python". Los libros eran bastante difíciles, porque leerlos era extremadamente aburrido, sin embargo, daban una muy buena base. Si tiene la opción de comenzar rápidamente o leer algún libro fundamental sobre programación, le recomiendo comenzar con el segundo para obtener la base necesaria. Es importante entender, no solo "Cómo", sino también "Por qué" y "Por qué".

Después de los libros, decidí jugar un poco y comencé a escribir varios analizadores para portales de juegos (Brablay / GoodGame) para recopilar estadísticas sobre ciertos temas. En particular, fue interesante ver cómo ciertas personas dejan comentarios, en particular su gran número.

2) Luego decidí hacer algo más significativo y armar un portal de artículos en Python. Leí un libro sobre Django (para ser sincero, no lo entendí mucho, la información se dio demasiado rápido y demasiado "vacío"). Así que vi un par de videos introductorios sobre Django desde ITVDN y recurrí a la documentación oficial.

Durante 4 meses de desarrollo, me acostumbré al diseño, entendí cómo trabajar con la base de datos, escribir migraciones, configurar SSL, etc. Como resultado, el año siguiente lo dediqué a lanzar una serie de mis propios proyectos y a desarrollar sitios pequeños para niños locales (sitio de entrega directa, tienda de bicicletas, tienda de nutrición deportiva, etc.).

3) Después de un año, me aburrí de desarrollar proyectos en Django. Comencé a buscar qué más se podía pensar en Python. Probablemente leí todos los libros de Python que estaban en el sitio web de Ozon. A partir de un libro sobre Devops, que termina con visión por computadora y aprendizaje automático. Estos temas realmente no me inspiraron (no vi el valor aplicado en mi escala que puedo usar aquí y ahora), pero estos términos de alguna magia desconocida y "skynet" se convirtieron en fórmulas ordinarias y bibliotecas aplicadas.

4) Al final, decidí aumentar un poco mi nivel de alfabetización informática y comencé a leer libros sobre C / C ++ / Java / Computer Networks / PostgreSQL / TDD y patrones corporativos. Para ser honesto, una experiencia interesante cuando comprende cómo funciona otra tecnología, en qué se basa, qué desafíos conlleva y cómo resuelve "problemas complejos" de su pila.

Por separado, podemos mencionar el libro sobre Spring, que mostró lo mucho más compleja que es una aplicación empresarial que un proyecto "fácil" en Django.

Pruebas y pruebas automatizadas


Después de tres años de trabajo de apoyo, desafortunadamente, se me negó el acceso al departamento de desarrollo, pero había una oportunidad de obtener un puesto en el departamento de pruebas. En ese momento, conocía Python libremente y podía hacerlo en Java, por lo que sería una tontería estar en desacuerdo.

El departamento de pruebas dio una comprensión bastante buena de cómo se están desarrollando sistemas complejos, cómo los equipos interactúan entre ellos y entre sí. Configuración de varios entornos de prueba, priorización de tareas y mucho más.

Naturalmente, esta es la automatización de las pruebas de selenio con pruebas de sacudidas a través de jenkins cuando se lanzan nuevas compilaciones.

También me gustó el tema del diseño de pruebas. La compañía tenía un gran grupo de varios cursos de prueba, por lo que podría aprender muchos chips geniales con ellos que nunca antes había pensado en el campo del diseño de pruebas. Por ejemplo, diseñando el número mínimo de casos de prueba para cubrir el mayor número de variantes del sistema utilizando generadores por pares (http://www.pairwise.org/). Estas son cosas interesantes del trabajo de QA-Engineer, en el que muchos desarrolladores ni siquiera piensan.

Transición al desarrollo


Después de un año y medio en el departamento de pruebas, obtuve un acuerdo de que si proporciono un prototipo funcional en la pila de php, tendré la oportunidad de realizar una pasantía en el departamento de desarrollo.
Pasé un mes en libros sobre PHP. Después de Python y Java, dominar PHP resultó ser bastante fácil, aunque de vez en cuando aparecían las preguntas "¿Por qué no aquí así?".

Y pasé tres meses en el servicio API de Symfony (bozal web, cuenta personal, lógica de negocios, notificaciones por correo, generador de pdf, análisis de estructuras json complejas y más). De repente, resultó que Symfony es una especie de híbrido de Django y Spring, por lo que no hubo problemas de comprensión.

Como resultado, mostré mi proyecto y obtuve una pasantía en el departamento de desarrollo, desde donde ya me transfirieron a un desarrollador de pleno derecho.

Primeros meses como desarrollador


Me dieron un mentor que realmente revisó mi código y sugirió por qué debería hacer esto y no de otra manera. A veces las llamadas duraban entre una hora y media o dos, cuando el código se analizaba en detalle en el balón y se daban recomendaciones sobre cómo mejorarlo. De hecho, resultó que tomé decisiones en el momento correcto con la lógica correcta, pero debido al hecho de que no tenía experiencia en desarrollo corporativo, resultaron ser demasiado confusas y complicadas. Además, de vez en cuando había preguntas sobre el trabajo de Redis / RabbitMQ / Elastic, etc. Pero aún así, el trabajo principal se llevó a cabo en el campo para simplificar el código y hacerlo comprobable (cuando escribe el código usted mismo, ni siquiera piensa que otras personas no podrán leerlo). Como resultado, en 4 meses mi código llegó con estilo a los estándares corporativos.

En realidad, cuando escribe el código usted mismo, ni siquiera piensa en cómo lo entenderán otras personas y si es correcto expresar sus pensamientos de esta manera. La experiencia de trabajo en equipo es difícil de reemplazar.

Experiencia total para obtener el trabajo del desarrollador en un sitio remoto desde cero: 4 años, 9 meses.

Como resultado del trabajo remoto desde cero:


  • La probabilidad de obtener un trabajo como desarrollador en un sitio remoto, después de haber tomado un curso y leer algún tutorial, tiende a cero.
  • La probabilidad de hacer frente incluso al trabajo de junio en un lugar remoto sin la experiencia del desarrollo comercial, o de cualquier proyecto propio, tiende a cero.
  • La probabilidad de que, sin ninguna recomendación, la compañía le dedique tiempo a enseñar algo, tiende a cero.
  • La probabilidad de que después de leer algunos libros y conseguir un trabajo en un sitio remoto reciba "mucho dinero" tiende a cero.
  • Tomar una decisión al comienzo de su carrera para abandonar la oficina y buscar un lugar remoto es una gran tontería.
  • Rechazar otros trabajos de TI, ya que solo desea ser desarrollador en un sitio remoto desde el comienzo de su carrera, no es más que estupidez.

Source: https://habr.com/ru/post/476982/


All Articles