JavaRush /Blog Java /Random-ES /Un día en la vida de un desarrollador de Java. Parte 1
alex8894
Nivel 34
Санкт-Петербург

Un día en la vida de un desarrollador de Java. Parte 1

Publicado en el grupo Random-ES
¡Saludos, queridos compañeros! Después de la publicación de " 20+ años después ", algunos lectores pidieron una continuación de la historia. ¿De qué más podría hablar? Parece que he cubierto completamente el tema de convertir a un "enikey barbudo" en un desarrollador de Java. Será posible sacar algunas conclusiones no antes de un año de trabajo. Y luego decidí describir simplemente cómo transcurre mi jornada laboral típica. Bajo el corte "Un día en la vida de un desarrollador de Java". Cuando era joven, me encantaba dormir. Cuando yo era enikey, pasaba que dormía hasta el mediodía y llegaba a trabajar a las tres, o incluso a las tres y media. Cada vez respondí a las demandas periódicas de la gerencia de "venir como todos los demás", es decir, a las 9 a.m., de la misma manera siempre: dicen, necesito trabajar en las computadoras cuando no estoy molestando a nadie. Rodó. Pero con la edad, aparentemente, algo ha cambiado en el cuerpo, y ahora soy más una "alondra" que un "búho nocturno". Por eso ahora vengo a trabajar el primero (o uno de los primeros). Hoy soy el primero, y tengo media hora o una hora de silencio hasta que otros, menos “madrugadores”, se pongan al día. Es hora de planificar hoy. Desarrollo bajo Linux Mint. Me gusta el botón Inicio, modesto y elegante, no como estos mosaicos. El administrador de escritorio Cinnamon no está sobrecargado de efectos visuales, pero en términos de pulido es ligeramente inferior a MacOS, que es, por supuesto, el estándar en esta materia. Es fácil de comparar, hay una Mac en la mesa de al lado y un diseñador de UX está trabajando detrás de ella. Tampoco tengo casi ninguna queja sobre el sistema operativo en sí: funciona rápidamente y es muy estable, solo lo reinicié tres veces durante este tiempo, cuando apagué la computadora durante las largas vacaciones. En realidad, también se carga casi instantáneamente, ni siquiera la pantalla de inicio tiene tiempo de aparecer, porque todas las computadoras de los desarrolladores están equipadas con unidades SSD. En primer lugar, abro el cliente de correo electrónico Thunderbird, allí vienen cartas con información sobre cambios en las páginas que me interesan en la wiki (hay configuraciones y especificaciones), pero lo principal son las notificaciones del rastreador. ¿Qué cosa interesante nos pasó? Oh, regresaron de probar una característica que terminé ayer, parece que encontraron un error. Bueno, sí, lo es. Necesito arreglarlo lo antes posible, tal vez tenga tiempo antes de que llegue el evaluador y él inmediatamente mirará las correcciones antes de entrar en alguna “construcción sin terminar” todavía. Eso es lo primero por hoy. Entonces, se trata de mi "construcción inacabada", que escribí durante el último sprint. Parece que esta vez resistió con éxito todos los círculos del infierno.etapas de prueba y hoy, probablemente, será necesario fusionarlo en la rama principal del proyecto. Pero eso llegará más tarde, después del almuerzo. Incluso hoy tendremos que trabajar en devops y actualizar el stand de la rama en la que se está desarrollando actualmente, necesitamos mostrar nuevas funcionalidades. "Un gran poder conlleva una gran responsabilidad", el comando sudo muestra una advertencia antes de otorgar privilegios de root. En mi traducción un tanto vaga, esta frase suena como “cuanto más puedas hacer, más tendrás que hacer”. Por lo tanto, no es sorprendente que yo, que llevo el “sello del administrador”, reciba a menudo tareas tan “limítrofes”. Bueno, comencemos. Ayer estaba trabajando en otra función y ahora necesito volver a la rama donde está el error. A los usuarios de Windows normalmente les encantan todo tipo de shells gráficos y usan Turtle (TortoiseGit), pero para mí es más fácil y familiar a través de la línea de comandos. En general, la línea de comandos en Linux es una pequeña obra maestra, increíblemente reflexiva y poderosa, especialmente en combinación con Midnight Commander. Cambiamos, ahora necesitamos reconstruir el proyecto. Escribo el comando gradle clean ass. No sé si este comando fue pensado originalmente por los autores de Gradle o si fue creado por casualidad, pero simplemente limpia y reconstruye el proyecto (ass es la abreviatura de ensamblar, y no lo primero que me viene a la mente). En javarush, gradle se menciona sólo brevemente, como "y otros sistemas de compilación". Sí, gradle no tiene ventajas sobre maven para ensamblar proyectos educativos. La mayoría de los tutoriales y procedimientos en Internet también utilizan maven. La aparición y creciente popularidad de gradle probablemente se deba al rápido aumento en la complejidad de la construcción de proyectos modernos. El proyecto en el que estoy involucrado consta de varias docenas de componentes, donde el backend está escrito en Java, el frontend en Javascript y las pruebas en Python. Por cierto, hoy en día montar un proyecto Javascript es un proceso separado y completamente complicado, que incluso tiene un nombre: Web Workflow, y el árbol de dependencias allí es casi tan extenso como en Java. Bueno, al menos no necesitas ensamblar componentes de Python, bueno, casi no es necesario... Después del ensamblaje y el lanzamiento (que tampoco es trivial), necesitas generar e inicializar con datos de prueba un entorno completo con un entorno relacional. y base de datos NoSql, una cola de mensajes y un caché en memoria. Luego, todo esto debe ensamblarse nuevamente y ejecutarse en el servidor CI, y luego implementarse usando ansible. Al mismo tiempo, el desarrollo se lleva a cabo principalmente en Windows, y los servidores de "combate", demostración, prueba y otros servidores de preproducción, naturalmente, en Linux. Realmente no me imagino cómo es posible implementar tales cosas en maven, pero sí bastante bien en gradle. El hecho es que el archivo de compilación de Gradle está escrito en Groovy. Es un lenguaje muy divertido, dicen que es un cruce entre Java y Ruby, pero no conozco Ruby, pero sé un poco de Javascript y muchas de sus construcciones también funcionan. Los creadores de gradle han implementado una API que en casos simples el archivo de compilación parece bastante declarativo (y, por cierto, en mi opinión, es incluso más fácil de leer que el pom.xml de Maven), pero si necesita algo más complejo, toda esta declaratividad se descarta, aparecen variables, funciones, clases; en una palabra, todas las características de Groovy, que, por cierto, se pueden compilar y ejecutar en la misma JVM que el código Java. El ensamblaje en sí, como ya mencioné, es multiplataforma, pero interactúa con el entorno, por lo que también es necesario verificarlo en Windows. Para ello, tengo Windows instalado en una máquina virtual. KVM avanza a pasos agigantados y, si el sistema invitado está configurado correctamente, la virtualización es casi invisible. Sí, Spice ahora admite dos monitores, las resoluciones de pantalla se ajustan automáticamente y los controladores de dispositivos paravirtualizados casi no causan pérdida de rendimiento. A veces me encuentro pensando que no siento mucha diferencia entre las dos plataformas. Aún así, Java es una herramienta asombrosa que ha acercado dos mundos completamente diferentes y, a veces, incluso hostiles: el mundo del software propietario, cracks, keygens y seriales,personificado por Windows y el mundo de los sistemas abiertos Linux. Entonces, el proyecto está armado, lo lanzamos (por supuesto, también a través de gradle) y le echamos un vistazo. Bueno, sí, lástima de mi barba gris, no implementé uno de los requisitos de la producción, aquí está, escrito en blanco y negro en la wiki. En mi trabajo anterior, me encontraba con esta situación regularmente y siempre me sorprendía cómo el desarrollador podía haber omitido un párrafo completo de la especificación. ¡Sí, fácilmente! Lo pensé, me concentré en otro problema y había un error. Solo aquí, gracias a varias etapas de prueba, será atrapada, pero en el lugar anterior, bueno, pase lo que pase. Afortunadamente, el trabajo aquí no durará mucho. Estoy lanzando Idea Ultimate, que por cierto es uno de los pocos productos pagos que se utilizan en el desarrollo. En principio, puedes arreglártelas con la Community Edition, pero rápidamente te acostumbras a las cosas buenas, por ejemplo, la integración con Spring. También necesitas un par de terminales para registros, un navegador para el frontend y un wiki, otro terminal con línea de comando, todo se mueve, parpadea... En general, la imagen en las pantallas de dos monitores comienza a adquirir un aspecto aterrador. apariencia, como la que se muestra en las películas de bajo presupuesto, que muestra el arduo trabajo de un hacker. Pero estas son todavía cosas menores, pero recuerdo cuando tuve que crear y configurar un clúster de conmutación por error - siete ventanas de terminal, algo más en la esquina de la pantalla, en todas las ventanas - algunos números e imágenes de gráficos ascii... Pero Me desvío un poco del trabajo y el tiempo va pasando. ... Uf, bueno, parece que hice todo lo que necesitaba y, al parecer, no rompí nada de lo que había hecho antes. Agrego un comentario a la función y envío el hilo para probarlo. Intento escribir con más detalle qué hice o cambié exactamente para simplificar el trabajo del evaluador. En mi trabajo anterior, realmente echaba de menos esas explicaciones cuando tenía que comprobar las mejoras recibidas de los desarrolladores. Mientras tanto, la mañana se convirtió suavemente en día, la gente se fue retirando gradualmente. Pronto habrá una reunión de pie o, en nuestra opinión, un stand-up. De hecho, la jornada laboral debería comenzar con él, y para la mayoría de los "noctámbulos" esto es casi así. Stand-up actúa como límite para llegar al trabajo lo más tarde posible; se desaconseja encarecidamente llegar tarde. Bueno, para mí es como un descanso. Entonces, levantémonos todos. En una reunión, como de costumbre, los desarrolladores cuentan lo que hicieron ayer y lo que planean hacer hoy, los evaluadores nos dicen qué probaron y con qué resultados, y los jefes, está claro, qué planean hacer a continuación. qué problemas surgieron y a qué se debe prestar especial atención. Nuestro equipo está distribuido geográficamente y su plantilla completa sólo se puede ver en stand-up (en televisión, por supuesto), y también, quizás, en un evento corporativo general un par de veces al año. Durante el stand-up, a menudo pienso que en realidad se inventó para evitar que los desarrolladores se relajaran. Cuando todos los días necesitas mostrar el progreso en tu trabajo, y no en un informe en papel que solo leerá tu jefe, sino frente a tus compañeros, quieras o no, intentarás hacer más, tener algo de qué hablar. Hay, por supuesto, "proyectos de construcción a largo plazo", sobre los cuales durante varios días seguidos repites "ayer hice esto y hoy seguiré haciéndolo", pero incluso en ellos se plantean constantemente algunas pequeñas tareas urgentes. encajado. En resumen, real Un desarrollador vaquero siempre tiene algo que decir a sus compañeros. En el stand-up me pidieron que actualizara rápidamente mi stand, así que ahora lo haré. Cuando se publica la rama principal del proyecto, los administradores realizan la actualización, pero ahora necesitamos publicar una función que aún no está terminada y, al mismo tiempo, inevitablemente surgirán algunos problemas que los administradores no pueden resolver. El stand está ubicado en un centro de datos, el acceso a él solo es posible a través de ssh, allí, por supuesto, no hay un shell gráfico, por lo que solo la línea de comando, ¡solo hardcore! La actualización en sí está automatizada y se realizó sin problemas, pero después de la actualización uno de los componentes no se inicia. Miro los registros con el comando less; por cierto, tiene una función muy conveniente: si presionas Shift-F, mostrará constantemente el contenido actual del archivo, lo cual es perfecto para los registros. ¿Y qué es esta... cosa extraña? Pantalla completa de signos de interrogación separados por comas. Segunda pantalla, tercera, décima... ¿Cuántas hay? Oh, se acabó, resultó ser un gran seguimiento de pila. Alguien escribió una consulta SQL con el operador IN para seleccionar los registros deseados de una lista y creó un parámetro para cada elemento de la lista. Todo funcionó hasta que la lista contenía más de 32767 elementos, después de lo cual al servidor SQL finalmente se le acabó la paciencia. Necesitará escribir un informe de error sobre esto, pero esto no tiene nada que ver con el problema con un componente que no funciona. Miremos más allá. Ahora está claro que la migración de la estructura de la base de datos a la nueva versión no se realizó, parece que el autor del artículo cambió algo en la migración, y aquí, en el stand, estaba su versión anterior. Tendrá que revertir los cambios de estructura manualmente, a través de la utilidad de la consola del servidor SQL. ¿Cómo puedo escribir un comando en DML para eliminar un campo? ¿índice? ¿mesas? Parece que eso es todo. Reinicié el componente, la migración fue bien... todo está bien. Es hora de ir a almorzar, por cierto, hoy hace buen tiempo. "La bola de color amarillo brillante que colgaba inmóvil en el cielo y que tanto asustaba a la gente del pueblo resultó ser el Sol". Casi el primer día soleado del año. Ni siquiera quiero salir de la calle, pero tengo que hacerlo: se acerca el momento de la fusión. Continuará
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION