Sou desenvolvedor júnior e estou no setor há 5 anos. Na minha empresa atual, há um veterano, vamos chamá-lo de Infestus. Ocasionalmente, tenho a oportunidade de brilhar e fazer algo completamente novo do zero.
Um dos exemplos mais recentes foi que eu tive que criar um singleton no aplicativo multithread. Eu decidi usar esse método. Assim que Infestus viu, ele rapidamente me chamou de idiota e me disse para usar essa abordagem . Ao perguntar a ele por que ele simplesmente ignorou isso, pois isso é melhor e é assim que este e este livro sobre Java dizem que é melhor.
E é um padrão comum: sempre que tenho a chance de fazer algo novo, sou rapidamente abatido por Infestus e o único motivo pelo qual seu método é melhor é porque esses livros foram escritos por programadores famosos. Ele está sempre tentando me dar livros para ler, para que eu possa "aprender" quais maneiras de programar.
Eu tenho apenas programado dinheiro há 5 anos, mas é sempre uma boa ideia seguir cegamente o livro sobre as melhores maneiras de resolver um problema ou devo tentar experimentar de vez em quando? A constante enxurrada de reclamações do Infestus está começando a me fazer nunca tentar algo novo e seguir exemplos nos livros.
EDIT : Estou totalmente perdido. Sim, eu sei que seguir qualquer coisa cegamente é uma má ideia. Mas esse programador infestado, Infestus, que parece saber muito, me diz que a única maneira de programar corretamente é lendo livros e seguindo tudo até um T. Todas as regras que ele impõe são as que estão escritas nos livros, então eu só estou pensando se os livros são a única maneira correta.
EDIT2 : Infestus não é meu chefe. Ele é apenas um dos desenvolvedores seniores encarregados de revisar o código. E a maioria de seus comentários depois de resenhas consiste em nomes de livros em que esse método está errado.
fonte
...brushed it off as this is better and that's how this and this book about java says it is better.
Isso deve acionar alarmes imediatos. Se Infestus não puder lhe dar uma explicação independente, ele poderá não entender. (Ou ele precisa de uma cópia de um livro ilustrado de maus argumentos .)Respostas:
Você vai encontrar programadores como esse em toda a sua carreira. Não há nada errado com a experimentação e o aprendizado por conta própria. Certamente livros são ótimos. Muitas vezes, os exemplos funcionam em um ambiente limpo, mas se você é desenvolvedor de outra empresa, não existe um ambiente limpo (sem interferência de outras pessoas).
É sempre bom saber como fazer as coisas da maneira "certa", mas as opiniões mudam de ano para ano. Então aprenda o que você pode. Pegue o que puder do desenvolvedor sênior, misture-o com o seu conhecimento que você aprende por conta própria. Eventualmente, você será um desenvolvedor sênior e aproveitará essas experiências e ensinará desenvolvedores juniores.
Só não seja idiota sobre isso.
fonte
Ele realmente te chamou de idiota ou apenas desvalorizou o código? Chamar qualquer coisa de estúpida não tem tato, mas isso não invalida a sugestão. Acho que Infestus fez uma sugestão valiosa e, no futuro, você deve considerar seriamente as sugestões dele. Ele parece ler muito e, pelo menos nesse caso, sua opinião é bem informada. A sincronização é cara e complicada. Sua implementação recomendada é mais eficiente e mais simples que a sua e é garantida que funcione.
Isso é gentil da parte dele. Ele está tentando ativamente ajudá-lo, mas você parece estar deixando seu ego atrapalhar. Não leve críticas ao seu código pessoalmente. O código é barato de produzir e fácil de mudar. Se alguém lhe mostrar uma maneira mais simples de fazer algo, agradeça.
E sim, a leitura fará de você um programador muito melhor. Todos os especialistas que conheço leu extensivamente. Se você não está lendo muito, é medíocre, na melhor das hipóteses, e em mais cinco anos poderá descobrir que não é mais comercializável.
fonte
A leitura de um livro não deve ser cega: o autor deve tentar convencê-lo dos méritos de sua abordagem à medida que a apresenta. É razoável que seu veterano o indique um livro explicando sua abordagem preferida, em vez de pedir a ele que o explique ele mesmo: embora ele deva explicar os benefícios de suas preferências sem depender do livro, é também uma duplicação de esforços que o autor do livro já fez.
Portanto, leia o livro, veja o que o autor do livro diz e se ele o confunde, ou você deseja confirmar sua compreensão ou não concorda, então converse com seu veterano sobre isso, mas agora você estará capaz de ter uma discussão mais produtiva.
fonte
Existem três elementos-chave em qualquer relacionamento saudável. Comunicação, honestidade e confiança. Isso conta para todos os relacionamentos, até para os relacionamentos de trabalho. Você deve conversar com seu supervisor sobre essas preocupações.
Se você não entender as razões dele para advogar um determinado projeto, diga isso a ele . Diga a ele que você não leu o livro e que gostaria de entender por que a maneira dele de fazê-lo é melhor. A chave é que você deve estar tentando entender a maneira dele de fazer as coisas.
Eu acho que você também deve tratar essa pessoa com mais respeito. Na sua cabeça, você está chamando-o de nomes depreciativos e criticando sua abordagem do que você considera "aprendizado". Cuidado com isso. Por outro lado, você disse que ele chamou você estúpido. Isso não é legal, e você deve dizer a ele que não é legal chamar alguém de estúpido.
Ideias podem ser estúpidas. Todos cometemos erros e sentimos falta das coisas, até dos mais velhos. Quando há uma falha em um design, a melhor pergunta é: "Por que você está fazendo isso dessa maneira? Não ocorrerá na situação X, Y, Z? O design B não será melhor?"
Lembre-se de que você está trabalhando neste software com outras pessoas. Essa é uma habilidade difícil de aprender. Não importa que você não esteja escrevendo nada do zero, sempre há espaço para brilhar, tornando seu código o melhor código possível.
E "melhor" muitas vezes significa legível e compreensível . Nós programadores gastamos muito tempo lendo o código de outras pessoas. Se esse código é claro e legível, isso o torna realmente valioso. Uma das maneiras pelas quais aprendemos a escrever um ótimo código é lendo muitos códigos bons. Muitas vezes, você encontra códigos muito bons nos livros. Portanto, a leitura de um ou dois bons livros de programação provavelmente o tornará um programador melhor.
fonte
Na empresa em que você trabalha, provavelmente é. É isso que eles exigem que você faça.
Esse engenheiro Infestus faz um trabalho muito ruim educando os desenvolvedores juniores dizendo a eles "isso está escrito no livro, e é por isso". Ele não é um pregador, ele é um engenheiro e deve ser capaz de decompô-lo e apresentar os conceitos para que os juniores possam aprender com sua experiência.
Gostaria de encorajá-lo a falar com desenvolvedores conhecedores da sua empresa, fazer perguntas sobre os prós e os contras de diferentes técnicas de programação etc. Isso, juntamente com a leitura de livros e blogs (eu recomendaria o Joel on Software - apenas no Google, é obrigatório) deve lhe dar uma melhor compreensão.
fonte
IMHO, existem 2 aspectos aqui, com os quais você deve lidar separadamente:
Tente não descer ao nível dele com isso. Não tente intimidar ele de volta ou "contar com ele" para o chefe ou algo assim. Faça o possível para ignorar esse aspecto do comportamento dele, tendo em mente que ele se torna muito extremo (isto é, se isso afeta sua produtividade e outras coisas), você deve fazer algo a respeito.
Muitas vezes, alguém corrigiu o que eu pensava inicialmente ser "meu código perfeito" e fiquei chateado porque o cara estava me dizendo o que fazer apenas para depois perceber que ele estava certo o tempo todo, minha versão era ruim, a dele era bom, e graças a Deus ele viu isso! :) Então eu aprendi a diminuir meus impulsos iniciais de "ei, você não me diz o que fazer, errado!" e, em vez disso, cada vez que alguém me corrige, primeiro, objetivamente, verifiquei novamente meu código, depois verifiquei o dele, e verifique se ele não está certo e sou eu quem está cometendo o erro. Se a culpa foi minha, agradeço a ele pela ajuda e verifique se realmente entendi como a solução dele funciona (em vez de apenas copiar / colar).
E, ei, às vezes eu acho que a correção oferecida foi de fato pior do que o que eu fiz inicialmente; nesse ponto, tento conversar sobre tudo isso com o outro cara. Honestamente, notei que nada ganha o respeito dos outros por você mais rápido do que quando eles veem que você pode aceitar ser corrigido quando cometeu um erro, mas, ao mesmo tempo, não tem medo de dizer que você é o único quem está certo quando pensa assim, dado que pode provar imediatamente que baseia sua afirmação em alguma pesquisa real, e não apenas no ego.
Nesse ponto, acho que você deve realmente tentar conversar com o cara sobre o que ele propõe e o que você propõe e assim por diante. Mostre a ele o que você pensa, como chegou a uma solução específica e por que você acha que é melhor que o dele (quando você pensa honestamente e objetivamente). Ou, se você descobrir que a proposta dele é melhor que a sua, diga-lhe isso e expresse sua gratidão pela ajuda. Isso pode reconstruir algumas pontes queimadas.
fonte
Experimente por conta própria e aprenda tudo o que puder. Depois de ler livros suficientes, você descobrirá que existem vários livros sobre assuntos específicos e eles podem se contradizer. Tente o que você achar melhor e tente os dois se tiver tempo ou quiser comparar / contrastar.
Lidar com seu chefe é um assunto e uma abordagem totalmente diferentes. Se eu quisesse que alguém fizesse algo da maneira exata em um livro, eu diria a eles. Sou eu, porque não me associo aos leitores de mentes. Seu chefe cria esse hábito, basta perguntar se ele recomenda livros ou referências quando você obtém um novo projeto.
Faça o que fizer, não pare de trabalhar em novos projetos. Sei que é fácil para todos nós dar dicas de como lidar com essa situação e eles podem ou não funcionar, mas você é quem tem que viver com ela e sofrer a negatividade. Você vai melhorar, mas isso geralmente vem da redação de mais códigos sobre coisas novas, aprendendo com os sucessos e falhas.
fonte
Seguir os livros às cegas é uma má ideia, mas há uma diferença entre seguir um livro exatamente e segui-lo às cegas .
Quando você está tentando entender as coisas de um livro, geralmente é apropriado segui-las exatamente no início, enquanto você percebe o que elas estão tentando ensinar. As probabilidades são de que você ainda não entenderá tudo quando terminar - é assim que as coisas costumam acontecer -, mas seguir o livro exatamente no início dará a você algo para experimentar, ao tentar entender suas perguntas. As probabilidades são novamente boas, pois você encontrará maneiras de discordar do conteúdo do livro, mas entenderá os problemas que o livro estava tentando resolver, para que, quando chegar a hora de escrever seu próprio código, você possa resolva-os do seu jeito (ou talvez do jeito deles, pelo menos em parte), em vez de deixar esses problemas para incomodá-lo mais tarde.
Outra coisa que não é inerentemente específica para Java, mas ainda assim é especialmente comum nessa comunidade. Acho que posso adivinhar de quais livros você está falando e eles formam uma parte importante do léxico da comunidade Java. Compreendê-los e as maneiras como descrevem as coisas ajudarão imensamente quando você precisar entender outro código Java que encontrar. Essa é uma habilidade valiosa por si só.
fonte
Ler livros e posts do blog é muito útil na programação. Existem alguns livros que todos os desenvolvedores devem ler.
No entanto, os livros não são a única fonte para aprender diferentes conceitos e tecnologias de programação. Atualmente, o treinamento baseado em vídeo sob demanda está ficando muito popular. Você pode verificar o Pluralsight , que fornece treinamento de alta qualidade aos profissionais.
De fato, se você ler apenas livros, isso também não ajudará. Além de ler, há outra coisa que precisamos fazer também. Você pode encontrar mais detalhes aqui .
fonte
Você deve perguntar a ele o que há de errado com seu método. Se ele não conseguir responder com clareza, você pode ter certeza de que é apenas um cara comum que gosta de se sentir superior.
fonte
A questão dos livros é que eles - principalmente - passam por revisões, que têm uma chance melhor de identificar más práticas e conceitos errôneos. Além disso, os "grandes nomes" são pessoas experientes que confiam em ser boas para ganhar dinheiro extra vendendo livros, portanto, há algumas garantias mínimas de qualidade sobre o que dizem.
Dito isto, ler livros, jornais e outras fontes é uma boa maneira de crescer como profissional, é claro, quando confirmado pela prática. Portanto, é bom que você leia esses livros (mesmo os recomendados pela Infestus). No entanto, os livros devem aumentar principalmente sua compreensão sobre o assunto, pois quase sempre haverá outras maneiras de resolver o mesmo problema.
Sobre sua abordagem "vá sozinho", o ponto é: você pode sustentar seu ponto de vista? Como você prova que sua solução é melhor que qualquer outra? Algumas vezes você pode criar soluções brilhantes por conta própria, mas, quando comparado a outras soluções conhecidas, deve poder argumentar a razão pela qual a sua é melhor, já que as outras têm a seu favor, pelo menos, os casos de uso. Então, seja criativo e atencioso, mas o mais importante, seja eficaz.
Se eu fosse, você leria esses livros. Isso o ajudará, dando-lhe mais argumentos, e, ao mesmo tempo, você pode achar que Infestus - talvez - está tomando esses livros erroneamente como argumentos, e ele ainda não foi visto porque ninguém sabe o conteúdo desses livros. Ou você pode achar que ele realmente
fonte
Minha experiência é que, quando se preocupa com a programação de assuntos, a qualidade e a apresentação de informações com explicações adequadas nos livros é uma magnitude melhor do que na busca pelas mesmas informações de assuntos na Internet. Internet muitas vezes carece de explicação adequada, contexto e qualidade.
A quantidade dessas informações na internet é maior.
Portanto, minha estratégia geral é aprender com os livros para entender melhor e depois aprender com a internet para me expor a diferentes implementações e ampliar minha experiência (e frequentemente ver como não fazer coisas).
fonte
Pesquisaria os méritos de cada abordagem e chegaria a seu próprio julgamento. Se você acha que sua abordagem é melhor, discuta-a com a Infestus até que um de vocês convença o outro. Se você não conseguir chegar a um acordo, poderá pedir uma segunda opinião ou apenas aceitar a abordagem da Infestus, dependendo de quão forte você se sinta a respeito.
No caso de singletons, um argumento que você pode argumentar contra a abordagem enum é que enums não podem estender classes. Costumo escrever código assim:
Isso não pode ser feito com enumerações. Como a abordagem enum não funciona em todos os casos, você poderia argumentar que, por uma questão de consistência, ela deve ser evitada mesmo quando não há necessidade de uma
extends
cláusula.Alguns outros argumentos que poderiam ser feitos contra o uso de enumerações:
fonte
Confio muito nos livros como fonte de conhecimento - essas são bases excelentes e acho que a Infestus tem razão em que você deve consumir quantidades significativas de livros em seu tempo livre, pois elas realmente aceleram suas habilidades. Os livros não são a única fonte de informação que eu acho que você deveria consumir - participe do seu grupo de usuários local, receba os boletins de tecnologia relevantes entregues na sua caixa de entrada, leia os blogs.
No entanto, discordo da afirmação de que, porque está escrito de certa maneira em um livro, é assim que deve ser feito. Os livros Sim fornecem ótimos conselhos, e são escritos por especialistas e revisados por especialistas, mas, tendo participado de um livro comparativamente simples, posso dizer que normalmente leva pelo menos dois anos para começar a escrever, editar e lançar um livro. . O ritmo da mudança na tecnologia é rápido e os conselhos de dois anos atrás podem não ser mais os conselhos corretos para hoje. Os princípios genéricos geralmente resistem ao teste do tempo, mas a otimização de uma atividade específica pode ser invalidada com um novo pedaço de hardware ou uma nova versão do software.
A sugestão de pedir ao Infestus que faça sugestões com você é excelente - vá embora, leia tudo e volte com um monte de perguntas bem pensadas que você já tentou responder / resolver por si mesmo, juntamente com suas evidências de apoio. método.
Havia perguntas sobre se, depois de cinco anos, por que você ainda era júnior. Para mim, a principal medida de saber se alguém é um júnior não é um ano de experiência, mas o quanto eles exigem alimentação com colher. Espero que um desenvolvedor de nível médio seja relativamente auto-suficiente, um consumidor atencioso de fontes de conhecimento que possam agir de acordo com ele e estendê-lo à sua situação. Eles também devem estar no estágio em que podem começar a ensinar os juniores, porque têm um entendimento firme de seu tópico, para que possam explicar as coisas claramente. A outra competência essencial é a confiança - se você fez o trabalho, leu o material e produziu algo decente, não tenha medo de defendê-lo em um tribunal de debate, pois um júnior exige validação, um desenvolvedor solicita consenso.
fonte
Deixando de lado as maneiras no local de trabalho, deixando de lado a realidade de um papel de mentor que os desenvolvedores seniores têm, deixando de lado seu próprio desejo de explorar, deixando de lado comportamentos insultuosos e deixando de lado fetiches por livros ...
Os objetivos de uma revisão de código em uma equipe são 1) validar o código e 2) garantir que a pessoa que está escrevendo o código entenda o significado da melhoria do código. Não é o lugar para dizer "mude isso porque Martin Fowler disse isso no livro do GoF". No entanto, é o lugar para dizer "mude isso porque [breve explicação]; há mais detalhes discutindo isso no livro do GoF".
Se seu desenvolvedor sênior não está, pelo menos de maneira simples e sutil, fornecendo uma explicação para uma mudança e insistindo em usar a palavreada de "por causa de [livro]", ele está sendo um pouco espertinho e idiota. Como você lida com isso? Mencione-o em uma reunião de equipe, verbalmente, e peça a seus colegas de equipe que forneçam uma declaração ou duas explicando brevemente a vantagem ou necessidade da mudança, juntamente com essa referência útil ao livro. Não deixe de agradecer a ele pela referência do livro.
Encare isso, seu objetivo é apreciar a sugestão de mudança e não ser desmotivado por sua tarefa ou seu trabalho. Diz-lhe isso. "Eu apreciaria mais a sugestão de mudança se você pudesse descrever brevemente a vantagem ou a necessidade da mudança ao revisar meu código; pois estou descobrindo que as referências de seus livros são um pouco desmotivadoras".
Se ele continuar se recusando a fornecer uma explicação simples com as referências de seu livro, se você puder fornecer outro livro ou recurso de notoriedade igual ou maior no setor com uma opinião diferente e corresponder ao seu cenário, poderá adicionar seu próprio livro referência em seu comentário de revisão, considerando a retenção do código original. Faça isso o suficiente, ele pode recuar. Tenha muito cuidado para que o contra-argumento seja correto e significativamente mais importante; não há problema em deixar um desenvolvedor sênior estar errado e ainda assim conseguir, isso é algo que eu aprendi e tenho que aprender.
fonte
Eu diria que aprender a programar apenas com livros é impossível, mas eles são bons para você. É como o karatê - você não terá faixa preta apenas lendo sobre isso;) Eu acredito que, neste caso partucular, o Sr. Infestus estava se referindo a "Java Efetivo", de Joshua Bloch. É realmente um ótimo livro sobre desenvolvimento Java e você definitivamente deve lê-lo, se já não o tiver.
fonte