Alunos e professores são completamente diferentes um do outro. Alguns querem aproveitar a vida, enquanto outros interferem constantemente nisso. Eles se esforçam a cada seis meses para se sentar novamente, reler palestras, não dormir por vários dias e injetar café por via intravenosa.
Obviamente, as pessoas são diferentes, elas falam de estereótipos. Quando eu era estudante, nunca pensei que iria começar a ensinar e não achava que iria para a faculdade e nem imaginava muito. Mas sentar no local de trabalho por 8 horas por dia e depois voltar para casa e empurrar o sofá é muito chato. Assim, toda a vida será gasta assistindo a próxima temporada de Game of Thrones ou uma festa em Dotka.
Minha experiência como professora é modesta - apenas 2 anos. Mas, ao longo dos 2 anos, houve uma experiência interessante que eu queria compartilhar. O artigo acabou por ser longo e impaciente pode olhar para o final, onde o resíduo seco obtido como resultado de tentativa e erro é fornecido.
Como as pessoas geralmente representam um professor universitário? Um adulto, uma pessoa séria, com grande experiência de vida, cuja autoridade é inabalável. Isso é especialmente sentido entre os professores de ciências exatas. Mas um estudante recente não se encaixa nessa descrição. Mas isso não significa nada. Por que não quebrar os estereótipos e, em vez disso, com os olhos arregalados para olhar para as experiências desses professores muito sofisticados, seguir seu próprio caminho? Recusar-se a aprender as melhores práticas é uma idéia estúpida, mas há algo nessas pessoas que vale a pena aprender. Mas há outro, o principal inimigo da novidade - hábitos.
A programação não é uma questão. Análise. (Cap está em algum lugar próximo). As ciências matemáticas são um campo muito mais maduro. A maioria das leis já é conhecida. Há muito menos perguntas abertas do que na programação. A programação é uma área muito dinâmica, não há lugar para hábitos. É demais para se agarrar a algo, e você simplesmente sai da realidade.
Eu tive sorte, no 2º ano, quando aprendemos programação orientada a objetos, nosso grupo foi designado para um jovem professor. Ele era ativo, de princípios, perfeccionista e bastante competente em escrever código. Em vez de apenas aceitar os laboratórios que funcionam, ele me forçou a escrever um código, pelo qual não é uma vergonha agora.
Se não fosse por ele, todos nós no trabalho teríamos aprendido o que são "constantes mágicas", por que você precisa retornar uma variável em retorno (e não empurrar o operador unário para lá), por que você não pode escrever construções pesadas enquanto trabalha, como trabalhar com a interface do usuário em Java, por que em C ++ tudo deve ser passado por ponteiro constante. Em geral, a maioria dos exemplos na Internet é um código de acesso raro que não pode ser usado na produção. E isso é normal, porque ele é um exemplo disso, para mostrar o funcionamento do código da forma mais clara possível, sem complicações.
E mesmo que não dormíssemos e escrevêssemos o código a noite toda, nos dias 30 e 31 de janeiro, e fomos aos laboratórios no dia 31, isso permitiu que nosso grupo estivesse muito à frente do resto do fluxo.
Não era uma recontagem primitiva de um livro didático, nem uma adoção não inicializada de livros de laboratório, era exatamente o que você precisava - Interessantemente, difícil, você entendeu o quanto bombeava. Você sentiu vontade de começar a ganhar peso com esteróides.
E assim, tendo me tornado professor, decidi adotar o melhor de todos e acrescentar com o meu "truque".
Teste de penas
Você vem para a escola e eles dizem para você esquecer todas as pragas que seus pais lhe ensinaram, você vem para a universidade e eles dizem para você - esqueça tudo o que foi ensinado na escola, você vem para o trabalho, eles dizem para você - esqueça tudo que foi ensinado na universidade.
Vamos lembrar o que nos foi ensinado no trabalho depois da universidade.
Aqui está uma lista que eu fiz sobre mim:
- Git
- Jira \ Redmine \ Trello
- Revisão de código
- Injeção de dependência
- Teste de unidade
- CI \ CD
- Trabalhar com o banco de dados (fomos ensinados a escrever consultas, mas não usá-las em Java)
- Migração de banco de dados
- ORM
Mas é isso que está na superfície e, se você se aprofundar, a lista será expandida:
- Docker
- K8S
- Arquitetura de Micro Serviços
Parte disso foi contada, mas outras não. Sim, fomos informados de como a solicitação de postagem é organizada. Sobre algum assunto falou sobre Json. E em Java, até trabalhamos com soquetes. Mas tudo estava fora de contato com tarefas reais. E um aluno comum enfiava essas coisas com o método habitual, fazia um exame e depois esquecia, e depois se lembrava em pedaços quando voltava ao trabalho.
Podemos dizer que os próprios alunos são os culpados. Mas então podemos dizer que os próprios programadores são os culpados pelos bugs. Em geral, bata-os com um chicote e deixe-os imediatamente fazê-lo de maneira normal.
Mas não, isso é realidade, não é perfeito e, portanto, eles contratam testadores e os forçam a escrever testes de unidade. Se uma coisa não é erradicada, resta apenas se adaptar a ela.
Outro ponto importante é o entusiasmo do professor. Muitos já ensinam por inércia. Eles estão acostumados: a cada ano acontece a mesma coisa. Mas os alunos sentem isso. E, portanto, sem essa motivação fraca, cai abaixo da marca 0. À medida que a sessão se aproxima, essa barra começa a crescer. É uma pena que nem todos os alunos percebam a profundidade completa de sua situação.
No total, existem 2 problemas globais:
- Problema de motivação
- Irrelevância / fragmentação do conhecimento fornecido
Nós vamos decidir! Nem tudo foi bem-sucedido como planejado, mas acabou sendo bem-sucedido.
Chegando à primeira lição, forcei todo mundo a se registrar no bitbucket. Naquela época, era o primeiro curso. O assunto foi chamado de “Ciência da Computação”. O próprio palestrante disse que podemos conversar sobre tudo o que ecoa essa palavra.
O assunto era executar pequenos laboratórios no shell * nix. Os alunos cuspiram em como usar o git por um longo tempo. Especialmente console git. Mas, como me pareceu no final do semestre, pegaram fogo.
Criamos uma sala de bate-papo na VK, lá joguei artigos sobre o assunto, respondi perguntas. E é realmente conveniente. Não repita 100500 vezes. E se uma pessoa não se importa em ler, basta enviar a mensagem para ele.
Sobre o assunto, decidi falar um pouco sobre CI \ CD, teste de unidade, revisão de código. Foi difícil, tive que fazer uma pergunta 1000 vezes - você entendeu isso? Eu tive que ser guiado por meus pontos de vista. Pois a resposta sempre foi "Sim". Mas, aos olhos, leia uma completa falta de entendimento.
Os casais nos quais eu estava sentado no computador e claramente mostrava algo, foram muito melhores. Parece estar escrevendo um pequeno comando do PowerShell que fecha o Chrome. Um pouco, mas para um calouro parece mágica. Nesses momentos, os caras ficaram interessados.
Outra condição do palestrante - era necessário fazer apresentações. Eu, pessoalmente, não quis esticar isso para o semestre inteiro com um monte de notas sobre quem passou e quem não foi.
Houve uma proposta minha para tornar a apresentação das apresentações centralizada. Escolhemos o horário em que é conveniente para todos, reservamos um escritório para todo o sábado \ sexta-feira, tenho pizza \ bolos \ chá \ café, dos caras da apresentação. Surpreendentemente, a mulher com quem eu concordei com a reserva do gabinete não se opôs. Este formato foi especialmente popular para os caras. Passar a cada seis meses 2-3 mil não é muito dinheiro, e os caras lembraram para sempre.
Cones de enchimento
Após o término do primeiro curso, fui solicitado pelos caras a tentar se organizar e escrever algum tipo de brinquedo. E então os caras também tiveram essa ideia. Mas a implementação, infelizmente, não é. Para implementar o plano, o Unreal Engine foi escolhido. O argumento é simples - ele usa sintaxe muito próxima do C ++ e, como os caras deveriam estudá-lo no próximo semestre, se não escreverem nada que valha a pena, pelo menos os ajudará no próximo semestre.
Ofereci-me para dar pequenas palestras sobre C ++ em um formato online e depois prosseguir com a implementação. O problema é que eu mesmo estou desenvolvendo no .Net e esqueci completamente o C ++. Eu tinha que lembrar, isso levou tempo. Francamente, não havia tempo suficiente para aprender a Unreal. Mas neste verão, muitos dos caras que responderam gradualmente começaram a se fundir. Mas a rotina também me arrastou: reparos em minha casa de campo pelos meus pais, um desejo de aproveitar o verão, uma mudança de empresa também coincidiu com esse período, umas férias. De maneira geral, gastei toda a minha energia em outros assuntos igualmente importantes. O resultado foram algumas poucas palestras, algumas linhas de código morto, nas quais você não quer cutucar uma varinha.
Afetados e a distribuição da equipe. Todos estão disponíveis em momentos diferentes, alguém simplesmente ignora as mensagens etc. Em geral, para motivar as pessoas na Internet, você precisa: em primeiro lugar, outros meios, em segundo lugar, experiência com uma equipe distribuída (que não tenho) e, em terceiro lugar, muito mais entusiasmo. Bem, a falta de resultado também é um resultado. Da minha parte, quero agradecer aos caras, você é ótimo, mas tirei conclusões e tentarei não repetir erros.
No entanto, a ciência da computação não é exatamente o assunto que eu gostaria de conduzir. A posição do professor e do reitor é muito leal, mesmo que o aluno tenha feito algo, ele parecia um casal. Em geral, isso está correto: os assuntos não são todos igualmente importantes. E a importância depende da especialidade. Seria estranho considerar que a cultura da fala é tão importante para os programadores quanto Mat. Análise ou POO. Ou forçar estudantes de humanidades a passar nos laboratórios de física por dias. Mas eu queria um papel mais responsável.
Ganhando impulso
Então, as aulas sobre OOP começaram. Como na ciência da computação, os alunos se registraram no Bitbucket. Mas ainda havia algumas inovações.
Agora, os caras criaram solicitações Pull e receberam comentários de código em resposta. E sim, eles tiveram que fazer o primeiro laboratório por 2 meses, até que ele começou a atender aos requisitos mínimos para o design do código
Temos o Trello, para cada tarefa, seu próprio quadro (havia cinco), o nome da tarefa é o nome completo do aluno. Como resultado, ficou claro, e agora os caras têm uma idéia sobre o rastreador de tarefas e os quadros kanban.
Em pares, o foco não era apenas sobre como escrever sua classe. Pelo contrário, sobre como fazer essa arquitetura para que possa ser facilmente expandida. Foi dada muita atenção aos princípios de OOP, princípios SOLID. Várias vezes tive que repetir o princípio das funções virtuais.
No início do par - um pequeno teste sobre os tópicos anteriores. Não dei classificações. Isso é necessário para a motivação. Afinal, se um aluno anular, é provável que ele se lembre, compreenda e deixe na cabeça. Aqui fui ajudado pelo fato de que eu mesmo estava no lugar deles não faz muito tempo e me lembro de como tudo funciona. Em geral, 5 minutos é uma coisa boa, e para mim é mais uma motivação do que uma maneira de controle.
Em algum momento, meu conhecimento começou a se esgotar e era necessário dizer algo - havia um sentimento de que muitos mais não foram ditos.
Ok Google, perguntas para uma entrevista em C ++. Selecione uma lista para Junior. Lemos a pergunta e as respostas. Voila, bombeou-se, bombeou estudantes.
Devido ao trabalho, vários pares foram perdidos. Era necessário restaurá-los, porque a mudança se arrastava. A mesma recepção de pizza veio em socorro. Concordamos que escolheríamos um lugar e um horário para sentar, pedir comida, passar um dia inteiro pulando, restaurando passes e, em teoria, os alunos deveriam receber +1 nos laboratórios pelos quais passaram. Eu ajudei, respondi perguntas.
Como resultado, acabou não sendo assim, tornou-se problemático alocar o dia todo, eles levaram 2 a 0,5. Também não é ruim, embora eu esperasse que houvesse mais força. No entanto, foi e não foi ruim por 1-2 vezes. Afinal, nem todos acertam na primeira vez, certo? Ok, outra pequena experiência.
Ao longo do caminho, ele fez o contrato de +1 ponto com a Dependency Injection em C ++. Devo dizer, alguns descobriram. Em geral, os alunos são bem-sucedidos. Os dois até fizeram brinquedos muito legais com uma interface gráfica e boa arquitetura. E um deles até descobriu Qt. No final, consegui espremer todos os alunos e fazê-los passar em tudo o que é necessário para a admissão aos exames. As estatísticas foram muito boas.
Um novo semestre começou e começou com um casal no formato mitap. A primeira tarefa do palestrante foi semear. Analisador de arquivo primitivo e saída em formato CSV.
Eles vieram, ligaram o projetor, juntos no joelho por 1,5 horas e lançaram uma solução na qual ainda havia algo para apertar, mas em geral o quadro estava pronto. Na minha opinião, os alunos devem ver como funciona, como raciocinar, etc. O formato mitap é o que você precisa. É por isso que os alunos do primeiro ano assistiram com tanto interesse como o navegador fecha após o próximo comando no console. É claro e interessante. Quanto a mim, vale a pena desenvolver esse formato.
Resumir
Esta é apenas a minha visão, pode não ser verdade, mas os alunos gostaram:
- Usamos o Git e o fazemos funcionar com ramificações, solicitações de recebimento, etc.
- Crie o Trello e acompanhe as tarefas lá. Ensinamos os alunos a mover a tarefa no CR, caso contrário, ela não será observada.
- Passamos 5 minutos, eles motivam os alunos a se lembrarem do que não sabiam. Não é agradável para todos pensarem, mas para alguns é até doloroso, mas é melhor acostumar com isso durante o semestre.
- Perguntas para preparação == perguntas para uma entrevista para uma posição júnior
- Fazemos você lidar com injeção de dependência, testes de unidade e outras realidades do desenvolvimento moderno
- Realizamos mitaps em pares. Que os alunos repitam após o seminário, antes de desenhar uma obra-prima, o artista deve desenhar o que os outros pintaram centenas de vezes.
- Organizamos mini hackathons, compramos pizza / sucos e ensinamos os alunos a se divertirem
- Em geral, tentamos fazer tudo como na vida.
Algo assim, imagino treinamento em desenvolvimento. O que você acha? Sempre aberto a novas idéias, vamos fazê-lo ainda melhor!