Блог Дмитрия Сошникова

про технологии и человеческое счастье

Один день из жизни евангелиста

Бывают иногда такие дни, когда чувствуешь себя необыкновенно хорошо. У меня как-то был такой день в Париже, а ещё в Питере. А вот сегодня выдался совершенно замечательный насыщенный рабочий день в Москве. На всякий случай поделюсь в вами – вдруг вам интересно, как бывают устроены рабочие дни технологического евангелиста.

Часть 1: МФТИ

Утром просыпаемся вместе с дочерью, и после короткого завтрака фирменным шпинатом бежим на Физтех. Она – в Физтех-лицей, я – вести курс функционального программирования на ФИВТ. Студенты уже прослушали теоретические материалы курса онлайн, поэтому я рассказываю то, что не вошло в онлайн-курс, разбираем примеры. В некотором смысле, пытаюсь реализовать концепцию “перевернутого класса” – для мотивированных студентов это работает.

20170323_073325944_iOS 20170309_074243039_iOS

Часть 2: Круглый стол на онлайн-конференции

После занятия надо сразу бежать в Останкино – оттуда компания Webinar.ru проводит онлайн-конференцию по образованию EdTech.Space. По дороге читаю статью на хабре про то, как используется SmallBasic в образовании. Интересная мысль: SmallBasic хорош тем, что он ужасен. Пишу в твиттер.

Круглый стол ведет Александр Альперн (ген.директор Webinar.ru), мы вместе с Сергеем Орловским (CEO Nival), Дмитрием Мацкевичем (Flocktory, Icon8) и Дмитрием Кондратьевым (Юниум, ранее Иннополис) обсуждаем, как новые технологии и ИИ могут изменить образование.

20170420_091928321_iOS 

Основная мысль – в современном мире слишком легко получить дофамин, поэтому образованию приходится конкурировать с такими способами легкого получения счастья, как соц.сети или TED-ролики. Это сложно, но можно погружать пользователя в игру (не путать с геймификацией, которая имеет синдром отмены). Искусственный интеллект нам поможет, хотя роль преподавателя на себя не возьмёт и мир не захватит (по крайнем мере, пока). Например, он может сегментировать аудиторию, направляя учащихся к разным персональным тьюторам, или следить за вниманием и указывать, какие части контента надо менять.

Также запомнилась одна важная мысль от Сергея Орловского. Мир усложняется, и важный способ контролировать сложность – это мораль. Поэтому должна возникнуть новая мораль (на смену традиционной религии), а если нет – человеческая культура рискует “схлопнуться”. При этом под моралью понимается набор правил взаимодействия людей, структура социума. Не могу сказать, что полностью согласен (я по-прежнему верю, что сложность может “сворачиваться” и представляться более компактно за счет абстракции)… в общем, это тема для отдельного поста.

После круглого стола не можем долго разойтись, болтаем с Дмитрием Мацкевичем про нейросети, ботов и общих знакомых, с командой Webinar.ru про конференцию и удержание аудитории в онлайн, а потом Александр проводит экскурсию по офису Webinar.ru – очень креативно оформлено пространство, несмотря на недавний ремонт в офисе Microsoft – я им завидую! Посмотрите, с какой любовью выполнена табличка с днями рождения сотрудников!

И кстати, в webinar.ru тоже есть своё кафе!

20170420_120438975_iOS 20170420_120432971_iOS

Часть 3: Обед и монорельс

Время обеденное, и по дороге дальше забегаю в Il Patio. Приятно удивлён, увидев электронное меню на планшете, прямо из которого можно сделать заказ!

20170420_122611566_iOS 20170420_131234824_iOS

После обеда, решаю совершить путешествие на монорельсе. Недавно он был переведен в режим туристического использования, и это значит, что ходит он теперь каждые полчаса. Поначалу стою на платформе один и фотографируюсь в зеркале, потом постепенно платформа наполняется, и минут через 20 приходит поезд, который почти полностью заполняется людьми. Пока жду на платформе – созваниваюсь с коллегами, договариваемся, когда будет делать встречи команд Imagine Cup для подготовки их к финалу.

20170420_134825058_iOS 20170420_131822866_iOS

Параллельно вспоминаю, как я катался на монорельсе первый раз – это было за пару дней до выхода на работу в Microsoft, более 11 лет назад… Я тогда подумал, что пока меня полностью не загрузили работой – надо успеть посмотреть недавно открывшийся монорельс. Кто бы мог подумать, что потом можно будет делать это практически в рабочее время!

Часть 4: Студентка Ася и нейросети

Следующая моя точка – это снова кафешка. Надо провести пару часов перед следующими встречами и мероприятием, поэтому сажусь, открываю ноутбук, захожу в виртуальную машину в облаке и начинаю обучать нейросеть на распознавание изображений. Вот так, из кафешки, работаю с 6-ядерной машиной с 56 Гб памяти и графическим процессором.

20170420_144431550_iOS 20170420_154509444_iOS

Через некоторое время в этой же кафешке встречаюсь с девушкой Асей, которая будет писать диплом по машинному обучению в МАИ под моим руководством. У неё очень нетипичная для студентки МАИ судьба, множество англоязычных курсов на Coursera за плечами (включая легендарный курс по Machine Learning от Andrew Ng), поэтому будет интересно. Придумываем возможный совместный проект с ФКН ВШЭ и Институтом образования ВШЭ.

Часть 5: Презентация карты лидеров инноваций в образовании

Вечером в планетарии проходит презентация карты лидеров инноваций в образовании – масштабного проекта, сделанного центром содействия инновациям в образовании под руководством Жюльнар Асфари. В ходе проекта были проведены беседы с несколькими сотнями людей из образовательной сферы, собраны связи и “знакомства”, в результате построен граф из почти 1000 персоналий, многие из которых были на мероприятии. Прекрасная возможность увидеть в одном месте сразу многих знакомых! Не ожидал, но приехали знакомые из Томска, Казани, Твери.

20170420_170651435_iOS 20170420_192215750_iOS

Подобное мероприятие очень сильно заряжает энергией и энтузиазмом, поскольку ощущаешь себя частью большого сообщества людей, кому небезразлично образование и судьбы подрастающего поколения. Тут же на месте удалось поговорить насчет потенциального обучения детей Machine Learning-у, собрать мнения и придумать идеи совместных проектов.

По дороге домой наслаждаюсь ночной Москвой.

20170420_193109084_iOS 20170420_201524299_iOS

Часть 6: Внезапная самоорганизация любителей F#

Ближе к полуночи еду домой, параллельно читаю соц.сети – что коллеги из Microsoft написали за день. Внезапно натыкаюсь на активную дискуссию на тему F# и понимаю, что оказывается добрые люди уже создали отдельный телеграм-канал для любителей этого языка! Захожу, после чего ещё около часа не могу перестать общаться – как внутри самого канала, так и с отдельными его представителями. Очень тёплый приём!

20170420_210557000_iOS 20170420_234758000_iOS\

Часть 7: Спать?

Когда я прихожу домой – дочь уже спит. Она стала совсем взрослая, и сама готовит себе шпинат по секретному рецепту. Я немного переживаю, что не пообщался с ней сегодня – это единственное, чего не хватило, чтобы день вышел совсем идеальный. Хотя нет – ещё бы пару лишних часов на сон…

Вместо сна решаю написать это статью, чтобы сохранить в памяти прекрасное настроение, и немного на примере показать, какая увлекательная профессия – евангелист. Кстати, если вы хотите подробнее узнать о профессии евангелиста – посмотрите вот это интервью.

В ходе написания статьи вдруг обнаруживаю на странице ФКН ВШЭ свою фотографию:

2017-Hse-ImCup

Заканчиваю писать в блог и наконец ложусь спать. А между тем спать остаётся не так много времени, т.к. завтра будет новый день, также полный удивительных событий.

Add a comment

Магия треугольника Серпинского в функциональном стиле

Сегодня мы поговорим про замечательную геометрическую фигуру: треугольник Серпинского. Это фрактальная самоподобная структура, которая однако очень проста в построении.

image

Алгоритм построения треугольника таков:

  • Задаем координаты трех вершин-аттракторов (x1,y1), (x2,y2) и (x3,y3)
  • Выбираем некоторую точку (x,y) внутри треугольника
  • Повторяем много раз:
    • Ставим точку с координатами (x,y)
    • Выбираем случайным образом одну из вершин (xi,yi)
    • Вычисляем координаты новой точки по формуле ((x+xi)/2,(y+yi)/2)

Такой алгоритм легко реализовать на любом языке программирования, однако его реализация на функциональных языках имеет ряд интересных моментов. В частности, для вычисления координат всех точек треугольника мы используем концепцию корекурсии.

В соответствии с этим, мы реализуем функцию sierpinski, которая будет возвращать бесконечную последовательность координат точек треугольника:

let sierpinski (p1,p2,p3) =
   let rec sierpinski' pt =
      seq {
        let p = pick [p1;p2;p3]
        let pt' = mid pt p
        yield pt'
        yield! sierpinski' pt'
      }
   sierpinski' (mid3 p1 p2 p3)

В этом определении мы используем вспомогательную вложенную рекурсивную функцию sierpinski’, которая в качестве аргумента передает координаты текущей точки pt. Координаты вершин p1,p2,p3 в данном случае являются внешними по отношению к этой функции. Далее мы выбираем одну из вершин случайным образом, вычисляем координаты очередной точки, “возвращаем” (с помощью yield) эти координаты, и затем рекурсивно возвращаем бесконечный остаток списка, который получается из рекурсивного вызова. Затем чтобы сформировать результат мы вызываем sierpinsky’, передавая ему в качестве начальной точки среднюю точку, вычисленную из координат вершин.

Для вычисления средних точек мы определим следуюшие вспомогательные функции:

let mid (x1,y1) (x2,y2) = (x1+x2)/2,(y1+y2)/2
let mid3 (x1,y1) (x2,y2) (x3,y3) = (x1+x2+x3)/3,(y1+y2+y3)/2

Для выбора вершины случайным образом мы используем немного нефукнциональный подход, который зато позволяет быстро получить требуемую функциональность:

let Rnd = new Random()
let pick (L:'t list) = L.[Rnd.Next(0,Seq.length L)]

В завершение остаётся лишь построить полученный треугольник. Для этого можем использовать стандартную библиотеку FSharp.Charting:

sierpinski ((0,0),(300,600),(600,0)) |> Seq.take 5000 |> Chart.FastPoint

Вот какой получился результат:

image

Весь исходный код можно найти здесь: http://fssnip.net/ta.

В качестве самостоятельного упражнения, попробуйте в качестве эксперимента модифицировать функцию sieprinski, чтобы она могла принимать произвольное число вершин. И посмотрите, будет ли сохраняться фрактальное свойство для квадратов, шестиугольников и т.д. Буду рад видеть результаты ваших экспериментов в комментариях!

Add a comment

Как научить ребенка программировать

Если у вас, как и у меня, есть дети – то вас наверняка волнует вопрос, как воспитать в них творческое начало, сделать их заинтересованными активными членами общества. Огромная роль в этом принадлежит родителям, которым для достижения результата приходится вкладывать очень много любви, своей креативности, терпения и усилий. Но как всегда на помощь могут прийти информационные технологии – ведь они способны усиливать любое правильное (и неправильное) начинание, делая процесс намного более эффективным.

Использованию информационных технологиях применительно к развитию детей посвящен мой новый курс на Microsoft Virtual Academy, под кодовым названием “Как научить ребенка программировать”. На самом деле речь пойдет не только о программировании – в этом курсе я постарался описать известные мне технологии Майкрософт, которые могут вдохновить ребенка на творчество.

Этот курс предназначен для родителей, которые ищут различные способы занять своих детей творчеством. Мы видим, что дети с удовольствием берут в руки компьютер, и важно дать им правильные творческие инструменты, чтобы они воспринимали компьютер не как поставщика развлекательного контента (наравне с телевизором), а как инструмент для творчества. На самом деле детям нравится творить (этим в основном объясняется популярность Minecraft), и важно направить их в правильное русло.

Среди технологий, о которых рассказывается в курсе – технологии для исследования мира (Bing Maps, Worldwide Telescope), для коллективного творчества (Photosynth, Image Composite Editor и др.). Я также уделяю особое внимание вопросу мотивации детей, и рассказываю о своем опыте работы с детскими коллективами как преподавателя детского лагеря ЮНИО-Р, одного из идеологов часа кода в России и детского трека Microsoft AppDay, лектора и ведущего мастер-классов в Компьютерии.

Особое внимание конечно уделяется именно обучению программированию. На мой взгляд, важнее всего увлечь ребенка на первых этапах процесса, поэтому предлагается использовать инструменты быстрого создания игровых миров Kodu Game Lab и Project Spark. Ну а потом уже подключаются различные “традиционные” инструменты – от увлекательного введения в C#, до возможного пути Small Basic –> Visual Basic и функционального программирования на F#.

Конечно, приведенный подход не является единственно правильным, и может кому-то показаться дискуссионным. Если у вас возникают какие-то свои мысли, или вы хотите поделиться своим опытом и пообсуждать вопросы обучения детей – я с удовольствием это сделаю в комментариях к этому посту, вконтакте или в твиттере.

Надеюсь, этот курс будет полезен и интересен – по крайней мере об интересе к этой теме говорят полные залы на моих докладах на конференциях DevCon и ряде других. Приятного просмотра!

Add a comment