Este ano, a VKontakte, com o apoio do Promsvyazbank, lançou o programa de bolsas de estudos da
VK Fellowship para professores de ciências da computação. Juntos, selecionamos 15 professores de regiões russas: criadores de cursos de programação com direitos autorais, professores de escolas, diretores de centros de educação continuada e treinadores que preparam os alunos para as olimpíadas de programação internacional. Eles receberam bolsas de estudos do VKontakte e Promsvyazbank e agora participam de nossas escolas de campo.

Todos os professores têm uma vasta experiência e são os autores de seus próprios cursos sobre as noções básicas de programação. Neste post, pedimos a três colegas que respondessem nossas perguntas sobre o ensino de programação e ciência da computação em geral.
- Primeiro, vamos nos familiarizar. | Inessa Shuykova: Trabalho como diretora e professora de ciência da computação no Centro GOAOU de Apoio à "Estratégia" de Crianças Superdotadas da cidade de Lipetsk. Ensino C ++ e Pascal nas séries 6 a 11. |
 | Peter Kalinin: Eu moro e trabalho em Nizhny Novgorod. Realizo aulas no Lyceum No. 40, com base na Lobachevsky UNN, bem como remotamente, sem referência a uma instituição educacional específica. Principalmente em Python, Pascal, C ++. Com algumas crianças, estudo em Java, C # e linguagens mais exóticas. A maioria deles vai para as séries 9-11, mas algumas já estão na 4ª série. |
 | Sergey Belyaev: Eu moro em Krasnoyarsk. Trabalho como professor de educação adicional no Palácio Regional dos Pioneiros de Krasnoyarsk. Existem muitas linguagens no trabalho - C ++, Pascal, Python, Básico, Java Script, Perl. A idade dos alunos é diferente - geralmente de 12 a 18 anos. |
Sobre o ensino de programação
- Como organizar a programação de ensino nas escolas?Inessa: Cada aluno precisa ter habilidades básicas no uso de produtos de software de uso geral, ensinado higiene digital, trabalho seguro na Internet e noções básicas de programação. Para crianças com interesse e habilidades relevantes, adicione algoritmos e estruturas de dados. Cursos avançados de programação devem ser conduzidos na forma de cursos especiais. Cada aluno nas aulas de ciência da computação deve ser incluído na equipe do projeto para a implementação do projeto de TI da escola.
Peter: Não me considero um especialista precisamente na educação em massa de crianças em idade escolar nas escolas secundárias, mas acredito que o treinamento deve ser adaptado às necessidades dos alunos. Os alunos interessados devem receber conhecimentos aprofundados, o restante tem idéias superficiais suficientes sobre programação.
Sergey: O programa geral no âmbito da disciplina de ciência da computação deve ser o mesmo de agora: programar superficialmente e para fins educacionais. Um curso mais significativo é para aulas especializadas com um viés físico e matemático. A formação profissional é razoável apenas dentro da estrutura do ensino superior.
- Os principais problemas do ensino de programação na Rússia? Como resolvê-los?Inessa: No âmbito da educação geral, a ciência da computação recebe um pequeno número de horas (se não forem aulas especializadas) - não é o assunto principal ao qual seria prestada atenção substancial. Daí a conseqüência - os professores de ciência da computação nem sempre são profissionais nesse assunto e, para muitos alunos, esse assunto está associado a um processo que não é tão importante e aplicado pelo sistema.
A solução poderia ser a introdução de um estado de direito, permitindo levar em conta a educação adicional como uma disciplina da educação geral. As crianças estão felizes em participar de cursos de programação em centros de educação continuada. A capacidade de começar a dominar um curso como resultado de um programa de educação geral chamará a atenção de ainda mais alunos para o domínio das habilidades de programação.
Peter: Se você não leva em conta os vários problemas burocráticos, provavelmente o principal é o conhecimento muito desatualizado (ou mesmo a ausência dele) da maioria dos professores.
Sergey: Eu acho que os problemas do ensino de ciência da computação são combinados com os problemas gerais da educação na Rússia, com o fato de que a profissão de professor não é prestigiada. E a programação de ensino de professores não é exceção.
- Vale a pena tentar programar antes da escola? De que forma vale a pena implementar?Inessa: Antes da escola, é necessário desenvolver habilidades matemáticas gerais, um interesse pela leitura, uma motivação para a cognição como tal. E considero inadequado dar às crianças algo para o qual elas não estejam psicologicamente prontas.
Peter: Não tenho uma resposta clara, mas acredito que o desenvolvimento de jogos e tarefas de uma direção de programador tem o direito de existir. Por exemplo, comprei para minha filha de três anos o jogo "Taxi" da Mosigra.
Sergey: Eu acho que é muito cedo para estudar programação antes da escola. Antes, seria bom aprender primeiro a ler, escrever e contar.
- Existe uma opinião comum de que programar hoje é uma habilidade tão necessária quanto uma carteira de motorista e inglês. O que você dizInessa: Sim, é isso! Mesmo se você não programar no trabalho, entender como os programas e sistemas de informação são organizados permitirá que você se sinta confiante no futuro ambiente digital.
Pedro: Discordo totalmente. Primeiro, os direitos e a linguagem (estes últimos, em menor grau) são necessários a 90% das pessoas, não apenas no trabalho, mas também na vida pessoal. A programação fora do trabalho precisa de um número relativamente pequeno de pessoas e, na grande maioria dos casos, apenas como hobby. No trabalho, a programação também está longe de ser necessária para todos - pois isso não difere muito da carteira de motorista ou idioma.
Sergey: Claro que não, caso contrário muitos se sentiriam desconfortáveis sem a habilidade necessária. A programação é uma especialidade bastante estreita, que apenas alguns mestres. As pessoas aprendem inglês com mais frequência e dirigindo um carro.
Sobre os recursos do aprendizado de linguagens de programação
- Quais são as tarefas de programação mais difíceis e interessantes?Inessa: Eu acho que depende principalmente da idéia da tarefa, e não do tópico. Em outras palavras, de quão elegante e bonita é a idéia subjacente à tarefa, quanto tempo depois você pode admirar a incomum da tarefa ou a leveza da ideia que era a base e necessária para seguir o caminho mais difícil.
Peter: O mais interessante são as tarefas difíceis que exigem uma visão incomum dos algoritmos ou da teoria padrão. Por exemplo, a tarefa "K" é
daqui.Sergey : Acredita-se que os tópicos mais difíceis sejam recursão, estruturas de dados (especialmente árvores de segmentos e uma árvore cartesiana) e teoria dos grafos. Obviamente, em qualquer tópico, pode haver tarefas simples. Como em qualquer tópico simples da forma "matemática simples", não pode haver matemática simples, embora sem programação. Portanto, tudo isso é bastante subjetivo, não se pode argumentar que todas as tarefas de um dos tópicos são necessariamente mais complicadas do que qualquer outra. Para mim, pessoalmente, os problemas da teoria dos jogos parecem ser os mais difíceis, em particular, os que usam o método minimax.
- É possível começar a aprender C ++, ignorando Pascal e Basic?Inessa: Sim, definitivamente possível. Confirmação é a minha experiência com crianças.
Peter: Especificamente em C ++ - é possível, mas eu não recomendo. Eu recomendaria substituir C ++ por Python. Pascal e ainda mais básico definitivamente não são necessários.
Sergey: Claro. Faço isso há 15 anos. Se o objetivo principal é apresentar aos alunos elementos de programação em um curto espaço de tempo, e não ensinar propositadamente a programação a treinar, o Python é melhor.
- Em que ordem você precisa começar a aprender C ++ para não se perder na natureza?Inessa: Eu aconselho você a começar imediatamente com a solução de problemas simples. Um exemplo de um bom curso é
"Introdução à programação C ++", de Mikhail Gustakashin.
Peter: Eu acredito que em qualquer idioma você deve primeiro aprender as coisas básicas que lhe permitem escrever programas simples (variáveis, se, loops, matrizes, strings, números reais). Com eles, já é possível resolver praticamente qualquer problema da Olimpíada. O resto - conforme necessário.
Sergey: Eu pessoalmente só falo a linguagem após quatro lições, que me familiarizam com a programação, usando exemplos de algoritmos fascinantes - como jogos e vídeos da campanha anual "Code Hour". Depois, apresento aos profissionais os prós e os contras da profissão de programador, incluindo meus muitos anos de experiência. De fato, a linguagem de programação escolhida para o estudo não é tão fundamental, a ordem dos tópicos sempre será aproximadamente a mesma. O conhecimento da sintaxe de uma língua não é a coisa mais importante; qualquer humanista pode dominá-la. O mais importante é a capacidade de criar algoritmos e escrever código claro e sem erros.
- Como escrever código C ++ claro?Inessa: Para os alunos, o nome correto das variáveis, o design do estilo é importante. Código claro é um código estruturado que pode ser lido por outras pessoas em sua equipe.
Peter: Como em qualquer idioma, dividir o código em entidades razoáveis, nomear variáveis etc. Mas no nível da escola, quase nada disso é necessário, o máximo é colocar o recuo adequado.
Sergey : Isso é especialmente importante na estrutura de um projeto em que um grupo de programadores está trabalhando. Às vezes você precisa entender os programas de outras pessoas e, para isso, alguns acordos devem ser observados. Mas, em qualquer caso, há princípios gerais que dificilmente serão significativos em termos de um problema. Vou destacar apenas alguns:
- estrutura do programa: as unidades lógicas devem ser alocadas em blocos separados (recuos no texto de programas, funções, bibliotecas);
- os nomes das variáveis e funções devem falar por si mesmos o que contêm;
- você definitivamente deve usar comentários ao descrever blocos de algoritmos, cada função deve conter uma especificação completa dos parâmetros de entrada e valores de retorno.
- Como você se sente ao usar o Boost para fins educacionais?Inessa: Eu não uso no trabalho
Peter: Em princípio, positivamente, mas isso não é necessário na escola.
Sergey: Na programação real, não tenho nada contra essa extensão. Mas eu ensino programação de olimpíadas para crianças, e os alunos não poderão usá-lo, porque o Boost não está incluído no conjunto padrão de bibliotecas de nenhum dos compiladores C ++ padrão. Então você precisa se contentar com o que é, por exemplo, STL (Standard Template Library).
- Você tem uma receita bem-sucedida para preparar os alunos para a programação de olimpíadas?Inessa: Teoria da ciência da computação mais os conceitos básicos de matemática discreta e métodos matemáticos de processamento de dados. E também treinamento constante, incorporado ao sistema.
Peter: Teoria básica, resolução de problemas, compreensão do formato da Olimpíada, testes precisos.
Sergey: Eu acho que não apenas a experiência, o tempo, mas também a alma devem ser investidos no ensino da programação das crianças em idade escolar. Somente o professor que está interessado no assunto pode interessar aos alunos. Ao ensinar programação, é importante selecionar um grupo de alunos talentosos e, em uma escola secundária, é muito difícil. Portanto, é mais eficiente trabalhar em instituições de educação adicional, onde é possível trabalhar com crianças de várias escolas
- Existe algo no seu programa que o torne único?Inessa: Um momento chave na própria técnica. Eu lidero grupos de crianças formadas por nível de treinamento e habilidade, não por idade. A educação não é apenas um modelo professor-aluno, mas também um modelo aluno-aluno. Os idosos ajudam os mais jovens: eles analisam os problemas resolvidos, verificam o estilo do código para programas de redação e ajudam o professor. Na sala de aula, o ambiente da comunidade das crianças é mantido - um clima de sucesso, promoção e resultados. Realizamos eventos de natureza olímpica, treinamentos externos juntos, juntos, com alegria.
Peter: Primeiramente, as aulas são totalmente on-line, é possível estudar remotamente de qualquer lugar do mundo. Em segundo lugar, a falta de um plano de calendário, cada aluno está envolvido no seu próprio ritmo. Em terceiro lugar, atenção ao teste e localização de bugs no código. Quarto, uma licença gratuita para os materiais que desenvolvo.
Sergey: Primeiro, o uso do recurso do autor
"Programmer's School" . Em segundo lugar, o uso de manuais impressos com direitos autorais. Em terceiro lugar, todo o material teórico é apresentado em apresentações para ilustrar mais claramente os materiais do programa educacional.

Sobre auto-educação
- Auto-estudo e treinamento regular. Como combiná-lo melhor?Inessa: Treinar com um professor de acordo com o esquema clássico - este outono é importante para dominar a base, desenvolver um nível, “ficar na asa”. Quando uma criança se torna vencedora de um prêmio, o vencedor de olimpíadas sérias é a continuação do treinamento clássico, do processo de treinamento, das escolas de campo, da auto-educação (cursos a distância, treinamento pessoal regular).
Peter: Combine como, por exemplo, eu sei. Os alunos estudam o material por conta própria, mas eu pessoalmente verifico as soluções para os problemas, e os caras sempre podem consultar-me se algo não estiver claro para eles.
Sergey: Isso mesmo, é melhor combinar o autotreinamento com o treinamento regular. Isso permite que você aprenda o assunto da programação mais rapidamente, pois um professor talentoso pode orientar corretamente o aluno na direção certa, dizer o que, onde e como.
- Dizem que vale a pena aprender programação até uma certa idade, e essa idade é inferior a 30 anos. Então a eficiência cai drasticamente. Como você se sente com essas restrições de idade?Inessa: Claro, seria bom aprender tudo de uma só vez até os 30 anos, mas a vida muda, o conhecimento melhora, as línguas se desenvolvem. Portanto, o treinamento é contínuo ao longo da vida. Programação das Olimpíadas, que exige velocidade, concentração psicológica, horas de treinamento - isto é para jovens. Aprendendo a programar após 30 anos - não vejo nenhum problema aqui se houver motivação e mentalidade matemática.
Sergey: Basicamente, eu concordo. Mas talvez haja exceções. Após 30 anos, há dificuldades não apenas em aprender alguma coisa, mas com a própria programação. Obviamente, isso acontece muito bem e não há fronteiras claras. Eu costumava ser capaz de programar 10 horas por dia, mas agora - fogo. Portanto, passo sistematicamente da programação para o ensino da programação: programa cada vez menos e ensino mais.
- Como você se sente sobre os muitos cursos para programadores que abrem hoje? Você não acha que eles dão conhecimento superficial demais?Inessa: cursos de discórdia. No processo de escolha de um curso, sempre vale a pena assistir às primeiras palestras, a fim de correlacionar seu nível e o nível do curso, avaliar a utilidade do conhecimento e assim por diante. Portanto, acredito que é necessário um conhecimento preliminar do curso.
Pedro: Eu acredito que existem rumos sensíveis e superficiais. Além disso, muito depende do próprio aluno.
Sergey: Não vejo nada de errado com o fato de haver cursos que fornecem apenas conhecimento superficial. As crianças precisam apenas de alguma familiarização com esse assunto antes de se matricularem em um curso sério destinado a ensinar programação profissional. E não pode haver muitos cursos profissionais: simplesmente não existem tantas crianças capazes de aprender programação séria; essa é uma direção bastante restrita.
- Qual foi a coisa mais difícil para você durante o seu próprio treinamento? Que etapas você pode destacar?Inessa: O primeiro estágio é o desenvolvimento inicial, quando parece que tudo é novo e obscuro. O segundo estágio é um estudo profundo do material, quando tudo se encaixa. Nesta fase, consultas com colegas são importantes e, se possível, aprimoram o material ensinado. Além disso, considero importante repetir constantemente o processo de ensino e motivação para aprender coisas novas.
Sergey: Se você se lembra que era 1989, quando não havia Internet, computador doméstico e professores, e apenas uma calculadora programável com instruções, sim, havia certas dificuldades. Mas eu ainda era capaz de dominar os princípios básicos da programação. Então eu estava na nona série. Essa foi a primeira etapa.
A próxima etapa é o treinamento no âmbito do Código de Processo Penal, nas séries 10 a 11, em computadores sem discos rígidos. Mas depois com um teclado, monitor (que era uma TV em preto e branco) e um professor. Então eu estudei Basic e Pascal. Ainda na universidade, minhas capacidades e conhecimentos no campo da programação expandiram-se bastante. Estudamos C ++, Lisp, Prolog e Assembler. E a partir do quinto ano, comecei a me ensinar, comecei a ensinar Pascal para crianças em idade escolar.
A próxima etapa significativa da minha vida está relacionada ao meu desenvolvimento da direção da programação da Web na construção de sites. Este passo, talvez, virou minha vida de cabeça para baixo e atraiu para mim um grande número de empregadores, dos quais ainda luto :)
Somente em 2003 fiquei interessado na programação da Olimpíada e passei a ensinar isso para crianças em idade escolar.
- Que erros você cometeu durante o seu próprio treinamento? O que você pode aconselhar a esse respeito?Inessa: Um erro no processo de aprendizagem - uma tentativa de cobrir informações díspares, uma certa quantidade de informações de baixa qualidade. Eu aconselho você a usar cursos de alta qualidade com boas críticas, recomendações de colegas sobre eles. Também é importante reservar claramente um tempo para o treinamento.
Sergey: Talvez o meu principal erro seja a escolha errada de ferramentas de programação para a criação de sites. Ainda uso a tecnologia da Microsoft: Windows + IIS + ASP + MSSQL. Todos os desenvolvimentos exigem não apenas uma licença, mas também grandes recursos de computação. É muito melhor aproveitar o software livre. Naquela época, e agora ainda é relevante criar programas e desenvolver sites para Unix usando Apache + PHP + MYSQL.