Sou graduado em ciência da computação no primeiro ano. Fui a uma feira de emprego, distribuí currículos, para minha surpresa consegui uma entrevista e, eventualmente, um estágio como desenvolvedor.
Expliquei ao entrevistador (quem será meu chefe) que sou apenas o primeiro ano e não tenho muita experiência em programação. Ele simplesmente me disse que, porque eu tenho uma sólida formação em matemática (estou quase terminando meu bacharelado em matemática, além de alguns cursos de graduação), ele está confiante de que vou me sair bem.
Eu me saio bem em todos os cursos de programação, mas ainda sinto que estou em desvantagem. No momento, eu realmente só quero fazer bem neste trabalho quando ele começar. O trabalho estará usando principalmente C #, mas além de obviamente aprender um pouco de C #, qual é a única habilidade que você gostaria de ter aprendido antes de se tornar um verdadeiro programador?
Qualquer conselho é muito apreciado, mas se você tiver algum livro em mente, informe. Obrigado!
Respostas:
Na escola, você aprende sobre como escrever código. O que você não aprende é o restante do desenvolvimento de software. As principais coisas sobre as quais nunca aprendi nada na escola são:
Essas são habilidades muito importantes para qualquer desenvolvedor, e você provavelmente não as encontrará na sala de aula, infelizmente.
fonte
Gostaria de saber no início da minha carreira que, como desenvolvedor, tenho um papel muito importante nos negócios . Eu não sou apenas um macaco de código.
Como desenvolvedor, você tem uma participação importante nas partes dos negócios relacionadas ao software em que está trabalhando.
Se sua empresa não escrever testes para o código deles, comece a escrever testes agora.
Se eles não rastrearem erros, encontre um rastreador apropriado agora.
Se seu chefe deseja que você comece imediatamente a trabalhar em uma animação sofisticada para a tela inicial do aplicativo de planilha - mas você ainda tem dezenas de bugs para corrigir e vários recursos críticos inacabados antes do próximo prazo de lançamento do cliente - converse sobre como priorizar corretamente o trabalho .
Mesmo se você é apenas "um funcionário normal", agir como consultor é uma ótima maneira de se diferenciar de outros desenvolvedores que apenas escrevem código e não agem como se tivessem interesse nos negócios.
fonte
Minha escola nunca me ensinou como resolver problemas. Eles me ensinaram a mecânica da codificação, mas ser capaz de estudar um problema, entendê-lo e encontrar uma solução é algo que eles não ensinaram. Requer paciência, rigor e intuição, além do entendimento de uma linguagem de programação.
Eles também não ensinaram sobre trabalho em equipe, controle de versão e a importância de escrever código fácil de manter. Eles também não ensinaram muito sobre como testar software. Eles podem ter tocado no teste de unidade, mas não se aprofundaram muito nos conceitos de teste de aceitação, teste de regressão etc.
Disclaimer: Eu fui para a faculdade nos anos 80. No entanto, vejo evidências disso com as pessoas contratadas hoje - recém-formados que têm muito pouco conhecimento sobre o mundo real da programação: controle de versão, testes, codificação limpa, habilidades de depuração etc.
fonte
Na minha opinião, algumas das coisas mais importantes não aprendidas (ou aprendidas adequadamente) na escola são:
VCS, sistemas de rastreamento de bugs, ferramentas de construção etc. são ferramentas que você é obrigado a aprender para poder trabalhar com uma equipe; eles não exigem muito tempo para serem aprendidos em um nível básico e são bem diretos depois disso (pelo menos no começo); a lista acima contém sutilezas que, se conhecidas, aumentam sua produtividade.
fonte
A maior coisa que vejo faltando nos recém-formados é uma boa compreensão do controle de versão.
Se você tem experiência no desenvolvimento de software de código aberto usando repositórios de código-fonte (como o GitHub ), está um passo à frente
most
de seus colegas de classe.A segunda coisa é uma compreensão da complexidade (
big O
). A maioria das pessoas fora da faculdade já ouviu falar sobre isso, mas ainda não desenvolveu um software real onde ele entra em jogo e, portanto, não entende sua real importância.Quando seus conjuntos de dados são tão grandes que a força bruta nunca é suficiente e o entendimento de outras técnicas é útil e ser capaz de adivinhar quando a força bruta será adequada para a situação, é algo que você desenvolve com a experiência e comete os erros.
fonte
Como depurar bem, especialmente usando um depurador e adotando uma abordagem adequada para solucionar um bug, ou seja, descobrir o que está causando, descobrir por que está causando e entender por que sua solução o corrige, em vez de simplesmente tentar coisas e esperar.
A maioria dos graduados em ciência da computação é notavelmente pobre em depuração e, como resultado, leva muito mais tempo para consertar as coisas necessárias e criar mais erros ao fazê-lo.
Vale a pena mencionar outras coisas, como controle de versão, rastreamento de erros etc., mas, a meu ver, a falta de abordagens sensatas à depuração é um problema muito maior e que requer mais aprendizado.
fonte
Na minha experiência, programação é toda sobre resolver problemas. Na minha escola, eles estavam apenas verificando se você pode escrever um programa sem erro de sintaxe. O que é realmente necessário não é fornecido como entrada. A sintaxe é apenas algo que você pode procurar em qualquer livro, se necessário. Mas a capacidade de resolver um problema não pode ser alcançada de qualquer lugar, exceto que você pratique bem e se treine para isso.
Seja de qualquer tipo, tente concluir o maior número possível de perguntas para que você construa alguma confiança em si mesmo. Tente fazer isso com alguma paixão em sua mente, e você certamente conseguirá.
fonte
Dedique algum tempo para aprender alguns padrões comuns de design: fábrica, singleton, adaptador, comando e observador (minha faculdade não os ensinou).
Se a empresa usar a metodologia Agile para desenvolvimento de software, seria valioso ter alguma compreensão dela.
fonte
Muitas das habilidades que você precisará como programador profissional são quase impossíveis para cada uma em uma universidade / ambiente acadêmico.
Eles podem vir apenas da experiência de trabalhar diretamente no campo.
Aprender a colaborar e se comunicar com pessoas fora da sua "profissão", como designers gráficos, designers de produtos, gerentes etc.
Entendendo que seu trabalho não é escrever código, mas dar vida a um produto. Mais fácil falar do que fazer.
Saber equilibrar boas práticas de codificação com considerações práticas. Adquirir a capacidade de julgar quando o código é "bom o suficiente", "com excesso de engenharia" ou "precisa de refatoração".
Aprendendo a superar suas próprias fraquezas e inseguranças. Adquirir a capacidade de suportar críticas. Soltando seu ego. Aprendendo o que significa assumir responsabilidade pessoal e depois assumi-la.
É fácil ler sobre tudo isso. É algo totalmente diferente colocar isso em prática. A única maneira é fazê-lo. Você será mordido muitas vezes, e provavelmente machucará, mas sairá mais forte e melhor.
Leitura relevante: Padrões de Aprendizagem
fonte
Tudo depende da escola. Na minha faculdade, temos muitos projetos práticos. Frequentemente em equipes e usando vários controles de origem. Então, acho que algumas escolas se concentram nessas.
Mas uma coisa que a escola não ensina: detalhes. Muitas vezes, quando a escola ensina alguma tecnologia ou prática (como desenvolvimento da Web, desenvolvimento de JAVA UI, bancos de dados avançados), elas apenas arranham a superfície e nunca entram em detalhes, que seriam necessárias para usar essa tecnologia ou prática nos negócios do mundo real. Você obterá uma visão geral das possíveis maneiras de resolver seus problemas, mas precisará aprender os detalhes necessários.
O único momento em que a escola ensina algo em detalhes é quando há uma forte base matemática ou teórica por trás de algo. Coisas como linguagens formais ou bancos de dados SQL são muitas vezes parte essencial do currículo escolar, porque são construídas com base matemática e são muito usadas em ciência da computação ou engenharia.
fonte
fonte
Eu gostaria de ter decidido, no começo do jogo, se eu queria ou não ser um programador geral, aprendendo muitas coisas diferentes, idiomas, bancos de dados e plataformas, e eventualmente me tornando um desenvolvedor da Web, ou devo apenas me especializar em um CMS, ou até mesmo se especializar no Photoshop, sendo um especialista, suas habilidades seriam tão valiosas e lucrativas quanto, na verdade, saber o que um verdadeiro programador deveria saber. Em outras palavras, se você só precisa ganhar um bom dinheiro, especialize-se em UMA COISA. Se você gosta do computador e gosta de resolver problemas, seja um programador.
[refletindo sobre e depois de aprender como 4 ou 5 'estruturas' de javascript diferentes antes que o JQuery realmente se tornasse forte, obtendo a certificação em JAVA e nunca obtendo uma posição em java e depois de trabalhar em várias plataformas; AS400-rpg, .NET - c # e PHP, antes de desejar dominar o photoshop e ganhar dinheiro igual sem precisar corrigir bugs ou escrever software. ]
Quero dizer, há uma certa satisfação em conhecer uma ampla gama de tópicos, mas a satisfação é prejudicada quando você vê alguém que apenas conhece o photoshop descontar o mesmo salário.
fonte