Qual é o conjunto de habilidades que todo programador que se forma na faculdade deve ter? [fechadas]

9

Tivemos um palestrante convidado em nossa escola, ele foi tangente em relação àqueles que se formavam e não estavam no nível de habilidade que ele espera, ie. conhecimento de uma linguagem compilada antiga como Java, C ++ ou C #, uma linguagem de script como Python ou Ruby, uma estrutura da web. Quais são algumas outras habilidades que vocês acham que devem ser absolutamente críticas para se formar?


fonte
Estou assumindo que você quer dizer se formar em uma universidade?
Michael Shaw
11
@Ptolomeu: Nos Estados Unidos, o termo faculdade está correto.
Macneil
11
A vontade de se chutar na bunda e desaprender falar mensagens de texto, seus jovens punks! socializedpr.com/…
Job

Respostas:

27

De longe, eu diria uma vontade de aprender. A faculdade não tem como objetivo fornecer as habilidades necessárias para você se tornar um programador. Destina-se a ensinar as habilidades necessárias para aprender essas habilidades.

Jason Baker
fonte
Não poderia ter dito melhor.
27410 Chris
4

Os recém-formados precisam mais do que apenas um desejo de aprender, precisam de uma obsessão pelo aprendizado, um entendimento de como aprender e uma base sólida nas realidades do software. Geralmente, eu não ligo para quais idiomas você conhece, mas todos os juniores devem:

  1. Entenda a história . A ciência da computação é um campo bem pesquisado, com muitos problemas resolvidos. Conhecer esse fato abre as portas para aprender com o que está diante de você. Mesmo sabendo que existe uma história rica para extrair conhecimento, é mais do que muitos graduados grocam. Isso inclui coisas como notação O-grande, histórico de algoritmos, princípios dos profetas (Knuth, K&R, Hofstdater etc.) e práticas e padrões comumente aceitos.

  2. Saiba que isso pode ser resolvido . Sempre fico surpreso quando um desenvolvedor é surpreendido por um problema. Parte de aprender a aprender é o princípio simples de que os problemas são facilmente solúveis, sempre. Uma vez que você sabe disso, enquadra seu pensamento para encontrar uma resposta sensata.

  3. Entenda a decomposição . Não apenas os problemas podem ser resolvidos, mas o caminho para fazê-lo é tão simples quanto dividir e conquistar. Reduza um problema para componentes mais simples, e sua resposta sempre se apresentará.

  4. Saiba como medir . Além de decompor problemas, os novos desenvolvedores precisam saber como coletar fatos sobre esses problemas. Quão mais? Quão largo? Quão rápido? Quantos? Fatos simples são um passo para a compreensão e o pensamento objetivo. Fazer suposições sem fatos é uma maneira fácil de se perder no espaço do problema.

  5. Seja objetivo . Todos os problemas podem ser decompostos, medidos e entendidos simplesmente. Os problemas que não podem ser entendidos simplesmente requerem decomposição, medição e compreensão adicionais. Não adianta ficar bravo ou frustrado, nem é produtivo discutir sobre teorias ou culpar. Qualquer comportamento irracional ou crença relacionada ao processo de solução de problemas é veneno, tornando as soluções muito difíceis de encontrar.

  6. Prefira padrões e princípios . Você encontrará dezenas de maneiras corretas de fazer coisas, linguagens, modelos de programação, arquiteturas de computadores e até métodos de engenharia. Não existe um caminho único e correto, mas existem conceitos subjacentes sólidos que você pode aplicar repetidamente. Aprenda a ver esses padrões, pois eles guiarão seu aprendizado e pensamento a cada passo do caminho.

Bruce Alderson
fonte
1
  1. Paixão por programar bem
  2. Humildade
  3. A capacidade de aprender coisas novas rapidamente
TaylorOtwell
fonte
0

Como empregador, empregarei apenas pessoas como programadores que:

  1. Ter experiência em percorrer um único código.
  2. Pode selecionar um padrão de design apropriado para resolver um problema específico simples.
  3. Pode implementar código que reflete o padrão de design escolhido.

Na minha experiência, menos de 5% dos graduados em ciência da computação que se candidatam a empregos de programação realmente têm essas habilidades, em um nível básico. Essas são as habilidades mínimas necessárias para serem comercialmente úteis e, o mais importante, nem todos são capazes de aprender essas habilidades.

Outros bons para ter são:

  • Experiência de trabalho em um projeto de equipe
  • Uso do controle de origem
  • Experiência de teste de unidade

Isso facilita a integração com a equipe de desenvolvimento existente, mas são assuntos que normalmente podem ser ensinados no trabalho.

Michael Shaw
fonte
0

Eu já havia uma equipe que "herdei" com funcionários recém-formados e tive a experiência de que aqueles que realizavam programação real "ao lado" de lá estudavam (para ganhar algum dinheiro extra) eram os membros mais capazes da equipe. Portanto, a experiência é a chave e pouco importa em que idioma.

No entanto, se você procurar o que os recrutadores estão procurando (em todos os sites comuns de recrutadores, como jobserver.com etc.), é interessante observar que há muito a ser solicitado para C ++, C #, Java, mas também existem outros procurados e também coisas "exóticas" como COBOL ainda estão por aí.

hol
fonte
0
  1. Habilidades interpessoais e de comunicação
  2. Abordagem pragmática (não essa teoria acadêmica)
  3. Capacidade de pensar como um cliente que não é tecnicamente inclinado
  4. Capacidade de avaliar o que é importante / e o que pode ser desconsiderado, em termos de custos / benefícios
  5. Capacidade de trabalhar em equipe
  6. Capacidade de pensar estrategicamente: arquitetura, extensibilidade, escalabilidade
  7. Abertura para aceitar que os ensinamentos da universidade têm pouco a ver com o mundo real (depende da universidade - alguns se saem melhor nisso).

O processo de aprendizado nesta profissão nunca termina. É preciso aprender constantemente e melhorar a si mesmo, caso contrário, ele "flunks out" do jogo muito rápido.

Torre
fonte
Tudo isso é útil. No entanto, quase zero universitários os possuem, e eles não são críticos, pois a maioria é facilmente adquirida no local de trabalho. Eu acho que você estava respondendo a uma pergunta diferente.
dbkk
@dbkk - Peço desculpas, mas a pergunta não era "quais habilidades os programadores de graduação têm", mas "o que ... deveria ter". Além disso, não, eles não são facilmente adquiridos. Muito pelo contrário - na maioria das vezes, as pessoas com anos de experiência ainda perdem a maioria delas.
Rook
11
Essas são habilidades gerais e muitas não são realmente adequadas para o aprendizado na escola.
precisa
-1

As outras respostas são boas, mas eu diria que a habilidade nº 1 negligenciada na universidade parece ser a engenharia de software real .

As aulas básicas para ensinar OOP e uma linguagem como Java são ótimas, mas no 3º e 4º ano, por que os alunos (pelo menos na minha universidade local) escrevem compiladores e sistemas operacionais em vez de aprender a identificar e criar uma boa arquitetura, como dissecar requisitos e criar a partir disso uma lista de especificações técnicas, e talvez o mais importante, qual a diferença entre bom código que funciona e código ruim que funciona.

É como se nossas universidades quase quisessem produzir codificadores em vez de engenheiros de software . Eu nunca contrataria alguém que não demonstrasse habilidade / talento em engenharia.

Nicole
fonte
4
Porque o que as pessoas aprendem é ciência da computação, não engenharia de software. Esse problema desapareceria se universidades e estudantes percebessem que ciência da computação! = Engenharia de software, ciência da computação é ciência, ciência da computação não é sobre programação e engenharia de software é mais que programação.
Thomas Owens
-1. Aprender como as coisas funcionam sob os bastidores (compiladores, SOs, linguagem assembly, etc.) é importante, mesmo que você nunca trabalhe nesse nível, porque você encontrará abstrações com vazamentos em algum momento.
23411 dsimcha
@dsimcha, se você acredita nisso, tem uma visão muito restrita de que tipos de engenheiros de software estão sendo empregados pelas empresas no momento no mundo real. Não é que essas coisas não agreguem valor - é o custo de oportunidade de não ensinar algo mais essencial.
24411 Nicole