Devo ser um bom programador imediatamente após a faculdade?

28

Possível duplicata:
me formei em Ciência da Computação, mas não me sinto nem perto de ser um programador especialista

Eu me formei recentemente na universidade e, desde então, entrei para uma equipe de desenvolvimento em que sou de longe o desenvolvedor menos experiente, talvez com alguns termos de trabalho. Enquanto isso, o resto da equipe está balançando de 5 a 10 anos de experiência.

Eu era um aluno muito bom e um bom programador quando se tratava de tarefas e testes em garrafas. Eu trabalhei em alguns projetos com sucesso, mas agora estou trabalhando com uma base de código muito maior, e a curva de aprendizado é muito maior.

Fiquei me perguntando quantos outros desenvolvedores começaram suas carreiras em equipes e saíram como se tivessem sugado. Quando isso muda? Como posso acelerar o processo? Meus idosos estão me ajudando, mas quero ser ótimo e mostrar meu valor agora.

dustyprogrammer
fonte

Respostas:

50

O interessante sobre o desenvolvimento de software é que não importa o quão bom você seja - sempre há alguém melhor ou pelo menos diferente o suficiente para ainda lhe ensinar alguma coisa. Também não é incomum olhar para o código escrito há alguns meses e pensar que é péssimo, independentemente do seu nível de experiência.

Para mim, depois que percebi a diferença entre minhas habilidades e as habilidades de meus colegas de trabalho, comecei a aprender como nunca havia aprendido antes - lendo o código de outras pessoas, postagens de blog, livros, prestando atenção em como meus colegas de trabalho realizaram coisas etc. A universidade me preparou para a ciência da computação, mas não realmente para o desenvolvimento de software. Passaram quase 4 anos e sou um desenvolvedor de software muito mais forte do que costumava ser. Então, fique aí e aprenda o máximo que puder das pessoas ao seu redor. Vai melhorar.

Adam Lear
fonte
+1. Eu também gostei muito de ser o que é péssimo em algo na equipe, e isso me forçou a ajustar meus conhecimentos.
27
+1University prepared me for computer science, but not really for software development.
George Marian
1
Espero ter a mesma experiência quando terminar a universidade e conseguir meu primeiro (oh espere, segundo) trabalho no ramo de programação.
gablin
4
@ George: O pior é que muito do desenvolvimento de software no mundo real se enquadra na categoria "TI", que geralmente se resume a colocar interfaces de usuário feias em tabelas de banco de dados. :( Não é exatamente algo que a universidade possa prepará-lo.
Adam Paynter
@adam Absolutamente. Embora eu entenda a necessidade disso às vezes, a abordagem "bom o suficiente" me deixa maluca.
George Marian
23

Não. Aprendi muito mais sobre engenharia de programação / software nos primeiros 6 meses de trabalho após deixar a universidade do que nos anos anteriores. No entanto, isso não significa que a universidade foi uma perda de tempo, preparou minha mente e forneceu o conhecimento básico para desenvolver.

Por outro lado, olhando para trás agora, eu ainda não sabia o que estava fazendo há 6 meses.

Dan Dyer
fonte
4
Bem dito, meus professores sempre diziam "Há uma grande disparidade entre indústria e academia". Difícil de acreditar até sair para o mundo real e perceber que de fato existe!
Chris
Este. É exatamente por isso que um estágio, não remunerado ou o que você conseguir, é tão valioso. Inferno, mesmo um estágio que não seja de programação é muito mais valioso em experiência do que qualquer classe isolada, porque você aprende algumas das armadilhas de trabalhar com pessoas.
Kzqai
10

A educação fornece uma base para a construção, mas não a prepara para o desenvolvimento de software na vida real. Isso vem com a experiência. Eu definitivamente estava na mesma situação que você quando comecei a programar para um emprego. Contanto que você continue aprendendo, lendo livros, postagens no blog e aplicando o que aprende em seu trabalho , vai melhorar. A chave é aplicar o que você aprende. Apenas ler não ajuda, você precisa aplicar ativamente novos conhecimentos.

ysolik
fonte
+1 para aplicar o que aprendeu. Eu esqueci de mencionar essa parte. :)
Adam Lear
7

Eu definitivamente pensei que era, mas não era.

Confie em mim, em algum momento de sua carreira, você voltará e trabalhará em algum código que escreveu, mas não tocou há anos e deseja desesperadamente que nenhum outro desenvolvedor profissional veja esse código ou saiba que você o escreveu. Isso significa que você está crescendo.

JohnFx
fonte
4

De certa forma, escolher uma linguagem de programação é como escolher uma linguagem natural. Você pode aprender uma boa quantidade de teoria na escola. Você aprende a gramática e os elementos básicos do vocabulário e pensa que é muito bom, até se encontrar em uma conversa real com um falante nativo, e então fica completamente perdido.

A maneira como você realmente aprende o idioma, a ponto de se manter em uma conversa com falantes nativos, é realmente falando o idioma, a cada hora de cada dia. Isso geralmente significa ir morar em algum lugar onde é falado. E é aí que uma coisa interessante acontece. Embora o que você aprendeu na escola seja inútil, por si só, nas ruas de um país estrangeiro, ele fornece uma base teórica boa e sólida que facilita muito o aprendizado de idiomas. (Essa foi minha experiência com o espanhol, pelo menos.)

A programação é da mesma maneira. O que você aprende na escola não o prepara para o trabalho que você precisa fazer como um programador real, mas (supondo que você esteja em uma escola competente que não embuste tudo no interesse da popularidade), ele ajuda a se preparar sua mente para que, quando chegar a hora de realmente aprender a ser um bom codificador, os conceitos fundamentais de que você precisa já estejam em vigor. (Essa foi a minha experiência com programação, pelo menos.) :-)

Mason Wheeler
fonte
2
Boa resposta, mas eu não chegaria ao ponto de dizer que "o que eu aprendi na escola é inútil". Eu sei no entanto o que você está buscando.
gablin
4

Muitos bons programadores saem dos cursos universitários de ciência da computação, principalmente os mesmos que entraram neles.

O problema da ciência da computação é que, como as pessoas discutiram acima, não é o mesmo que programação. Muitas coisas que estudei na universidade para a qual basicamente não estava pronta - havia muitas que pareciam bobagens acadêmicas quando estava ouvindo palestras sobre isso, mas alguns anos depois eu desejava tinha prestado mais atenção a isso quando acabei aprendendo um monte de coisas novamente que arquivei como inúteis. Na verdade, eu acho que alguém poderia usar alguns anos de programação em um ambiente comercial antes de começar uma graduação em ciência da computação, se é isso que você quer fazer.

Também acho que muitas vezes na universidade você não sabe necessariamente aprender. Muitas coisas que aprendi por engano ou com outros desenvolvedores certamente são coisas que meus professores e alunos de graduação sabiam na universidade, mas eu não tinha idéia de que seria útil entendê-los. Perguntar às pessoas sobre os problemas que você está tendo enquanto aprende a fazer alguma coisa (e isso se aplica a qualquer coisa realmente) torna o processo de aprendizagem mais suave e menos doloroso. A maioria das coisas que você pode aprender por si ou por outras pessoas - considerando que muitas das lições que aprendi por mim foram aprendidas com meus erros dolorosos, eu escolheria aprender com outras pessoas quando puder ...

glenatron
fonte
2

Gostaria de citar a publicação de Brian Hurt

Ciência da computação e programação são coisas separadas

que também se refere à programação de graduação de Joel Spolsky e ao brilhante artigo intitulado Who Killed the Software Engineer

Todas essas discussões descrevem a realidade bastante bem e, na minha opinião, respondem sua pergunta como "Não", porque a universidade não fará de você um bom programador. Você precisa se tornar um bom programador por conta própria.

Eu não sou formado em CS, mas estou profissionalmente programando e desenvolvendo software há 8 anos. Todas as minhas habilidades de programação eu aprendi.

mloskot
fonte
1

Não, eu estava fingindo ser um programador e aprendi da maneira mais difícil. Consegui meu primeiro cliente como freelancer e lutei muito mal com C / C ++ e, eventualmente, ganhei. Lembro que demorou algumas horas para entender que fazer malloc em uma estrutura não era suficiente para alocar também memória para os ponteiros na estrutura.

martjno
fonte
Qual foi o seu diploma original? Seu trabalho duro finalmente valeu a pena?
Rwong 4/10/10
Sou engenheiro eletrônico, fui muito bom em Matalb, mas com muito pouco conhecimento de C / C ++ e Java. Acredite ou não, meu primeiro trabalho de programação real foi escrever drivers para Windows CE e portá-lo neste dispositivo: eurotech.com/EN/innovation.aspx?pg=wearable . Eu tive uma pequena ajuda da empresa, mas basicamente eu estava trabalhando sozinho em casa, perdendo muito tempo por coisas muito pequenas. Mas você aposta que eu não esqueci nada! Ainda estou aprendendo, mas agora tenho uma startup fazendo um programa realmente grande ... então valeu a pena.
martjno
1

Eu era um bom programador quando me formei na universidade. Eu também tive uma excelente oferta de emprego meses antes de me formar (que eu pude recusar por uma ainda mais sofisticada).

A chave era que eu havia trabalhado muito como hobby, com um trabalho de desenvolvimento da Web durante o ano letivo e fazendo estágios de verão de qualidade com a IBM ("equipes de velocidade ExtremeBlue" e o programa ExtremeBlue propriamente dito). Uma boa experiência pré-profissional permitirá que você pule um pouco do material básico quando se formar.

(Dito isso, ainda fiquei muito melhor programando nos meus primeiros seis meses em um Real Job (tm). Não que eu tenha terminado depois, mas foi quando realmente estava mostrando muita coisa.)

user2348
fonte
1

Posso dar uma resposta inversa, pois fui direto do ensino médio para o trabalho. Comecei a trabalhar como programador inteligente e fui quase imediatamente produtivo no projeto que meus empregadores me deram. Eu tinha alguns colegas que tinham um diploma de ciência da computação novo e eles não eram produtivos.

Com o tempo, alguns colegas de trabalho aprimoraram muito suas habilidades, enquanto outros não, e isso não estava relacionado ao seu GPA.

Wizard79
fonte
1

A universidade não ensina você a se tornar um programador do mundo real. Eu acho que isso é semelhante com muitos empregos em comparação com seus programas de graduação. Eu não diria que não tenho nada do meu diploma, mas foi muito menos útil do que passar 4 anos realmente no trabalho.

Mas tudo bem. Todo trabalho que comecei provavelmente estava subqualificado. Se você tem confiança em suas habilidades e se dedica à aprendizagem, pode acelerar e fazer o trabalho.

RationalGeek
fonte
1

Acho que não aprendi nenhum fato sobre programação em geral ao qual não fui exposto na faculdade. Claro, eu peguei novas linguagens de programação aqui e ali, aprendi novas APIs, novas bases de código e novas ferramentas, mas os conceitos gerais estavam todos presentes logo após a escola.

O que você adquire com a experiência é um tipo de instinto que acelera a maneira como você restringe um bug relatado ou o leva diretamente à maneira mais robusta de escrever um novo código. Quando você é novo, ainda pode corrigir o mesmo bug ou implementar o mesmo recurso, mas leva mais tempo e é mais provável que você precise voltar e corrigi-lo para um problema imprevisto.

É por isso que é importante conseguir colegas mais experientes para orientá-lo. Vá até eles e diga: "É assim que eu acho que isso deve ser tratado. Você consegue pensar em uma maneira melhor?" Isso oferece o benefício da experiência de descobrir por si mesmo e de aprender com a experiência dos outros.

Karl Bielefeldt
fonte
0

Eu era um programador melhor do que meus professores na universidade.

Aprendi ótimas práticas de programação quando comecei a trabalhar.

mouviciel
fonte
0

Um bom programador está sempre aprendendo ... aprendendo uma maneira diferente de fazer isso ou uma maneira melhor de fazer isso. O que quer que seus colegas programadores tenham para lhe ensinar, eu ouviria.

Jeremy
fonte
0

Uma das coisas que ninguém mencionou é que os problemas que você tem para resolver na escola são deliberadamente embotados para facilitar a visualização de como usar como técnica específica que você está aprendendo. Você geralmente sabe qual técnica você deve usar para esse problema específico, porque é a que você acabou de abordar na aula. Projetos de semestre inteiro são um pouco melhores, mas ainda limitados em escopo e complexidade em comparação com o mundo real.

Os projetos da vida real são confusos e evoluem ao longo dos anos (nosso software tem mais de dez anos e vem mudando continuamente desde então) e é tocado por muitas pessoas diferentes com diferentes níveis de habilidade. Você ainda pode estar tocando uma versão de banco de dados de 10 anos e não pode usar nenhuma técnica SQL mais recente. Você pode estar usando uma ferramenta que foi ótima há 8 anos, mas que não aprendeu na escola porque foi substituída por outra coisa. Mas a empresa não quer pagar meses de esforço de desenvolvimento para substituí-lo totalmente.

Você está preso em um mundo em que o tempo para desenvolver é severamente restringido pelo que o cliente pagará e pelo que são, às vezes (normalmente bem) os prazos artificiais.

Você pode estar constrangido a usar as ferramentas solicitadas especificamente pelo cliente. Você pode ter requisitos vagos ou que não fazem muito sentido. Você pode estar lidando com um domínio comercial muito complexo sobre o qual não sabe nada e, portanto, não pode julgar se os requisitos fazem sentido.

Os problemas do mundo real não são de forma alguma comparáveis ​​aos bons problemas de limpeza que eles oferecem na escola. Se você não estiver confuso e se sentindo deslocado durante a maior parte do primeiro ano, eu me preocuparia com você.

HLGEM
fonte
0

É pior do que isso ... depois de alguns anos neste trabalho, você estará se sentindo muito bem com o que aprendeu. Mas você mudará de emprego e sua nova empresa (ou talvez até um novo grupo dentro da mesma empresa) fará as coisas de maneira diferente, e você sentirá que está de volta à estaca zero. Haverá código diferente, padrões de codificação diferentes, ferramentas diferentes e processos diferentes, e após dois dias disso você se perguntará se realmente aprendeu alguma coisa no seu último trabalho. Você superará a sensação de peixe fora d'água mais rapidamente desta vez, mas ainda demorará mais do que você gostaria.

Há um período de adaptação toda vez que você troca de emprego. Fica mais curto à medida que você ganha experiência, mas está sempre lá.

Caleb
fonte