Como tirar o máximo proveito da Educação em Ciência da Computação

A maioria dos programadores modernos se formou em universidades. Com o tempo, isso mudará, mas agora as coisas são tão boas que as equipes de empresas de TI ainda vêm de universidades. Neste post, Stanislav Protasov, diretor de relações da Acronis University, fala sobre sua visão dos recursos do treinamento universitário para futuros programadores. Professores, estudantes e aqueles que os contratam podem até encontrar algumas dicas úteis.

imagem

Nos últimos 10 anos, tenho ensinado matemática, algoritmos, linguagens de programação e aprendizado de máquina em várias universidades. Hoje, além da minha posição na Acronis, também sou chefe adjunto do Departamento de Informática Teórica e Aplicada do MIPT. Por experiência em boas universidades russas (e não apenas), fiz algumas observações sobre o treinamento de estudantes em disciplinas de computação.

Regra de 30 segundos não funciona mais


Estou certo de que você se deparou com uma regra de 30 segundos, que afirma que um programador deve entender o objetivo de uma função após uma rápida olhada em seu código. Foi inventado por um longo tempo, desde então, existem muitos sistemas operacionais, linguagens, hardware e algoritmos. Escrevo código há 12 anos, mas, recentemente, vi o código fonte de um produto, que à primeira vista me pareceu feitiços. Hoje, se você não está imerso na área de assunto, a regra de 30 segundos para de funcionar. Caso contrário, você não terá o suficiente, não apenas 30, mas também 300 segundos para descobrir o que é o quê.

Por exemplo, se você quiser escrever drivers, precisará mergulhar nessa área, ler milhares de linhas de código específico. Com essa abordagem para o estudo do assunto, o especialista tem um "senso de fluxo". Como no rap, quando um sentimento de boa rima e ritmo certo aparece sem uma racionalização especial. Um programador bem treinado pode facilmente reconhecer códigos ineficazes ou simplesmente ruins, sem entrar em um estudo detalhado de onde ocorreu uma violação de estilo ou foi usada uma abordagem subótima (mas explicar esse sentimento pode ser muito difícil).

A especialização e a crescente complexidade levam ao fato de que a formação de um bacharel não oferece mais a oportunidade de estudar todas as áreas com profundidade suficiente. Mas apenas neste nível de educação você precisa ganhar horizontes. Depois disso, em uma magistratura ou no trabalho, você precisará dedicar algum tempo aos problemas e especificidades da área, estudar gírias, linguagens de programação e o código dos colegas, ler artigos e livros. Parece-me que esta é a única maneira de, com a ajuda da universidade, você poder "aumentar a barra" para futuros especialistas em forma de T.

Qual linguagem de programação é melhor ensinada na universidade?


imagem
Para minha alegria, os professores universitários já se recusaram a encontrar a resposta certa para a pergunta: “O que é melhor para programar?”. O debate sobre o que é melhor - C # ou Java, Delphi ou C ++ - realmente não deu em nada. O surgimento de muitas novas linguagens de programação e o acúmulo de experiência pedagógica levaram ao fato de que um entendimento foi estabelecido no ambiente acadêmico: cada linguagem tem seu próprio nicho.

O problema de ensinar usando uma ou outra linguagem de programação deixou de ser uma prioridade. Não importa em que idioma o curso é ministrado. O principal é a expressividade suficiente da linguagem. O livro " The Art of Multiprocessor Programming " é uma boa ilustração dessa observação. Nesta edição já clássica, todos os exemplos estão em Java, uma linguagem sem ponteiros, mas com o Garbage Collector. É improvável que alguém argumente que Java está longe de ser a melhor escolha ao escrever código paralelo de alto desempenho. Mas, para explicar os conceitos descritos no livro, a linguagem acabou sendo adequada. Outro exemplo é o curso clássico de aprendizado de máquina de Andrew Eun, ministrado no idioma Matlab no ambiente Octave. Hoje, pode-se escolher uma linguagem de programação diferente, mas qual é a diferença se idéias e abordagens são importantes?

Mais prático e mais próximo da realidade


Ao mesmo tempo, nos últimos anos, muitos mais praticantes se tornaram universidades. Se os programas universitários russos anteriores foram ativamente criticados por se divorciarem da realidade, hoje não é mais possível dizer isso sobre a educação em TI. Há 10 anos, quase não havia professores nas universidades com experiência real no setor. Agora, cada vez mais, as aulas do departamento especializado são conduzidas não por professores em tempo integral em ciências da computação, mas praticando especialistas em TI que lêem apenas 1-2 cursos em seu tempo livre no trabalho principal. Essa abordagem se justifica em termos de treinamento de qualidade, atualização de cursos e, é claro, busca de possíveis funcionários da empresa. Não creio contar um segredo dizendo que apoiamos o departamento básico do MIPT e construímos relacionamentos com outras universidades, inclusive para preparar os alunos que poderiam começar suas carreiras na Acronis.

Matemático ou programador?


imagem
Holivars, que costumava mudar as linguagens de programação, foi para a direção filosófica. Agora “programadores” e “matemáticos” condicionais discutem entre si. Em princípio, essas escolas poderiam se destacar em dois programas educacionais, mas o setor ainda não compartilha essas sutilezas e, de universidade para universidade, temos uma educação semelhante com um viés ligeiramente diferente. Isso significa que tanto o aluno quanto a empresa em que ele continuará trabalhando terão que complementar o quebra-cabeça do conhecimento com as peças que faltam.

A aparição nas universidades de profissionais que escrevem código industrial em diferentes idiomas oferece aos alunos uma melhor habilidade de desenvolvimento. Por estar familiarizado com a implementação de bibliotecas, estruturas e técnicas de programação padrão, programadores práticos incutem nos alunos o desejo de escrever um bom código, de forma rápida e eficiente.

Essa habilidade útil, no entanto, às vezes leva ao advento dos fãs de reinventar a roda. Os alunos de informática pensam da seguinte maneira: “o que devo escrever outras 200 linhas de bom código que resolverão o problema na testa?”.

Os professores que receberam educação matemática clássica (por exemplo, matfak ou matemática aplicada) são mais propensos a trabalhar em um ambiente quase científico, ou no campo da modelagem e análise de dados. Os "matemáticos" vêem os problemas da Ciência da Computação de maneira diferente. Eles operam principalmente não com código, mas com algoritmos, teoremas, modelos formais. Uma vantagem importante da abordagem matemática é uma clara compreensão fundamental do que pode e não pode ser resolvido. E como resolvê-lo.

Assim, os professores de matemática falam sobre programação com um viés em direção à teoria. Os estudantes que são "de matemáticos" geralmente oferecem soluções bem pensadas e teoricamente melhores, mas, como regra, não são ideais do ponto de vista da linguagem e, geralmente, são simplesmente imprecisas. Esse aluno acredita que seu principal objetivo é demonstrar a capacidade de resolver tais problemas em princípio. Mas a implementação pode ser esfarrapada.

Os caras que foram educados por programadores na escola ou em seus primeiros cursos trazem consigo uma “bicicleta muito bonita”, que, no entanto, geralmente não funciona muito assintoticamente. Pelo contrário, eles não se propõem a teorizar profundamente e recorrer a livros didáticos em busca de soluções ótimas, dando preferência a códigos bonitos.

Em várias universidades, em entrevistas com estudantes, geralmente vejo qual “escola” é a base de sua educação. E quase não encontrei o equilíbrio perfeito na educação básica. Quando criança, era possível me preparar para a matemática das olimpíadas em minha cidade, mas não havia círculos de programação. Agora, nos círculos, as crianças aprendem a programar no Go e Python “na moda”. Portanto, já no nível de admissão nas universidades existem discrepâncias nas abordagens. Acredito que é importante apoiar as duas habilidades na universidade; caso contrário, o especialista chegará à empresa com base teórica insuficiente ou uma pessoa que não aprendeu e não deseja escrever um bom código.

Como "aumentar a barra" para futuros especialistas em forma de T?


imagem
É claro que, nessas circunstâncias, o aluno simplesmente escolhe o que mais gosta. O professor simplesmente transmite um ponto de vista mais próximo dele. Mas todos se beneficiarão se o código for escrito de maneira lindíssima e, do ponto de vista dos algoritmos, tudo será claro, razoável e eficiente.

  • Horizontes de TI . Um graduado em Ciências da Computação é um especialista pronto com uma perspectiva técnica desenvolvida, que provavelmente escolheu seu perfil. Mas nos anos mais novos, não sabemos o que ele ou ela fará. Pode ir para a ciência ou análise, ou talvez, pelo contrário, escrever uma quantidade enorme de código todos os dias. Portanto, o aluno precisa mostrar todos os aspectos do trabalho na área de TI, para se familiarizar com todas as ferramentas. Idealmente, os professores dos cursos teóricos mostrarão uma conexão com a prática (e vice-versa).
  • Ponto de crescimento . Evite ir ao extremo - no interesse do próprio aluno. Entender quem você é, "matemático" ou "programador", não é difícil. Basta ouvir o primeiro impulso ao resolver o problema: o que você quer fazer - procure no livro em busca da melhor abordagem ou escreva algumas funções que serão úteis mais tarde. Com base nisso, você pode construir uma trajetória complementar adicional de seu aprendizado.
  • Fontes alternativas de conhecimento . Acontece que o programa é bem equilibrado, mas “Programação do Sistema” e “Algoritmos” são pessoas completamente diferentes, e o primeiro professor está mais próximo de alguns alunos e o segundo mais próximo de outros. Mas mesmo que você não goste do professor, essa não é uma razão para martelar algumas matérias em favor de outras. Os próprios solteiros estão interessados ​​em encontrar vontade de trabalhar com fontes de conhecimento e, em nenhum caso, confiar em opiniões radicais, como "a matemática é a rainha das ciências, o principal é conhecer os algoritmos" ou "o bom código compensa tudo o mais".

Você pode aprofundar seu conhecimento em teoria, consultando literatura especializada e cursos on-line. Você pode melhorar sua capacidade de usar linguagens de programação no Coursera, Udacity ou Stepik, onde são apresentados muitos cursos diferentes. Além disso, os alunos geralmente começam a assistir a cursos intensivos de idiomas se sentem que o professor de algoritmo conhece bem a matemática, mas não conseguem responder perguntas complexas no campo da implementação. Nem todos concordam comigo, mas, na minha prática, a especialização em C ++ da Yandex se provou, na qual chips de linguagem cada vez mais complexos são classificados sequencialmente. Em geral, escolha um curso com notas altas de empresas ou universidades conceituadas.

Soft skills


imagem
Vindo de uma universidade para trabalhar em qualquer empresa, de uma startup a uma grande corporação, estudantes de até as melhores universidades estão mal adaptados ao ambiente de trabalho real. O fato é que hoje as universidades estão “amamentando” muito com os estudantes. Mesmo tendo perdido muitas aulas, não preparado a tempo para o controle e os testes, adiado demais, atrasado para o exame, todos podem passar e retomar novamente - e, no final, obter um diploma de qualquer maneira.

No entanto, hoje existem todas as condições para que os alunos estejam preparados para a vida adulta e atividade profissional independente. Eles terão que não apenas programar, mas também se comunicar. E isso também precisa ser ensinado. Nas universidades, existem vários formatos para aumentar essas habilidades, mas, infelizmente, elas não recebem atenção suficiente. No entanto, em nosso arsenal, existem muitas oportunidades para obter habilidades eficazes de trabalho em equipe.

  • Comunicação empresarial escrita . Infelizmente, a maioria dos especialistas que saem da universidade não tem idéia sobre a etiqueta da correspondência. As especificidades da comunicação em mensageiros instantâneos em mensagens noturnas e à tarde e o uso de estilo conversacional e vocabulário informal. No entanto, seria possível treinar a linguagem escrita na comunicação do aluno com o departamento e a universidade.

    Na prática, os gerentes geralmente enfrentam a necessidade de decompor um grande projeto em pequenas tarefas. Para fazer isso, você precisa descrever bem cada tarefa e seus componentes, para que os desenvolvedores juniores entendam o que é necessário deles. Uma tarefa mal definida geralmente leva à necessidade de refazer algo e, portanto, a experiência em comunicação escrita ajuda os graduados a trabalhar em equipes distribuídas.
  • Apresentação escrita dos resultados de seus trabalhos . Para a apresentação de seus projetos educacionais, os alunos mais velhos podem escrever posts no Habr, artigos científicos e também apenas relatórios. Existem muitas oportunidades para isso - já no segundo ano, os trabalhos terminam em algumas universidades. Você também pode usar os ensaios como uma forma de controle - eles geralmente estão mais próximos de um artigo jornalístico. Essa abordagem já foi implementada na Escola Superior de Economia.

    Se uma empresa pratica uma abordagem flexível ao desenvolvimento, é necessário apresentar os resultados de seu trabalho em porções menores, mas com mais frequência. Para isso, é importante poder transmitir brevemente o resultado do trabalho de um especialista ou de toda a equipe. Além disso, muitas empresas hoje realizam "revisões" - anuais ou semestrais. Os funcionários discutem os resultados e as perspectivas de trabalho. Uma revisão bem-sucedida é a principal razão para o crescimento na carreira, bônus, por exemplo, na Microsoft, Acronis ou Yandex. Sim, você pode programar bem, mas "sentado no canto", mesmo um especialista rígido sempre perde para alguém que sabe como apresentar bem o seu sucesso.
  • Redação Acadêmica . Separadamente, vale destacar a escrita acadêmica. É útil que os alunos se familiarizem com as regras para escrever textos científicos, usar argumentos, pesquisar informações em várias fontes e vincular-se a essas fontes. É aconselhável fazer isso em inglês, pois a comunidade acadêmica internacional tem muito mais bons textos e, para várias disciplinas, já existem modelos bem estabelecidos para a apresentação de resultados científicos. Obviamente, também são necessárias habilidades de redação acadêmica na preparação de publicações em russo, mas há muito mais exemplos de bons artigos modernos em inglês. Você pode adquirir essas habilidades como parte do curso correspondente, que agora está incluído em muitos programas educacionais.
  • Liderando reuniões . A maioria dos estudantes não sabe como se preparar para as reuniões, manter um protocolo e processar dados. Mas se desenvolvermos essa habilidade em uma universidade, por exemplo, participando de projetos coletivos, podemos evitar perder tempo no local de trabalho. Para fazer isso, precisamos controlar o trabalho de design dos alunos, a fim de ensiná-los a conduzir reuniões efetivamente. Na prática, custa a cada corporação muito dinheiro - porque se várias pessoas que recebem um salário alto gastam uma hora de tempo de trabalho em um comício, eu quero que elas obtenham o retorno correspondente.
  • Falar em público . Muitos estudantes são confrontados com a necessidade de falar publicamente apenas para defender sua tese. E nem todo mundo está pronto para isso. Eu já vi muitos estudantes que:

    • de costas para o público
    • balançando, tentando introduzir uma comissão para o transe,
    • quebrar canetas, lápis e ponteiros,
    • andar em círculos
    • olhe para o chão.

    Isso é normal quando uma pessoa fala pela primeira vez. Mas com esse estresse, você precisa começar a trabalhar mais cedo - com a proteção dos cursos em um ambiente amigável entre os colegas de classe.

    Além disso, a prática padrão nas empresas é permitir que um funcionário proponha uma idéia, receba financiamento, uma posição ou um projeto dedicado a ela. Mas, se você pensar bem, essa é a mesma defesa do termo trabalho, apenas em um nível superior. Por que não treinar habilidades úteis na carreira enquanto estuda?

O que estou perdendo?


Uma das razões para escrever este post foi um artigo publicado no site da Universidade Estadual de Tyumen . O autor do artigo concentra-se apenas nas deficiências de estudantes russos observadas por professores estrangeiros. A prática do meu ensino em diferentes universidades indica que a escola e o ensino superior russo fornecem uma boa base. Os estudantes russos são experientes em matemática e algoritmos; é mais fácil construir uma comunicação profissional com eles.

No caso de estudantes estrangeiros, por outro lado, as expectativas de um professor de russo às vezes podem ser exageradas. Por exemplo, no nível do treinamento básico em matemática, os estudantes indianos que conheci são semelhantes aos estudantes russos. No entanto, às vezes eles não têm conhecimento especial na saída dos estudos de graduação. Bons estudantes europeus são mais propensos a ter matemática menos forte na escola.

E se você estuda ou trabalha em uma universidade, agora pode desenvolver trabalho em habilidades comunicativas (sua ou de seus alunos), expandir a base fundamental e praticar a programação. Para esse fim, todas as possibilidades estão previstas no sistema educacional russo - você só precisa usá-las corretamente.

Ficarei feliz se, nos comentários do post, você compartilhar seus links para cursos e métodos que ajudam a equilibrar o equilíbrio da educação, bem como de outras maneiras para aumentar as habilidades sociais enquanto estuda na universidade.

Source: https://habr.com/ru/post/pt458676/


All Articles