- PVSM.RU - https://www.pvsm.ru -

100 видео-лекций по программированию

image

Товарищи инженеры, уже четвертый год пошел, как я взялся преподавать в Киевском политехническом институте [1]. За это время у меня накопилось огромное количество примеров кода и материалов, примерно на 90 лекций [2]. Должен сказать, что за весь период своей профессиональной деятельности (а это 24 года почти ежедневного написания кода), я никогда не подымал свой уровень программирования, как за последние годы, работая со студентами. Если раньше мне казалось, что написать кратко, сложно и внушительно — это верх мастерства, то теперь я осознал, что мой код должны понимать студенты после минимальных объяснений, иначе он никуда не годится. Я пришел к выводу, что способность эту можно и нужно распространить не только на обучающий код, но и на весь рабочий код. Более того, обучающий код не должен существенно отличаться от рабочего кода, потому, что мы учим будущих инженеров делать настоящие системы, а не учебные. А после многочисленных просьб, я решил записывать все лекции в виде скринкастов, которые сразу после завершения лекции отправляются на ютюб. За этот учебный год я планирую записать 100 лекций, из которых уже опубликованы 23 [3], готовы материалы еще для 67 лекций [4] и новых 10 лекций еще в процессе подготовки.

Концепция курса

Все вы знаете, что у нас в отрасли есть существенные проблемы с фундаментальным инженерным образованием:

  • курсы ВУЗов часто устарели и оставляют желать лучшего,
  • не сформирована общепринятая терминология (в спорах мы часто называем одни и те же вещи разными словами и разные вещи одинаковыми словами), от этого и путаемся,
  • статьи и видео в интернетах может с легкостью выпустить любой, кому пришло в голову, что его квалификации для этого достаточно,
  • в программировании накопление опыта затруднено быстрым выходом людей из специальности, а ведь фундаментальные идеи циклически повторяются, но те, кто получил опыт на предыдущем витке, с большой вероятностью уже не практикуют и не могут подсказать младшим коллегам, где грабельки и узкие места.

Построить курс на базе JavaScript — это конечно экспериментальная затея, но этот язык уж точно не будет лишним ни для кого в современном ИТ. У самих же JavaScript разработчиков очень часто наблюдается плохая базовая инженерная подготовка и нехватка фундаментальных знаний по структурам данных, алгоритмам, базовым абстракциям, паттернам, архитектуре, парадигмам и приемам программирования. Большинство кода, что пишется сейчас в индустрии, просто выбрасывается вскоре после создания, потом опять переписывается и опять выбрасывается. В общем, качество и знания редко требуются, разве что на собеседованиях. Выгоднее всего делать некачественный код и обслуживать его или выбрасывать код и продавать больше времени на его повторное написание. Кроме того, наша отрасль совершенно оторвалась от науки, в этом есть существенные заслуги маркетологов, потому что мы уже программируем не на языках программирования и не на абстракциях, а мы программируем на фреймворках и библиотеках, которые нам "втюхали" в красивой обертке. Мы собираем все из кубиков, часто без всякого научного осмысления и редко можем ответить на вопрос, почему мы делаем так а не иначе. Все по частям уже давным-давно написано, все можно найти в интернете, но оказалось, что одно с другим не лепится, то есть по частям оно есть, а вместе это не работает. Связывать разобщенные кусочки кода гораздо сложнее чем поодиночке их сделать. Происходит это именно из-за отсутствия системного подхода, терминологического раскола и понятийной рассинхронизации специалистов. Вместе будет работать только то, что идеологически совместимо, что базируется на общей теории и выведенных из этой теории общих стандартах. Я надеюсь, что этим курсом я сделаю хоть небольшой шаг к достижению такого важного для отрасли консенсуса.

Все материалы курса в свободном доступе на github [4], а лекции открытые, их можно посещать бесплатно. Каждую неделю я записываю 4 лекции. Мы проводим еще семинары и практические занятия, но они не записываются.

Структура курса

  • Базовые понятия: программные абстракции, переменные, операторы, типы данных, массивы, структуры, скалярные и ссылочные типы, отображения;
  • Основные понятия: функции, контексты и область видимости, классы и объекты, прототипы, методы, лямбды, чистые функции, побочные эффекты, замыкания, частичное применение, каррирование, композиция, функции высшего порядка, колбэки, враперы, декораторы, примеси, события, интерфейс, синглтон, итераторы, функциональные объекты, функторы, монады, работа с файлами, потоки, сокеты, мемоизация, наследование, генераторы, асинхронное программирование, чеининг, модули и зависимости, обработка ошибок, фабрики и пулы, таймеры, регулярные выражения;
  • Вспомогательные материалы: git, системы контроля версий и менеджеры пакетов, работа с консолью, тестирование, непрерывная интеграция, логирование, линтеры, оптимизация и производительность, борьба с утечками памяти, скрытые классы, мономорфные функции, дженерики, сборка мусора, управление памятью;
  • Структуры данных: коллекции, массивы и типизированные массивы, буферы, списки, стек, очередь, дек, деревья двоичные и иерархические, многомерные деревья, повороты и балансировка ветвей, множества, хешмапы, графы, развернутые списки, асинхронная очередь, автоматы, итерирование структур данных и поиск;
  • Расширенные понятия: символы, прокси, диферы, фьючеры и промисы, линзы, трансдьюсеры, async/await, коллекторы данных, асинхронная композиция, адаптеры асинхронности, асинхронные итераторы, интроспекция, рефлексия, скаффолдинг, инверсия управления и внедрение зависимостей, песочницы, слоистая архитектура, компонентный подход, слой доступа к данным, проекции данных, мониторинг файловой системы, клиент-серверная и трехзвенная архитектура, кластеризация и балансировка, проектирование протоколов, динамическая перегрузка модулей, метаданные, динамическое связывание, межпроцессовое взаимодействие;
  • Примеры кода и комплексного использования технологий: живые электронные таблицы, чат на вебсокетах, реализация языка запросов к графам, альтернативная библиотека асинхронных абстракций metasync, сравнение реализации одинаковых задач на разных парадигмах, сравнение стилей функционального программирования, примеры структуры приложений, маршрутизация обработчиков в node.js приложениях, изоляция кода в песочницах, транзакционные объекты;
  • Парадигмы программирования: императивное, структурное и неструктурное, процедурное, объектно-ориентированное, прототипное, функциональное, логическое, декларативное, асинхронное, реактивное, событийное, автоматное, обобщенное, программирование управляемое потоками данных, мультипарадигменное, метапрограммирование.

Ссылки

Календарь лекций доступен в двух митап группах: HowProgrammingWorks [5] (это лекции по программированию на примерах JavaScript) и NodeUA [6] (это лекции по Node.js) и я настоятельно прошу регистрироваться всех, кто хочет посетить лекции очно. Вход свободный для всех, но организационно проще оценивать количество слушателей. За всю историю у меня были случаи и 600 человек и 2 человека, при чем явка непредсказуема.

Все записанные видео появляются в тот же день (через 10-20 минут после завершения лекции) на youtube канале [7].

Лекции сгруппированы в два плейлиста: по программированию и JavaScript [8] и по Node.js [9].

Ссылки на лекции и материалы я размещаю в двух телеграм-каналалах: по программированию и JavaScript [10] и по Node.js и другим более сложным темам [11].

Для обсуждения и вопросов есть две телеграмм-группы: по программированию и JavaScript [12] и по Node.js [13].

Мой аккайнт на github [14], учебные репозитории в организации HowProgrammingWorks [2] и библиотеки нашего комьюнити [15].

Заключение

Жду предложений по дополнению курса новыми темами, надеюсь на контрибьюшен в примеры кода, в том числе на перевод примеров на другие языки. Ваши отзывы помогут улучшить курс.

Автор: MarcusAurelius

Источник [16]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/javascript/297060

Ссылки в тексте:

[1] Киевском политехническом институте: https://kpi.ua/

[2] 90 лекций: https://github.com/HowProgrammingWorks

[3] уже опубликованы 23: https://www.youtube.com/user/sthxnp/videos

[4] 67 лекций: https://github.com/HowProgrammingWorks/Dictionary

[5] HowProgrammingWorks: https://www.meetup.com/HowProgrammingWorks/events/

[6] NodeUA: https://www.meetup.com/NodeUA/events/

[7] на youtube канале: https://www.youtube.com/user/sthxnp

[8] по программированию и JavaScript: https://www.youtube.com/playlist?list=PLHhi8ymDMrQZad6JDh6HRzY1Wz5WB34w0

[9] по Node.js: https://www.youtube.com/playlist?list=PLHhi8ymDMrQZmXEqIIlq2S9-Ibh9b_-rQ

[10] по программированию и JavaScript: https://t.me/HowProgrammingWorks

[11] по Node.js и другим более сложным темам: https://t.me/metarhia

[12] по программированию и JavaScript: https://t.me/MetarhiaHPW

[13] по Node.js: https://t.me/nodeua

[14] github: https://github.com/tshemsedinov

[15] комьюнити: https://github.com/metarhia/

[16] Источник: https://habr.com/post/427799/?utm_campaign=427799