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

    image


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


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


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


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

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


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


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


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

    Ссылки


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


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


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


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


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


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


    Заключение


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

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

    Насколько интересен Вам этот курс?

    • +29
    • 39,6k
    • 7
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 7

      0
      Круто: в КПИ ещё на русском преподают и сайт на русском — молодцы!
        +4
        Круто, но не обязательно, если что то нужно узнать я с любого языка постараюсь перевести. Заметил что украинское IT-сообщество более продвинутое и дружелюбное, нежели русскоязычное, у нас прежде чем ответить или помочь будут долго объяснять какой ты глупый и плохой.
        0
        Зашел на 2 плейлиста. Все хаотично разбросано и нет логической цепочки. Тут тебе говорят о базовом синтаксисе JS, а тут бабах и каррирование) Хотелось бы видеть более логичную структуру что бы по степам идти.
          0
          Есть еще оглавление курса, с темами, определениями и ссылками на репозитории. Ну и сначала нужно смотреть плейлист по основам программирования, просто подряд лекции: HowProgrammingWorks, а уж потом NodeUA. Чуть позже я собираюсь делать маленькие видео на 5-7 минут по каждому понятию и расставлять их по оглавлению курса.
          +2
          По своему скромному опыту, первые лекции мне были довольно скучными, я даже на одной уснула. Но буквально с 5й все меняется, темы становятся серьезнее. И даже на простых темах отвлекаться не стоит. Так что если вам «не зашли» первые, смотрите дальше.
          Не может не радовать что в КПИ все больше таких преподавателей, настоящих практикующих специалистов, с желанием и умением преподавать.
            +1
            Мое представление об уровне преподавания в КПИ осталось на уровне ВА/ВИ-51. Может быть на ФИВТе было и по другому.
            Нас кидали из паскаля в ассемблер, учились программированию сразу на прикладных задачах: численные методы, DSP, фильтры,… Основам языка учили конечно тоже. Поэтому выбор в пользу связки JS+Node для меня не совсем очевиден, особенно для течнических специальностей.
            Думаю, что такой курс будет определенно востребован и полезен. Но на сколько он вписывается в основную программу? Дополнительный язык не будет лишним, но как я понял, основная цель курса совсем не в этом.
            Отдельное спасибо за КДПВ, моментально узнал!
              0
              JS потому, что это самый мультипарадигменный и самый гибкий, это и его беда и его сила. Накрутить можно страшные клубки бредовых конструкций, но умея, можно построить любые абстракции из любой парадигмы, разве что параллельное программирование с общей памятью продемонстрировать не выйдет. Ну и все эти приемы из разных языков, если их не употреблять догматично, очень обогащают сам JavaScript. Учитывая его популярность и скорость развития, можно вспомнить известный фильм:
              — А Вы давно на JavaScript работаете?
              — Два года.
              — Вы знаете, со временем JavaScript перевернет жизнь всего человечества.
              — Ничего не будет: ни C++, ни Java, ни C#, ни PHP — один сплошной JavaScript.
              — Вспомните мои слова через 20 лет.

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

            Самое читаемое