Quais habilidades são essenciais para a programação profissional que não são comumente ensinadas nas escolas? [fechadas]

14

Sou graduado em ciências da computação no primeiro ano. Eu fui a uma feira de empregos, distribuí currículos, para minha surpresa, consegui uma entrevista e, eventualmente, um estágio como desenvolvedor.

Expliquei ao entrevistador (quem será meu chefe) que estou apenas no primeiro ano e não tenho muita experiência em programação. Ele simplesmente me disse que, como tenho uma sólida formação em matemática (estou quase terminando meu bacharelado em matemática, além de ter alguns cursos de graduação no currículo), ele está confiante de que vou me sair bem.

Faço bem em todos os cursos de programação, mas ainda sinto que estou em desvantagem. Agora, eu realmente só quero fazer o bem neste trabalho quando começar. O trabalho estará usando principalmente C #, mas além de, obviamente, aprender alguns C #, qual é a 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, por favor diga. Obrigado!

    
por Eric 20.04.2013 / 19:17
fonte

12 respostas

21

Na escola, você aprende a escrever código. O que você não aprende é o resto do desenvolvimento de software. As principais coisas que eu nunca aprendi nada na escola são:

  • trabalhando como parte de uma equipe de desenvolvimento
  • usando o controle de versão
  • usando um rastreador de bugs

Estas são habilidades muito importantes para qualquer desenvolvedor, e você provavelmente não as encontrará em uma sala de aula, infelizmente.

    
por 20.04.2013 / 19:37
fonte
20

Eu gostaria de saber no início da minha carreira que, como desenvolvedor, tenho um papel muito importante no negócio . Eu não sou apenas um macaco de código.

Como desenvolvedor, você tem uma mão importante nas partes do negócio relacionadas ao software em que está trabalhando.

Se a sua empresa não escrever testes para o código, comece a escrever testes agora.

Se eles não rastrearem bugs, encontre um bug tracker apropriado agora.

Se seu chefe quiser que você comece imediatamente a trabalhar em uma animação sofisticada para a tela inicial do seu aplicativo de planilha - mas ainda tenha dezenas de bugs para corrigir e vários recursos inacabados antes do próximo prazo de lançamento -, converse sobre priorizando corretamente o trabalho.

Mesmo que você seja apenas "um funcionário normal", agir como um consultor é uma ótima maneira de se diferenciar de outros desenvolvedores que acabam de escrever código e não agem como se tivessem um interesse especial nos negócios. / p>     

por 20.04.2013 / 19:31
fonte
9

Minha escola nunca me ensinou como resolver problemas. Eles me ensinaram a mecânica da codificação, mas ser capaz de estudar um problema, compreendê-lo e propor uma solução é algo que eles não ensinam. Requer paciência, rigor e intuição, além de uma compreensão de uma linguagem de programação.

Eles também não ensinam sobre trabalho em equipe, sobre controle de versão e sobre a importância de escrever código que seja fácil de manter. Eles também não ensinaram muito sobre como testar o 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 pessoas que contrate hoje - recém-formados que têm muito pouco conhecimento sobre o mundo real da programação: controle de versão, teste, código limpo, habilidades de depuração, etc.

    
por 20.04.2013 / 21:51
fonte
7

Na minha opinião, algumas das coisas mais importantes não aprendidas (ou aprendidas apropriadamente) na escola são:

  • Como usar corretamente e IDE; usar o poder total de um IDE moderno proporciona um grande aumento de produtividade: refatoração automática, navegação por código, integração VCS, análise de código, conclusão de código, etc.
  • Como usar corretamente um depurador: depuração remota, depuração do aplicativo multiencadeado, avaliação expressa, etc.
  • Correção e manutenção de bugs; na universidade eles não te ensinam quase nada sobre isso ainda na indústria é bastante comum para corrigir bugs.
  • Como trabalhar em uma equipe grande e em um projeto grande; basicamente na universidade, os projetos são pequenos, comparados com os grandes projetos industriais.
  • Como escrever um bom código e como enfatizar a legibilidade; isso vem com a experiência, mas existem alguns livros que ensinam o básico (Código Completo, Código Limpo, etc.).
  • Como usar um framework na sua capacidade máxima, usando sua personalização; na universidade, talvez você tenha aprendido a usar alguns frameworks em alguns cenários básicos; na indústria, você alcançará os casos de esquina.
  • Como entender e escrever código após especificação; você provavelmente aprenderá como escrever especificações, mas agora como lê-las e como interpretá-las

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.

    
por 11.05.2013 / 14:12
fonte
4

A maior coisa que vejo faltando aos recém-formados é um bom entendimento do controle de versões.

Se você tem experiência em desenvolvimento de software de código aberto usando repositórios de código-fonte (como o GitHub ), você está um passo à frente most de seus companheiros de classe.

A segunda coisa é um entendimento da complexidade ( big O ). A maioria das pessoas fora da faculdade já ouviu falar sobre isso, mas ainda tem que desenvolver 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 os cortará e a compreensão de outras técnicas é útil e ser capaz de adivinhar quando a força bruta ficará bem para a situação, é algo que você desenvolve com experiência e fazendo os erros.

    
por 20.04.2013 / 19:53
fonte
3

Como depurar bem, especialmente usando um depurador e adotando uma abordagem apropriada para lidar com um bug, ou seja, descobrir o que está causando, descobrir por que ele está causando isso e entender por que sua solução o corrige, .

A maioria dos graduados em ciência da computação é incrivelmente pobre em depuração, e - como resultado - demora muito mais para consertar as coisas do que o necessário e criar mais bugs ao fazer isso.

Outras coisas, como controle de versão, rastreamento de bugs, entre outros, merecem destaque, mas, na minha opinião, a falta de abordagens sensatas para a depuração é uma questão muito maior e que requer mais aprendizado.

    
por 10.03.2015 / 00:09
fonte
2

what is the one skill that you wish you could have learned before you became a real programmer?

In my experience, my school never taught me how to solve problems.

Na minha experiência, a programação é toda sobre a solução de 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 é dado 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ê pratica bem e se treina para isso.

Que seja de qualquer tipo, tente completar o máximo de perguntas possíveis para que você crie alguma confiança em si mesmo. Tente fazer isso com alguma paixão em sua mente, e você certamente conseguirá passar.

    
por 21.04.2013 / 14:07
fonte
2

Reserve algum tempo para aprender alguns padrões de design comuns: fábrica, singleton, adaptador, comando e observador (minha faculdade não os ensinou).

Se a empresa usar a metodologia Ágil para desenvolvimento de software, seria importante ter alguma compreensão sobre isso.

    
por 21.04.2013 / 14:26
fonte
2

Muitas das habilidades que você precisará como programador profissional são quase impossíveis para cada um em um ambiente universitário / acadêmico.

Eles só podem vir da experiência de trabalhar diretamente no campo.

  • Aprenda a colaborar e a se comunicar com pessoas de fora de 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 como equilibrar boas práticas de codificação com considerações práticas. Adquirir a capacidade de julgar quando o código é "bom o suficiente", "super projetado" ou "precisa de refatoração".

  • Aprendendo a superar suas próprias fraquezas e inseguranças. Adquirindo a capacidade de resistir a críticas. Deixando de lado o seu ego. Aprender o que significa assumir responsabilidade pessoal e, em seguida, aceitá-la.

É fácil ler sobre tudo isso. É uma coisa totalmente diferente colocar isso em prática. A única maneira é fazendo isso. Você será mordido muitas vezes e provavelmente doerá, mas sairá mais strong e melhor.

Leitura relevante: Padrões de Aprendizagem

    
por 10.03.2015 / 12:14
fonte
1

Tudo depende da escola. Na minha faculdade, temos muitos projetos práticos. Muitas vezes, em equipes e usando vários controles de origem. Então, acho que algumas escolas se concentram naquelas.

Mas uma coisa que a escola não ensina: detalhes. Muitas vezes, quando a escola ensina alguma tecnologia ou prática (como desenvolvimento web, desenvolvimento de UI JAVA, bancos de dados avançados), eles apenas arranham a superfície e nunca entram em detalhes, o que seria necessário para usar essa tecnologia ou prática em negócios do mundo real. Você terá uma visão geral das possíveis maneiras de resolver seus problemas, mas precisará aprender os detalhes necessários.

Somente o tempo em que a escola ensina detalhes é quando existe um strong embasamento matemático ou teórico por trás de alguma coisa. Coisas como linguagens formais ou bancos de dados SQL são muitas vezes parte essencial do currículo escolar, porque são baseadas na matemática e são muito usadas em ciência da computação ou engenharia.

    
por 20.04.2013 / 22:35
fonte
1
  • requisitos - considere-os errados e o descanso é principalmente um desperdício
  • prioridades (qual recurso em qual release)
  • criar ou usar fora da caixa (compra / freeware)
  • trabalho em equipe
  • gerenciamento de projetos - requisitos, qualidade (amostras de dados em prod, casos de teste, como testar, cobertura antes de codificar, há mais como custo, mas não relevante. leia um livro de PMI
  • ferramentas de comunicação (email, reuniões: planejador de calendário)
  • gerenciamento de código-fonte
por 21.04.2013 / 15:57
fonte
0

Eu gostaria de ter decidido antes no 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 web, ou deveria simplesmente me especializar em Um CMS, ou mesmo apenas especializar-se no Photoshop, sendo um especialista, suas habilidades seriam tão valiosas e lucrativas quanto saber o que um programador real deveria saber. Em outras palavras, se você só precisa ganhar um bom dinheiro, basta se especializar em uma coisa. Se você ama o computador e adora resolver problemas, então seja um programador.

[refletindo sobre e depois de aprender 4 ou 5 'frameworks' de javascript diferentes antes que o JQuery realmente saísse strong, obtendo certificação em JAVA e nunca obtendo uma posição em java, e depois de trabalhar em múltiplas plataformas; AS400-rpg, .NET - c #, e PHP, antes de desejar dominar o photoshop e ganhar dinheiro igual sem ter que consertar 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 no mesmo cheque de pagamento.

    
por 11.05.2013 / 13:50
fonte

Tags