Como posso melhorar minhas habilidades enquanto trabalho em projetos reais, na ausência de desenvolvedores mais experientes? [fechadas]


15

Sou o desenvolvedor líder de uma pequena empresa, trabalhando com C # e ASP.Net. Nossa equipe é pequena, 2-3 pessoas, sem muita experiência em desenvolvimento e design. Não tenho a oportunidade de aprender com mais desenvolvedores seniores, não há ninguém na minha equipe para me orientar e me ajudar a escolher as melhores abordagens, pois eu mesmo cuido da maioria dos projetos.

Como posso melhorar minhas habilidades de desenvolvimento de software enquanto trabalho em projetos reais, na ausência de desenvolvedores mais experientes?


1
Sua pergunta é realmente vaga. A maneira como você aprende as melhores estratégias de desenvolvimento é estudando-as em livros, blogs e podcasts e aplicando-as em sua codificação diária.
Robert Harvey

Obrigado por comentar .... Eu costumava passar por muitos blogs na maioria das vezes e realmente me aprimorava na fase de codificação, mas quando chegava a hora de implementar a estratégia de desenvolvimento (como TDD, DDD, etc.) e o design patter (SOLID, DRY, etc), fico com medo de implementá-las porque não há restrição de tempo no desenvolvimento do sistema e, finalmente, eu escolho o meu próprio estilo de develoment que acho que não implementado em melhor maneira ....
Akash KC

1
@LolCoder Posso entender que algumas pessoas podem rejeitar o TDD por um problema de tempo de desenvolvimento limitado (embora o TDD economize tempo posteriormente), mas não entendo como a aplicação de SOLID ou DRY pode afetar a restrição de tempo ?!
Songo

1
@Yannis Rizos: Obrigado por editar a pergunta ... Agora, parece realmente bom ... O tema da questão permanecem os mesmos .... Mais uma vez, obrigado ....
Akash KC

1
@LolCoder Na verdade, tive um problema semelhante ao que perguntei aqui há algum tempo.
Songo

Respostas:


12

Existem muitas fontes para aprender, além de colegas mais experientes: livros, blogs de desenvolvedores hábeis, Stack Exchange, palestras / conferências etc. A revisão de códigos também é crucial e o CodeReview.SE é um recurso precioso.

Vamos ver como isso poderia funcionar em um exemplo.

Exemplo

Você está lendo uma postagem no blog que menciona um termo "ETL". Você não sabe o significado disso, mas, a partir deste artigo, você entende vagamente que é um tipo de processo ou fluxo de trabalho que move dados de um suporte de dados para outro.

Você acessa a Wikipedia e outros recursos e obtém uma visão mais precisa da coisa. Ainda não está muito claro quando seria útil usar um ETL. Afinal, parece muito mais fácil escrever uma consulta SQL que fará todo o trabalho, em vez de gastar muito tempo criando um ETL real.

Para responder a essas perguntas, você pede emprestado um livro sobre os ETLs da sua biblioteca local. Ele explica que alguns processos de extração, transformação e carregamento não são facilmente executáveis ​​com uma simples consulta SQL: não apenas a fase de extração pode lidar com vários suportes de dados diversos, não apenas um banco de dados relacional, mas também a etapa de transformação pode ser muito complicada para validando / normalizando os dados e mapeando-os.

Agora você tem uma visão clara do que é um ETL, como usá-lo e, especialmente, quando você precisa de um ETL e quando não é uma ferramenta apropriada. Enquanto isso, você implementou um pequeno ETL como um projeto pessoal. Este projeto permite que você descubra alguns pontos que não são claros o suficiente para você e não são cobertos por um livro. Como esses pontos são bastante abstratos e não estão relacionados ao código-fonte, você posta uma pergunta no Programmers.SE .

Quando você tem a oportunidade de criar um em sua empresa, você começa a criá-lo. Você tem alguns problemas. Alguns estão relacionados ao código; você posta perguntas no Stack Overflow . Outros estão relacionados ao banco de dados; você faz as perguntas no DBA.SE .

Finalmente, há uma conferência realizada por um desenvolvedor altamente habilidoso sobre como otimizar ETLs. Você participa dessa conferência e fornece dicas preciosas sobre os aprimoramentos que você pode fazer para o seu projeto.

Você também começa a seguir o blog de um desenvolvedor que trabalhava em ETLs diferentes há anos. É interessante ver as diferentes abordagens e, através deste blog, você aprende sobre o ECCD; você está interessado, por isso empresta o The Data Warehouse ETL Toolkit de Ralph Kimball, o livro que fala em detalhes sobre o processo "extrair, limpar, conformar e entregar". O mesmo blog também menciona muitos aplicativos destinados a criar ETLs sem habilidades de programação. Isso é particularmente útil para o ETL que você fez para sua empresa, pois seu chefe, que não é técnico, pede constantemente que você faça algumas pequenas alterações no que você fez.

Descobrindo coisas

IMHO, a parte difícil, quando você não tem um mentor ou um colega mais experiente, é descobrir coisas e, com a descoberta, quero dizer passar do estado "eu nunca ouvi falar sobre isso" para "eu ouviu falar, mas não sabe muito bem o que é ".

Se alguém revisar meu código e disser que eu realmente deveria começar a usar algumas convenções de estilo, com um pouco de curiosidade, posso descobrir que, na programação, existem diferentes estilos de escrever código, que você deve seguir um estilo para uma determinada linguagem e base de código, e que muitos idiomas têm ferramentas para impor um estilo (como StyleCop para C #).

Se ninguém me fala sobre o estilo, como eu saberia que isso existe?

É aí que recursos como blogs ou Stack Exchange são úteis. A Wikipedia não ajudaria (a menos que você gaste dias acessando páginas aleatórias sobre programação), e os livros raramente falam sobre essas coisas.

O mesmo se aplica a padrões e práticas ou coisas menos relacionadas ao código. Por exemplo, eu dificilmente imagino algum desenvolvedor acordando de manhã dizendo a si mesmo que ele deve aprender algo sobre o ITIL enquanto nunca se interessou pelo ITIL antes.

Depois de descobrir um novo termo, é muito fácil aprender sobre ele. Se você deu um novo termo "contratos de código" e é desenvolvedor de C #, pode facilmente encontrar informações suficientes no MSDN (ou, melhor, no livro de Jon Skeet).

A curiosidade ajuda

Quando trabalho com estagiários, sempre percebo que os melhores são aqueles que ficaram curiosos fora de suas palestras. Eles podem saber que existe uma coisa chamada programação funcional, mesmo que nenhum de seus professores nunca a tenha mencionado e, embora não conheçam nenhuma linguagem funcional, ainda conseguem explicar em termos gerais o que é FP e como é diferente de outras. paradigmas. Eles podem conhecer o Agile, o Unicode ou o modelo de confiança parcial / sandbox, apenas porque estavam lendo blogs e usando o Stack Exchange, em vez de simplesmente assistir às palestras.

Mesmo quando não têm um mentor, ainda aprendem todas as coisas que não são ditas na faculdade.


Obrigado pela resposta maravilhosa ... O exemplo do ETL é ótimo ... Desde o início da vida profissional, sempre tenho a impressão de que, se eu trabalhasse para uma equipe pequena e liderasse o projeto, isso me proporcionaria uma visão profunda do desenvolvimento de software. e, portanto, posso aprender melhor o material de desenvolvimento .... Agora, estou no estado de espírito em que acho que estou perdendo as melhores abordagens de desenvolvimento ao olhar para outros projetos, como o GitHub, Codeplex .... Esse tipo de melhor abordagens só podem ser aprendidas com desenvolvedores experientes ou eu mesmo posso aprender?
Akash KC

@LolCoder: IMO, essas melhores abordagens são mais fáceis de aprender com um mentor, mas ainda é possível aprendê-las você mesmo com a ajuda dos recursos que listei na minha resposta.
Arseni Mourzenko

Muito obrigado por essa grande uma explicou resposta ..... Tempo para aceitar a resposta com muitos muitos thanx ......
Akash KC

4

Estou em uma situação semelhante: somos uma equipe pequena e nosso trabalho principal de produto de desenvolvimento é basicamente alterações incrementais em uma base de código com alguns anos de idade.

Algumas técnicas que estou usando para me manter atualizado e aprimorar minhas habilidades.

No trabalho:

  • Leia: livros, blogs, materiais de relações públicas. Eu sigo vários feeds RSS. Quando o negócio da O'Reilly do dia é sobre uma tecnologia que eu nunca ouvi falar, li a descrição do livro. Se a tecnologia tem muita relação com qualquer coisa em que estou trabalhando, passo cinco ou dez minutos pesquisando-a um pouco mais a fundo, semelhante à resposta da MainMa. Repito isso com alguns feeds RSS diferentes.
  • Crie um plano de treinamento com sua gerência que possa ser suportado pelos recursos da empresa (tempo e / ou dinheiro)
  • Ao contrário das tendências da maioria dos programadores, tente adotar mudanças e novas opções de design. Mudança por mudança não é boa , mas acredito que os desenvolvedores frequentemente evitam usar um novo design ou estrutura por causa da mudança. É uma linha tênue para caminhar, e não se apresse em tomar decisões vinculativas, mas fique de olho nas novas maneiras de fazer as coisas. Algumas mudanças podem trazer benefícios inesperados: mudar para o DVCS permite experimentar mais facilmente nossa base de códigos e experimentar novas tecnologias.
  • Algumas pessoas gostam de conferências; Descobri que o pagamento é pequeno pelo tempo investido.

Fora do trabalho:

Descobri que trabalhar com minhas habilidades fora do dia-a-dia é fundamental. A liberdade de experimentar, cometer erros e buscar interesses me mantém envolvido em TI. Se eu tivesse apenas meus projetos no trabalho e precisasse limitar meu aprendizado ao que era imediatamente útil, eu me esgotaria rapidamente.

  • Envolva-se em um projeto que não seja de trabalho. Para mim, isso está desenvolvendo um site funcional relacionado a um interesse pessoal. Refatoro livremente e tento ativamente experimentar diferentes tecnologias. Contribuir com o código-fonte aberto também permitirá que você seja exposto ao código de outras pessoas. Isso também fornecerá um bom material para compartilhar em entrevistas com a empresa que terá desenvolvedores mais experientes.
  • Campo de código: se houver um campo de código em sua área, participe. Como não são durante o horário de trabalho e são gratuitos, você sente a liberdade de participar de qualquer sessão de tópicos que lhe interessam pessoalmente. Comparado às conferências típicas, essas geralmente são locais e cobrem amplas faixas de tecnologia, então acredito que haja um valor mais concentrado.

E não se esqueça de visitar o SO ou Programmers.SE com frequência.


Muito obrigado pela resposta .... A idéia do campo de código é realmente boa, mas infelizmente, em meu lugar, não existe tal coisa .... Agora, certamente vou me envolver no projeto de código aberto ....
Akash KC

3

As respostas aqui provavelmente serão de grande ajuda, mas eu gostaria de enfatizar algo: nada pode substituir o trabalho com alguém melhor que você (por definições arbitrárias e pessoais, de melhor) por 8 horas por dia, 5 dias por semana. Isso é certo.

Se você é o tipo de desenvolvedor que sempre quer melhorar, sempre quer aprender, terá que ir para uma empresa diferente eventualmente. Isso é inevitável e deve ser planejado.

Quando você encontrar a empresa certa para você, descobrirá que pode continuar crescendo dentro dela, do que crescer fora dela.


Obrigado pela ótima resposta .... Desde o início da vida profissional, sempre tenho a impressão de que, se eu trabalhasse para uma equipe pequena e liderasse o projeto, isso me proporcionaria uma visão profunda do desenvolvimento de software e, portanto, poderia aprender melhor o desenvolvimento. coisas .... Agora, estou no estado de espírito em que acho que estou perdendo as melhores abordagens de desenvolvimento ao olhar para outros projetos, como o GitHub, Codeplex .... Este tipo de melhores abordagens só pode ser aprendido com a experiência desenvolvedor ou eu poderia aprender sozinho?
Akash KC

1

O desenvolvimento de software é um esporte de equipe. Como um esporte, para jogar em um nível muito alto, você precisa estar e competir contra outros que fazem o mesmo. Procure oportunidades para se movimentar.

Lembre-se de que a prática se torna permanente; portanto, se você não está constantemente trabalhando em busca de melhores técnicas e conhecimentos, se trabalha isolado, sem nenhum crítico ou modelo, pode descobrir que suas habilidades não aumentam.

Em todo o mundo, as coisas estão ficando mais competitivas; portanto, espere que seu nicho seja temporário e prepare-se para o tipo de oportunidade que atenda aos seus critérios de satisfação no trabalho, enquanto, ao mesmo tempo, leva você para fora da sua zona de conforto para trabalhar com uma equipe superior.


1

Antes de receber qualquer sugestão, devo dizer que estava em uma posição muito semelhante há pouco mais de um ano.

Se você está realizando os projetos, mas sente que há muito espaço para melhorar, isso é uma coisa boa.

Em uma ocasião, eu não tinha capacidade técnica e confiança para concluir o projeto. Muitas vezes, comprava um livro, lia um blog bastante técnico e me encontrava "fora da minha profundidade". Acho que o maior problema para mim foi o fato de não ter exposição a nenhum aplicativo corporativo de grande porte. Muitas vezes eu faria algo bem, mas não teria ninguém ao meu lado para validar o que fiz.

Isso foi desmotivador e desafiador, então eu vejo de onde você é. Como resolvi esse problema? Saí de uma empresa e entrei para uma casa de desenvolvimento de software bem estabelecida, o que me ajudou a ganhar muita experiência no ano passado.

A menos que você queira sair da empresa, sugiro livros que foram escritos pelos pioneiros da nossa indústria. Eu começaria com The Pragmatic Programmer, de Andrew Hunt. O livro contém toneladas de analogias úteis que são muito fáceis de lembrar. Os primeiros capítulos deste livro me incentivaram a escolher uma linguagem de programação muito diferente daquela que usamos no trabalho. Comecei a ler literatura não técnica - agora acredito que ler romances e ficção científica me tornará um programador melhor. Escrever ensaios não está longe de escrever código limpo. Alguns escritores são bons e outros ruins. Este livro me fez preocupar com o que escrevo. Uma das analogias é chamada "Windows quebrado". Você deixa um carro abandonado na rua por dias e nada acontece. Depois de quebrar uma única janela, o carro provavelmente será destruído no dia seguinte. Código não é diferente. Se você vir um código quebrado ou mal escrito, corrija-o imediatamente, não o deixe apenas porque mais cedo ou mais tarde ele voltará a "assombrá-lo". Depois de começar a ler este livro, você encontrará dezenas de analogias semelhantes que farão você pensar sobre o código de uma maneira diferente.

Eu sugeriria que você seguisse para o Código Limpo de Robert C. Martin. Este livro é mais prático, pois obriga a ler códigos ruins e bons (limpos). O autor usa exemplos de código de um dos projetos de código aberto. Você diz que não há ninguém para guiá-lo. Há uma oportunidade perfeita para examinar o código de outra pessoa, compará-lo com o seu e ver como você pode melhorá-lo. Para mim, ler este livro foi como acompanhar alguém que trabalha em um projeto. O livro também enfatiza fortemente a coisa mais fácil e difícil - separação de preocupações. O autor perguntou aos pioneiros de nossa indústria o que eles consideram um código "limpo". Depois de ler as respostas, você poderá compará-las com sua própria opinião sobre o que é o código limpo.

Por fim, você já pensou em trabalhar em projetos de código aberto? Você estará colaborando com outros desenvolvedores, provavelmente mais experientes, que poderão revisar seu código e direcioná-lo na direção certa.

Como eu disse na minha resposta original, isso não acontecerá durante a noite. Faço isso há alguns anos e quase todos os dias descubro que estou fazendo errado.

Boa sorte!


1

Pratique a solução de problemas. Leia e trabalhe para entender o código de outras pessoas (o github é um ótimo recurso para isso) e envie melhorias para ele. Realizar trabalhos de consultoria pode realmente ajudá-lo a ampliar seu conjunto de habilidades.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.