JavaRush /Blogue Java /Random-PT /Um dia na vida de um desenvolvedor Java. Parte 1
alex8894
Nível 34
Санкт-Петербург

Um dia na vida de um desenvolvedor Java. Parte 1

Publicado no grupo Random-PT
Saudações, queridos colegas! Após a publicação de “ 20+ Years Later ”, alguns leitores pediram uma continuação da história. O que mais eu poderia falar? Parece que cobri completamente o tópico de transformar um “enikey barbudo” em um desenvolvedor Java. Será possível tirar algumas conclusões não antes de um ano de trabalho. E então decidi simplesmente descrever como é meu dia típico de trabalho. Sob o corte “Um dia na vida de um desenvolvedor Java”. Quando eu era jovem, adorava dormir. Quando eu era enikey, acontecia que eu dormia até meio-dia e voltava para o trabalho às três, ou até às três e meia. Cada vez que eu respondia às exigências periódicas da administração para “vir como todo mundo”, ou seja, às 9h, sempre da mesma maneira – eles dizem, preciso trabalhar em computadores quando não estou incomodando ninguém. Rolou. Mas com a idade, aparentemente, algo mudou no corpo, e agora sou mais uma “cotovia” do que uma “coruja noturna”. É por isso que agora venho trabalhar primeiro (ou um dos primeiros). Hoje sou o primeiro e tenho meia hora ou uma hora de silêncio até que outros, menos “madrugadores”, me alcancem. É hora de planejar hoje. Eu desenvolvo em Linux Mint. Gosto do botão Iniciar, modesto e elegante, não gosto desses blocos. O gerenciador de desktop Cinnamon não está sobrecarregado de efeitos visuais, mas em termos de polimento é um pouco inferior ao MacOS, que é, obviamente, o padrão neste assunto. É fácil comparar, há um Mac na mesa ao lado, um designer UX está trabalhando por trás dele. Também quase não tenho reclamações sobre o sistema operacional em si: ele funciona de forma rápida e muito estável, só reiniciei três vezes nesse período - quando desliguei o computador durante as férias prolongadas. Na verdade, ele também carrega quase instantaneamente, mesmo a tela inicial não tem tempo de aparecer, pois todos os computadores dos desenvolvedores estão equipados com drives SSD. Em primeiro lugar, abro o cliente de e-mail Thunderbird, chegam cartas com informações sobre alterações nas páginas que me interessam no wiki (há configurações e especificações), mas o principal são as notificações do rastreador. Que coisa interessante aconteceu conosco? Ah, eles voltaram do teste de um recurso que terminei ontem, parece que encontraram um bug. Bem, sim, é. Preciso consertar o mais rápido possível, talvez eu tenha tempo antes que o testador chegue e ele imediatamente dê uma olhada nas correções antes de entrar em alguma “construção inacabada” ainda. Essa é a primeira coisa de hoje. Então, trata-se da minha “construção inacabada”, que escrevi ao longo do último sprint. Parece que desta vez ele resistiu com sucesso a todos os círculos do infernoetapas de testes e hoje, provavelmente, precisará ser mesclado ao ramo principal do projeto. Mas isso virá mais tarde, depois do almoço. Ainda hoje teremos que trabalhar em devops e atualizar o estande do ramo em que o desenvolvimento está em andamento, precisamos mostrar novas funcionalidades. “Com grande poder vem grande responsabilidade”, o comando sudo exibe um aviso antes de conceder privilégios de root. Na minha tradução um tanto vaga, esta frase soa como “quanto mais você puder fazer, mais terá que fazer”. Não é de surpreender, portanto, que eu, que carrego o “carimbo de administrador”, receba frequentemente essas tarefas “limítrofes”. Bem, vamos começar. Ontem eu estava trabalhando em outro recurso, e agora preciso voltar ao branch onde está o bug. Os usuários do Windows geralmente adoram todos os tipos de shells gráficos e usam o Turtle (TortoiseGit), mas para mim é mais fácil e familiar através da linha de comando. Em geral, a linha de comando no Linux é uma pequena obra-prima, incrivelmente bem pensada e poderosa, especialmente em combinação com o Midnight Commander. Trocamos, agora precisamos reconstruir o projeto. Eu digito o comando gradle clean ass. Não sei se este comando foi originalmente concebido pelos autores do gradle ou foi criado por acaso, mas ele simplesmente limpa e reconstrói o projeto (ass é a abreviação de assemble, e não o que vem à mente primeiro). No javarush, gradle é mencionado apenas brevemente, como “e outros sistemas de construção”. Sim, o gradle não tem vantagens sobre o maven na montagem de projetos educacionais. A maioria dos tutoriais e instruções na Internet também usa o maven. O surgimento e a crescente popularidade do gradle provavelmente se devem ao rápido aumento na complexidade da construção de projetos modernos. O projeto em que estou envolvido consiste em várias dezenas de componentes, onde o backend é escrito em Java, o frontend em Javascript e os testes em Python. Aliás, hoje em dia montar um projeto Javascript é um processo separado e completamente complicado, que tem até nome - Web Workflow, e a árvore de dependências lá é quase tão extensa quanto em Java. Bem, pelo menos você não precisa montar componentes Python, bem, quase não há necessidade... Após a montagem e lançamento (o que também não é trivial), você precisa levantar e inicializar com dados de teste um ambiente inteiro com um relacionamento e banco de dados NoSql, uma fila de mensagens e um cache na memória. Então, tudo isso precisa ser montado novamente e executado no servidor de CI e, em seguida, implantado usando ansible. Ao mesmo tempo, o desenvolvimento é realizado principalmente no Windows, e os servidores de “combate”, demonstração, teste e outros servidores de pré-produção são, naturalmente, no Linux. Eu realmente não imagino como é possível implementar essas coisas no maven, mas muito bem no gradle. O fato é que o arquivo de compilação Gradle é escrito em Groovy. É uma linguagem muito engraçada, dizem que é um cruzamento entre Java e Ruby, mas eu não conheço Ruby, mas conheço um pouco de Javascript, e muitas construções dela também funcionam. Os criadores do gradle implementaram uma API que, em casos simples, o arquivo de construção parece bastante declarativo (e, aliás, na minha opinião, é ainda mais fácil de ler do que o pom.xml do Maven), mas se você precisar de algo mais complexo, toda essa declaratividade é descartada, aparecem variáveis, funções, classes - enfim, todas as funcionalidades do Groovy, que, aliás, podem ser compiladas e executadas na mesma JVM do código Java. A montagem em si, como já mencionei, é multiplataforma, mas interage com o ambiente, por isso precisa ser verificada também no Windows. Para fazer isso, tenho o Windows instalado em uma máquina virtual. O KVM está avançando aos trancos e barrancos e, se o sistema convidado estiver configurado corretamente, a virtualização será quase invisível. Sim, o Spice agora suporta dois monitores, as resoluções de tela são ajustadas automaticamente e os drivers de dispositivos paravirtualizados quase não causam perda de desempenho. Às vezes me pego pensando que não sinto muita diferença entre as duas plataformas. Ainda assim, Java é uma ferramenta incrível que aproximou dois mundos completamente diferentes e, às vezes, até hostis - o mundo do software proprietário, cracks, keygens e seriais,sintetizado pelo Windows e pelo mundo dos sistemas abertos Linux. Então, o projeto está montado, lançamos (claro, também através do gradle) e damos uma olhada. Bem, sim, que vergonha da minha barba grisalha, não implementei um dos requisitos da produção, aqui está, escrito em preto e branco no wiki. Em meu trabalho anterior, eu encontrava essa situação regularmente e sempre ficava perplexo com a forma como o desenvolvedor poderia ter perdido um parágrafo inteiro da especificação. Sim, facilmente! Pensei nisso, foquei em outro problema - e havia um bug. Só aqui, graças a várias etapas de testes, ela será pega, mas no lugar anterior - bem, aconteça o que acontecer. Felizmente, o trabalho aqui não durará muito. Estou lançando o Idea Ultimate, que aliás é um dos poucos produtos pagos utilizados em desenvolvimento. Em princípio, você pode conviver com o Community Edition, mas rapidamente se acostuma com as coisas boas, por exemplo, a integração com o Spring. Você também precisa de alguns terminais para logs, um navegador para o frontend e um wiki, outro terminal com linha de comando, tudo se move, pisca... Em geral, a imagem nas telas dos dois monitores começa a assumir um aspecto assustador aparência, como a que é mostrada em filmes de baixo orçamento, retratando o trabalho árduo de um hacker. Mas essas ainda são coisas menores, mas lembro quando tive que criar e configurar um cluster de failover - sete janelas de terminal, algo mais no canto da tela, em todas as janelas - alguns números e imagens de gráficos ASCII... Mas Afasto-me um pouco do trabalho e o tempo passa. ... Ufa, bom, parece que fiz tudo que precisava e, ao que parece, não quebrei nada do que tinha feito antes. Adiciono um comentário ao recurso e envio o tópico para teste. Tento escrever com mais detalhes o que exatamente fiz ou alterei para simplificar o trabalho do testador. No meu trabalho anterior, eu realmente sentia falta dessas explicações quando precisava verificar as melhorias recebidas dos desenvolvedores. Enquanto isso, a manhã se transformava suavemente em dia, as pessoas gradualmente paravam. Em breve haverá uma reunião stand up, ou na nossa opinião, um stand-up. Na verdade, a jornada de trabalho deveria começar com ele, e para a maioria dos “noctívagos” isso é quase o caso. O stand-up atua como um limite para chegar ao trabalho o mais tarde possível; chegar atrasado é fortemente desencorajado. Bem, para mim é como uma pausa. Então, vamos todos nos levantar. No stand-up, como sempre, os desenvolvedores contam o que fizeram ontem e o que planejam fazer hoje, os testadores nos contam o que testaram e com quais resultados, e os chefes, é claro, o que planejam fazer a seguir, quais problemas surgiram e a que precisa ser dada atenção especial. Nossa equipe está distribuída geograficamente e todo o seu complemento só pode ser visto em stand-up (na TV, claro), e também, quem sabe, em um evento corporativo geral algumas vezes por ano. Durante o stand-up, muitas vezes penso que ele foi inventado para evitar que os desenvolvedores relaxem. Quando todos os dias você precisa mostrar o progresso em seu trabalho, e não em um relatório em papel que só seu chefe vai ler, mas na frente de seus colegas, quer queira quer não, você tentará fazer mais, para ter algo para conversar. Existem, claro, “projetos de construção de longo prazo”, sobre os quais você repete por vários dias seguidos “ontem eu fiz isso e hoje continuarei fazendo”, mas mesmo neles algumas pequenas tarefas urgentes são constantemente encravado. Em suma, verdadeiro Um desenvolvedor cowboy sempre tem algo a dizer aos seus colegas. No stand-up me pediram para atualizar rapidamente minha posição, então agora farei isso. Quando o branch principal do projeto é publicado, a atualização é feita pelos administradores, mas agora precisamos publicar uma funcionalidade que ainda não está finalizada, e ao mesmo tempo surgirão inevitavelmente alguns problemas que os administradores não conseguem resolver. O estande está localizado em um data center, o acesso só é possível via ssh, claro que não existe nenhum shell gráfico lá - então apenas a linha de comando, apenas hardcore! A atualização em si é automatizada e ocorreu sem problemas, mas após a atualização um dos componentes não inicia. Eu olho os logs com o comando less; aliás, ele tem uma função muito conveniente: se você pressionar Shift-F, ele exibirá constantemente o conteúdo atual do arquivo, o que é perfeito para logs. E o que é isso... coisa estranha? Tela cheia de pontos de interrogação separados por vírgulas. Segunda tela, terceira, décima... Quantos são? Ah, acabou, acabou sendo um stacktrace e tanto. Alguém escreveu uma consulta SQL com o operador IN para selecionar os registros desejados em uma lista e criou um parâmetro para cada elemento da lista. Tudo funcionou até que a lista continha mais de 32.767 elementos, após o que o servidor SQL finalmente perdeu a paciência. Você precisará escrever um relatório de bug sobre isso, mas isso não tem nada a ver com o problema de um componente que não funciona. Vamos dar uma olhada mais de perto. Agora está claro que a migração da estrutura do banco de dados para a nova versão não aconteceu, parece que o autor do feature mudou alguma coisa na migração, e aqui no estande estava sua versão anterior. Você terá que reverter as alterações de estrutura manualmente, por meio do utilitário do console do SQL Server. Como posso escrever um comando em DML para excluir um campo? índice? mesas? Parece que é isso. Reiniciei o componente, a migração correu bem... está tudo bem. É hora de almoçar, aliás, o tempo está ótimo hoje. “A bola amarela brilhante pendurada imóvel no céu e tão assustadora para as pessoas da cidade acabou por ser o Sol.” Quase o primeiro dia de sol do ano. Não quero nem sair da rua, mas preciso - a hora da fusão está se aproximando. Continua
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION