O que um desenvolvedor sênior de software com proficiência técnica pode estudar para continuar melhorando [fechado]

15

Digamos que você esteja programando há mais de 10 anos. Você conhece muitos idiomas, com poucos deles em nível muito detalhado. Você projetou a arquitetura de soluções, trabalhou e entregou projetos maiores. Você estudou padrões, práticas recomendadas, diretrizes eficazes de codificação, teste de unidade, multiencadeamento etc.

E então você lentamente desenvolve a sensação de que a maioria dos livros que você lê fornece informações cada vez menos valiosas por 100 páginas de texto. Então eles começam a dar retornos decrescentes. Você ainda aprende, mas não melhora mais aos trancos e barrancos.

Por que o aprendizado se torna menos produtivo em comparação com o que era antes?

Naquela época, isso costumava mudar sua maneira de pensar, ensinava coisas novas e ampliava seus horizontes que posteriormente melhoraram sua profissão atual ou permitiram inventar / gerenciar / construir algo novo. Por que não é mais o caso?

Codificador
fonte
9
De acordo com o FAQ , perguntas sobre o que você deve fazer em seguida (projeto, livro, tecnologia ou idioma) estão fora de tópico. Eu posso entender o seu ponto de vista, mas você não pode saber tudo o que há para saber relacionado ao desenvolvimento de software. Seu problema é que você ficou entediado, talvez tenha caído em uma rotina intelectual. O que te inspira a sair dessa rotina depende muito de você e provavelmente seria algo completamente diferente para outra pessoa. Mas aqui está a resposta: saia da sua zona de conforto . Aprenda sobre sistemas embarcados, matemática, gráficos ou o que for do seu interesse.
Caleb
2
Não vejo essa questão limitada quanto ao que o OP deve fazer a seguir. É sobre abordagens gerais que os profissionais têm disponíveis para continuar seus estudos. Talvez possa ser melhor formulado, mas não está escrito como "o que devo fazer a seguir" para mim.
Frank
3
Bem, sinceramente, não sei quais perguntas não estão fora de tópico atualmente. Na verdade, está ficando difícil encontrar discussões interessantes aqui ultimamente. Ok, w / e, apenas bloquear o tópico ...
Coder
2
Acredito que a pergunta possa ser editada para reabrir. Até onde eu sei, o problema apresentado: "retornos decrescentes ... estudando padrões, práticas recomendadas, diretrizes eficazes de codificação, teste de unidade, multi-threading ..." é bastante sobre o tópico para programadores
gnat
2
Você obterá uma compreensão mais completa de um assunto ao tentar ensiná-lo a outra pessoa.
11133 JeffO

Respostas:

23

Primeiro, apesar da forma como sua pergunta é formulada, não há fim para nenhum estudo, especialmente em nosso campo, onde coisas novas surgem mais rapidamente do que você pode ler sobre elas. Dito isto, quando você deseja melhorar, há as seguintes categorias que eu consideraria. Para o maior benefício / ROI, você deve escolher algo da sua área mais fraca, é claro.

Conhecimento Fundamental

Apesar de conhecer linguagens de programação e ter experiência prática, muitas vezes existem áreas (especialmente aprendidas por si) nas quais questões básicas fundamentais são deixadas incompletas. Pense em coisas como estruturas de dados, algoritmos, estratégias de cache, funções de hash, ...

Observe que isso também inclui os fundamentos das linguagens de programação - tudo, desde compiladores, técnicas de otimização e sistemas de tipos, até teoria das categorias, mônadas e similares.

Se você é bem ensinado, como possui um diploma de nível universitário há vários anos, é provável que já seja forte nessa categoria (longe de terminar o curso, mas com uma base sólida). Caso contrário, tente ler alguns livros nessas áreas para descobrir se algo que você nem sabia estava faltando em seu repertório. Essa categoria é a mais fácil de se superestimar.

Conhecimento Paradigmático

Fico sempre espantado quando os programadores aparecem que pensam que sabem tudo, mas ignoram completamente outros paradigmas comuns. Se você acha que a orientação a objetos é o fim, esta é sua categoria de aprimoramento. Se você acha que a programação funcional também existe e pode até ter ouvido falar em programação lógica, ainda é uma boa escolha. Existem muitos paradigmas por aí e aprender sobre eles tem o efeito profundo de fornecer algo semelhante a uma nova visão do mundo da programação.

Apenas não se esqueça: há frequentemente argumentos (bastante filosóficos por natureza) sobre o que pode ser considerado um paradigma ou não. Não se desvie deles. Seu objetivo deve ser ampliar seu horizonte e isso significa aprender sobre essas coisas, se outra pessoa considera X um paradigma por si só ou não, não faz diferença para isso.

Conhecimento Especializado

O mais fácil de todos - e o menos útil ao mesmo tempo. Obviamente, você pode se comprometer com uma única tecnologia e conhecer todos os seus meandros, mas deve estar preparado para pagar o preço. As tecnologias envelhecem e o fazem em uma velocidade cada vez maior, o que torna quase uma garantia de que o tempo investido aqui será inútil por vários anos adiante.

Também o problema do retorno decrescente brilha aqui. Pela natureza de ser um especialista em algo, você precisa passar inúmeras horas nesse assunto restrito e, portanto, por definição, levará muito tempo para aprender algo novo e esse novo será uma pequena peça de quebra-cabeça que é não vai mudar a visão de ninguém sobre nada.

Conhecimento do domínio

Seja porque é o domínio do seu trabalho, ou simplesmente com base no seu interesse pessoal, mas ser um especialista em ciência da computação e um determinado domínio é muito valioso e gratificante. Não estou falando de áreas laterais do CS aqui, como computação gráfica ou IA. Em vez disso, observe que os computadores se firmaram na vida de todos e isso sujeita todos os outros campos a computadores e a uma área em que você pode entrar.

Este claramente se enquadra na categoria "fora do seu campo", mas não é um "fora" matemático agudo, mas sim um campo de aplicação. Considere a medicina: não estou aconselhando você a se tornar um médico. No entanto, aprender os fundamentos da medicina a fim de aplicar o conhecimento existente sobre ciência da computação aos problemas desse campo realmente vale a pena. Isso varia de técnicas de visualização, além de robótica, a sistemas especializados e mero gerenciamento de dados para contabilidade / administração. Embora você tenha feito tudo isso antes, fazê-lo em outro domínio pode acabar sendo uma experiência totalmente nova.

Porém, lembre-se de que essa é uma mudança muito mais radical em sua direção do que as outras categorias. Você pode não ter nenhum contato com esse campo no seu dia-a-dia, o que dificulta a execução. Pode até significar mudar de emprego. Além disso, você precisará de algum tipo de certificação sobre seu novo domínio - afinal, você é um novato completo nesse domínio e precisa competir com os graduados de estudos interdisciplinares, que já começaram sua jornada para se tornarem especialistas nesse nicho.

Conhecimento Suplementar

Como Mike Brown acrescentou, há também a área de conhecimento que de alguma forma acompanha o seu trabalho atual, mas não é estritamente necessário. Você não precisa ser um gerente de projetos para aprender sobre gerenciamento de projetos, mas, como de costume, conhecimentos adicionais fornecerão uma visão maior sobre como o outro lado funciona. Pode-se até generalizar isso a ponto de focar em habilidades sociais. Acho que todo mundo que trabalhou em um projeto real com outras pessoas sabe o valor delas.

Frank
fonte
+1, especialmente para "Conhecimento do domínio" - isso é algo que funcionou pelo menos para mim.
Doc Brown
1
Eu concordo 100% com o que você diz. Estou interessado em um conhecimento fundamental mais profundo. Para o efeito de que estou matriculado em um curso sobre compiladores no momento. O que você não tocar em é o que eu classificaria como conhecimentos complementares: design gráfico, gestão de projectos, etc.
Michael Brown
+1 por paradigma - eu fazia OOP / processual por ~ 10 anos (e me cansava disso) e então comecei a aprender programação funcional e meus olhos estavam abertos para um mundo totalmente novo.
paul
9

Eu acho que o software está sempre evoluindo e, como tal, há uma ênfase na melhoria constante. Entendo de onde você veio, me senti um pouco parecido recentemente e agora estou buscando um MCSM no SQL Server.

Aprenda o próximo novo idioma, estrutura ou o que está atualmente "quente". Todos os anos há uma tecnologia, estrutura ou linguagem que sai, ou atinge massa crítica, que se torna uma palavra da moda por si só. Posso pensar em algumas delas nos últimos anos: node.js, Ruby, jQuery. Isso provavelmente também afetará sua maneira de pensar para outras plataformas, por exemplo, veja o que o ROR fez com o Java com Grails.

Há sempre espaço para melhorias. Eu acho muito improvável que você possa ser um especialista em tudo, e eu leio muito e estou sempre aprendendo. Concordo com o que você diz sobre aprender cada vez menos a cada 100 páginas, mas isso é de se esperar quando você é um especialista no assunto.

Em termos do que você pode fazer, aqui estão algumas sugestões:

  1. Mantenha-se a par das mudanças na comunidade e no que as pessoas estão "entrando". Aprenda as novas pilhas, pelo menos para ter o suficiente para recomendá-las quando apropriado

  2. Participe de sites de perguntas e respostas como esse, onde você pode transmitir seu conhecimento a outras pessoas. Se você reservar um tempo para ler as contribuições de outras pessoas, provavelmente aprenderá alguma coisa e, no mínimo, verá as perspectivas que outras pessoas têm.

  3. Escolha um hobby que tenha alguma relação com o seu trabalho. Existem muitos hobbies com cross-over, pense em IA, lego mindstorms, RaspPi, etc.

  4. Além de tentar aumentar a largura do seu conhecimento, observe como aumentar a profundidade. Por exemplo, aprenda como a EF funciona nos bastidores, para que você possa diagnosticar esses casos de canto estranhos em vez de apenas usar a estrutura.

  5. Busque a certificação de nível superior apenas para provar que você conhece suas coisas

Pessoalmente, vou lhe contar o que está abrindo minha mente no momento. Estou lendo 97 coisas que todo arquiteto de software deveria saber e sou apenas parcialmente, mas isso trouxe muitos conselhos sábios. O livro é gratuito para leitura on-line no link que forneci.

Em termos do hobby que assumi, entrei no diagnóstico do veículo (com o computador, obviamente), o que me fez manter totalmente meu próprio carro. Na verdade, gosto muito do tempo que passo trabalhando com as mãos.

Sam
fonte
Engraçado, eu sei que um dos autores para 97 coisas;)
Michael Brown
É um bom livro.
Sam
Seja bem-vindo. É ótimo, não é?
13133 Sam
1

Depois de um certo ponto, você aprendeu o suficiente sobre um tópico específico para se sentir à vontade para adquirir novos conhecimentos de maneira ad hoc. Quando você sentir que não há muito mais a aprender sobre o seu campo principal, é hora de começar a adquirir conhecimento suplementar que complementa o seu conhecimento principal.

Para mim, estou mergulhando no UX e no design gráfico porque sinto que me tornará melhor como desenvolvedor para fornecer não apenas estruturas elegantes em código, mas também interfaces elegantes para o usuário final.

Outros tópicos que você pode abordar incluem gerenciamento de projetos, análise de negócios, administração de sistemas e aprimoramento de processos de software. Se você estiver trabalhando em um domínio específico, pode fazer sentido se aprofundar mais nesse domínio. Por exemplo, tenho trabalhado pesadamente no setor de serviços financeiros recentemente. Eu me inscrevi em cursos do Coursera sobre modelagem financeira e coisas do tipo que me ajudarão a falar com meus clientes nos termos deles.

Há sempre mais para aprender, basta pensar fora da caixa.

Michael Brown
fonte
0

Há duas partes nessa pergunta: por que é mais difícil aprender e o que você pode fazer?

A primeira parte é bem direta - tópicos mais avançados são mais difíceis. Por mais difícil que seja aprender a programar, é um pouco mais difícil aprender a projetar bem os programas e ainda mais difícil aprender a projetar aplicativos grandes. O fato é que os tópicos avançados são mais difíceis, ou eles não seriam avançados. Você precisará gastar mais tempo aprendendo-os; mais tempo praticando para dominá-los.

Quanto ao que você pode fazer, você parece focado nos aspectos técnicos de ser um engenheiro de software sênior. Você pode fazer muito mais coisas para ajudar sua equipe a criar software do que aprender linguagens e estruturas. Soft skills, como orientação de outros desenvolvedores, negociação de requisitos, gerenciamento de projetos, design de programas, comunicação de visão, implementação de normas de equipe ... Todas essas coisas importantes necessárias para tornar uma equipe de desenvolvedores eficaz na criação de software, não apenas você.

Telastyn
fonte
-3

Cada vez que vou ao site Lambda The Ultimate , realmente não consigo pensar como se soubesse tudo no campo das ciências da computação.

O LtU fornecerá um bom ponto de partida para o paradigma e o conhecimento teórico ainda a serem aprendidos.

"Quanto mais você sabe, mais você sabe o quão pouco você sabe."

Stephane Rolland
fonte
1
como isso responde à pergunta: "Por que o aprendizado se torna menos produtivo em comparação com o que era antes?"
Gnat #
Porque quando vou para lá, há artigos com algo como 90% das coisas novas que preciso aprender. É exatamente disso que o OP está reclamando: a proporção de coisas aprendidas pelo número de linhas lidas que se torna muito baixa no caso dele. Você também não conhece este site?
Stephane Rolland
@gnat, e você confunde a pergunta , intitulada: "O que um desenvolvedor sênior de software tecnicamente competente pode estudar para continuar melhorando"?
Stephane Rolland
você leu o conteúdo da pergunta após o título?
Gnat #
@gnat Sim, é claro, eu li sua pergunta: é realmente uma afirmação se o OP apenas perguntar o porquê : depois de 10 anos, o chamado engenheiro de software sênior lê livros que não mudam mais os horizontes porque um sênior sabe muito. Sim, eu li isso. Eu sorri Repito: "Quanto mais você sabe, mais sabe o pouco que sabe."
precisa