Como aproveitar ao máximo o ensino de ciência da computação

A maioria dos programadores modernos recebeu educação em universidades. Com o tempo, isso vai mudar, mas agora as coisas estão de tal forma que o bom pessoal nas empresas de TI ainda vem das universidades. Neste post, Stanislav Protasov, Diretor de Relações Universitárias da Acronis, fala sobre sua visão das características do treinamento universitário para futuros programadores. Professores, alunos e aqueles que os contratam podem até encontrar algumas dicas úteis.

Como aproveitar ao máximo o ensino de ciência da computação

Nos últimos 10 anos tenho ensinado matemática, algoritmos, linguagens de programação e aprendizado de máquina em diversas universidades. Hoje, além do meu cargo na Acronis, sou também vice-chefe do departamento de ciência da computação teórica e aplicada do MIPT. A partir da minha experiência de trabalho em boas universidades russas (e não só), fiz algumas observações sobre a preparação dos alunos nas disciplinas de informática.

A regra dos 30 segundos não funciona mais

Tenho certeza que você já se deparou com a regra dos 30 segundos, que afirma que um programador deve entender o propósito de uma função após uma rápida olhada em seu código. Foi inventado há muito tempo e, desde então, surgiram muitos sistemas operacionais, linguagens, hardware e algoritmos. Escrevo código há 12 anos, mas há relativamente pouco tempo vi o código-fonte de um produto, que à primeira vista me pareceu um feitiço. Hoje, se você não estiver imerso na área temática, a regra dos 30 segundos para de funcionar. Caso contrário, não apenas 30, mas também 300 segundos não serão suficientes para você descobrir o que é o quê.

Por exemplo, se quiser escrever drivers, você precisará mergulhar nesta área e ler milhares de linhas de código específico. Com essa abordagem de estudo de um assunto, o especialista desenvolve uma “sensação de fluxo”. Como no rap, quando a sensação de uma boa rima e do ritmo certo surge sem muita racionalização. Da mesma forma, um programador bem treinado pode facilmente reconhecer código ineficaz ou simplesmente ruim sem entrar em um estudo detalhado de onde ocorreu uma violação de estilo ou onde uma abordagem abaixo do ideal foi usada (mas esse sentimento pode ser muito difícil de explicar).

A especialização e a crescente complexidade levam ao facto de o ensino de licenciatura já não proporcionar a oportunidade de estudar todas as áreas com suficiente profundidade. Mas é precisamente neste nível de ensino que é necessário adquirir uma perspectiva. Depois, na pós-graduação ou no trabalho, você precisará passar algum tempo mergulhando nos problemas e especificidades da área temática, estudando gírias, linguagens de programação e códigos de colegas, lendo artigos e livros. Parece-me que esta é a única forma, com a ajuda da universidade, de “bombear a trave” para o futuro Especialistas em forma de T.

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

Como aproveitar ao máximo o ensino de ciência da computação
Para minha alegria, os professores universitários já desistiram de procurar a resposta correta para a pergunta: “Qual a melhor linguagem para programar?” O debate sobre o que é melhor – C# ou Java, Delphi ou C++ – praticamente desapareceu. O surgimento de muitas novas linguagens de programação e o acúmulo de experiência pedagógica levaram a um entendimento estabelecido no ambiente acadêmico: cada linguagem tem seu nicho.

O problema de ensinar utilizando 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. Livro "A Arte da Programação Multiprocessada”É uma boa ilustração desta observação. Nesta edição já clássica, todos os exemplos são apresentados em Java – uma linguagem sem ponteiros, mas com Garbage Collector. Dificilmente alguém argumentaria que Java está longe de ser a escolha ideal para escrever código paralelo de alto desempenho. Mas a linguagem era adequada para explicar os conceitos apresentados no livro. Outro exemplo - curso clássico de aprendizado de máquina Andrew Nna, lecionou em Matlab no ambiente Octave. Hoje você poderia escolher uma linguagem de programação diferente, mas que diferença isso realmente faz se as ideias e abordagens são importantes?

Mais prático e mais próximo da realidade

Ao mesmo tempo, nos últimos anos tem havido muito mais profissionais nas universidades. Se os anteriores programas universitários russos foram ativamente criticados por estarem divorciados da realidade, hoje o mesmo não pode ser dito sobre a educação em TI. Há 10 anos, quase não havia professores nas universidades com experiência real no setor. Hoje em dia, cada vez com mais frequência, as aulas em um departamento especializado são ministradas não por professores de ciência da computação em tempo integral, mas por especialistas em TI que ministram apenas 1 a 2 cursos em seu tempo livre de seu trabalho principal. Essa abordagem se justifica do ponto de vista da formação de pessoal de qualidade, de cursos de atualização e, claro, da busca de potenciais colaboradores na empresa. Não creio que revele o segredo dizendo que apoiamos um departamento básico no MIPT e construímos relacionamentos com outras universidades, inclusive para preparar estudantes que possam iniciar suas carreiras na Acronis.

Matemático ou programador?

Como aproveitar ao máximo o ensino de ciência da computação
As guerras santas, que anteriormente giravam em torno de linguagens de programação, seguiram uma direção filosófica. Agora os chamados “programadores” e “matemáticos” estão discutindo entre si. Em princípio, estas escolas poderiam ser separadas em dois programas educacionais, mas a indústria ainda é fraca na separação de tais subtilezas, e de universidade para universidade temos uma educação semelhante com um foco ligeiramente diferente. Isso significa que tanto o aluno quanto a empresa em que continuará trabalhando terão que complementar o quebra-cabeça do conhecimento com as peças que faltam.

O surgimento de profissionais nas universidades que escrevem códigos industriais em diferentes idiomas proporciona aos alunos melhores habilidades de desenvolvimento. Estando bem familiarizados com implementações de bibliotecas padrão, frameworks e técnicas de programação, os programadores praticantes incutem nos alunos o desejo de escrever um bom código, de fazê-lo de forma rápida e eficiente.

Essa habilidade útil, porém, às vezes leva ao surgimento de quem gosta de reinventar a roda. Estudantes de programação pensam assim: “Devo escrever mais 200 linhas de um bom código que resolva o problema de frente?”

Os professores que receberam uma educação matemática clássica (por exemplo, da Faculdade de Matemática ou de Matemática Aplicada) trabalham frequentemente num ambiente pseudocientífico ou na área da modelação e análise de dados. Os “matemáticos” veem os problemas no campo da Ciência da Computação de forma diferente. Eles operam principalmente não com código, mas com algoritmos, teoremas e modelos formais. Uma vantagem importante da abordagem matemática é uma compreensão clara e fundamental do que pode e do que não pode ser resolvido. E como resolver isso.

Assim, os professores de matemática falam sobre programação com uma tendência para a teoria. Os estudantes que vêm de “matemáticos” muitas vezes apresentam soluções bem pensadas e teoricamente superiores, mas geralmente abaixo do ideal do ponto de vista linguístico e muitas vezes simplesmente escritas de forma descuidada. Tal aluno acredita que seu principal objetivo é demonstrar a capacidade de resolver tais problemas em princípio. Mas a implementação pode ser fraca.

As crianças que foram criadas como programadoras na escola ou nos primeiros anos trazem consigo uma “bicicleta muito bonita”, que, no entanto, geralmente não funciona de forma assintoticamente muito eficiente. Pelo contrário, eles não se propõem a teorizar profundamente e recorrer aos livros didáticos em busca de soluções ótimas, preferindo códigos bonitos.

Em diferentes universidades, durante as entrevistas com os alunos, costumo ver qual “escola” está subjacente à sua formação. E quase nunca encontrei um equilíbrio perfeito na educação básica. Quando criança, na minha cidade era possível se preparar para as olimpíadas de matemática, mas não existiam clubes de programação. Agora, nos clubes, as crianças aprendem a programar nos “modos” Go e Python. Portanto, mesmo ao nível do ingresso nas universidades, existem diferenças de abordagem. Acredito que seja importante manter as duas habilidades na universidade, caso contrário virá trabalhar na empresa um especialista com base teórica insuficiente, ou uma pessoa que não aprendeu e não quer escrever um bom código.

Como “bombear a barra transversal” para o futuro Especialistas em forma de T?

Como aproveitar ao máximo o ensino de ciência da computação
É claro que nessas condições o aluno simplesmente escolhe o que mais gosta. O professor simplesmente transmite o ponto de vista que lhe é mais próximo. Mas todos se beneficiarão se o código for escrito lindamente e, do ponto de vista dos algoritmos, tudo for claro, razoável e eficaz.

  • Horizontes de TI. O bacharel em Ciência da Computação é um especialista pronto e com visão técnica desenvolvida que provavelmente escolheu seu perfil. Mas no primeiro ano, não sabemos o que ele ou ela fará. Ele pode se dedicar à ciência ou à análise ou, pelo contrário, pode escrever uma enorme quantidade de código todos os dias. Portanto, o aluno precisa conhecer todos os aspectos do trabalho na área de TI e conhecer todas as ferramentas. O ideal é que os professores dos cursos teóricos demonstrem ligação com a prática (e vice-versa).
  • Ponto de crescimento. É do interesse do próprio aluno não se permitir ir a extremos. Entender se você é um “matemático” ou um “programador” não é difícil. Basta ouvir o primeiro impulso ao resolver um problema: o que você quer fazer - consultar o livro em busca da abordagem ideal ou escrever algumas funções que certamente serão úteis mais tarde? Com base nisso, você poderá construir mais uma trajetória complementar de seu aprendizado.
  • Fontes alternativas de conhecimento. Acontece que o programa é bem balanceado, mas “Programação de Sistemas” e “Algoritmos” são ministrados por pessoas completamente diferentes, e alguns alunos estão mais próximos do primeiro professor, e outros - do segundo. Mas mesmo que você não goste do professor, isso não é motivo para negligenciar algumas disciplinas em favor de outras. Os próprios bacharéis estão interessados ​​em encontrar vontade de trabalhar com fontes de conhecimento e em nenhum caso confiam em opiniões radicais como “a matemática é a rainha das ciências, o principal é conhecer os algoritmos” ou “um bom código compensa todo o resto”.

Você pode aprofundar seu conhecimento teórico recorrendo à literatura especializada e cursos online. Você pode aprimorar suas habilidades em linguagens de programação no Coursera, Udacity ou Stepik, onde são apresentados diversos cursos. Além disso, os alunos muitas vezes começam a assistir a cursos de idiomas intensivos se acharem que o professor de algoritmos conhece bem a matemática, mas não consegue responder a questões complexas de implementação. Nem todo mundo vai concordar comigo, mas na minha prática tem se mostrado bem especialização em C++ pela Yandex, em que características cada vez mais complexas da linguagem são analisadas sequencialmente. Em geral, escolha um curso com notas altas de empresas ou universidades conceituadas.

soft skills

Como aproveitar ao máximo o ensino de ciência da computação
Saindo da universidade para trabalhar em qualquer empresa, desde uma startup até uma grande corporação, os estudantes, mesmo das melhores universidades, encontram-se pouco adaptados ao ambiente real de trabalho. O fato é que hoje as universidades “cuidam” muito dos estudantes. Mesmo depois de perder muitas aulas, não se preparar para as provas e provas a tempo, dormir demais ou chegar atrasado para uma prova, todos podem passar e refazer novamente – e no final ainda receber um diploma.

No entanto, hoje existem todas as condições para que os alunos estejam preparados para a vida adulta e para a atividade profissional independente. Eles terão que não apenas programar, mas também comunicar. E isso também precisa ser ensinado. As universidades têm vários formatos para desenvolver estas competências, mas, infelizmente, muitas vezes não lhes é dada a devida atenção. No entanto, temos muitas oportunidades de adquirir habilidades eficazes de trabalho em equipe.

  • Comunicação empresarial escrita. Infelizmente, a maioria dos graduados que saem da universidade não tem ideia sobre etiqueta na correspondência. A especificidade da comunicação em mensageiros instantâneos está na troca de mensagens noite e dia e na utilização de estilo conversacional e vocabulário informal. Porém, seria possível treinar a fala escrita quando o aluno se comunica com o departamento e a universidade.

    Na prática, os gestores muitas vezes enfrentam a necessidade de decompor um grande projeto em pequenas tarefas. Para fazer isso, você precisa descrever claramente cada tarefa e seus componentes para que os desenvolvedores juniores entendam o que é exigido deles. Uma tarefa mal definida muitas vezes leva à necessidade de refazer algo, razão pela qual a experiência em comunicação escrita ajuda os formandos a trabalhar em equipes distribuídas.

  • Apresentação escrita dos resultados do seu trabalho. Para apresentar seus projetos educacionais, os alunos do último ano podem escrever posts no Habr, artigos científicos e também apenas relatórios. Existem muitas oportunidades para isso - o trabalho do curso começa no segundo ano em algumas universidades. Você também pode usar ensaios como forma de controle - eles geralmente têm uma forma mais próxima de um artigo jornalístico. Esta abordagem já foi implementada na Escola Superior de Economia da Universidade Nacional de Pesquisa.

    Se uma empresa pratica uma abordagem flexível ao desenvolvimento, tem de apresentar os resultados do seu trabalho em porções menores, mas com maior frequência. Para isso, é importante poder transmitir resumidamente os resultados 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 resultados e perspectivas de trabalho. A 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” até um especialista bacana sempre perderá para quem sabe apresentar bem seu sucesso.

  • Escrita Acadêmica. A escrita acadêmica merece menção especial. É útil que os alunos se familiarizem com as regras de redação de textos científicos, utilização de argumentos, busca de informações em diversas fontes e formatação de referências a essas fontes. É aconselhável fazê-lo em inglês, pois existem muito mais textos bons na comunidade acadêmica internacional e, para diversas disciplinas, já existem modelos estabelecidos para apresentação de resultados científicos. É claro que habilidades de redação acadêmica também são necessárias ao preparar publicações em russo, mas há muito menos exemplos de bons artigos modernos em inglês. Essas habilidades podem ser adquiridas por meio de um curso apropriado, que agora está incluído em muitos programas educacionais.
  • Liderando reuniões. A maioria dos alunos não sabe como se preparar para reuniões, redigir atas e processar dados. Mas se desenvolvermos essa habilidade na faculdade, por exemplo, participando de projetos em equipe, podemos evitar perda de tempo no ambiente de trabalho. Isto requer supervisão do trabalho do projeto dos alunos, a fim de ensiná-los como conduzir reuniões de forma eficaz. Na prática, isto custa muito dinheiro a cada empresa - afinal, se várias pessoas que recebem um salário elevado passam uma hora de trabalho num comício, é desejável que haja um retorno correspondente sobre isso.
  • Falar em público. Muitos estudantes se deparam com a necessidade de falar publicamente apenas durante a defesa de sua tese. E nem todo mundo está pronto para isso. Tenho visto muitos alunos que:
    • ficar de costas para o público,
    • balançando, tentando introduzir a comissão no transe,
    • quebrar canetas, lápis e ponteiros,
    • andando em círculos
    • olhe para o chão.

    Isso é normal quando uma pessoa se apresenta pela primeira vez. Mas você precisa começar a trabalhar com esse estresse mais cedo - defendendo seu curso em um ambiente amigável, entre seus colegas.

    Além disso, a prática padrão nas corporações é dar ao funcionário a oportunidade de propor uma ideia e receber financiamento, um cargo ou um projeto dedicado para ela. Mas, se você pensar bem, esta é a mesma proteção do curso, só que em um nível superior. Por que não praticar essas habilidades profissionais úteis enquanto estuda?

O que estou perdendo?

Um dos motivos para escrever este post foi o artigo, publicado no site da Tyumen State University. O autor do artigo concentra-se apenas nas deficiências dos estudantes russos percebidas pelos professores estrangeiros. A prática do meu ensino em diferentes universidades sugere que a escola e o ensino superior russos constituem uma boa base. Os estudantes russos são experientes em matemática e algoritmos e é mais fácil construir uma comunicação profissional com eles.

No caso dos estudantes estrangeiros, pelo contrário, as expectativas de um professor russo podem por vezes ser demasiado elevadas. Por exemplo, ao nível da formação básica em matemática, os estudantes indianos que conheci são semelhantes aos russos. No entanto, às vezes faltam conhecimentos especializados quando concluem a graduação. É provável que os bons estudantes europeus tenham uma formação matemática menos sólida ao nível escolar.

E se você estuda ou trabalha em uma universidade, agora você pode trabalhar em habilidades de comunicação (suas ou de seus alunos), expandir sua base fundamental e praticar programação. Para este propósito, o sistema educacional russo oferece todas as oportunidades - 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 equalizar o equilíbrio na educação, bem como outras formas de melhorar habilidades interpessoais enquanto estuda em uma universidade.

Fonte: habr.com

Adicionar um comentário