uz
Feedback
OTUS: программирование и карьера в IT

OTUS: программирование и карьера в IT

Kanalga Telegram’da o‘tish

Канал для быстрого карьерного роста в IT: опыт практиков, актуальные технологии и инструменты, чтобы быть впереди коллег и привлечь внимание руководителей. Иногда шутим! 🔔Включайте уведомления, чтобы не пропустить!

Ko'proq ko'rsatish
7 345
Obunachilar
-224 soatlar
+47 kunlar
+1230 kunlar
Postlar arxiv
В прошлую субботу начала занятия октябрьская группа по Java. Мы были приятно удивлены, что желающих обучаться в этой группе оказалось сильно больше, чем мы ожидали, и нам пришлось досрочно закрыть набор в группу (ведь превышение допустимого количества учеников в группе может негативно повлиять на качество обучения). Мы считаем не правильным ограничивать людей в их желании получать знания и профессионально расти, поэтому под натиском желающих серьезно изучать Java мы приняли решение о создании внеочередной группу Java с датой старта 11 ноября. Набор уже открыт: проходите вступительное тестирование, присоединяйтесь к новой группе: https://otus.pw/Ro5xIPjx/

Нас часто спрашивают: "как проходят занятия?" Те, кто заинтересовался курсом, зачастую хотят не просто познакомиться и пообщаться с преподавателем (для этого мы делаем Дни Открытых дверей на курсах), но и "посмотреть преподавателя в действии" - побывать на лекции в роли слушателя и узнать, как преподаватель излагает материал, какая обстановка на лекции, все ли понятно. Мы решили, что лучше один раз увидеть, чем тысячу раз услышать и подготовили небольшое видео с одного из вебинаров по Java, где Виталий Чибриков рассказывает о SOLID: https://www.youtube.com/watch?v=s0OKV5dyxks Смотрите, оставляйте ваши комментарии!

#deepitsm #management #otus Слышали когда-нибудь термин "приоритеты запросов и инцидентов"? В любой современной компании есть ИТ-отдел. В каждый ИТ-отдел поступают обращения пользователей – иногда им просто нужна помощь, иногда они сообщают, что что-то сломалось (случился инцидент). Поток обращений может быть довольно большим, а ИТ-специалистов, как всегда, не хватает. Очень важно правильно выстраивать поступающие заявки в очередь, чтобы сотрудники ИТ брали в работу сначала те из них, которые наиболее важны, а только затем следующие. При этом хотелось бы, чтобы задачи «не зависали», и даже не очень важные всё равно решались. Чтобы выстраивать заявки в очередь, обычно используется понятие «приоритет». Чем он выше, тем скорее нужно браться за работу. Предполагается, что у каждого ИТ-специалиста есть очередь задач, и он берёт из этой очереди задачи в порядке убывания приоритета. Всё хорошо в этой схеме, осталось только понять, как определять приоритет для каждой новой пришедшей заявки. Вариант подхода к решению – посмотреть умные книжки, например, библиотеку ITIL. Там нам сообщат, что при определении приоритета нужно учесть степень влияния (масштаб бедствия) и срочность (как быстро, по мнению пользователя, нужно выполнить данную задачу). Это очень разумная рекомендация. Вот только остаётся неясным как это всё увязать с крайним сроком, который должны быть виден и ИТ-специалисту, и заявителю, и как сделать так, чтобы до заявок низкого приоритета тоже доходили руки. Желательно до того, как расстроенный пользователь нажалуется своему начальнику, который настучит на ИТ-руководителя на очередном совещании при согласовании ИТ-бюджета. То есть – в самый неподходящий момент. На практике многие компании поступают по такой схеме: степень влияния (определяется при регистрации заявки) + срочность (оценивается со слов заявителя) = приоритет (чем важнее и срочнее, тем выше). Далее смотрим на ИТ-услугу, которая затронута, а точнее – на SLA по этой услуге, откуда берём крайний срок для данного приоритета. Например: затронут только один сотрудник (влияние низкое низкое), срочность – не к спеху (низкая), приоритет получается низкий, для него крайний срок по SLA – 3 рабочих дня. Заявка встаёт в очередь, так как наверняка есть более срочные работы. Но через пару дней до окончания крайнего срока остаётся всего ничего – один рабочий день, несколько часов. В этот момент система автоматизации ИТ сама поднимает приоритет повыше, и заявка становится более важной. ИТ-специалист не забудет её сделать, при том до окончания крайнего срока, обещанного пользователю. Который никогда не меняется, ибо SLA – это наше всё. Вот так текст хороших книг (ITIL) можно использовать на практике, чтобы сделать работу ИТ более эффективной.

И вновь наши двери открываются для вас: через пятнадцать минут начнётся День открытых дверей посвящённый курсу "Разработчик Java". Наш преподаватель - Виталий Чибриков, расскажет всё-всё о курсе, ответит на ваши вопросы и, разумеется, разыграет два бесплатных места. Присоединяйтесь! https://youtu.be/j866idQ1dQo

#otus #deepmanager #deepitsm Давайте поговорим сегодня о KPI? Рано или поздно каждый сотрудник сталкивается со аббревиатурой «KPI». Для кого-то столкновение бывает приятным (от KPI зависит премия, которую реально получить), для кого-то – наоборот (от KPI зависит зарплата, которую руководители зажимают). Посмотрим на KPI не с точки зрения жертвы, а с позиции менеджера. KPI устанавливают для того, чтобы можно было оценить результаты работы сотрудника, подразделения, отдельного процесса или качество предоставления ИТ-услуг. То есть KPI – управленческий инструмент. Сам по себе он пользы не несёт, только если есть какая-то задача: нужно понять, что именно требует измерения, зачем и как. И только потом измерять и делать выводы. По нашему опыту, увлекаясь налаживанием управления, многие компании сталкиваются со следующей проблемой: как придумать нужные KPI? Как придумать целевые значения, которых нужно достичь или достигать? Ведь можно столько всего измерить! Например, при работе с инцидентами можно поставить KPI и на число поступающих заявок, и на число заявок в работе, и на среднюю скорость прохождения заявки по процессу, на время нахождения заявки у конкретной группы или сотрудника, и всё это рассмотреть в разбивке по категориям, а ещё для разных приоритетов… Много, очень много появляется точек измерения, и за деревьями не видно леса. Что со всем этим делать? Ответ, если не углубляться в детали, таков: система KPI должна соответствовать системе целей. А цели должны быть SMART – конкретными, измеримыми, достижимыми, значимыми и своевременными. Соответственно, первый шаг решения задачи – формулирование целей. Например, целей упомянутого выше процесса управления инцидентами. Только затем – придумывание KPI, которые покажут достижение этих целей. Наблюдение за работой реальных компаний показывает, что осознание того факта, что цели должны быть SMART, к менеджерам приходит через несколько лет после начала работы. При том, что техники формулирования целей и разработки KPI давно известны.

"Кто владеет информацией, тот владеет миром" - наверняка вы не раз сталкивались с этой цитатой Б. Ротшильда, основателя одной из влиятельнейших на сегодняшний день династий предпринимателей, и его суть как нельзя применима к нашему новому курсу “Разработчик Big Data”. Что же такое Big Data? В глобальном смысле это проблема, и ее решение это не профессия, жестко закрепленная учебной программой, а профессионал, обладающий гибким набором компетенций и практик, позволяющих структурировать и управлять массивом данных. Именно такого профессионала уровня middle/senior и призван подготовить наш новый курс. Преподавателем курса станет Ксения Стройкова - программист отдела анализа данных в департаменте рекламных технологий Mаil.ru. Занимается разработкой и внедрением процессов и моделей по обработке данных для использования в рекламе,участвует в разработке хранилища данных для использования в рекламных сервисах, разработке системы для сегментирования аудиторий. Преподает курс “Алгоритмы интеллектуальной обработки больших объемов данных” в Техносфере Mail.ru Выпускница проекта Технопарк Mail.Ru Закончила МГТУ им. Н. Э. Баумана по специальности программное обеспечение ЭВМ и Информационные технологии. Если ты давно тянешься к прекрасному миру больших данных, присоединяйся к новой группе! Мы открыли вступительное тестирование для желающих проверить свои знания прямо сейчас. https://otus.ru/lessons/BigData/?utm_source=telegram&utm_medium=internal&utm_campaign=bigdata&utm_term=welcome

Приглашаем всех на День открытых дверей посвящённый курсу "Разработчик Java". Трансляция начнётся через десять минут: https://www.youtube.com/channel/UCetgtvy93o3i3CvyGXKFU3g/live

#deeplinux #otus Мы запускаем серию заметок по теме нашего нового курса “Администратор Linux”, которые вы сможете найти по хэштегу #deeplinux. В жизни любого админа есть много пространства для автоматизации. Пишем простенькие bash-однострочники типа: for host in hostA hostB hostC; do ssh $host do_something_useful.sh; done потом эти однострочники обрастают жирком, появляются всякие условия dumpDb (){ case $DBKIND in: mysql) mysqldump $1 ;; pgsql) pg_dump —some-option-to-dump-to-stdout ;; esac return $? } doBackup (){ dumpDb mydb > file.sql return $? } doBackup && gzip file.sdl || exit 1 дальше - больше, появляются массивы, ассоциативные массивы и т.д. Но это еще цветочки. Хуже когда в скриптах появляются спонтанные вкрапления Python и Perl. Это свидетельствует только о двух вещах, о них - ниже. Гвозди надо забивать молотком, а гайки крутить - гаечным ключом. Необходимо выбирать инструмент соответствующий задаче. Да, на баше можно писать достаточно сложные программы, но не стоит забывать, что, все же его задача - помогать нам в ежедневной работе. Скрипты на баше должны быть простые и понятные. Если вы написали скрипт который через неделю уже понимаете с трудом и, чтобы понять, что там происходит приходится интерпретировать скрипт в голове, то вы выбрали не тот инструмент или, что хуже, изобретаете велосипед. Старайтесь правильно выбранным инструментом писать поддерживаемый код. Задумайтесь, ведь задача админа не в том, чтобы быть незаменимым, а в том, чтобы поддерживать работу системы, бесперебойную работу. Людям свойственно менять работу и оставлять после себя неподдерживаемый продукт значит портить себе карму. Даже если вы не собираетесь менять работу - в отпуск же вы собираетесь, да и отдел растет наверняка, сомневаюсь, что вам хочется всю жизнь поддерживать ваши скрипты. Ведь можно же поделиться с кем-то знаниями и двигаться дальше. Для этого надо прикладывать все усилия, чтобы ваш код был поддерживаем и читаем, использовать принципы KISS и YAGNI. Это – только часть приятных бонусов. Если захотите больше – добро пожаловать на курс “Администратор Linux”. https://otus.ru/lessons/linux/?utm_source=telegram&utm_medium=internal&utm_campaign=linux&utm_content=deeppost&utm_term=05.10

Приглашаем всех на День открытых дверей посвящённый курсу "Разработчик Java (очно в МАИ)". Трансляция начнётся через десять минут: https://www.youtube.com/channel/UCetgtvy93o3i3CvyGXKFU3g/live

Нас спрашивали, когда же будут Дни открытых дверей на курсе Java. Мы долго молчали, потому что готовили для вас небольшой сюрприз: в этот раз будет аж 3 Дня открытых дверей! 👉 4 октября (уже в эту среду!) - поговорим о наборе на курс очного обучения Java. 👉 7 октября (в субботу) поговорим о нашей классической Java, которая так полюбилась нашим пользователям. 👉 11 октября (в среду) вновь поговорим про очное обучение Java. Регистрируйтесь на мероприятие - будет интересно! Ведь отвечать на ваши вопросы и рассказывать о курсе будет Виталий Чибриков 🌟 По доброй традиции мы приготовили подарки: разыграем бесплатные места на курсе среди тех, кто успешно прошел вступительное тестирование 🎁 ❗️А вот если вы успешно прошли вступительный тест по Java, но не указали свой город - самое время это сделать! Ведь если для онлайн обучения локация не имеет значения (учиться можно из любой точки мира), то офлайн обучение мы разыграем среди тех, кто прошел тест и выбрал своим городом столицу нашей Родины :) Да прибудет с вами успех во время розыгрыша! https://otus.ru/dod/?utm_source=telegram&utm_medium=internal&utm_campaign=java&utm_term=dod

#java #otus И вновь мы хотим порадовать Вас безумно интересной статьёй, но на этот раз о #java https://habrahabr.ru/company/otus/blog/338770/

#deepjava #otus Принято считать, что многопоточность (multithreading) одна из самых сложных тем в программировании. И мы решили посвятить ей не одну, а несколько заметок, которые вы сможете найти по хэштегу #deepjava. В этой заметке мы разберем типы ошибок многопоточного доступа к данным: race condition и memory consistency errors. Но, перед тем как обсуждать ошибки доступа, давайте сначала разберем, что такое многопоточный доступ к данным. В какой именно ситуации можно получить такие ошибки. Мы уже упоминали в предыдущем посте, что поток в Java это объект. У любого объекта есть класс. В классе могут быть методы и переменные. Представьте, что у вас есть класс — наследник от Thread, в котором вы в одной из переменных храните ссылку на массив. И этот массив вы получаете в конструкторе класса. Пусть теперь, в runtime вы создаете два объекта рассмотренного выше класса и передаете в оба один и тот же массив. К элементам этого массива вы можете обращаться в методах run() ваших объектов. Одновременно. Из разных потоков исполнения. Вот это и есть многопоточный доступ к данным которые хранит массив. Например, один поток может писать что-то в массив, а другой читать из него. Рассмотрим теперь ситуацию, когда два рассмотренных выше потока собираются увеличить значение числа, которое записано в первой ячейке массива. Со следующей последовательностью событий: первый поток прочитал значение и увеличил его, второй поток прочитал то же значение, первый записал новое, второй увеличил значение и записал его. В результате вместо ожидаемого увеличения значения на 2 мы получим увеличение на 1, так как результат работы первого потока был “перетерт” результатом работы второго. Такая ситуация происходит из-за неатомарности операции увеличения значения числа. И является разновидностью ошибки многопоточного доступа — race condition. Вторая возможная ошибка многопоточного доступа — memory consistency error происходит из-за того, что разные потоки могут быть физически исполнены на различных процессорах вашего компьютера. Каждый процессор может закэшировать значение переменной у себя, не записывая ее в общую память. В результате разные потоки могут видеть в одно и тоже время разное значение переменной. Описанные выше проблемы призвана решить Java Memory Model. Что это такое и как именно она может помочь разработчику, мы рассмотрим в следующих заметках. И, подробно разберем на занятиях курса “Разработчик Java” в OTUS о которых вы можете узнать подробнее перейдя по ссылке: otus.ru/promo/java-2017/?utm_source=telegram&utm_medium=internal&utm_campaign=java&utm_content=deeppost&utm_term=27.09

Вооружившись этими знаниями, вы сможете в рантайме смотреть за поведением GC и определить, не выросли ли паузы или количество FullGC. Как используется память вашего приложения и как объекты перемещаются между регионами памяти. Понимание этих процессов дает возможность более вдумчиво подойти к настройке вашего приложения. Это малая толика того, что наши преподаватели будут разбирать на наших курсах по Java. Да, не забывайте о том, что их теперь два вида: наш изначальный онлайн-курс на 5 месяцев и оффлайновые курсы при МАИ, где вы сможете получить ещё сертификат о повышении квалификации государственного образца https://otus.ru/promo/java-2017/?utm_source=telegram&utm_medium=internal&utm_campaign=java&utm_content=deeppost&utm_term=19.09

#deepjava #otus О чем говорят логи Garbage Collector Наверняка вы слышали, что сборщик мусора в Java может оказывать значительное влияние на производительность приложения. Многое может зависеть от типа сборщика и его настройки. Есть много инструментов для того, чтобы мониторить различные параметры сборки, но иногда достаточно внимательно посмотреть на логи, которые пишет GC. В этой заметке я расскажу, как выглядят логи, которые пишет сборщик мусора и что с помощью них можно понять о работе вашего приложения. Для начала, нужно запустить JVM, указав специальные параметры: -XX:+PrintGCDetails - печатать детали о событиях сборки мусора -XX:+PrintGCDateStamps - также печатать timestamp этих событий -Xloggc:/home/otus/gc.log - опционально можно указать, в какой файл будут писаться логи, чтобы отделить их от логов вашего приложения. Сборщики мусора SerialGC, ParallelGC, ConcurrentMarkSweepGC (CMS) разбивают память (хип) java-приложения на несколько регионов. Это Eden+Survivor1+Survivor2 - молодое поколение и Tenured - старое поколение. Сборщик GC1 устроен иначе и его стоит рассматривать отдельно. Сборки мусора могут происходить только в молодом поколении - Minor GC или во всех регионах - FullGC. Давайте посмотрим на логи на примере ParallelGC (-XX:+UseParallelGC) В этих логах отображено 3 сборки мусора, сначала 2 minor, затем full: 2017-09-17T21:03:30.200+0300: 0,449: [GC (Allocation Failure) [PSYoungGen: 3662K->336K(4608K)] 3662K->3408K(15872K), 0,0020199 secs] [Times: user=0,01 sys=0,00, real=0,01 secs] 2017-09-17T21:03:30.506+0300: 0,755: [GC (Allocation Failure) [PSYoungGen: 3652K->400K(4608K)] 6724K->6544K(15872K), 0,0021768 secs] [Times: user=0,01 sys=0,00, real=0,00 secs] 017-09-17T21:03:30.815+0300: 1,064: [Full GC (Ergonomics) [PSYoungGen: 400K->0K(4608K)] [ParOldGen: 9216K->9581K(18944K)] 9616K->9581K(23552K), [Metaspace: 3570K->3570K(1056768K)], 0,0047284 secs] [Times: user=0,00 sys=0,00, real=0,01 secs] 2017-09-17T21:03:30.200+0300 - сперва идет timestamp - абсолютное время, когда сборка была начата, затем время относительно старта приложения (0,449) GC (AllocationFailure) - укзаывает, что это минорная сборка, при полной сборке будет указано Full GC. Причина начала сборки: не удалось выделить (allocate) место под новый объект PSYoungGen - тип сборщика. PSYoungGen - это сборка молодого поколения в ParallelGC. Также вы можете встретить DefNew - сборка молодого поколения в SerialGC, ParNew - сборка молодого поколения CMS Дальше идет самая интересная с практической точки зрения часть - занятая память до и после сборки по регионам: [PSYoungGen: 3662K->336K(4608K)] - В молодом поколении до сборки было 3662K, после - 336K. Всего в регионе доступно памяти - 4608K 3662K->3408K(15872K) - Статистика по всему хипу, доступно 15872K. И здесь мы видим интересный момент, что в молодом поколении освободилось 3326K, а общее место в хипе уменьшилось только на 3662 - 3408 = 254К. Это означает, что часть объектов были перемещены из молодого поколения в старое (promoted). Сборка заняла 0,0020199 secs Для FullGC в логах видно статистику по всем регионам памяти, так как сборка запускается и в молодом и в старом поколении. [PSYoungGen: 400K->0K(4608K)] [ParOldGen: 9216K->9581K(18944K)] 9616K->9581K(23552K), [Metaspace: 3570K->3570K(1056768K)], 0,0047284 secs] [Times: user=0,01 sys=0,00, real=0,01 secs] User - user-space время (операции вне ядра ОС), затраченное на GC Sys - kernel-space - время, затраченное на системные вызовы ОС Real - реальное время от начала и до конца сборки мусора. В нем учитывается, то время, пока процесс был прерван ОС или заблокирован (например, на IO) При использовании параллельной сборки User-space время может быть больше чем real-time, потому что user-space будет суммироваться по всем CPU, на которых исполнялась сборка.

Нас часто спрашивали, почему только языки программирования? Как на счет других специальностей в IT? Что делать, если я достаточно хорошо программирую, вырос до senior разработчика и понял, ... что управлять мне нравится сильно больше, чем программировать? Мы вас услышали! И подготовили курс для тех, кто хочет стать хорошим управленцем в сфере IT. Курс затрагивает такие интересные вопросы как правильное взаимодействие с заказчиками, управление изменениями, организацию процессов и финансы. Познакомьтесь с программой сами: http://otus.ru/lessons/it-menedzher/?utm_source=telegram&utm_medium=internal&utm_campaign=itsm&utm_term=welcome Насколько эти темы могут быть интересны - вы скоро оцените сами - ведь мы собираемся выпустить несколько #deeppost на тему IT management. В общем, мы так рады запуску нового курса, что как только открыли возможность прохождения вступительного тестирования - побежали едва ли не всей компанией проверять свои знания :) А вы?

Завершается посадка на очередной рейс обучения в OTUS по курсу “Python для Web-Разработки” Мы провели Дни открытых дверей, разыграли бесплатные места в группе, рассказали об интересных "фишках" в постах #deepwebdev, пригласили тех кто прошел вступительное тестирование в наше профессиональное сообщество, где можно обмениваться опытом и просто приятно и с пользой общаться. Новая группа начинает занятия уже завтра! Это значит, что завтра утром мы закроем возможность оплаты и присоединения к группе. В группе остались последние места - еще есть совсем немного времени, чтобы успеть присоединиться! https://clck.ru/BpEj9 Преподавателем курса стал Илья Лебедев - профессионал своего дела с многолетним опытом разработки! Мы желаем очередной группе успехов в учебе, что курс им понравится! Недавно завершился первый курс “Java-Разработчик” и успешные слушатели уже получили и приняли первые офферы от компаний партнеров, об этом мы обязательно расскажем подробнее в отдельных историях успеха наших выпускников - следите за новостями! Также мы выкатили новый дизайн нашего сайта - он стал еще ярче и вместе с тем удобнее и функциональнее - оцените сами! https://clck.ru/BpEiv

Через пять минут открывается День открытых дверей по нашему замечательному курсу "Python для web-разработки". Приглашаем всех: https://www.youtube.com/channel/UCetgtvy93o3i3CvyGXKFU3g/live P.S. среди тех прошёл тестирование будут разыграны два бесплатных места .

У нас очень, очень, очень классный редизайн Главной страницы: https://otus.ru/?utm_source=telegram&utm_medium=internal&utm_campaign=java Никаких абстрактных картинок и фотобанковских фото! Мы украсили каждый курс своей яркой, неподражаемой совой и добавили странице динамики! Вывели на Главную страницу одну из ключевых ценностей OTUS: наших преподавателей. И, конечно, не забыли и о работодателях. А еще мы обновили меню, добавили блоки с самыми востребованными разделами и напоминания. Нам очень нравится! А вам? :)

Открыт набор в третью группу “Java - Разработчик”, стартуем 14 октября! Что нового? Главная новость третьего набора в том, что теперь программу курса для вас будут вести 2 преподавателя, а это значит что вы получите в два раза больше качественного общения, опыта и знаний. Помимо бессменного Виталия Чибрикова, рады представить для вас второго педагога, Дмитрия Архангельского - специалиста с серьезным кейсом знаний и умений в области. Недавно завершился первый курс “Java-Разработчик” и успешные слушатели уже получили и приняли первые офферы от компаний партнеров, об этом мы обязательно расскажем подробнее - следите за новостями! Что осталось прежним? Качество обучения: авторская программа Виталия Чибрикова, проработанная и успешно прочитанная уже двум курсам, дополненная с учетом вопросов возникающих при работе с аудиторией. Профессиональное сообщество - куда мы рады будем пригласить прошедших вступительное тестирование. Присоединяйтесь, общайтесь и растите профессионально, обмениваться опытом в кругу единомышленников и профессионалов - бесценно! Приглашение на собеседования от наших компаний партнеров на вакансии разработчиков уровня middle для успешных выпускников курса. Удобный формат и график занятий, интересные боевые задачи и прекрасная атмосфера на занятиях и в группах для общения и получения новых знаний. Проходите вступительное тестирование. присоединяйтесь к нам! https://clck.ru/Bnxqs

Внимание!!! До старта курса “Python для Web Разработки” остались считанные дни - начинаем уже в эту субботу! Время пройти вступительное тестирование и присоединиться к группе еще есть: https://clck.ru/BnwYJ 13 сентября в 20-00 по Мск у нас состоится День открытых дверей курса Python для Web-Разработки! Присоединяйтесь к нам в онлайн режиме - из любой точки мира. Познакомимся с преподавателем Ильей Лебедевым, расскажем о проекте, о курсе и программе, ответим на все вопросы, и разыграем бесплатные места в группе, будет интересно!. Программа курса ориентирована на тех, кто уже уверенно владеет основами и хочет прокачаться до уровня middle/senior. Традиционно по результатам курса успешных выпускников пригласят на собеседования наши партнеры - топовые IT компании. Научимся выполнять боевые задачи бекенд-разработки: писать поддерживаемый код, выполнять рефакторинг, проектировать схему базы данных и взаимодействие с ней, организовать работу с ошибками и профилирование, проектировать и развивать схему взаимодействия с клиенсайдом, проводить код-ревью и писать тесты. Преподаватель Илья Лебедев - евангелист Moscow Python, преподаватель курсов Learn Python, сооснователь сервиса Devman.оrg. Знакомьтесь с программой, проходите вступительное тестирование и присоединяйтесь к нам!