
Camaradas engenheiros, é o quarto ano desde que comecei a lecionar no Instituto Politécnico de Kiev . Durante esse período, acumulei um grande número de exemplos e materiais de código, cerca de 90 palestras . Devo dizer que, durante todo o período da minha atividade profissional (e são 24 anos escrevendo código quase diariamente), nunca aumentei meu nível de programação, como nos últimos anos, trabalhando com alunos. Se antes me pareceu que escrever de forma breve, difícil e imponente era o auge da habilidade, agora percebi que os alunos deveriam entender meu código após uma explicação mínima, caso contrário, não funcionará. Cheguei à conclusão de que essa capacidade pode e deve ser estendida não apenas ao código de treinamento, mas a todo o código de trabalho. Além disso, o código de treinamento não deve diferir significativamente do código de trabalho, porque ensinamos futuros engenheiros a criar sistemas reais, e não a treinar. E, após inúmeras solicitações, decidi gravar todas as palestras na forma de screencasts, que imediatamente após a palestra são enviados ao YouTube. Para este ano acadêmico, pretendo gravar 100 palestras, das quais 23 já foram publicadas , materiais para outras 67 palestras e 10 novas palestras ainda estão em preparação.
Conceito de curso
Todos vocês sabem que em nosso setor existem problemas significativos com o ensino fundamental de engenharia:
- cursos universitários geralmente estão desatualizados e deixam muito a desejar,
- a terminologia geralmente aceita não é formada (nas disputas, muitas vezes chamamos as mesmas coisas de palavras diferentes e coisas diferentes com as mesmas palavras), ficamos confusos com isso,
- artigos e vídeos na Internet podem ser facilmente divulgados por qualquer pessoa que tenha a ideia de que suas qualificações são suficientes para isso,
- Na programação, o acúmulo de experiência é dificultado pela saída rápida de pessoas da especialidade, e mesmo as idéias fundamentais são repetidas ciclicamente, mas aqueles que ganharam experiência na rodada anterior provavelmente não estão mais praticando e não podem dizer aos colegas mais jovens onde estão os problemas e os gargalos.
Construir um curso baseado em JavaScript é certamente um empreendimento experimental, mas esse idioma certamente não será supérfluo para ninguém na TI moderna. Os próprios desenvolvedores de JavaScript geralmente têm um treinamento básico de engenharia ruim e falta de conhecimento fundamental em estruturas de dados, algoritmos, abstrações básicas, padrões, arquitetura, paradigmas e técnicas de programação. A maior parte do código que está escrito agora no setor é simplesmente jogado fora logo após a criação, depois é reescrito e jogado fora novamente. Em geral, qualidade e conhecimento raramente são necessários, exceto em entrevistas. É melhor criar e manter um código de baixa qualidade ou jogar fora o código e vender mais tempo para reescrevê-lo. Além disso, nossa indústria está completamente divorciada da ciência, há méritos significativos de profissionais de marketing, porque já programamos não em linguagens de programação e não em abstrações, mas programamos em estruturas e bibliotecas, nas quais "entramos" em um belo invólucro. Reunimos tudo de cubos, geralmente sem nenhum entendimento científico, e raramente podemos responder à pergunta de por que estamos fazendo isso e não de outra maneira. Tudo em partes já foi escrito há muito tempo, tudo pode ser encontrado na Internet, mas descobriu-se que um não se molda com o outro, ou seja, em partes é, mas juntos não funciona. Vincular partes de código separadas é muito mais difícil do que fazê-las individualmente. Isso acontece precisamente devido à falta de uma abordagem sistemática, divisão terminológica e dessincronização conceitual de especialistas. Somente aquilo que é ideologicamente compatível trabalhará em conjunto, que é baseado em uma teoria geral e em padrões gerais derivados dessa teoria. Espero que, com este curso, dê pelo menos um pequeno passo para alcançar um consenso importante para a indústria.
Todos os materiais do curso estão disponíveis gratuitamente no github , e as palestras são abertas e podem ser assistidas gratuitamente. Toda semana eu gravo 4 palestras. Realizamos mais seminários e workshops, mas eles não são gravados.
Estrutura do curso
- Conceitos básicos : abstrações de software, variáveis, operadores, tipos de dados, matrizes, estruturas, tipos escalares e de referência, mapeamentos;
- Conceitos-chave : funções, contextos e escopo, classes e objetos, protótipos, métodos, lambdas, funções puras, efeitos colaterais, fechamentos, uso parcial, curry, composição, funções de ordem superior, retornos de chamada, wrappers, decoradores, impurezas, eventos, interface , singleton, iteradores, objetos funcionais, functores, mônadas, manipulação de arquivos, threads, soquetes, memorização, herança, geradores, programação assíncrona, chining, módulos e dependências, manipulação de erros, fábricas e conjuntos, temporizadores, expressões regulares;
- Materiais de suporte : git, sistemas de controle de versão e gerenciadores de pacotes, trabalhando com o console, testando, integração contínua, registro, linter, otimização e desempenho, combatendo vazamentos de memória, classes ocultas, funções monomórficas, genéricos, coleta de lixo, gerenciamento de memória;
- Estruturas de dados : coleções, matrizes e matrizes digitadas, buffers, listas, pilha, fila, dezembro, árvores binárias e hierárquicas, árvores multidimensionais, rotações e balanceamento de ramificações, conjuntos, hashmaps, gráficos, listas expandidas, fila assíncrona, autômatos, estruturas de dados iterativas e pesquisa;
- Conceitos estendidos : símbolos, proxies, diferenças, futuros e promessas, lentes, transdutores, assíncrono / aguardar, coletores de dados, composição assíncrona, adaptadores assíncronos, iteradores assíncronos, introspecção, reflexão, andaimes, inversão de controle e injeção de dependência, caixas de areia, arquitetura em camadas abordagem de componentes, camada de acesso a dados, projeção de dados, monitoramento do sistema de arquivos, arquitetura cliente-servidor e três links, clustering e balanceamento, design de protocolo, sobrecarga dinâmica de módulos, metadados, din ligação mecânica, interação entre processos;
- Exemplos de código e uso integrado de tecnologias: planilhas ativas, bate-papo nos soquetes da web, implementação de linguagem de consulta de gráfico, biblioteca alternativa de abstrações assíncronas metasync, comparação da implementação das mesmas tarefas em paradigmas diferentes, comparação de estilos de programação funcional, exemplos de estrutura de aplicativos, exemplos de estrutura de aplicativos, roteamento de manipuladores no node.js aplicativos, isolamento de código em sandboxes, objetos transacionais;
- Paradigmas de programação : imperativo, estrutural e não estrutural, processual, orientado a objeto, protótipo, funcional, lógico, declarativo, assíncrono, reativo, evento, automático, generalizado, programação orientada a dados, multiparadigma, metaprogramação.
Referências
O calendário de palestras está disponível em dois grupos de mitap: HowProgrammingWorks (estas são palestras sobre programação usando exemplos de JavaScript) e NodeUA (estas são palestras sobre Node.js) e peço a todos que desejam participar de palestras que se registrem pessoalmente. A entrada é gratuita para todos, mas organizacionalmente é mais fácil estimar o número de alunos. Ao longo da história, tive casos e 600 pessoas e 2 pessoas, e a participação é imprevisível.
Todos os vídeos gravados aparecem no mesmo dia (10 a 20 minutos após a palestra) no canal do youtube .
As palestras são agrupadas em duas listas de reprodução: programação e JavaScript e Node.js.
Coloco links para palestras e materiais em dois canais de telegrama: programação e JavaScript, e Node.js e outros tópicos mais complexos .
Existem dois grupos de telegramas para discussão e perguntas: programação e JavaScript e Node.js.
Minha conta do github , repositórios de treinamento no HowProgrammingWorks e nossa biblioteca da comunidade .
Conclusão
Estou aguardando sugestões para complementar o curso com novos tópicos. Espero uma contra-introdução aos exemplos de código, incluindo a tradução de exemplos para outros idiomas. Seus comentários ajudarão a melhorar o curso.