Русский
Русский
English
Статистика
Реклама

Учебный процесс в it

Как строиласьData-практикавEPAM

19.02.2021 12:19:30 | Автор: admin

Компания EPAM давно работает с данными, первые крупные заказчики с проектами поBigDataпоявилисьв далёком 2001 году.В то время известные аналитические компанииGartnerиForrester, а также крупные поставщикиOracle,Microsoftи IBM отмечали, что компании должны двигаться в сторонуBigData, поскольку эти технологии незаменимы во всех областях, связанных с обработкой больших объёмов данных.С того времени команда экспертовEPAMпостепенно росла, работая над всё более сложными проектами и предлагая проверенные решения и качественные продукты для работы с большими данными. Сегодня только в российскомEPAMболее 500 человек работают вData-практике. О том, как всё начиналось, какие проекты встречались, какие провалы случались,к чему должны готовитьсяData-специалисты и о том, какие вообще бываютData-специалисты,я поговорила с руководителемData-практики EPAM в России Ильей Герасимовым.

Карьера

Расскажи, как ты пришёл в направление Data

ВEPAMя пришёл в 2006 годукакjunior-разработчикна .NETиMSSQLServer, до этого работал в продуктовойкомпаниии занимал должность тимлида, разрабатывал ПО для автоматизациигостиници ресторанов.Но вEPAMяначалкарьерус нуля.К 2013 году я дорос дотимлидаиискал новыевозможностисвоегоразвитиявEPAM,и именно в это времяявстретилсянаSECeв Минскес руководителем центра компетенцийBigData, и мы договорились о том, что в России надо развивать это направление.

Тогданас былодва илитричеловека.Нам помогали коллеги из других стран, читали нам курсы, вовлекали нас в различные активности, связанные с этим направлением. Очень много приходилось учиться,а потомраспространять полученныезнания.

Почему так долго работаешь в компании?

Ещё до Data я подумывал пару раз уйти, но что-то не отпускало меня. Сейчас я могу сказать точно, что здесь меня держат люди, с которыми пройдено много всего. И здесь всегда появляется что-то новое новые проекты, заказчики.

Почему именно Data?

Потому чтовесь мир этоData, и мы в нейData.:)

Что сейчас представляет собой Data-практика?

ПостепеннопоявлялисьновыеData-компетенции:Data Science,Machine Learning,Business Intelligence, Enterprise Search, DevOps in Data, Data Quality, Business Data Analysis.Сегодняв нашей практике более 500 человек это оченьбольшое подразделение сглубокойэкспертизойв разных областях.

Постепенно трансформировалось пониманиеподходовк реализации проектовв этой области. Если раньшемы отвечалина вопрос Каки концентрировались в основном на технологиях, то теперь фокусируемся на вопросеЗачеми методологии работы с данными.

Для любого крупного предприятия рано или поздно встает вопросData-менеджмента иData governance,т.е.понимания какие данные у предприятия есть в активе, какие данные они могут получить, как объединить эти данные, источниками которых являются разные подразделенияивнешние источники.Понять кто несёт за эти данные ответственность, кто имеет к ним доступ,как быстро данные устаревают, насколько они достоверны ит.д.

Более глубокое понимание качества данныхэто способ лучше понять бизнес клиента.

Ценность сотрудника в практике определяется не только глубиной его знаний и навыков, но также широтой охвата компетенций, связанных с данными. Сотрудники могут приобретать различные компетенции, переходямежду подразделениями практикиразработка программного обеспечения, моделирование данных, аналитикаданных,DataScienceи др.

Проекты

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

Когда в 2013-2014 году мы начинали, у нас было буквально два-три проекта, мы работали с иностранной нефтегазовой компанией, с российским банком, потом появился проект с расшифровкой генома, а затем и первый проект с Data Science.

Самым сложным и масштабным на тот момент был проект с расшифровкой генома, к тому же это был абсолютно новый для меня язык программирования Scala и первое знакомство с облачными технологиями, серьёзное погружение в DevOps, погружение без скафандра, как говорится. Мы до ночи сидели, пытаясь собрать проект, мы построили много различных акселераторов, это было действительно интересно.

А самый большой провал и как справились с этим?

Первое время провалов было много. В основном они были связаны с нехваткой людей, потому что мы не могли найти готовых людей с улицы со знанием технологий. Мы набираем разработчиков со знанием Java, Python, DevOps-инжиниринг и потом доучиваем.

Все специалисты проходят курсы молодого бойца, чтобы освоить наши технологии и процессы, которые в своё время прошел и я. Внешние курсы не соответствовали нашим запросам, поэтому в 2012 году было принято решение создать свой собственный курс ёмкий, а главное имеющий практическое применение. Писали его сами, своими руками, основываясь на собственном опыте, ошибках. Понятно, что курс требует адаптации и должен меняться в соответствии с технологических ландшафтом и приобретенным опытом. Для поддержания курса в актуальном состоянии требуется много ресурсов, и нам приходится идти на это, чтобы оставаться на передовой, потому что без этого никак, внешние курсы сильно запаздывают от бизнес-реалий, в которых находится EPAM.

Помимо общего курса нашими специалистами разработано много внутренних курсов по разным направлениям Data Analytics, облачные решения, Data Engineering, Data Science и другие, доступных всем сотрудникам EPAM.

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

Про технологии

За чем сейчас будущее? На какие технологии появляется и сохраняется спрос?

Если я начну перечислять все технологии, то какие-то пропущу, какие-то не вспомню, на какие-то обращу больше внимания, чем они этого заслуживают. Технологий очень много, они быстро стареют и так же быстро появляются новые. Гнаться за суперсовременными технологиями не всегда получается, да и не всегда нужно. Зачастую новые решения появляются на рынке в довольно сыром состоянии. Однажды на одном проекте мы погнались за технологией Cadence, которая показалась заказчику приемлемой, но в итоге с ней постоянно возникало много проблем с производительностью, она не справлялась с тем объёмом данных, который был на проекте, и мы с трудом находили людей, которые могли бы быстро в ней разобраться.

Был ещё один кейс, на этот раз с технологией Reinforcement Learning. Один из наших заказчиков хотел внедрить систему с использованием этой технологии. Этому фреймворку на тот момент было около 2-х месяцев, он был довольно сырой. В целом было очень мало систем промышленного масштаба, где эта технология используется. В итоге ничего не получилось, и нам пришлось быстро откатить систему и создать решение, которое справлялось с задачей заказчика уже без использования Reinforcement Learning. Хотя технология очень перспективна, мы следим за её развитием и, возможно, даже уже в этом году мы сможем использовать её в проектах.

Но всё же существует некоторый золотой стандарт, который должны знать Data-специалисты. Причём этот стандарт тоже постоянно обновляется. На самом деле, в инкубаторе много проектов, которые завтра взлетят. Многие проекты, которые вошли в золотой стандарт это вчерашний инкубатор. Были, конечно, технологии, которые не взлетели. Так случилось, например, с технологией Theano, она появилась примерно в одно время с TensorFlow, но Theano куда-то исчезла.

  • УApacheесть целый набор инструментов, технологий, которые нужно знать среди нихSpark,Cassandra,Elasticsearchи другие.

  • Yarn, HDFS,MapReduce,Hive,Kafka,ZooKeeper этобазовые технологии, с которых всё начиналось.БазоваятехнологияHadoopникуда не делась,хотя онавыглядит немногоустаревшей, новсе принципы,которые в ней заложены,используются в современных технологиях.

  • Вразличных облачныхтехнологиях вAmazon,MicrosoftAzure,JCPесть свои аналогиHadoop, с которыми мы работаем.

  • Также актуальными являются инструменты защиты данных, такие какKerberos,Knox,Ranger.

  • Понятно, что различныеNoSQLиNewSQLбазы данных Cassandra, например(ужене новая),Snowflake,AmazonRedshift,HBase,MongoDB,Teradata.

  • DevOpsтехнологии Kubernetes, Docker, Jenkins.

  • Технологии визуализации данных:PowerBI,Tableau,QlikView.

  • ВDataScienceтоже множество различных фреймворков,напримерTensorFlowиGoogleBERT (который тоже ужевчерашний день, сегодняесть реализации лучше),PyTorch,Keras.

  • Отдельно стоит перечислить технологииStreaming.Streamingэто новый вызовмираData, поэтомуинструментыстоит знать Spark Streaming, KafkaStreams, ApacheFlink, Apache Storm.

Во многом набор знаний зависит от направления специалиста.

Для всех обязательно знание SQL (стандартного и аналитического), теории DWH (какие типы организации хранилищ данных бывают звезда, снежинка,DataVault, как организовать историчность хранения справочников ит.д.), нормализации данных (чем отличаются первая, втораяи третья нормальные формы, что это такое вообще, в каких случаях полезна денормализация), и понимать, чем отличается DWH,DataMart,DataLake.

Для всех обязательно понимание процесса промышленной разработки, знание систем контроля версий. В последние годы обязательным становиться опыт работы с облаками, хотя бы с одним из наиболее популярных AWS,Azure, GCP.

Для тех, кто занимается ETL (загрузка и преобразование данных перед их использованием) обязательно понимание разницы ETL и ELT, стадий загрузки, способов проверки и очистки данных, понятияslowlychangeddimension. Также обязательно знание как минимум одного языка программирования для написания ETL вручную (PL/SQL, T-SQL,pgSQL,Python,Spark), оркестраторов для запуска процессов (например,Airflow), специализированных программ, каккомерческих, так и бесплатных (Talend,InformaticaPowerCenter,Pentaho,etc.).

Для репортеров (DataAnalyticsandVisualization), помимо знания хотя бы 2-х репортинговых программ (PowerBI,Tableau, TIBCOSpotfire,MicroStrategy,Pentaho, ит.д.) необходимо знание различных подходов в создании отчётов идашбордов(например,Storytelling).

А вы сами участвуете в разработке каких-то технологий?

Наши сотрудникиконтрибьютятвApache Spark, NiFi, Elasticsearch и многие другие. Любой сотрудник может принять участие в проекте. Даже врамках нашего обучающего курса, о котором ярассказывал,одно из заданий доработать какую-то фичу или исправить решение в Open Source проекте.

Кроме того,мы разрабатываемисвоиOpenSourceпродукты, например, Open Data Analytics Hub (ODAHU) проект, предоставляющий компоненты для создания систем автоматизации полного жизненного цикла ML моделей.

Какие технологии используются у вас на проектах?

Мы немного по-другому смотрим на то, как долженстроитьсяподход к управлению проектами в Data он основанненавыборетехнологий,ана методологиях. У нас есть несколько шаблонов (blueprint) для решения тех или иных задач. Это решения задач,с которыми мы часто сталкивались на наших проектах, ужепроверенныевременем.Грубо говоря, у нас естьшаблон,который мынаполняемтехнологиямив зависимостиот задач заказчика, от его приоритетов, инфраструктуры.

Сготовымblueprintмыможем прийти к заказчику и просто как по чек-листусобрать информацию, например,естьлиунегов архитектуре хранилище сырых данных, витрина данных,эксплуатируемое окружение дляDataScientists, процесс миграции данных, вычисления дельтит.д.

Отличаются ли подходы к проектам в разных отраслях?

Мыработаемснефтегазовой отраслью, с банками, сфармацевтическими компаниями,e-commerce,с медиа,со страховым бизнесом, в областиLifeScienceмногопроектоводним словом, в различных бизнес-направлениях.Может показаться, что всё это абсолютно разные направления задач,ноblueprintsпозволяют нам мыслить в одних шаблонах, решать разные задачи с помощью одних и тех же подходов.

Конечно,вкаждойотраслиесть специфические задачи и подходы, и если мы видим растущий бизнес, то мы делаем специализированное решение для той или иной отрасли.Мы разрабатывали специализированныерешения для нефтегазовой, фармацевтической,банковской сферы идругих.

Что изменил 2020 год?

Четкое осознание, что данные нужно уже не только копить, но и заставлять их работать на бизнесу компанийпоявилосьвXXIвеке.И2020 год подтолкнул компании, так называемое позднее большинство (latemajority), которые до этого сомневались вценности использования данных,к изменениямвзглядов и походов.

The diffusion of innovations according to Rogers. (From Wikipedia)The diffusion of innovations according to Rogers. (From Wikipedia)

Про обучение

Как его лучше организовывать тем, кто интересуется датой: с чего начать, на что делать упор?

Существует много курсов как платных, так и бесплатных,где даютмного информации о технологиях, подходах. И, возможно, придётсяпрослушать десятки курсов,прежде чемизучить тему.

Чтобы начать учиться, необходимоиметьжелание,уверенность в будущемData, и умение программировать хотя бы на одном из языковJava,ScalaилиPython.

В тренинг-центре EPAM есть бесплатные курсы для начинающих специалистов, в том числе по направлениям Data Engineering, Data Science, BI, а также Python и другим языкам, которые помогут стартовать в профессии.

Что должен знать идеальный инженер, претендующий на место в команде Data в EPAM?

Выше подробно описан стек технологий. Если кратко, идеальныйDataгерой должен уметь программировать наJava,ScalaилиPython(вообще, большинство ребят полиглоты в терминах языков программирования),знатьSQL, понимать различные подходы к хранению и обработке данных, их плюсы и минусы, знать различные архитектуры построения гетерогенных систем, обязательно знатьDevOps-инструменты и методологии ведения проектов,умениеработать с облачными технологиямиипониманиеMachineLearningтакже приветствуются.

Подробнее..

Как научиться думать три базовых момента

27.02.2021 20:23:19 | Автор: admin

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

Фотография: Roman Bilik. Источник: Unsplash.comФотография: Roman Bilik. Источник: Unsplash.com

Знайте матчасть

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

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

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

Знать и разбираться в когнитивных искажения [КИ] стоит еще и потому, что в запущенных ситуациях они могут приводить и к неприятным эффектам например, незаметно перестраивать наши воспоминания в угоду той или иной проблеме эмоционального или иного характера и дестабилизировать психику [подобными кейсами занимаются когнитивные психотерапевты].

В общем случае очень важно помнить о том, что за один присест все искажения охватить не получится. Их изучение стоит дозировать, сделать регулярным и по мере знакомства с отдельными типами КИ вспоминать и анализировать собственный жизненный опыт.

Наиболее известными КИ являются эффект Даннинга Крюгера, иллюстрирующий неспособность низкоквалифицированных специалистов осознавать свои ошибки; проклятие знания близкое КИ, объясняющее, почему более информированные люди скорее всего не смогут точно прогнозировать действия менее информированных; и нога в двери, которым часто, но весьма неумело пользуются телефонные спамеры.

Фотография: Phil Desforges. Источник: Unsplash.comФотография: Phil Desforges. Источник: Unsplash.com

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

Матрица НАСА для оценки рисков в зависимости от возможных последствий и вероятности наступления событий; фреймворки GOFER и DECIDE, описывающие базовые алгоритмы для принятия решений; и реверс-инжиниринг вероятных проблем в формате pre-mortem одни из наиболее заметных примеров ментальных моделей.

Различайте грабли

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

В итоге вы легче различаете возможные упущения, уходите от односторонних суждений и можете позволить себе думать о том, как вы думаете, а главное делаете это легче. Такое состояние называют метакогнитивной осведомленностью и связывают ее с использованием вспомогательных инструментов, позволяющих осуществлять сборку самолета на лету, мыть автомобиль, не выходя из него и практиковать так называемое second level thinking.

Пользуйтесь простыми инструментами

Сложные часто ведут в сторону бесконечной настройки, установки обновлений и поиска информации, которой нужно заполнять календарики, борды и to-do-листы. В определенных случаях и в рамках конкретных проектов во всех этих действительно есть смысл, но если от усложнения инструментов для ведения заметок, организации дел и размышлений можно отказаться без потерь с точки зрения результатов, то стоит так и поступить. Иначе они перетянут внимание на себя. Есть даже похожее когнитивное искажение, связанное с поиском информации ради самого поиска, который обычно не дает видимого результата и не влияет на что-либо.

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

Фотография: strichpunkt. Источник: Pixabay Фотография: strichpunkt. Источник: Pixabay

Помимо тренажеров для изучения нового и укрепления памяти есть похожие карточные системы для развития творческого аспекта мышления и использования максимально простых ментальных моделей, способствующих креативу. Одна из таких систем называется Oblique Strategies. Ее разработали в начале 70-х художник Питер Шмидт и музыкант Брайан Ино.

Вышло более шести редакций карточек, некоторые в виде небольших партий со специальным оформлением. Но сегодня есть и веб-версии с генераторами случайных карт из этой серии и даже версия для голосового ассистента Alexa, плюс всевозможные аналоги вроде идей для стартапов и рекомендаций для предпринимателей. Что интересно, Oblique Strategies неоднократно упоминали в поп-культуре отсылки к ним есть в творчестве R.E.M., независимых фильмах и комиксах.

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

Среда условного Хабра, где вы можете наблюдать (1) мгновенную реакцию на ваши комментарии, (2) следить за успехами любимых авторов и делать это (3) на регулярной основе, является достаточной для развития не только мышления, но и прокачки интуиции понимания того, что в действительности волнует и беспокоит ваших коллег по профессии, да и по рунету в целом. Именно эти три условия описал Даниел Канеман, известный писатель, психолог и лауреат крупнейших премий по экономике, когда его попросили объяснить природу интуитивного мышления. Надеемся, что наш сегодняшний рассказ вдохновит вас на развитие, друзья!


Англоязычные материалы в нашем блоге на Хабре:

И русскоязычные хабрапосты по теме:


Подробнее..

Из студентов в преподаватели интервью с выпускниками магистерской программы JetBrains ИТМО. Часть 2

01.03.2021 18:19:29 | Автор: admin
Продолжаем знакомить вас с выпускниками магистратуры JetBrains и ИТМО Разработка программного обеспечения, которые по завершении обучения пополнили преподавательский состав программы. Во второй части интервью ребята рассказывают подробнее о своих задачах, подходах к преподаванию и дают советы абитуриентам. Первая часть интервью.



Есть ли что-нибудь, что вас раздражает в работе преподавателя?

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

В проверке домашних заданий есть свои радости: когда кто-то придумывает новое решение задачи, которую, как казалось, ты понимаешь от и до, это очень познавательный опыт; когда удалось выявить какой-то огрех, дать хорошую подсказку и увидеть, как в последующих работах студент эффективно ее применяет, это такой момент, ради которого и хочется заниматься преподаванием. Однако не все всегда так радужно, и часто оказываешься перед моральным выбором. Если видно, что студент ничего не понимает и не поймет, стоит его пожалеть и закрыть глаза на мелкие огрехи, за которые других ругаешь, или поддерживать стандарты? Если выпрашивает баллы и искренне верит, что все сделано хорошо, попытаться прийти к общему мнению или наотрез пресечь? Если явно халтурит, делает на минимум, просто хочет получить зачет и забыть про предмет смириться, или все-таки попытаться объяснить в каких-то новых терминах, в чем польза этой дисциплины? Может, просто пустить все на конвейер и упростить процесс сдачи или же досконально проверять и требовать хорошего понимания изучаемых тем? Часто не очевидно, какое решение правильное, а неудачный выбор влияет не только на тебя самого, но и на других людей, которых можно ненароком оттолкнуть от твоей дисциплины.

Леша: Как-то так сложилось, что всеми вещами, которые меня раздражают, я быстро перестаю заниматься. У людей бывает обостренное чувство справедливости, у меня же скорее сильное желание быть в согласии с самим собой. Поэтому я бы ответил так: если бы меня что-то раздражало, я бы точно не занимался преподаванием.

Саша: Немного раздражает, когда студенты не соблюдают формальные договоренности, о которых было сказано заранее. Например, неправильно называют пул-реквесты.

Влад К.: Меня по-настоящему раздражает выкладывать файлики на вики. Да, очень. Любая опечатка или неточность, которую надо поправить, и понеслось правишь TeX, компилируешь, скачиваешь, находишь нужный файл на вики (самое сложное!) и кидаешь туда новую версию. Наверно, это можно как-то автоматизировать, но у нас такого курса не было!

Рома: Пожалуй, отчетность была самым раздражающим фактором. Заполнение табличек редко приносит радость. Еще мне тяжело давалось составление задач, это было для меня своеобразным творческим стрессом.

Очень раздражает списывание. Когда ты студент, ты иначе к этому относишься. Когда я стал преподавателем, я каждый акт списывания расценивал как проявление неуважения ко всем остальным студентам. Возможно, это слишком жестко, но эмоционально у меня именно такая реакция.

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

Не нравятся студенты, которые очень много умничают. Я имею в виду тех, кто, обладая глубокими знаниями по теме, не понимают, когда уместно эти знания демонстрировать, и делают это при любом удобном случае. Часто при этом они мешают ходу занятия, а также своим менее опытным и знающим однокурсникам, отвлекая и запутывая их.

А что радует и мотивирует больше всего?

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

Дима Х.: Часто бывает понятно, что если бы не твои слова, то студент, может, так бы и не осознал ту или иную мысль. Мой опыт чтения математических книг в одиночку без малейшего понимания, с чего начинать, напомнил мне, как беспомощно себя ощущаешь, когда тебе представлено какое-то последовательное изложение, которое вызывает иллюзию того, что ты его понял, но любые попытки применить только что полученные знания заканчиваются неудачей. Это может вызывать такое отчаяние, что пропадает всякое желание заниматься чем-то новым. Наличие рядом человека, который выслушает твою дурацкую интерпретацию прочитанного и возразит, что нет, все совершенно не так, увеличивает эффективность учебы даже не в разы, а на порядки.
Помимо этого, мне интересно подходить к преподаванию с эдакой научной точки зрения: проверять, что получается, а что нет, что вызывает энтузиазм и понимание, а что проходит мимо ушей.

Леша: Радует, когда я недооцениваю студентов. Я в целом против разного рода ярлыков и простых оценочных суждений о людях, но в работе требуется индивидуальный подход, который я строю на собственных ожиданиях от студентов: вот этот студент очень сильный, ему можно что-то дополнительное рассказать или подискутировать с ним; вот этот послабее, его лучше лишний раз не нагружать, ему и без того сложно. Всегда приятно ошибаться в несправедливо заниженных ожиданиях.

Влад К.: Как и любого человека, которому нравится то, о чем он рассказывает, меня радует, когда кто-нибудь из студентов говорит, что решение задачи красивое.

Расскажите, как именно вы участвуете в преподавании?

Влад Т.: Я проверяю работы на нескольких практических курсах и веду практику на курсе Software Engineering. Раньше я участвовал в собеседованиях приемной комиссии и в оценке научно-исследовательских работ.

Дима Х.: Третий год я веду практические занятия и проверяю домашние задания по функциональному программированию и математической логике. В прошлом году вел практики по курсу Unix и скриптовые языки, но оказалось, что мне больше по душе связанная с языками программирования эзотерика. С текущего весеннего семестра провожу практики по формальным языкам.

Дима Н.: Веду семинары и проверяю домашние задания в курсе по программированию на Java и других JVM-языках.

Леша: Основная моя деятельность в магистратуре лекции и практики по Python, практики по Java и домашние задания по Software Engineering. Еще я периодически читаю аналогичные курсы, но на других, обычно непрофильных программах.

Артем: Помогаю с курсом по С++, который преподается у ребят в магистратуре и CS центре. В основном я занимаюсь всем, что связано с домашними заданиями (проверка, помощь в подготовке условий, автотесты). У нас на курсе процесс проверки решения состоит из двух этапов: автоматические тесты и код-ревью. Студенты далеко не с первого раза успешно проходят второй этап. Преподаватель оставляет комментарии, задает вопросы, а студенты должны исправить решения. Таким образом происходит непрерывный диалог, что, на мой взгляд, очень круто!

Саша: Проверяю у ребят домашние задания по Python. Но если мне наконец предложат прочитать курс лекций по Haskell, я с радостью переключусь на эту деятельность.

Влад К.: Я принимаю участие в проведении двух курсов Алгоритмы и структуры данных и Дискретная математика. И там и там веду практические занятия и проверяю домашние задания. Дополнительно я отвечаю за информационное взаимодействие со студентами и стараюсь отвечать на все возникающие вопросы.

Оба курса схожи по структуре: на практиках студенты получают список задач по теме прошедшей лекции, и мы их вместе обсуждаем. Обычно я даю студентам время подумать и предложить идеи. Если не получается, подсказываю правильное направление и в итоге всегда рассказываю, как должно выглядеть корректное решение. Полученные знания и умения студенты должны применить при выполнении домашних заданий. Решения присылаются в письменном виде, причем у студентов, приславших работы до определенного времени, гарантированно есть возможность исправить мои замечания. Так как замечаний всегда хватает, обычно больше баллов получают те, кто действует превентивно.

Рома: Два учебных года я вел практические занятия на курсе по C++. В мои обязанности входила подготовка материалов для семинаров, их проведение, работа со студентами, проверка заданий, помощь в проведении экзамена. Практически все время я работал в паре с еще одним коллегой, поэтому составлением и проверкой задач я занимался не в одиночку.

Сколько времени в неделю у тебя уходит на преподавание?

Влад Т.: Сейчас где-то 5 часов. Вероятно, будет больше.

Дима Н.: Полтора часа непосредственно на пару, часов пять-восемь на проверки, еще пара часов на подготовку к занятиям.

Леша: В этом семестре занимаюсь преподаванием фултайм, т. к. веду разные курсы и на других программах тоже, иногда с перегибами за 40 часов, но стараюсь не допускать переработок.

Саша: На проверку домашек у половины группы уходит примерно один рабочий день.

Осенний семестр в магистратуре проходил полностью онлайн. Как вы относитесь к этому формату?

Влад Т.: Вполне хорошо. На мой взгляд, это очень подходящий формат для IT-программ. Возможно, даже более подходящий, чем очное обучение.

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

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

Артем: На мой процесс взаимодействия со студентами это никак не повлияло, но я думаю, что ребятам сейчас тяжелее. Мне сильно помогали походы в университет тем, что можно было отвлечься от горы заданий, лично пообщаться с ребятами. Остается лишь пожелать нынешним студентам терпения и сил. Ребята, не забывайте отвлекаться от учебы и отдыхать это важно!

Что бы вы посоветовали ребятам, которые планируют поступать на программу?

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

Дима Х.: Откладывайте работу и все свои дела. Если не можете себе этого позволить, то поступайте не сейчас, а тогда, когда сможете. Интенсивность обучения здесь требует полного погружения в процесс.

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

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

Артем: Прежде всего, важно быть уверенными в себе. Подготовиться к вступительным экзаменам достаточно просто, но немаловажно показать свою искреннюю заинтересованность.

Саша: Я бы посоветовал четко решить для себя, готовы ли вы еще два года целиком и полностью посвятить учебе. Если ответ положительный клево, ждем вас на собеседованиях! Если отрицательный, тоже хорошо: в ближайшие пару лет проблем со сном по причине горящих дедлайнов по домашкам у вас не предвидится. :)

Рома: Постарайтесь понять, что является слабым местом, и подтяните его. Если есть проблемы и с практикой, и с теорией, советую подтянуть практику это сильно поможет почти во всех курсах. А еще стоит отучиться делать все в последний момент.

Влад К.: Самое главное быть готовым к тому, что будет очень-очень сложно. Надо морально настраиваться на то, что свободного времени в привычном смысле практически нет: ты либо на паре, либо делаешь домашку, либо ешь/спишь/перемещаешься. Кстати, времени на сон в среднем остается совсем немного. И это, конечно, сказывается на физическом и эмоциональном состоянии. Поэтому внутренняя мотивация учиться должна быть очень сильной.

Еще одна важная вещь, которая существенно может помочь, особенно в первое время постараться освоить необходимый технический минимум для прохождения курсов.

Ну и дерзкий совет: не планируйте поступать просто берите и поступайте!
Подробнее..

Авторизованные курсы AWS за или против

25.02.2021 10:21:06 | Автор: admin
Архитекторы и проектировщики решений, а также все, кто желает ими стать! Нам (Сетевой Академии ЛАНИТ) нужна ваша помощь. Мы в поиске новых направлений для развития, и один из вариантов авторизованные курсы по облачным технологиям Amazon. Расскажите, будет ли вам интересно такое обучение.


Architecting on AWS это курс об основах создания ИТинфраструктуры на платформе AWS. В ходе обучения вы научитесь оптимизировать облако AWS, проектировать оптимальные ИТ-решения на AWS и создавать различные инфраструктуры. Будем рады пожеланиям и предложениям в комментариях. Давайте обсудим.
Подробнее..

Чемпионаты по программированию развлечение для студентов или способ устроиться на работу мечты?

19.02.2021 16:11:01 | Автор: admin

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


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


Расскажем, кто изачем вообще проводит такие чемпионаты, ипочему стоит вних поучаствовать. Даже если выпока непланируете менять место работы.





Кто изачем проводит чемпионаты попрограммированию


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




Геннадий Короткевич. Источник

Получается, что для компаний такой способ поиска кандидатов очень удобен. Для него даже придумали название Hiring event. Явление это нередкое, довольно популярное укрупных компаний истартапов:


  • В2019 юникорн-стартап Bolt проводил чемпионат, накотором предлагали денежные призы ирелокейт вЭстонию.
  • ВGoogle Code Jam победитель получает 15000$, акучастникам присматриваются для найма.
  • Facebook регулярно проводит международный конкурс попрограммированию там можно выиграть 500000$.
  • Huawei тоже проводят чемпионат снесколькими номинациями иденежными призами.


Николай Будин, призер чемпионата юникорн-стартапа Bolt:


Ясошколы много участвовал вчемпионатах попрограммированию, ипосле выпуска продолжил этим заниматься. Когда узнал очемпионате отBolt, решил поучаствовать, чтобы попрактиковаться иможет быть выиграть приз. Задания были стандартные написать программу, которая повходным данным выдаст определенный результат. Для меня оказались несложными видимо, сказался опыт. Витоге занял второе место иполучил приглашение насобеседование вМоскву. Янепоехал, так как неинтересовался работой, нопредложение действительно поступало.

ВРоссии тоже неотстают:


  • Яндекс в2020 проводил Яндекс Cup там были иденежные призы, иупрощенное собеседование для 20лучших.
  • УВконтакте есть VKCup, сденежными призами. Онайме впризах ничего несказано, нопобедители рассказывали, что импришло письмо отHR.
  • Похожий наолимпиаду ивент проводила компания FunCorp там было тестовое вформате олимпиадной задачи исобеседование заодин день, после которого приглашали наработу.
  • Mail.Ru постоянно проводят разные чемпионаты свнушительными призами иобещаниями офферов.

В2020 из-за пандемии счемпионатами было похуже часть перенесли вонлайн, часть вообще отменили. Надеемся, что в2021 все потихоньку наладится.




Победители Facebook hacker cup

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



Зачем участвовать вчемпионатах попрограммированию


Сменить работу идаже переехать вдругую страну. Чемпионаты устраивают именно для того, чтобы нанять новых специалистов. Поэтому практически всегда победителям предлагают пройти интервью или даже сразу получить оффер. Причем срелокейтом вПитер, Москву или другую страну.


Для программиста сопытом это возможность за12 дня запрыгнуть вЯндекс, Mail.Ru или даже Google. Быстрее, чем пытаться самому пройти все этапы собеседования инаконец дойти донайма.


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


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


Проверить навыки иоценить себя. Даже если пока непланируете менять работу, сможете посмотреть, справитесьли высосложными задачами открупных компаний. Кстати, примерно такие задачки вас ждут нареальных собеседованиях: мырассказывали обэтом встатьях обустройстве вFacebook, Reddit, Spotify или Google. Так что вчемпионатах стоит поучаствовать хотябы ради практики.


Получить строчку врезюме. Даже участие вчемпионате хороший знак для работодателя. Апобеда вообще может стать вашим главным козырем. Кроме того, рекрутеры приглядываются кпобедителям икогда открывается вакансия первым делом идут именно кним.


Выиграть приз. Нанекоторых чемпионатах есть призовой фонд: можно выиграть несколько тысяч долларов или дорогую технику.




Чего ждать отчемпионата икак кнему подготовиться


Конкретные условия иформаты учемпионатов всегда разные. Нообычно схема такая: Регистрируетесь проходите простой отбор решаете сложные задачи получаете приз или оффер. Иногда решать задачи можно как угодно, иногда требуют конкретные языки или технологии, например, JavaScript.


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


Для тренировки врешении олимпиадных задач (итех, что вас ждут насобеседованиях вкрупные компании) есть целые сайты.



НаLeetcode многое непонятно, ноесть туториал попорядку прохождения задач итабличка посложности.


Еще такие задачи ссобеседований иолимпиад часто разбирают навидео. Вот несколько интересных:




Заинтересовались чемпионатами ихотите попробовать свои силы или сменить работу? Если пишете наJavaScript, можно прямо сейчас поучаствовать вчемпионате отЯндекса через g-mate. Ивместо длинного сложного трудоустройства длиной несколько месяцев получить оффер отЯндекса заодин день.
Подробнее..

Бесплатные онлайн-мероприятия по разработке (1 марта 7 марта 2021)

27.02.2021 14:17:14 | Автор: admin

2 марта, Вторник

Dev-to-Consult

Мне нравится писать код, но как долго у меня получится этим заниматься?

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

Давайте разбираться, как устроены траектории профессионального развития разработчиков.

Поговорим с инженерами, которые пошли по разным путям. Узнаем у них, как так вышло и что из их опыта может пригодится нам, всем остальным.

Эксперты
Асхат Уразбаев, управляющий партнёр, ScrumTrek
Максим Дорофеев, прокрастинатолог в mnogosdelal .ru
Георгий Могелашвили, Mentor/Coach, Lead Developer


2 марта, 15:0016:30 мск, Вторник

Регистрация на мероприятие

3 марта, Среда

Inforso Meetup #2
  1. Основной процесс работы в современных командах разработки - Глеб Шалтаев, Senior Frontend developer, банк Открытие
    Правила игры в команде; Основные инструменты и активности команды; Разбор на примере бизнес-задач; Полезные ресурсы.

  2. Roadmap для разработчика: как пройти первое собеседование - Вадим Селяков, Тим-лид, Сберлогистик
    Хард-скилы; Софт-скилы; Языки программирования; Почему стоит или не стоит работать в ИТ; Полезные ресурсы


3 марта, начало в 20:00 мск, Среда

Регистрация на мероприятие

Data Science meetup
  1. Как я перестал бояться и полюбил AutoML - Александр Кузнецов
    Что предлагают современные системы AutoML от Google, Amazon, Microsoft, IBM, зачем они нужны аналитику данных и почему не нужно бояться развития этих сервисов (пока что).

  2. All you need for RecSys is a good baseline - Павел Смирнов
    Обзор на статью от Steffen Rendle с анализом современных тенденций в RecSys к использованию нейросетей вместо классического декартового произведения. Что такое матричная факторизация, алгоритм NeuMF.

  3. Как понять ИИ (или все же ML?) - Роман Щербаков
    Обзор актуальных методов оценки влияния признаков в обучении модели, тонкости и нюансы выбора тех или иных инструментов XAI.

  4. Web Fingerprinting and ML - Илья Стариков
    Про идентификации и анти-идентификации пользователей в сети. Зачем и какую информацию собирают сайты о нас, как ML помогает им в этом.


3 марта, 18:00-20:00 мск, Среда

Регистрация на мероприятие

4 марта, Четверг

Soft Skills Hero Meetup
  1. Сон. Легко потерять, сложно найти, невозможно забыть - Алексей Заборщиков, Andersen
    О нашем самом любимом занятии - профессионально! Что такое сон? Почему нам нужно спать? Как спать лучше?

  2. Resume-Driven Development in Action - Владимир Рожков, Devlify
    Современные технологии развиваются очень быстро. Новые библиотеки и фреймворки выходят чаще, чем успеваешь изучить старые. Нужно бежать, чтобы просто оставаться на месте. Многие задаются вопросом: когда изучать новое, чтобы быть востребованным специалистом? После работы? А когда жить и заниматься своими делами?
    Ответы на эти вопросы заключаются в методологии Resume-Driven Development.

  3. Архитектура - это софт скиллы - Алексей Мигутский, Senior Sofware Engineer, Microsoft/GitHub
    Архитектура это не только код; Почему архитектура требует общения; Закон Конвея; Как взрослеет архитектурный процесс.


4 марта, начало в 19:00 мск, Четверг

Регистрация на мероприятие

Ruby Meetup Online
  1. SmartCore (smart-rb) a set of common abstractions and principles, realized in scope of Ruby, DDD and Clean Architecture - Ибрагимов Рустам, Team Lead, Umbrellio
    О наборе новых библиотек, решающих задачи архитектурного направления в мире Ruby. Инструменты, которые уже реализованы, их преимущества и идеология.

  2. MPI: композитные атрибуты моделей данных - Ильчуков Александр, Ruby разработчик в MPI
    Как реализовать с помощью композитных типов PostgreSQL иерархичные структуры, что увеличит производительность в определённых случаях и повлияет на массивное упрощение бизнес-логики.

  3. Метрики эффективности сервиса - Астхана Аникет, Project manager, Umbrellio
    Метрики Lead Time, Throughput, Flow Efficiency, Resource Efficiency: как они между собой связаны, к чему они чувствительны и как могут нам помочь. Какую информацию о положении дел сервиса можно получить из Jira.


4 марта, 17:0019:30 мск, Четверг

Регистрация на мероприятие

Быстрый веб-сервис

В начале девяностых годов мы работали на компьютерах с процессорами 80386 и 80486. Они казались сверхбыстрыми по сравнению с персоналками предыдущего поколения. На машине с мозгами модели 80386 запускался и работал Doom, что казалось невероятным.

При этом разработчикам приходилось выжимать всю производительность, на которую машины были способны.

Сейчас нам гораздо реже приходится заниматься ускорением кода, но есть задачи, где это всё ещё необходимо.

Одна из таких задач это быстрые веб-сервисы. Иногда речь идёт об очень большом количестве запросов.

Роман Ромадин расскажет о том, как он разрабатывал пиксель-трекер для анализа посещаемости сайта. Сначала трекер был написан на PHP, потом переписан на Go. Для хранения данных применялись разные базы. В конечном итоге производительность выросла на порядок.
Роман опытный бекенд-разработчик, писавший на PHP и на Go.


4 марта, 19:0020:00 мск, Четверг

Регистрация на мероприятие

5 марта, Пятница

Online-митап Hot Frontend от SimbirSoft
  1. Как успешно пройти собеседование на роль frontend-разработчика - Дмитрий, руководитель Frontend-отдела
    Что нужно знать; Как вести себя на интервью; Правильные установки.

  2. Работа с MobX: личный опыт - Евгений, frontend-разработчик
    Ушли от компонентного подхода в сторону решения бизнес-задачи; На пути к 100% декларативному программированию; Из React выброшено всё ненужное.

  3. Динамические диаграммы для Vue на основе SVG - Евгений, frontend-разработчик
    Анимация и построение графиков-диаграмм; Диаграмма без использования сторонних библиотек; GPU анимация


5 марта, начало в 18:00 мск, Пятница

Регистрация на мероприятие

Подборку подготовил автор телеграм-канала ITMeeting - анонсы бесплатных мероприятий по разработке.

Подробнее..

Создание бизнес-приложений бесплатные вебинары марта

02.03.2021 10:09:04 | Автор: admin

Привет, Хабр! Сегодня делимся уже традиционной подборкой наших бесплатных мероприятий (вебинаров) по создания бизнес-приложений. В этом месяце эвентов будет два, один из которых будет проходить впервые. Ну и без бесплатных возможностей сдать наши сертификационные экзамены как всегда не обошлось. Заглядывайте под кат!

1. Основы Microsoft Power Platform

10 марта, на английском с субтитрами на русском.

Виртуальный учебный день Microsoft Power Platform: Основы охватит все, что вам нужно знать о создании инновационных бизнес-решений и управлении ими, чтобы ваша организация была готова ко всему, что будет в будущем. Вы узнаете, как связать свои данные для анализа эффективности бизнеса в режиме реального времени, действовать на основе данных и аналитики с помощью специально созданных приложений, а также автоматизировать рабочие процессы для улучшения работы людей как удаленно, так и в офисе. Этот тренинг научит вас создавать инновационные, перспективные решения для развивающейся бизнес-среды.

Во время этого учебного мероприятия вы узнаете, как:

  • Подготовиться к сертификационному экзамену по основам Microsoft Power Platform

  • Создавать инновационные бизнес-решения и управлять ими с помощью Power Platform

  • Легко подключать все свои данные для анализа эффективности бизнеса с помощью специализированных приложений

  • Автоматизировать рабочие процессы для улучшения повседневных процессов независимо от ваших технических знаний

После прохождения этого бесплатного обучения вы сможете бесплатно сдать сертификационный экзамен по основам Microsoft Power Platform.

Подробности и регистрация.

2. Как активировать цифровые продажи (NEW)

31 марта, на английском с субтитрами на русском.

Сегодняшний мир, который становится все более цифровизованным, требует гибкой стратегии электронной коммерции. Виртуальный учебный день Microsoft Dynamics 365: Activate Digital Selling предназначен для ознакомления с продуктами для маркетинга, продаж и коммерции, которые работают в унисон для создания удобного опыта цифровых покупок. Ваши новые навыки и обучение могут быть применены сразу же, чтобы способствовать конструктивному взаимодействию на всех этапах пути к покупке.

Во время этого учебного мероприятия вы узнаете, как:

  • Соответствовать ожиданиям клиентов - от маркетинга до продаж и электронной коммерции

  • Использовать ИИ с помощью надстройки Dynamics 365 Sales Insights и Dynamics 365 Customer Insights

  • Получить навыки и знания, необходимые для сертификации Dynamics 365 в Microsoft Learn

Подробности и регистрация.

Подробнее..

Пример модели знаний о требованиях

01.03.2021 12:17:20 | Автор: admin

Зачем нужна модель знаний

За уже несколько десятков лет существования индустрии информационных технологий создана значительная теоретическая база. Множеством ассоциаций и организаций разработаны своды знаний и методологии в различных областях.

Вот некоторые из них:

  • BABOK (A Guide to the Business Analysis Body of Knowledge) - руководство к своду знаний по бизнес-анализу от Международного института IIBA (International Institute of Business Analysis)

  • SWEBOK (Software Engineering Body of Knowledge) - международный стандарт ISO/IEC TR 19759 от 2015 г., в котором описана общепринятая сумма знаний о программной инженерии

  • SEBOK (Systems Engineering Body of Knowledge) - свод знаний в области системной инженерии, разработанный организацией BKCASE, которая контролируется Управляющим советом, состоящим из трех ассоциаций (т.е. Международного совета по системной инженерии, Центра исследований системной инженерии и Компьютерного общества IEEE)

  • BPM CBOK (Guide to the Business Process Management Body of Knowledge) - свод знаний по управлению бизнес-процессами Ассоциации профессионалов управления бизнес-процессами (ABPMP)

  • PMBOK (Project Management Body Of Knowledge) - свод профессиональных знаний по управлению проектами института управления проектами PMI

  • сертификация IREB CPRE (certification in Requirements Engineering) Foundation Level - методология инженерии требований сообщества IREB.

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

На текущий момент существует множество способов представления знаний: семантические сети, фреймы, языки и нотации и др. (Википедия).

Один из этих способов можно было бы использовать для конспектирования изученного материала в виде модели знаний с целью:

  • извлечь существенные понятия о концепциях, описанных в своде знаний

  • получить структурированное системное представление о связях между концепциями

  • обеспечить быстрый доступ к изученной информации, чтобы в дальнейшем быстро и удобно использовать ее в работе.

Что должна включать модель знаний

Cводы знаний и методологии инженерии требований и системного анализа описывают процессы, техники и подходы, применяемые в проектировании и создании информационных систем.

А раз это процессы, то классический подход к такой модели - ответить на основные вопросы:

  • кто? - какие действующие лица с какими наборами компетенций выполняют активности в процессах

  • как? - какие активности, техники и события включают в себя процессы, в какой последовательности выполняются; кроме описания самих активностей важно отразить:

    • ключевые принципы, на которых базируются активности

    • ключевые свойства и аспекты активностей

    • основные ограничения

    • определения и факты, связанные с процессами

  • что? - какие поставляемые результаты и прочие сущности являются результатом активностей или поступают на вход активностей

  • зачем? - какую ценность вносят активности и процессы в общий процесс инженерии требований и системного анализа.

Кроме того, между концептами системы важно отразить связи:

  • структурные - отношение к группе, связь части и общего

  • зависимости - влияние концептов друг на друга или операции, связывающие концепты друг с другом

  • динамические - обозначить последовательность выполнения, направление потока информации

  • обобщение и специализация - связь между абстрактным и конкретным представлением одного концепта, отразить наследование.

Archimate для представления знаний

Для практической реализации модели потребуется простой и удобный в использовании инструмент, который смог бы визуально (в графической форме) представить выявленные концепции, определения и связи.

Далее описана попытка представить методологию инженерии требований сообщества IREB в виде модели знаний в нотации ArchiMate.

Нотация ArchiMate предназначена для описания архитектуры информационных систем, имеет собственное бесплатное кросс-платформенное программное обеспечение и описывает широкий спектр аспектов информационных систем на различных слоях (уровнях абстракции) системы: стратегия, бизнес, приложения, технологии, производство, реализация и переходы, мотивация. Позволяет описать пассивную и активную структуру системы, ее поведение, различные типы связей между элементами.

Некоторые примеры описания модели знаний элементами нотации Archimate:

1. Активности, группы активностей и связи между ними

Цель описания: ответить на вопрос Как? - описать последовательность и структуру выполняемых в процессе активностей, а так же применяемые техники.

С помощью элемента слоя реализации Пакет работ (Work Package) можно отразить активности и техники используемые в процессах.

Связь Композиция (Composition) отражает то, что одна активность является частью более крупной группы активностей. Связь Триггер (Triggering) позволяет отобразить последовательность выполнения активностей.

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

Элемент Ценность (Value) позволяет указать ценность или преимущества использования активности в общем процессе и ответить на вопрос модели Зачем?.

2. Результаты активностей

Цель описания: ответить на вопрос Что? - описать основные ключевые результаты активностей и процессов, информационные потоки.

Результаты активностей описываются элементом Поставляемые результаты (Deliverable).

С помощью связи Реализация (Realization) отражается - какая активность создает поставляемые результаты. Связь Доступ (Access) позволяет показать чтение или запись информации из/в поставляемые результаты. Связь Поток отражает факт передачи информации (без конкретизации сущностей) между активностями или событиям.

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

3. Свойства активностей

Цель описания: отразить основные принципы, свойства, ограничения и аспекты активностей, а так же определения, связанные с ними.

Используя элементы слоя мотивации ArchiMate можно описать ключевые свойства, аспекты, определения и ограничения, связанные с активностями и поставляемыми результатами системы.

С помощью элемента Требование (Requirement) описываются свойства или аспекты, связанные с активностью или поставляемыми результатами процесса. Элемент Принцип (Principle) позволяет описать ключевые принципы, связанные с активностью. Элемент Понятие (Meaning) можно использовать для описания ключевых понятий и определений.

С помощью связи Ассоциация (Association) описанные артефакты связываются с активностями и поставляемыми результатами.

Например, процесс инженерии требований имеет Ключевые аспекты процесса RE (декомпозируются в отдельном представлении) и основывается на девяти ключевых принципах. Принцип 4. Контекст связан с концептом Контекст (само определение дано в описании элемента).

Факторы, каким то образом ограничивающие пространство свойств или оказывающие влияние на свойство отражаются элементом Ограничение (Constraint), а само влияние отражается связью Влияние (Influence).

4. Взаимосвязи между активностями и выполняющими их сущностями: роль или актор являются ответственными или выполняют некоторые активности

Цель описания: ответить на вопрос Кто? - описать наборы компетенций и основных действующих лиц, участвующих в процессах.

Элемент Роль (Business Role) позволяет отразить набор компетенций или зону ответственности, связанных с активностью. Элемент Актор (Business Actor) представляет бизнес-сущность, выполняющую активность. Это может быть как конкретное лицо, так и структурные единицы, например, подразделения.

С помощью связи Назначение (Assignment) устанавливается связь между соответствующим активным элементом и активностью, им выполняемой.

Например, Заинтересованные стороны формируют Потребность в изменениях, запускающую процесс инженерии требований, который выполняет роль Инженер по требованиям, обладающая некоторым набором компетенций (указаны в описании).

5. Структурные связи между сущностями. Обобщение и специализация

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

С использованием связи Композиция (Composition) отображаются случаи, когда один элемент является неотъемлемой частью другого (не может существовать без него). Например, активность по обучению пользователей является частью процесса выбора CASE-инструмента.

Отразить связь между абстрактным концептом и его конкретными реализациям позволяет связь Специализация (Specialization). Например, к концепту Модель относятся модели системного контекста, которые в свою очередь могут быть реализованы как DFD-диаграммы или UML-варианты использования.

6. Что еще может Archi

К каждому элементу может быть составлено описание или дано текстовое уточнение.

В состав ArchiMate входит инструмент для просмотра всех связей выбранного элемента. Глубина связей может настраиваться.

В состав Archi входит плагин, который позволяет выгрузить модель в html-формат для размещения на сайте с минимальными доработками. В формате реализована навигация по модели: переходы от представления к представлению по щелчку на ссылку представления, отображение описания по выбранным элементам.

Заключение

Методология инженерии требований сообщества IREB описана моделью представления знаний в формате ArchiMate. Результат здесь:

Что удалось:

  • в графической форме представить знания об инженерии требований

  • выделить основные концепции, связи между ними и зафиксировать описание ключевых определений

  • реализовать простой и удобный доступ к модели в интернете.

Какие остались вопросы:

  • для описания активностей и поставляемых результатов использованы элементы реализации, что ограничивает применение типов связей между элементами схемы; возможно было бы лучше использовать элементы для описания бизнес-процессов

  • область применения модели - достаточность для описания других областей знаний системного анализа

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

Подробнее..

Вебинар Стандарт С20 обзор новых возможностей C, введённых Стандартом C20

17.02.2021 14:23:34 | Автор: admin
25 февраля Яндекс.Практикум проводит открытый вебинар Стандарт С++20. Приглашаем разработчиков С++, которые хотят использовать последние возможности языка, а также программистов на других языках, которые хотят узнать, какие преимущества даёт разработка на C++.

На вебинаре максимально кратко и содержательно расскажем о новых фичах Стандарта: зачем они нужны, насколько они круты, когда и для чего их можно будет использовать в своих программах. Особое внимание уделим модулям, концептам, диапазонам (Ranges), корутинам и трёхстороннему сравнению. Также поговорим и об остальных нововведениях.

Вебинар будет состоять из двух частей: 70 минут обзор новых возможностей, 20 минут ответы на вопросы.



В программе


  1. Краткая история Стандартов. Что привело к C++20.
  2. Модули как новая эпоха языка:
    Долгожданный документ принят панацея или ошибка?
    Как С++ преодолевает 30-летнее отставание.
    Как сломать систему сборки.
  3. Оператор космического корабля:
    Один за шестерых, но это ещё не всё.
    Порядки в C++ выходят на новый уровень.
  4. Концепты и констрейнты. Средство от криптографических ошибок на 10000 строк или нечто большее?
  5. Ranges. Просто адекватная замена парам итераторов или новый стиль в программировании?
  6. Корутины:
    Что это, и почему их время ещё не пришло.
    Как сломать отладчик.
  7. Приятные и важные мелочи. Краткий обзор других фич Стандарта:
    Designated initializers, инициализаторы в Ranged-for, span, календарь, format, шаблонные лямбды и другое.
    Что ещё дал нам C++20.
  8. Будущее. Чего ожидать от C++ дальше.

Ведущий


Вебинар проведёт Георгий Осипов автор факультета Разработчик C++ в Яндекс.Практикуме, разработчик в Лаборатории компьютерной графики и мультимедиа ВМК МГУ.

Вебинар пройдёт 25 февраля в 19.30 (Мск).
Бесплатная регистрация.
Подробнее..

Машина опорных векторов в 30 строчек

27.02.2021 16:15:57 | Автор: admin
В этой статье я расскажу как написать свою очень простую машину опорных векторов без scikit-learn или других библиотек с готовой реализацией всего в 30 строчек на Python. Если вам хотелось разобраться в алгоритме SMO, но он показался слишком сложным, то эта статья может быть вам полезна.



Невозможно объяснить, что такое Матрица машина опорных векторов Ты должен увидеть это сам.



Узнав, что на Хабре есть возможность вставлять медиаэлементы, я создал небольшое демо (если вдруг не сработает можно ещё попытать счастья с версией на гитхабе [1]). Поместите на плоскость (пространство двух фич $X$ и $Y$) несколько красных и синих точек (это наш датасет) и машина произведёт классификацию (каждая точка фона закрашивается в зависимости от того, куда был бы классифицирован соответствующий запрос). Подвигайте точки, поменяйте ядро (советую попробовать Radial Basis Functions) и твёрдость границы (константа $C$). Мои извинения за ужасный код на JS писал на нём всего несколько раз в жизни, чтобы разобраться в алгоритме используйте код на Python далее в статье.

Содержание



  • В следующем разделе я бегло опишу математическую постановку задачи обучения машины опорных векторов, к какой задаче оптимизации она сводится, а также некоторые гиперпараметры, позволяющие регулировать работу алгоритма. Этот материал лишь подводящий к нашей конечной цели и нужен чтобы вспомнить ключевые факты, если такое напоминание не требуется можете его пропустить без ущерба для понимания дальнейших частей. Если же вы ранее не сталкивались с машинами опорных векторов, то понадобиться куда более полное изложение обратите внимание на соответствующую лекцию уже ставшего классикой курса Воронцова [2] или на десятую лекцию курса [3], в которую, кстати, входит представленный ниже метод.
  • В разделе Алгоритм SMO я подробно расскажу как решить поставленную задачу минимизации упрощенным методом SMO и в чём, собственно, состоит упрощение. Будут выкладки, но их объём гораздо меньше, чем в тех подходах к SMO, что доводилось видеть мне.
  • Наконец, в разделе Реализация будет представлен код классификатора на Python и схема обучения в псевдокоде.
  • Узнать насколько алгоритм удался можно в разделе Сравнение с sklearn.svc.svm там приведено визуальное сравнение для небольших датасетов в 2D и confusion matrix для двух классов из MNIST.
  • А в Заключении что-нибудь да заключим.



Машина опорных векторов



Машина опорных векторов метод машинного обучения (обучение с учителем) для решения задач классификации, регрессии, детектирования аномалий и т.д. Мы рассмотрим ее на примере задачи бинарной классификации. Наша обучающая выборка набор векторов фич $\boldsymbol{x}_i$, отнесенных к одному из двух классов $y_i = \pm 1$. Запрос на классификацию вектор $\boldsymbol{x}$, которому мы должны приписать класс $+1$ или $-1$.

В простейшем случае классы обучающей выборки можно разделить проведя всего одну прямую как на рисунке (для большего числа фич это была бы гиперплоскость). Теперь, когда придёт запрос на классификацию некоторой точки $\boldsymbol{x}$, разумно отнести её к тому классу, на чьей стороне она окажется.

Как выбрать лучшую прямую? Интуитивно хочется, чтобы прямая проходила посередине между классами. Для этого записывают уравнение прямой как $\boldsymbol{x} \cdot \boldsymbol{w} + b = 0$ и масштабируют параметры так, чтобы ближайшие к прямой точки датасета удовлетворяли $\boldsymbol{x} \cdot \boldsymbol{w} + b = \pm 1$ (плюс или минус в зависимости от класса) эти точки и называют опорными векторами.

В таком случае расстояние между граничными точками классов равно $2/|\boldsymbol{w}|$. Очевидно, мы хотим максимизировать эту величину, чтобы как можно более качественно отделить классы. Последнее эквивалентно минимизации $\frac{1}{2} |\boldsymbol{w}|^2$, полностью задача оптимизации записывается

$ \begin{aligned} &\min \frac{1}{2} |\boldsymbol{w}|^2 \\ \text{subject to: } &y_i \left(\boldsymbol{x}_i \cdot \boldsymbol{w} + b\right) - 1 \geq 0. \end{aligned} $

Если её решить, то классификация по запросу $\boldsymbol{x}$ производится так

$ \text{class}(\boldsymbol{x}) = \text{sign}\left(\boldsymbol{x} \cdot \boldsymbol{w} + b\right). $

Это и есть простейшая машина опорных векторов.

А что делать в случае когда точки разных классов взаимно проникают как на рисунке?

Мы уже не можем решить предыдущую задачу оптимизации не существует параметров удовлетворяющих тем условиям. Тогда можно разрешить точкам нарушать границу на величину $\xi_i \geq 0$, но также желательно, чтобы таких нарушителей было как можно меньше. Этого можно достичь с помощью модификации целевой функции дополнительным слагаемым (регуляризация $L_1$):

$ \begin{aligned} &\min\left( \frac{1}{2} |\boldsymbol{w}|^2 + C \sum_i \xi_i \right)\\ \text{subject to: }&\xi_i + y_i \left(\boldsymbol{x}_i \cdot \boldsymbol{w} + b\right) - 1 \geq 0,\\ &\xi_i \geq 0, \end{aligned} $

а процедура классификации будет производиться как прежде. Здесь гиперпараметр $C$ отвечает за силу регуляризации, то есть определяет, насколько строго мы требуем от точек соблюдать границу: чем больше $C$ тем больше $\xi_i$ будет обращаться в ноль и тем меньше точек будут нарушать границу. Опорными векторами в таком случае называют точки, для которых $\xi_i > 0$.

А что если обучающая выборка напоминает логотип группы The Who и точки ни за что нельзя разделить прямой?

Здесь нам поможет остроумная техника трюк с ядром [4]. Однако, чтобы ее применить, нужно перейти к так называемой двойственной (или дуальной) задаче Лагранжа. Детальное ее описание можно посмотреть в Википедии [5] или в шестой лекции курса [3]. Переменные, в которых решается новая задача, называют дуальными или множителями Лагранжа. Дуальная задача часто проще изначальной и обладает хорошими дополнительными свойствами, например, она вогнута даже если изначальная задача невыпуклая. Хотя ее решение не всегда совпадает с решением изначальной задачи (разрыв двойственности), но есть ряд теорем, которые при определённых условиях гарантируют такое совпадение (сильная двойственность). И это как раз наш случай, так что можно смело перейти к двойственной задаче

$ \begin{aligned} &\max_{\lambda} \sum_{i=1}^n \lambda_i - \frac12 \sum_{i=1}^n \sum_{j=1}^n y_i y_j (\boldsymbol{x}_i \cdot \boldsymbol{x}_j) \lambda_i \lambda_j,\\ \text{subject to: } &0 \leq \lambda_i \leq C, \quad \mbox{ for } i=1, 2, \ldots, n,\\ &\sum_{i=1}^n y_i \lambda_i = 0, \end{aligned} $

где $\lambda_i$ дуальные переменные. После решения задачи максимизации требуется ещё посчитать параметр $b$, который не вошёл в двойственную задачу, но нужен для классификатора

$ b = \mathbb{E}_{k,\xi_k \neq 0}\left[y_k - \sum_i \lambda_i y_i (\boldsymbol{x}_i \cdot \boldsymbol{x}_k)\right]. $

Классификатор можно (и нужно) переписать в терминах дуальных переменных

$ \text{class}(\boldsymbol{x}) = \text{sign}(f(\boldsymbol{x})),\quad f(\boldsymbol{x}) = \sum_i \lambda_i y_i (\boldsymbol{x}_i \cdot \boldsymbol{x}) + b. $

В чём преимущество этой записи? Обратите внимание, что все векторы из обучающей выборки входят сюда исключительно в виде скалярных произведений $(\boldsymbol{x}_i \cdot \boldsymbol{x}_j)$. Можно сначала отобразить точки на поверхность в пространстве большей размерности, и только затем вычислить скалярное произведение образов в новом пространстве. Зачем это делать видно из рисунка.

При удачном отображении образы точек разделяются гиперплоскостью! На самом деле, всё ещё лучше: отображать-то и не нужно, ведь нас интересует только скалярное произведение, а не конкретные координаты точек. Так что всю процедуру можно эмулировать, заменив скалярное произведение функцией $K(\boldsymbol{x}_i; \boldsymbol{x}_j)$, которую называют ядром. Конечно, быть ядром может не любая функция должно хотя бы гипотетически существовать отображение $\varphi$, такое что $K(\boldsymbol{x}_i; \boldsymbol{x}_j)=(\varphi(\boldsymbol{x}_i) \cdot \varphi(\boldsymbol{x}_j))$. Необходимые условия определяет теорема Мерсера [6]. В реализации на Python будут представлены линейное ($K(\boldsymbol{x}_i; \boldsymbol{x}_j) = \boldsymbol{x}_i^T \boldsymbol{x}_j$), полиномиальное ($K(\boldsymbol{x}_i; \boldsymbol{x}_j) = (\boldsymbol{x}_i^T \boldsymbol{x}_j)^d$) ядра и ядро радиальных базисных функций ($K(\boldsymbol{x}_i; \boldsymbol{x}_j) = e^{-\gamma |\boldsymbol{x}_i - \boldsymbol{x}_j|^2}$). Как видно из примеров, ядра могут привносить свои специфические гиперпараметры в алгоритм, что тоже будет влиять на его работу.

Возможно, вы видели видео, где действие гравитации поясняют на примере натянутой резиновой пленки в форме воронки [7]. Это работает, так как движение точки по искривленной поверхности в пространстве большой размерности эквивалентно движению её образа в пространстве меньшей размерности, если снабдить его нетривиальной метрикой. Фактически, ядро искривляет пространство.


Алгоритм SMO



Итак, мы у цели, осталось решить дуальную задачу, поставленную в предыдущем разделе

$ \def\M{{\color{red}M}} \def\L{{\color{blue}L}} \begin{aligned} &\max_{\lambda} \sum_{i=1}^n \lambda_i - \frac12 \sum_{i=1}^n \sum_{j=1}^n y_i y_j K(\boldsymbol{x}_i; \boldsymbol{x}_j) \lambda_i \lambda_j,\\ \text{subject to: } &0 \leq \lambda_i \leq C, \quad \mbox{ for } i=1, 2, \ldots, n,\\ &\sum_{i=1}^n y_i \lambda_i = 0, \end{aligned} $

после чего найти параметр

$ b = \mathbb{E}_{k,\xi_k \neq 0}[y_k - \sum_i \lambda_i y_i K(\boldsymbol{x}_i; \boldsymbol{x}_k)], \tag{1} $

а классификатор примет следующий вид

$ \text{class}(\boldsymbol{x}) = \text{sign}(f(\boldsymbol{x})),\quad f(\boldsymbol{x}) = \sum_i \lambda_i y_i K(\boldsymbol{x}_i; \boldsymbol{x}) + b. \tag{2} $

Алгоритм SMO (Sequential minimal optimization, [8]) решения дуальной задачи заключается в следующем. В цикле при помощи сложной эвристики ([9]) выбирается пара дуальных переменных $\lambda_\M$ и $\lambda_\L$, а затем по ним минимизируется целевая функция, с условием постоянства суммы $inline$y_\M\lambda_\M + y_\L\lambda_\L$inline$ и ограничений $0 \leq \lambda_\M \leq C$, $0 \leq \lambda_\L \leq C$ (настройка жёсткости границы). Условие на сумму сохраняет сумму всех $y_i\lambda_i$ неизменной (ведь остальные лямбды мы не трогали). Алгоритм останавливается, когда обнаруживает достаточно хорошее соблюдение так называемых условий ККТ (Каруша-Куна-Такера [10]).

Я собираюсь сделать несколько упрощений.
  • Откажусь от сложной эвристики выбора индексов (так сделано в курсе Стэнфордского университета [11]) и буду итерировать по одному индексу, а второй выбирать случайным образом.
  • Откажусь от проверки ККТ и буду выполнять наперёд заданное число итераций.
  • В самой процедуре оптимизации, в отличии от классической работы [9] или стэнфордского подхода [11], воспользуюсь векторным уравнением прямой. Это существенно упростит выкладки (сравните объём [12] и [13]).

Теперь к деталям. Информацию из обучающей выборки можно записать в виде матрицы

$ \boldsymbol{K} = \begin{pmatrix} y_1 y_1 K(\boldsymbol{x}_1; \boldsymbol{x}_1) & y_1 y_2 K(\boldsymbol{x}_1; \boldsymbol{x}_2) & \dots & y_1 y_N K(\boldsymbol{x}_1; \boldsymbol{x}_N) \\ y_2 y_1 K(\boldsymbol{x}_2; \boldsymbol{x}_1) & y_2 y_2 K(\boldsymbol{x}_2; \boldsymbol{x}_2) & \dots & y_2 y_N K(\boldsymbol{x}_2; \boldsymbol{x}_N) \\ \cdots & \cdots & \cdots & \cdots \\ y_N y_1 K(\boldsymbol{x}_N; \boldsymbol{x}_1) & y_N y_2 K(\boldsymbol{x}_N; \boldsymbol{x}_2) & \dots & y_N y_N K(\boldsymbol{x}_N; \boldsymbol{x}_N) \\ \end{pmatrix}. \tag{3} $

В дальнейшем я буду использовать обозначение с двумя индексами ($\boldsymbol{K}_{i,j}$), чтобы обратиться к элементу матрицы и с одним индексом ($\boldsymbol{K}_{k}$) для обозначения вектора-столбца матрицы. Дуальные переменные соберём в вектор-столбец $\boldsymbol{\lambda}$. Нас интересует

$ \max_{\boldsymbol{\lambda}} \underbrace{ \sum_{i=1}^n \lambda_i - \frac12 \boldsymbol{\lambda}^T \boldsymbol{K} \boldsymbol{\lambda} }_{\mathscr{L}}. $

Допустим, на текущей итерации мы хотим максимизировать целевую функцию по индексам $\L$ и $\M$. Мы будем брать производные, поэтому удобно выделить слагаемые, содержащие индексы $\L$ и $\M$. Это просто сделать в части с суммой $\lambda_i$, а вот квадратичная форма потребует несколько преобразований.

При расчёте $\boldsymbol{\lambda}^T \boldsymbol{K} \boldsymbol{\lambda}$ суммирование производится по двум индексам, пускай $i$ и $j$. Выделим цветом пары индексов, содержащие $\L$ или $\M$.



Перепишем задачу, объединив всё, что не содержит $\lambda_\L$ или $\lambda_\M$. Чтобы было легче следить за индексами, обратите внимание на $\boldsymbol{K}$ на изображении.

$$display$$ \begin{aligned} \mathscr{L} &= \lambda_\M + \lambda_\L - \sum_{j} \lambda_\M \lambda_j K_{\M,j} - \sum_{i} \lambda_\L \lambda_i K_{\L,i} + \text{const} + \\ {\text{компенсация}\atop\text{двойного подсчета}} \rightarrow\qquad &+ \frac{1}{2}\lambda_\M^2 K_{\M,\M} + \lambda_\M \lambda_\L K_{\M,\L} + \frac{1}{2}\lambda_\L^2 K_{\L,\L} = \\ &= \lambda_\M \left(1-\sum_{j} \lambda_j K_{\M,j}\right) + \lambda_\L \left(1-\sum_{i} \lambda_i K_{\L,i}\right)+\\ &+\frac{1}{2}\left(\lambda_\M^2 K_{\M,\M} + 2 \lambda_\M \lambda_\L K_{\M,\L}+\lambda_\L^2 K_{\L,\L} \right) + \text{const} = \\ &=\boldsymbol{k}^T_0 \boldsymbol{v}_0 + \frac{1}{2}\boldsymbol{v}^{\,T}_0 \, \boldsymbol{Q} \, \boldsymbol{v}_0 + \text{const}, \end{aligned} $$display$$

где $\text{const}$ обозначает слагаемые, не зависящие от $\lambda_\L$ или $\lambda_\M$. В последней строке я использовал обозначения

$$display$$ \begin{align} \boldsymbol{v}_0 &= (\lambda_\M, \lambda_\L)^T, \tag{4a}\\ \boldsymbol{k}_0 &= \left(1 - \boldsymbol{\lambda}^T\boldsymbol{K}_{\M}, 1 - \boldsymbol{\lambda}^T\boldsymbol{K}_{\L}\right)^T, \tag{4b}\\ \boldsymbol{Q} &= \begin{pmatrix} K_{\M,\M} & K_{\M,\L} \\ K_{\L,\M} & K_{\L,\L} \\ \end{pmatrix},\tag{4c}\\ \boldsymbol{u} &= (-y_\L, y_\M)^T. \tag{4d} \end{align} $$display$$

Обратите внимание, что $\boldsymbol{k}_0 + \boldsymbol{Q} \boldsymbol{v}_0$ не зависит ни от $\lambda_\L$, ни от $\lambda_\M$

$$display$$ \boldsymbol{k}_0 = \begin{pmatrix} 1 - \lambda_\M K_{\M,\M} - \lambda_\L K_{\M,\L} - \sum_{i \neq \M,\L} \lambda_i K_{\M,i}\\ 1 - \lambda_\M K_{\L,\M} - \lambda_\L K_{\L,\L} - \sum_{i \neq \M,\L} \lambda_i K_{\L,i}\\ \end{pmatrix} = \begin{pmatrix} 1 - \sum_{i \neq \M,\L} \lambda_i K_{\M,i}\\ 1 - \sum_{i \neq \M,\L} \lambda_i K_{\L,i}\\ \end{pmatrix} - \boldsymbol{Q} \boldsymbol{v}_0. $$display$$

Ядро симметрично, поэтому $\boldsymbol{Q}^T = \boldsymbol{Q}$ и можно записать

$ \mathscr{L} = (\boldsymbol{k}_0 + \boldsymbol{Q} \boldsymbol{v}_0 - \boldsymbol{Q} \boldsymbol{v}_0)^T \boldsymbol{v}_0 + \frac{1}{2}\boldsymbol{v}^{\,T}_0 \, \boldsymbol{Q} \, \boldsymbol{v}_0 + \text{const} = (\boldsymbol{k}_0 + \boldsymbol{Q} \boldsymbol{v}_0)^T \boldsymbol{v}_0 - \frac{1}{2} \boldsymbol{v}^{\,T}_0 \, \boldsymbol{Q} \, \boldsymbol{v}_0 + \text{const} $

Мы хотим выполнить максимизацию так, чтобы $inline$y_\L\lambda_\L + y_\M\lambda_\M$inline$ осталось постоянным. Для этого новые значения должны лежать на прямой

$$display$$ (\lambda_\M^\text{new}, \lambda_\L^\text{new})^T = \boldsymbol{v}(t) = \boldsymbol{v}_0 + t \boldsymbol{u}. $$display$$

Несложно убедиться, что для любого $t$

$$display$$ y_\M\lambda_\M^\text{new} + y_\L\lambda_\L^\text{new} = y_\M \lambda_\M + y_\L \lambda_\L + t (-y_\M y_\L + y_\L y_\M) = y_\M\lambda_\M + y_\L\lambda_\L. $$display$$

В таком случае мы должны максимизировать

$ \mathscr{L}(t) = (\boldsymbol{k}_0 + \boldsymbol{Q} \boldsymbol{v}_0)^T \boldsymbol{v}(t) - \frac12 \boldsymbol{v}^{\,T}(t) \, \boldsymbol{Q} \, \boldsymbol{v}(t) + \text{const}, $

что легко сделать взяв производную

$ \begin{align} \frac{d \mathscr{L}(t)}{d t} = (\boldsymbol{k}_0 + \boldsymbol{Q} \boldsymbol{v}_0)^T \frac{d \boldsymbol{v}}{dt} &- \frac12 \left(\frac{d(\boldsymbol{v}^{\,T} \, \boldsymbol{Q} \, \boldsymbol{v})}{d \boldsymbol{v}}\right)^T \frac{d\boldsymbol{v}}{d t} =\\ &= \boldsymbol{k}_0^T \boldsymbol{u} + \underbrace{\boldsymbol{v}_0^T \boldsymbol{Q}^T \boldsymbol{u} - \boldsymbol{v}^T \boldsymbol{Q}^T \boldsymbol{u}}_{(\boldsymbol{v}_0^T - \boldsymbol{v}^T)\boldsymbol{Q} \boldsymbol{u}} = \boldsymbol{k}_0^T \boldsymbol{u} - t \boldsymbol{u}^T \boldsymbol{Q} \boldsymbol{u}. \end{align} $

Приравнивая производную к нулю, получим

$ t_* = \frac{\boldsymbol{k}^T_0 \boldsymbol{u}}{\boldsymbol{u}^{\,T} \boldsymbol{Q} \boldsymbol{u}}. \tag{5} $

И ещё одно: возможно мы заберёмся дальше чем нужно и окажемся вне квадрата как на картинке. Тогда нужно сделать шаг назад и вернуться на его границу

$$display$$ (\lambda_\M^\text{new}, \lambda_\L^\text{new}) = \boldsymbol{v}_0 + t_*^{\text{restr}} \boldsymbol{u}. $$display$$

На этом итерация завершается и выбираются новые индексы.


Реализация



Принципиальную схему обучения упрощённой машины опорных векторов можно записать как



Давайте посмотрим на код на реальном языке программирования. Если вы не любите код в статьях, можете изучить его на гитхабе [14].

Исходный код упрощённой машины опорных векторов
import numpy as npclass SVM:  def __init__(self, kernel='linear', C=10000.0, max_iter=100000, degree=3, gamma=1):    self.kernel = {'poly'  : lambda x,y: np.dot(x, y.T)**degree,         'rbf': lambda x,y: np.exp(-gamma*np.sum((y-x[:,np.newaxis])**2,axis=-1)),         'linear': lambda x,y: np.dot(x, y.T)}[kernel]    self.C = C    self.max_iter = max_iter  # ограничение параметра t, чтобы новые лямбды не покидали границ квадрата  def restrict_to_square(self, t, v0, u):     t = (np.clip(v0 + t*u, 0, self.C) - v0)[1]/u[1]    return (np.clip(v0 + t*u, 0, self.C) - v0)[0]/u[0]  def fit(self, X, y):    self.X = X.copy()    # преобразование классов 0,1 в -1,+1; для лучшей совместимости с sklearn    self.y = y * 2 - 1     self.lambdas = np.zeros_like(self.y, dtype=float)    # формула (3)    self.K = self.kernel(self.X, self.X) * self.y[:,np.newaxis] * self.y        # выполняем self.max_iter итераций    for _ in range(self.max_iter):      # проходим по всем лямбда       for idxM in range(len(self.lambdas)):                                            # idxL выбираем случайно        idxL = np.random.randint(0, len(self.lambdas))                                 # формула (4с)        Q = self.K[[[idxM, idxM], [idxL, idxL]], [[idxM, idxL], [idxM, idxL]]]         # формула (4a)        v0 = self.lambdas[[idxM, idxL]]                                                # формула (4b)        k0 = 1 - np.sum(self.lambdas * self.K[[idxM, idxL]], axis=1)                   # формула (4d)        u = np.array([-self.y[idxL], self.y[idxM]])                                    # регуляризированная формула (5), регуляризация только для idxM = idxL        t_max = np.dot(k0, u) / (np.dot(np.dot(Q, u), u) + 1E-15)         self.lambdas[[idxM, idxL]] = v0 + u * self.restrict_to_square(t_max, v0, u)        # найти индексы опорных векторов    idx, = np.nonzero(self.lambdas > 1E-15)     # формула (1)    self.b = np.mean((1.0-np.sum(self.K[idx]*self.lambdas, axis=1))*self.y[idx])     def decision_function(self, X):    return np.sum(self.kernel(X, self.X) * self.y * self.lambdas, axis=1) + self.b  def predict(self, X):     # преобразование классов -1,+1 в 0,1; для лучшей совместимости с sklearn    return (np.sign(self.decision_function(X)) + 1) // 2



При создании объекта класса SVM можно указать гиперпараметры. Обучение производится вызовом функции fit, классы должны быть указаны как $0$ и $1$ (внутри конвертируются в $-1$ и $+1$, сделано для большей совместимости с sklearn), размерность вектора фич допускается произвольной. Для классификации используется функция predict.


Сравнение с sklearn.svm.SVC



Не то, чтобы данное сравнение имело особый смысл, ведь речь идёт о крайне упрощённом алгоритме, разработанном исключительно в целях обучения студентов, но всё же. Для тестирования (и чтобы посмотреть как этим всем пользоваться) можно выполнить следующее (этот код тоже есть на гитхаб [14])

Сравнение с sklearn.svm.SVC на простом двумерном датасете
from sklearn.svm import SVCimport matplotlib.pyplot as pltimport seaborn as sns; sns.set()from sklearn.datasets import make_blobs, make_circlesfrom matplotlib.colors import ListedColormapdef test_plot(X, y, svm_model, axes, title):  plt.axes(axes)  xlim = [np.min(X[:, 0]), np.max(X[:, 0])]  ylim = [np.min(X[:, 1]), np.max(X[:, 1])]  xx, yy = np.meshgrid(np.linspace(*xlim, num=700), np.linspace(*ylim, num=700))  rgb=np.array([[210, 0, 0], [0, 0, 150]])/255.0    svm_model.fit(X, y)  z_model = svm_model.decision_function(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)    plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn')  plt.contour(xx, yy, z_model, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])  plt.contourf(xx, yy, np.sign(z_model.reshape(xx.shape)), alpha=0.3, levels=2, cmap=ListedColormap(rgb), zorder=1)  plt.title(title)X, y = make_circles(100, factor=.1, noise=.1)fig, axs = plt.subplots(nrows=1,ncols=2,figsize=(12,4))test_plot(X, y, SVM(kernel='rbf', C=10, max_iter=60, gamma=1), axs[0], 'OUR ALGORITHM')test_plot(X, y, SVC(kernel='rbf', C=10, gamma=1), axs[1], 'sklearn.svm.SVC')X, y = make_blobs(n_samples=50, centers=2, random_state=0, cluster_std=1.4)fig, axs = plt.subplots(nrows=1,ncols=2,figsize=(12,4))test_plot(X, y, SVM(kernel='linear', C=10, max_iter=60), axs[0], 'OUR ALGORITHM')test_plot(X, y, SVC(kernel='linear', C=10), axs[1], 'sklearn.svm.SVC')fig, axs = plt.subplots(nrows=1,ncols=2,figsize=(12,4))test_plot(X, y, SVM(kernel='poly', C=5, max_iter=60, degree=3), axs[0], 'OUR ALGORITHM')test_plot(X, y, SVC(kernel='poly', C=5, degree=3), axs[1], 'sklearn.svm.SVC')



После запуска будут сгенерированы картинки, но так как алгоритм рандомизированный, то они будут слегка отличаться для каждого запуска. Вот пример работы упрощённого алгоритма (слева направо: линейное, полиномиальное и rbf ядра)

А это результат работы промышленной версии машины опорных векторов.

Если размерность $2$ кажется слишком маленькой, то можно ещё протестировать на MNIST

Сравнение с sklearn.svm.SVC на 2-х классах из MNIST
from sklearn import datasets, svmfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import confusion_matriximport matplotlib.pyplot as pltimport seaborn as snsclass_A = 3class_B = 8digits = datasets.load_digits()mask = (digits.target == class_A) | (digits.target == class_B)data = digits.images.reshape((len(digits.images), -1))[mask]target = digits.target[mask] // max([class_A, class_B]) # rescale to 0,1X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.5, shuffle=True)def plot_confusion(clf):  clf.fit(X_train, y_train)  y_fit = clf.predict(X_test)  mat = confusion_matrix(y_test, y_fit)  sns.heatmap(mat.T, square=True, annot=True, fmt='d', cbar=False, xticklabels=[class_A,class_B], yticklabels=[class_A,class_B])  plt.xlabel('true label')  plt.ylabel('predicted label');  plt.show()print('sklearn:')plot_confusion(svm.SVC(C=1.0, kernel='rbf', gamma=0.001))print('custom svm:')plot_confusion(SVM(kernel='rbf', C=1.0, max_iter=60, gamma=0.001))



Для MNIST я попробовал несколько случайных пар классов (упрощённый алгоритм поддерживает только бинарную классификацию), но разницы в работе упрощённого алгоритма и sklearn не обнаружил. Представление о качестве даёт следующая confusion matrix.




Заключение



Спасибо всем, кто дочитал до конца. В этой статье мы рассмотрели упрощённую учебную реализацию машины опорных векторов. Конечно, она не может состязаться с промышленным образцом, но благодаря крайней простоте и компактному коду на Python, а также тому, что все основные идеи SMO были сохранены, эта версия SVM вполне может занять своё место в учебной аудитории. Стоит отметить, что алгоритм проще не только весьма мудрёного алгоритма [9], но даже его упрощённой версии от Стэнфордского университета [11]. Все-таки машина опорных векторов в 30 строчках это красиво.

Список литературы



  1. https://fbeilstein.github.io/simplest_smo_ever/
  2. страница на http://www.machinelearning.ru
  3. Начала Машинного Обучения, КАУ
  4. https://en.wikipedia.org/wiki/Kernel_method
  5. https://en.wikipedia.org/wiki/Duality_(optimization)
  6. Статья на http://www.machinelearning.ru
  7. https://www.youtube.com/watch?v=MTY1Kje0yLg
  8. https://en.wikipedia.org/wiki/Sequential_minimal_optimization
  9. Platt, John. Fast Training of Support Vector Machines using Sequential Minimal Optimization, in Advances in Kernel Methods Support Vector Learning, B. Scholkopf, C. Burges, A. Smola, eds., MIT Press (1998).
  10. https://en.wikipedia.org/wiki/Karush%E2%80%93Kuhn%E2%80%93Tucker_conditions
  11. http://cs229.stanford.edu/materials/smo.pdf
  12. https://www.researchgate.net/publication/344460740_Yet_more_simple_SMO_algorithm
  13. http://fourier.eng.hmc.edu/e176/lectures/ch9/node9.html
  14. https://github.com/fbeilstein/simplest_smo_ever
Подробнее..

Что вам даст учеба у практиков, или почему наш курс по Flutter это про реальные проекты и навыки для работы

19.02.2021 18:05:42 | Автор: admin

Вот уже третий год мы разрабатываем на Flutter. Сделали на нём кроссплатформенные приложения для Росбанка, сети аптек Ригла, ресторанов KFC, в разработке ещё много проектов. Буквально на наших глазах Flutter из нишевой технологии стал мощным игроком, который теснит не только React Native, но и нативную разработку.

Бизнес поверил во Flutter. Всё больше компаний хотят приложения на этой технологии, потому что она позволяет существенно экономить при сохранении качества продукта.

Спрос на Flutter-разработчиков очень быстро растёт. Не хватает даже джунов, а у миддлов и сеньоров услуги стоят очень дорого. Толковые ребята нужны и нам.

Команда flutter в Surf собрала серьёзную базу знаний:

  • опыт реальных проектов;

  • наши статьи о Flutter, его особенностях и проектах на нем;

  • методология обучения стажёров;

  • open source библиотеки и наработки, которые мы выкладываем в публичном репозитории на Github.

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

Рынку нужны практики, поэтому основная задача курса это помочь студентам получить реальные знания, познакомиться с наработанными best practice, быстро войти в тему и перейти к реальным задачам.


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

Подробно о курсе можно почитать в статье.


Первый поток стартовал 3 месяца назад. За это время наши студенты не только прокачали свои практические навыки так, что скоро смогут стать Flutter-разработчиками на реальных проектах, но и здорово помогли в развитии курса. Их обратная связь, комментарии и советы стали бустом, который вывел курс на новый уровень.

И за это, ребята, большое вам спасибо!

5 марта стартует новый поток курса, и обновленная программа поможет будущим Flutter-разработчикам еще эффективней отработать практические навыки и освоить технологию.

Но давайте обо всем по порядку.

Можно ли изучить новую технологию самому, или почему практика важна?

Предположим, есть условный Егор. Он разработчик. Видит будущее за мобильными приложениями и хочет освоить новый стек. Ага, Flutter удобный и современный фреймворк для разработки приложений как под IOs, так и под Android, надо попробовать, - думает Егор.

Егор парень въедливый и неглупый, и скорей всего начнет он с документации, тем более, что она по Flutter очень хорошая. А ещё есть бесплатные курсы на разных образовательных платформах, которые тоже помогут составить представление о технологии.

И зачем тогда Егору платный курс? Тут все давно сказано за нас. Вспомним правило 10 000 часов, которое сформулировал психолог Андерс Эриксон чтобы добиться высокого уровня мастерства в своём деле, нужно посвятить практике не менее 10 000 часов. А ещё есть модель 70:20:10 Чарльза Дженнингса, в которой говорится о 70% практики, 20% - работы с наставником и 10% теории, которые необходимы для успешного освоения материала.

Документация и бесплатные курсы дадут Егору те самые 10%. Но одной теории мало для освоения технологии. Рынку нужны опытные разработчики, а не теоретики. И тут перед Егором встает резонный вопрос, как и где получить этот опыт. Отработать на практике под руководством ментора один из наиболее продуктивных вариантов. Именно такой формат мы предлагаем в своем курсе по Flutter.

Егор получит знания из первых рук. И это будут не просто лекции, а экспертиза и лучшие практики разработки из реальных проектов Surf на Flutter, которые дают опытные наставники. Обратная связь, код-ревью, рекомендации по конкретному проекту, как сделать лучше и исправить ошибку этого Егор не найдёт в документации. Но это точно пригодится ему в дальнейших проектах.

Вот что пишут студенты первого потока:

Основная ценность курса взаимодействие с наставниками. Тут дело не в сухой информации, которая и так есть в прекрасной документации flutter.

Этот курс отличная возможность глубоко разобраться в теме и понять, как устроена профессиональная разработка на flutter.

Домашние задания сдаются пулл-реквестами. Проверяют их по-взрослому от соответствия макету в figma до стиля кода. Смотрят код внимательно, замечают разные сомнительные архитектурные решения, проблемы с производительностью, подсказывают, как сделать лучше. Причем проверяют разные специалисты из команды surf.

Кирилл

Большой упор на практику, код ревью от тимлидов surf, и это очень круто. В каждой домашке отписывают более правильный код-стайл, лучшие подходы, отучают от го@нокода и всё в таком духе. Действительно стремятся сделать из вас хорошего разработчика!

Влас

Программа и для джуна, и для тимлида а так бывает?

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

  • начинающие разработчики;

  • тимлиды;

  • senior-разработчики крупных команд;

  • архитектор Frontend-разработки крупного банка.

Потребности у них тоже были разные. Кто-то хотел научиться Flutter-разработке для поиска работы по этой специальности. Кому-то он был нужен для имеющегося проекта. А кто-то просто стремится держать руку на пульсе технологий мобильной разработки.

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

Решить эту проблему нам помогли 2 механизма. Первый индивидуальный выбор уровня нагрузки. Студент может проходить курс с любой скоростью, делать объём, который ему комфортно по уровню знаний или ориентируясь на уровень занятости на работе.

А еще студенты отметили, что гораздо удобней, когда загрузка на курсе равномерная, практические задания примерно одного объема и уровня сложности. Поэтому по обратной связи от ребят за 3 месяца мы переработали более 20% курса. Простые задания дополнили, а слишком сложные переформулировали или разделили на части.

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

Второй механизм это много разных мастер-классов с элементами практики по темам, которые были актуальны ребятам. После первого мастер-класса по Figma и Swagger студенты предложили переделать программу мастер-классов так, чтобы каждый смог подобрать темы, которые актуальны для его уровня подготовки.

В итоге, больше половины тем мы переработали. И теперь их список выглядит так:

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

  • Тестирование Flutter приложений (unit-тестирование, автотесты)

  • Взаимодействие с нативным приложением

  • Обзор возможностей Flutter Web (чем отличается от нативных приложений, JS/HTML под капотом, безопасность веб-приложений, какие есть возможности и производительность, как работать с поисковой оптимизацией и индексацией, как подготовить к использованию в e-commerce)

  • Основы языка Kotlin

  • Основы языка Swift

  • Обзор возможностей Navigator 2.0

  • Обзор возможностей Flutter Desktop

  • Взаимодействие с платформой (Advanced)

  • DevTools Profiling (Advanced)

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

Спикеры мастер-классов это опытные практики, эксперты в области разработки. Например, одним из выступающих стал Михаил Зотьев, который рассказал про внутреннее устройство и архитектурные особенности Flutter. А на мастер-классе по Flutter Web студенты разбирали и задавали вопросы про тонкости и ограничения применения Flutter в вебе, которые, в принципе, известны мало кому в индустрии.

Главный вопрос

Обычно со стороны студентов он звучит так а с трудоустройством поможете?

Есть 2 возможных направления, в которых курс будет вам полезен.

Наполните портфолио

На рынке труда очень мало соискателей с интересными, а тем более масштабными проектами в портфолио. В основном это небольшие проекты, из которых сложно понять, что знает и умеет кандидат. Мы убедились в этом, когда за полгода изучили более 300 откликов на вакансии и провели более 60 собеседований.

Чтобы выделиться среди других кандидатов, показать работодателю, что вы умеете и знаете, нужен проект, максимально близкий к реальному. Поэтому выпускной проект курса - это на 100% практический кейс, вы сможете добавить его в портфолио и наглядно продемонстрировать опыт для работодателя.

Вы создадите мобильное приложение со списком интересных мест и достопримечательностей для путешествий по миру. Кейс максимально близок к реальным условиям работы в коммерческом проекте. Приложение состоит из 8 экранов. Всё по-взрослому описание требований от заказчика, дизайн-макет в Figma, серверная документация в Swagger.

Примеры экранов из практического кейса курса Flutter от Surf мобильное приложение со списком интересных мест и достопримечательностей для путешествий по мируПримеры экранов из практического кейса курса Flutter от Surf мобильное приложение со списком интересных мест и достопримечательностей для путешествий по миру

Разработку приложения вы ведёте в собственном репозитории. По мере продвижения по курсу проводите итерационный рефакторинг кода. Преподаватель делает ревью кода, контролирует, как вы используете EffectiveDart и best practice.

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

Что особенно понравилось и мне кажется очень важным, что идёт разработка приложения с нуля и последовательно по шагам. Особенно прикольно, когда что-то сделаешь, а потом на следующем задании надо всё переделать, потому что узнал новое. То есть это никак не разработка в стиле Лего по шагам к заданной цели. Тут по многу раз всё переделать можно. Как на реальном проекте, когда опыта ещё не набрался.

Виктор

Второе направление карьерные консультации

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

Лучшие студенты курса могут пойти на оплачиваемую стажировку в Surf. При е успешном прохождении вы сможете стать частью Surf Flutter team.

На языке цифр

По данным, собранным Кейт Джордан, исследовательницей в сфере образования и технологий, в среднем массовые открытые онлайн-курсы (MOOC) завершают около 15% поступивших.

По нашей статистике более 60% наших студентов работают над курсом ежедневно. Часть из них уже приближается к финальным этапам, а это показатель полезности программы для студентов.


Завершим отзывом студентки:

Про флаттер я узнала случайно, просматривая статьи Хабра и vc. Заинтересовалась, начала искать другие материалы и видео. Данная технология мне показалась очень привлекательной, поэтому следующим шагом была покупка курсов по Flutter и Dart на udemy.

Как только стартовал набор на курс у Surf, записалась сразу не раздумывая, так как компания является экспертом в этой области.

На мой взгляд, курс рассчитан не для новичков в программировании. Хорошо, что у меня есть небольшой бэкграунд + прошла предварительно купленные курсы. Отличием курса Surf от других является то, что у тебя постоянно работает мозг, как решить задачу, и никто, кроме тебя, её не решит и не покажут, как. Могут дать наводку, в какую сторону смотреть.

Дан макет приложения в Figma. Дан видеоурок со стандартной темой. Никакого секрета в уроке нет подобные материалы есть в документации и их полно в интернете. Но после каждого урока тебе надо сделать кусочек приложения, и практически всегда того, что показано в уроке, мало, чтобы решить задачу (а что-то мы ещё не проходили, и оно далеко в закрытых разделах). Приходится копаться в документации и других источниках информации. Пока не сделаешь, дальше двигаться не сможешь.

Курс для тех, кто не ленится и не опускает руки, когда что-то не получается. А опытные наставники поправят и направят в нужном направлении.

Татьяна


5 марта стартует новый поток курса по Flutter от команды Surf. Если хотите присоединиться и освоить разработку на Flutter на практике.

Регистрируйтесь на сайте

Подробнее..

Электронный документооборот, VR-тренинги и EdTech-стартапы какие TampD-проекты привлекают инвестиции

24.02.2021 00:19:22 | Автор: admin

Мы начали обсуждать трансформацию сферы образования и переход к Education 4.0, плюс сделали две подборки [первая, вторая] наиболее заметных training&development-стартапов.

Продолжаем знакомить вас с проектами, которым удалось привлечь венчурные инвестиции и закрыть крупные сделки в разгар кризиса. Расскажем, чем они занимаются [подобный опыт мы анализируем и в закрытом режиме в рамках нашей программы акселерации].

Фотография: Eddie Kopp. Источник: Unsplash.comФотография: Eddie Kopp. Источник: Unsplash.com

Strivr готовит кастомные VR-тренинги для компаний и спортивных команд помогает сотрудникам и игрокам отрабатывать различные ситуации в виртуальном сеттинге. Это могут быть как нестандартные моменты вроде действий при похищении товаров из магазина и нападении на кассира [такое обучение прошли тысячи менеджеров Verizon], так и работа с корпоративным оборудованием, знакомство с процессами его настройки и обслуживания.

Еще поддержание эмоциональной гигиены в коллективе и этикет взаимодействия с клиентами. Спортсменам решения Strivr позволяют обогатить тренировки и отрабатывать игровые комбинации в межсезонье для квотербека, выступающего в НФЛ, они исчисляются сотнями [компания упоминает такой кейс и говорит о сотрудничестве с командами НБА].

Чтобы соответствовать требованиям атлетов и бизнеса, Strivr делает ставку на контент, UX и сопоставление показателей в VR с тем, как обучающиеся ведут себя в жизненных обстоятельствах. Для такой аналитики и отслеживания результативности занятий Strivr производит айтрекинг в VR-среде и учитывает различные физиологические данные.

Проект запустили в 2015-м в стенах лаборатории Стэнфордского университета. Сейчас один только парк устройств Strivr насчитывает более 22 тыс. хедсетов [они распределены по клиентам BMW, JetBlue, Walmart, Verizon, другим компаниям и спортивным организациям], а команда может похвастаться 1,5 млн проведенных тренингов.

Для управления контентом и взаимодействия с заказчиками она разработала собственное программное решение и привлекла более 51 миллион долларов инвестиций на развитие бизнеса. Наиболее масштабные раунды пошли в прошлом и 2018-м году Strivr поднял 30 и 16 миллионов долларов соответственно.


Health Scholars это облачная платформа для VR-тренингов, которая опирается на методологии и алгоритмы сердечно-легочной реанимации, принятые такими организациями как Американская кардиологическая ассоциация и комитет Красного Креста. Эти процедуры входят в обязательные образовательные программы и инструктажи для медицинских работников. Темы занятий включают и ликвидацию чрезвычайных ситуаций вроде возгораний в операционной.

Управлять происходящим в виртуальном сеттинге и коммуницировать с NPC можно с помощью голосовых команд. По ходу прохождения уроков система будет готовить детальные отчеты с аналитикой по ключевым показателям эффективности.

Фотография: Piron Guillaume. Источник: Unsplash.comФотография: Piron Guillaume. Источник: Unsplash.com

Проект запустили в 2017-м силами бывших специалистов некоммерческой организации OSF, Optera Group, специализирующейся на визуализации медицинских данных, и Simcore Technologies, занимающейся образовательными системами в этой области. Их опыт позволил быстро разработать и выпустить первые VR-тренинги под брендом Health Scholars. А в прошлом году стартап получил венчурные инвестиции от медицинских и технологических фондов. Объем первого раунда составил 17 млн долларов. Средства направят на подготовку нового контента, его методологическое обоснование и привлечение корпоративных клиентов.


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

Команда работает над проектом с 2003 года и за это время получила более 66 млн долларов от ряда венчурных инвесторов. Одним из ключевых стал инвестбанк Raine Group он вкладывал средства в Parchment с 2012 года. Деньги компания использовала не только для финансирования разработок, но и для приобретения других организаций, развивающих решения для колледжей, обмена документами между образовательными организациями и откликов на вакансии. Одна из последних сделок прошла в конце 2019-го и состояла в объединении с прямым конкурентом Credentials Solutions. После этого Raine Group объявили об успешном выходе из проекта.

За время работы через Parchment прошло более 100 млн дипломов и транскриптовпройденных курсов сегодня площадка является одной из крупнейших в мире в данной нише.


Learnit+AcademyX покупка крупным вендором корпоративных курсов, воркшопов и программ сертификации относительно небольшого провайдера тренингов для технологических специалистов и офисных сотрудников. Профиль образовательных программ одной и другой компании достаточно близок, поэтому сделка позволит быстро расширить библиотеку Learnit и предложить теперь уже общим клиентам дополнительные возможности например, занятия по программированию на Python, курсы по Jira и продуктам Adobe Creative Suite. Всего покупатель получит более 650 корпоративных клиентов и расширит свое портфолио до двух тысяч партнеров, в число которых входит Netflix, Oracle, Visa и другие крупные бренды.

Фотография: Hitesh Choudhary. Источник: Unsplash.comФотография: Hitesh Choudhary. Источник: Unsplash.com

Для Learnit это первое приобретение, поэтому компания не торопится раскрывать детали. Однако можно предположить, что AcademyX могла обойтись ей как минимум в пару десятков миллионов долларов. За счет такой экспансии компания планирует захватить новые сегменты рынка T&D- и L&D-решений [learning&development]. Согласно оценкам экспертов, суммарный объем его североамериканской и европейской частей превышает 250 млрд долларов, что в свете спроса на массовую переподготовку специалистов можно рассматривать в качестве стартовой отметки. Высока вероятность того, что через пару лет значимость этой ниши оценят еще выше.


Smart Sparrow это примечательный EdTech-стартап из Австралии, который запустили десять лет назад. За это время команде удалось представить целый спектр тематических продуктов: от платформы для авторов образовательных программ и решений для издателей разнообразного контента до студии разработки кастомных курсов и продуктов для компаний-клиентов.

Вместе с этим команда привлекла 23,5 млн долларов, а в прошлом году проект выкупил Pearson один из крупнейших паблишеров и вендоров в сфере образования. Сумма сделки составила 25 млн долларов. С помощью решений Smart Sparrow компания переработает не только часть готовых курсов и будет выпускать новые, но и расширит библиотеку электронных книг. Плюс дополнит возможности собственной новинки Global Learning Platform, которая должна поспособствовать персонализации образовательного процесса в духе адаптивного обучения [adaptive learning].

На сайте проекта есть занимательный подраздел с кейсами, хотя блог давно не обновляли.


P.S. В нашем блоге на Хабре мы рассмотрели 15 примечательных EdTech- и T&D-стартапов [часть первая и вторая]. Сейчас мы продолжаем работу с проектами, которые прошли отбор в наш акселератор. Победители тематических треков получат по 500 тыс. рублей для развития идей.


Дополнительное чтение:


Подробнее..

VR-тренинги, EdTech-стартапы и электронный документооборот какие проекты привлекли инвестиции

24.02.2021 02:21:58 | Автор: admin

Мы начали обсуждать трансформацию сферы образования и переход к Education 4.0, плюс сделали две подборки [первая, вторая] наиболее заметных training&development-стартапов.

Продолжаем знакомить вас с проектами, которым удалось привлечь венчурные инвестиции и закрыть крупные сделки в разгар кризиса. Расскажем, чем они занимаются [подобный опыт мы анализируем и в закрытом режиме в рамках нашей программы акселерации].

Фотография: Eddie Kopp. Источник: Unsplash.comФотография: Eddie Kopp. Источник: Unsplash.com

Strivr готовит кастомные VR-тренинги для компаний и спортивных команд помогает сотрудникам и игрокам отрабатывать различные ситуации в виртуальном сеттинге. Это могут быть как нестандартные моменты вроде действий при похищении товаров из магазина и нападении на кассира [такое обучение прошли тысячи менеджеров Verizon], так и работа с корпоративным оборудованием, знакомство с процессами его настройки и обслуживания.

Еще поддержание эмоциональной гигиены в коллективе и этикет взаимодействия с клиентами. Спортсменам решения Strivr позволяют обогатить тренировки и отрабатывать игровые комбинации в межсезонье для квотербека, выступающего в НФЛ, они исчисляются сотнями [компания упоминает такой кейс и говорит о сотрудничестве с командами НБА].

Чтобы соответствовать требованиям атлетов и бизнеса, Strivr делает ставку на контент, UX и сопоставление показателей в VR с тем, как обучающиеся ведут себя в жизненных обстоятельствах. Для такой аналитики и отслеживания результативности занятий Strivr производит айтрекинг в VR-среде и учитывает различные физиологические данные.

Проект запустили в 2015-м в стенах лаборатории Стэнфордского университета. Сейчас один только парк устройств Strivr насчитывает более 22 тыс. хедсетов [они распределены по клиентам BMW, JetBlue, Walmart, Verizon, другим компаниям и спортивным организациям], а команда может похвастаться 1,5 млн проведенных тренингов.

Для управления контентом и взаимодействия с заказчиками она разработала собственное программное решение и привлекла более 51 миллион долларов инвестиций на развитие бизнеса. Наиболее масштабные раунды пошли в прошлом и 2018-м году Strivr поднял 30 и 16 миллионов долларов соответственно.


Health Scholars это облачная платформа для VR-тренингов, которая опирается на методологии и алгоритмы сердечно-легочной реанимации, принятые такими организациями как Американская кардиологическая ассоциация и комитет Красного Креста. Эти процедуры входят в обязательные образовательные программы и инструктажи для медицинских работников. Темы занятий включают и ликвидацию чрезвычайных ситуаций вроде возгораний в операционной.

Управлять происходящим в виртуальном сеттинге и коммуницировать с NPC можно с помощью голосовых команд. По ходу прохождения уроков система будет готовить детальные отчеты с аналитикой по ключевым показателям эффективности.

Фотография: Piron Guillaume. Источник: Unsplash.comФотография: Piron Guillaume. Источник: Unsplash.com

Проект запустили в 2017-м силами бывших специалистов некоммерческой организации OSF, Optera Group, специализирующейся на визуализации медицинских данных, и Simcore Technologies, занимающейся образовательными системами в этой области. Их опыт позволил быстро разработать и выпустить первые VR-тренинги под брендом Health Scholars. А в прошлом году стартап получил венчурные инвестиции от медицинских и технологических фондов. Объем первого раунда составил 17 млн долларов. Средства направят на подготовку нового контента, его методологическое обоснование и привлечение корпоративных клиентов.


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

Команда работает над проектом с 2003 года и за это время получила более 66 млн долларов от ряда венчурных инвесторов. Одним из ключевых стал инвестбанк Raine Group он вкладывал средства в Parchment с 2012 года. Деньги компания использовала не только для финансирования разработок, но и для приобретения других организаций, развивающих решения для колледжей, обмена документами между образовательными организациями и откликов на вакансии. Одна из последних сделок прошла в конце 2019-го и состояла в объединении с прямым конкурентом Credentials Solutions. После этого Raine Group объявили об успешном выходе из проекта.

За время работы через Parchment прошло более 100 млн дипломов и транскриптовпройденных курсов сегодня площадка является одной из крупнейших в мире в данной нише.


Learnit+AcademyX покупка крупным вендором корпоративных курсов, воркшопов и программ сертификации относительно небольшого провайдера тренингов для технологических специалистов и офисных сотрудников. Профиль образовательных программ одной и другой компании достаточно близок, поэтому сделка позволит быстро расширить библиотеку Learnit и предложить теперь уже общим клиентам дополнительные возможности например, занятия по программированию на Python, курсы по Jira и продуктам Adobe Creative Suite. Всего покупатель получит более 650 корпоративных клиентов и расширит свое портфолио до двух тысяч партнеров, в число которых входит Netflix, Oracle, Visa и другие крупные бренды.

Фотография: Hitesh Choudhary. Источник: Unsplash.comФотография: Hitesh Choudhary. Источник: Unsplash.com

Для Learnit это первое приобретение, поэтому компания не торопится раскрывать детали. Однако можно предположить, что AcademyX могла обойтись ей как минимум в пару десятков миллионов долларов. За счет такой экспансии компания планирует захватить новые сегменты рынка T&D- и L&D-решений [learning&development]. Согласно оценкам экспертов, суммарный объем его североамериканской и европейской частей превышает 250 млрд долларов, что в свете спроса на массовую переподготовку специалистов можно рассматривать в качестве стартовой отметки. Высока вероятность того, что через пару лет значимость этой ниши оценят еще выше.


Smart Sparrow это примечательный EdTech-стартап из Австралии, который запустили десять лет назад. За это время команде удалось представить целый спектр тематических продуктов: от платформы для авторов образовательных программ и решений для издателей разнообразного контента до студии разработки кастомных курсов и продуктов для компаний-клиентов.

Вместе с этим команда привлекла 23,5 млн долларов, а в прошлом году проект выкупил Pearson один из крупнейших паблишеров и вендоров в сфере образования. Сумма сделки составила 25 млн долларов. С помощью решений Smart Sparrow компания переработает не только часть готовых курсов и будет выпускать новые, но и расширит библиотеку электронных книг. Плюс дополнит возможности собственной новинки Global Learning Platform, которая должна поспособствовать персонализации образовательного процесса в духе адаптивного обучения [adaptive learning].

На сайте проекта есть занимательный подраздел с кейсами, хотя блог давно не обновляли.


P.S. В нашем блоге на Хабре мы рассмотрели 15 примечательных EdTech- и T&D-стартапов [часть первая и вторая]. Сейчас мы продолжаем работу с проектами, которые прошли отбор в наш акселератор. Победители тематических треков получат по 500 тыс. рублей для развития идей.


Дополнительное чтение:


Подробнее..

Одежда с нагревательными элементами ее делает стартап WARMR из Университета ИТМО

02.03.2021 00:19:35 | Автор: admin

Делимся рассказом о развитии технологического проекта WARMR, которым продолжает заниматься один из студентов Университета ИТМО. Вместе с ним обсуждаем идею, первые эксперименты, новый подход к изготовлению умной одежды и планы на будущее.

Идея и прототип

Как рассказывает Олави Сийкки, студент магистратуры факультета технологического менеджмента и инноваций, идея проекта появилась давно: Я жил и учился в небольшом финском городке, где практически не было общественного транспорта, поэтому все по большей части пользовались велосипедами или автомобилями. К сожалению, когда я проходил бакалавриат, у меня украли машину, и пришлось пересесть на велик и самокаты. Последние виды транспорта в Финляндии используют в любую погоду и даже зимой, когда дискомфорт от холода, казалось бы, должен перевешивать удобство передвижения таким способом. Получилось так, что у меня был технический бэкграунд и я подумал, почему бы не помочь любителям городской мобильности с подогревом одежды и отдельных элементов их транспортных средств.

Однако на тот момент опыта изготовления чего-то подобного у основателя проекта и его коллег не было. Эту область пришлось освоить с нуля. Основная сложность состояла в том, чтобы точно передать все необходимые нюансы в техническом задании, по которому подрядчик изготовит прототип, а потом протестировать образец, оценить недостатки и принять решение о дальнейшем развитии начинания. Нам не повезло с поставщиками. Отправили ТЗ, а получили ужасный продукт батарейка была приделана в кармашек, пристегнутый самым обыкновенным степлером на скрепки. Как только я решил протестировать прототип и включил его, он загорелся. Хорошо, что не в момент использования, делится впечатлениями Олави Сийкки.

После этого эксперимента мы занялись элементами сами. Сидения пошили в ателье недалеко от корпуса Университета ИТМО на Кронверкском проспекте. Они получились намного лучше, хотя на тот момент там и не было каких-то интересных технологий.

Университет и переход на одежду

В магистратуре Олави Сийкки продолжил развивать решения для микромобильного транспорта по его словам, во время весеннего карантина этот рынок заметно вырос. Однако в итоге он переключился на производство одежды, как только понял, что может заручиться поддержкой партнера по производству Red Fox. Инициативу поддержал и Антон Гопка, декан факультета #itmotech. Он оценил прототипы и помог перейти к изготовлению новых версий с использованием печатной электроники. В свою очередь, Олави Сийкки, он старался использовать все возможности, которые дает Университет ИТМО, и часто тестировал образцы в лабораториях.

Печатная электроника начинается с паст. В лаборатории мы их производим, берем ткань, вырезаем трафарет, выкладываем на ткань, запекаем и следим за характеристиками. Уже потом, когда мы все изучили [как лучше наносить, комбинировать слоями и так далее], идем на более автоматизированные принтеры.

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

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

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

Что дальше

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

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

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

Проект пока не привлекает внешние средства, но задумывается о долгосрочных инвестициях. Основная бизнес-модель WARMR это B2B-контракты. В качестве примера команда говорит о сотрудничестве с Red Fox и интересе со стороны Газпромнефти. С точки зрения производственных возможностей, в месяц команда может готовить около двух тысяч комплектов электроники, в том числе и разборных эта задача проще интеграции в одежду.


Другие стартапы из Университета ИТМО:


Англоязычные материалы в нашем блоге на Хабре:


Подробнее..

Сложно ли работать QA

19.02.2021 00:11:18 | Автор: admin

Сразу напрашивается вопрос, а кто спрашивает?


Воображение рисует студента последнего курса технического ВУЗа, знания которого более менее свежи, информации дано много, программирование потрогано на нескольких языках, но вот оно не притягивает. Вот стартануть будет в профессии легко, дообучения будет много, но и рост знании будет шустрыи. Работать будет становиться все сложнеи, но потому , что знания позволят залезть глубже в работу программистов, в продукт. Бекграунд позволит предположить вариантов проблем больше, но и наидено будет не мало. Не будет легко, но легко было бы и не интересно.

Дальше представляю слесаря монтажника или веселого бармена с опытом работы 10 лет, которому надоела низкая зарплата, когда много рассказов про IT с перспективами и частыми премиями. Вот тут размещая резюме первыи подвох. А не ты один этот рассказ слышал, и там оказывается много народу хотят, но твое резюме даже не просмотрено особо. Дальше какие то платные, бесплатные курсы, начинаешь хотя бы краем глаза понимать куда ты вообще собираешься. Дальше приглашение, собеседование, отказ без пояснении. Думаешь, что не так, может плохо ответил, не так сел, не то рассказывал, но причину не сказали. Дальше бросаешь это дело и возвращаешься к старому ремеслу, или с новыми силами поднимаешься и идешь на еще тонну собеседовании. Наконец приглашение, долгожданный Оффер. На работе тоже много нужно, продолжаешь фигачить и учиться, и не звучит это все легко.

Если уж ударяться в краиности, то дальше воображаем человека лет 50-55, работал где-то, даже программировал , но, например, на чистом C. Новое не изучал, но вот подумал, что надо что-то менять, попробовать. Честно в резюме описываешь опыт , весь сугубо техническии. Но откликов нет, все же понимают, что придется обучать. Опыт привлекает, но возраст отпугивает , и не понимают, сможет ли такои человек обучаться новому и быстро. А тут уж даже если и устроится человек, то простым его путь не вижу.

Получается, что путь легким в данных ситуациях не выглядит. Но если смотреть прицельно, то а кто спрашивает?

Если подняла до этого абстрактныи вопрос, сложно ли работать в целом, то дальше хочу рассмотреть конкретные сложности.

Их можно мне кажется перечислять очень долго, уже не говоря о том, что у каждого они свои. То, что проблема для одного тестировщика, совсем не проблема для другого.

Не знание какого-то инструмента.

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

Если не устроило, то поискать в интернете. Еще бы дала совет, что если за полчаса, максимум час не смогли решить какои-то вопрос, застряли на каком то моменте, и не двигаетесь вперед, то всегда спросите. Умение спрашивать очень нужное и полезное. Всегда уточните, кому можно адресовать вопросы, и активно пользуитесь, вопросов глупых не бывает. Но надо только сформулировать, чтобы сэкономить время отвечающего. Резюмируя скажу, что не видела еще инструмента, в котором не смогла разобраться, просто иногда может занять больше времени, чем хотелось бы.

Одним из сложных моментов я бы ещё назвала неоднозначные формулировки в описании ТЗ (техническое задание, по которому тестируем).

Опытные QA умеют читать между строк, понимают зачем это бизнесу, и решит ли их запросы, да и целом удобно ли будет пользоваться полученным продуктом.

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

Часто решением проблемы однозначного понимания занимается проджект проекта. Хотя это цель всей команды разработки. Главное, определить места, которые могут быть поняты неоднозначно. Вся команда заинтересована на первых же этапах выяснить то, что на самом деле мы делаем и зачем. И чтобы это поняли все участники разработки (от постановщика до тестировщика).

Про разные проблемы и сложности в работе QA можно долго рассказывать, попробовала выделить какие то совсем больные точки, на которые я натыкалась. Если хоть немного было интересно, то могла бы продолжить.

Подробнее..

Тесты должна писать разработка (?)

19.02.2021 16:11:01 | Автор: admin
Привет! Есть старый холивар на тему, кто же должен писать тесты: разработчики или тестировщики. Вроде как если в команде есть тестировщики, то логично, что тесты пишут они, правда? С другой стороны, ребята из разработки (помимо самой разработки) точно знают, как работает их код и как будет вести себя в тех или иных ситуациях. Как минимум предполагают.


Дисклеймер: меня зовут Эрик Бурыгин, я давно работаю тестировщиком, веду студентов на курсе Инженер по тестированию, поэтому может показаться, что тестировщик просто хочет перекинуть кусок работы на разработчиков. На самом деле у описываемого подхода есть как плюсы, так и минусы, поэтому статья носит в том числе и дискуссионный характер. Буду рад увидеть в комментах мнения как разработчиков, так и тестировщиков.

Если тесты пишет разработка, можно решить сразу несколько проблем, например:

  • Ощутимо ускорить релизный цикл.
  • Снять нагрузку с тестирования.

В большинстве команд процесс выглядит примерно так:

  1. Разработчик создаёт новые фичи и допиливает существующие.
  2. Тестировщик всё это тестирует и пишет различные тест-кейсы.
  3. Автоматизатор, оправдывая название должности, автоматизирует всё по написанным тест-кейсам из п.2.

Вроде бы всё выглядит просто.

Но в этой парадигме есть слабые места.

Допустим, разработчик доделал свою фичу и благополучно отдал её в тестирование. Но фича получилась не medium rare, а откровенно сырая. Это приведёт к переоткрытию задачи и дополнительным фиксам, причём итераций может быть от одной до N, в зависимости от размера этой фичи, её сложности, влияния на смежные процессы, добросовестности самого разработчика. А ещё от того, как у вас в принципе устроены процессы внутри разработки, насколько тщательно смотрятся пул-реквесты, запускается ли приложение перед отправкой на тестирование.

В общем, переменных хватает.

После того как задача будет протестирована и готова к релизу, тестированию нужно написать на весь функционал тест-кейсы. Затем сделать регресс/смоук и наконец зарелизить.

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

Просто нужно больше разработчиков


Увы, не панацея. Скорее наоборот. Чем больше в этой схеме у вас будет разработчиков, тем сильнее будет нагрузка на тестирование. В итоге будет увеличиваться или релизный цикл, или сама команда тестирования.

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

На восемь разработчиков обычно приходится два тестировщика и один автоматизатор. Автоматизация при этом не участвует в релизном цикле напрямую скорее находится поблизости. И возникает вопрос: как сделать описанные процессы более эффективными, да ещё и не потерять в качестве?

Давайте попробуем сдвинуть этап автоматизации с третьего места на первое, на этап разработки.

Что получится


Получится сразу неплохой набор плюсов, смотрите:

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

А что тестировщики?

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

При этом надо понимать, что ручное тестирование всё равно никуда не денется у вас всегда будет что-то, что по какой-то причине автоматизировать либо невозможно, либо не имеет смысла.

Так вот, к новой парадигме. Круто же? Да хоть прямо сейчас внедрять. Если получится сделать две вещи.

  1. Продать эту идею разработке. Потому что далеко не каждый разработчик сразу захочет писать тесты, ведь это может быть скучно, или он просто не хочет: у вас, вообще-то, тестировщики вон там для чего сидят?
  2. Продать эту идею менеджерам. Потому что при прочих плюсах у вас увеличивается время разработки каждой фичи.

Какие минусы тут могут вас поджидать.

  1. Большая часть разработчиков просто не умеет тестировать, потому что они разработчики, а не тестировщики. И это нормально. Тут вы можете или научить их тестировать, что будет не самой тривиальной задачей, или просто писать тест-кейсы для них. Что де-факто ломает сам процесс.
  2. На старте автоматизация будет занимать больше времени, ведь не будет кодовой базы тестов, инфраструктуры и привычных подходов задача-то новая.
  3. Будут нужны понятные отчёты для тестирования. Но имейте в виду: даже самый понятный отчёт не всегда можно сразу научиться правильно читать.
  4. Не каждую задачу вы сможете легко и быстро покрыть тестами. В ряде случаев вам придётся на тесты тратить больше времени, чем на саму реализацию фичи.
  5. Масштабные задачи будет сложно отдавать одновременно с тестами, это занимает довольно много времени.
  6. Для этих же масштабных и сложных задач надо будет всё равно закладывать время на то, чтобы просто в них вникнуть, потому что нет другого способа проверить правильность тестов, которые писали разработчики.

Что же делать?




В принципе у каждой из проблем есть решение.

  1. Разработчики не умеют тестировать.
    Можно консультировать их на первых этапах, чтобы помочь разобраться.
  2. Нет кодовой базы, инфраструктуры и подходов.
    Всё решается только временем. На размеченные функции писать тексты проще.
  3. Понятные отчёты.
    В отчёты надо включать все шаги, а название каждого теста должно сразу отражать, что именно им проверяется.
  4. Приходится тратить много времени на ряд задач.
    Спасает здравый смысл: не всё стоит покрывать здесь и сейчас.
  5. Сложно отдавать задачи, когда нет подходов и инструментов.
    Тоже решается постепенно, главное время для анализа и внедрения того или иного инструмента. И это должно быть отдельной задачей.
  6. Проблема масштабных задач.
    Их можно сразу отдавать без тестов либо частично покрытыми тестами. Но это в любом случае не отменяет погружения в контекст.

Вывод


Подход со всеми своими плюсами и минусами имеет право на жизнь. А если ещё и правильно настроить процессы, то это поможет вам и релизный цикл ускорить, и штат не раздувать (:
Подробнее..

Юноше, обдумывающему электронику. Ключи к материалу для самостоятельного изучения

20.02.2021 10:19:11 | Автор: admin
Перевод учебника Искусство схемотехники пополнился Частью 3, в которой разбираются полевые транзисторы. Книга приобрела целостный, хотя всё ещё не окончательный, вид. На данный момент отсутствуют три части 11 (Программируемая логика), 14 (Компьютеры, контроллеры и шины данных), 15 (Микроконтроллеры) и таблицы. Таблицы отложены до завершения перевода (там почти одни цифры, с которыми можно ознакомиться и в оригинале), а остающиеся темы при всём уважении к авторам лучше изучать по другим источникам. В анонсе перевода среди жалоб на несовершенство мира была высказана мысль о необходимости грамотного руководства освоением нового материала. Здесь предлагается метод изучения, рационализирующий данный процесс и некоторые соображения о повышении КПД знаний, относящиеся к системе Цеттелкастен.

Итак, к основному материалу книги добавилась Часть 3 (Полевые транзисторы), рассказывающая о линейных усилителях, повторителях и ключах на полевых приборах с p-n переходом и с изолированным затвором. Но, если вы новичок, обдумывающий электронику, а равно и не обдумывающий, но соприкасающийся с ней по работе, начинать знакомство с данной темой следует с другого конца и по специфической схеме. Но обо всём по порядку.

Искусство схемотехники учебник по практическому построению электронных схем, выросший из односеместрового лабораторного курса по электронике Гарвардского университета. Он достаточно полон, подробен и самодостаточен (*) для самостоятельного изучения, причём не требует от ученика специальной подготовки. Всем известно, что королевских путей к знанию не существует, но одна уловка всё же есть. Это принцип Паретто, гласящий, что 20% людей выпивает 80% пива. Иначе говоря, 20% знаний и навыков закроют 80% типовых задач. Осталось найти эти 20%. Как раз здесь совершенно случайно из ближайших кустов выхожу я во всём белом. Ниже предлагается путеводный ключ, лучше всего, на мой взгляд, подходящий для изучения учебника неспециалистом. Замечу, что для специалиста книга тоже подойдёт диапазон у неё совершенно удивительный, просто специалист знает, чего хочет, и ключ ему не нужен.

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

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

Материал Части 12 и 13 закрывает порядка 60% вопросов взаимодействия вычислительных систем с внешним миром. Следующим шагом будет Часть 4 (Операционные усилители). Здесь даются базовые сведения об этом главном строительном элементе аналоговых схем. Углублённое изучение ОУ продолжается в Части 5 (Точные схемы). В Части 5 подробно разбираются источники ошибок и методы их компенсации. Её будет полезно пробежать в ознакомительных целях, потому что здесь описываются возможные варианты операционных усилителей, и такие сведения будут полезны просто для расширения кругозора.

Теперь у вас есть 80%. На этом, наверно, стоит остановиться, а книгу перевести из статуса учебник в статус справочное пособие. Остальные темы, как-то: Часть 6 (Фильтры), Часть 7 (Генераторы и таймеры), Часть 8 (Проектирование малошумящей аппаратуры), Часть 9 (Регуляторы напряжения и преобразователи мощности) и Часть 10 (Цифровая логика), следует изучать, если есть конкретная задача или желание ознакомиться с вопросом.

Пара слов об основах Части 1 (Основы), Части 2 (Биполярные транзисторы) и Части 3 (Полевые транзисторы). Не надо в них лезть ! Несколько парадоксальная рекомендация, ведь обычно изучение электроники начинается именно с этих трёх тем. Дело в том, что чем проще инструмент, тем больше умения требуется, чтобы с ним работать. Современная электроника нечасто требует перехода на уровень отдельных транзисторов. Знакомства с ОУ (Часть 4) и с параметрами внешних выводов ИМС (Часть 12) достаточно для подавляющего большинства задач. Всё остальное будет проникать в голову или вызывать специальный интерес по мере продвижения вперёд. Вся книга пронизана перекрёстными ссылками на сопутствующий, пояснительный или аналогичный материал из других частей. По ним надо ходить и пытаться разобраться, но фанатизм в этом направлении будет скорее вредить.

Надеюсь, этот скромный набор рекомендаций вам поможет.

Теперь пара слов об упоминавшейся на Хабре системе организации персональных знаний Цеттелкастен. Позволю высказать собственное мнение о предмете, которое возникло в момент редактирования перевода. В Части 3 (рис. 3.114 на стр. 212) приводится красивая схема расширения входного диапазона напряжений линейного стабилизатора. Она не вчера придумана, лично мне знакома более 10 лет, но, только проводя последнюю сверку с оригиналом, я понял, что речь идёт об обычном каскоде. Т.е. я перевёл Часть 9, где она встречалась, Часть 3, отредактировал, отформатировал в html, чтобы на самом последнем этапе перед публикацией понять довольно очевидную с самого начала вещь.

Это я к чему? Сама книга живёт со мной уже более 3 лет (а, может, я с ней живу?). Каждый раз, когда приходит время выкладывать на сайт новую часть, необходимо пробежать по тексту (поиском, конечно) и актуализировать спящие ссылки. И каждый раз глаз цепляется за какие-то новые детали и подробности, вылезают ошибки, шероховатости или такие вот озарения. Мне кажется, что основная задача Цеттелкастен перебирать пачку случайно (или не случайно) выбранных карточек, чтобы освежить заснувшие данные в собственной голове или обнаружить вдруг новые связи. Если это так, то современные модные и молодёжные средства работы с заметками (программы, органайзеры, электронные таблицы) вещь, не имеющая никаких преимуществ перед картоном, если не вовсе вредная. Оптимизация процесса здесь только мешает результату. Общение с базой знаний должно быть простым, но не должно быть быстрым, а, главное, не должно быть автоматизированным. Оно должно давать голове и глазам шанс зацепиться за какую-нибудь фразу или мысль. То есть, гораздо продуктивнее просто взять в руку карточки, давно не видевшие свет, и потасовать их, вчитываясь и, возможно, прогуливаясь по ссылкам на смежный материал. Цеттелкастен искусство перечитывать то, что уже прочитано когда-то. Перечитывать, чтобы ещё аккуратнее вставить кусочек мозаики на прежнее или, возможно, иное место общей картины. Поэтому, читая Искусство схемотехники, обязательно ходите по ссылкам и пытайтесь понять, что они вам говорят. Вот вам мой Цеттелкастен, всем, даром, и пусть никто не уйдёт обиженным.

(*)
Пояснительные выражения объясняют темные мысли, поэтому везде, где мне случается зависнуть над фразой, схемой или формулой, я вставляю собственные пояснения. Исхожу при этом из того, что сам я тему знаю достаточно хорошо, и, если даже я затыкаюсь, то новичку точно требуются чуть более развёрнутые объяснения. Мои комментарии идут на вкусном абрикосовом фоне (и только на нём). ####### Ну, вы поняли ########.

И собственно учебник, а то вдруг кто не знает.
Подробнее..

Из частных предпринимателей в руководители проектов банка история фронтенд-разработчика

03.03.2021 20:06:54 | Автор: admin

Привет, Хабр! Сегодняшняя статья история карьерного пути Михаила Логинова. Он несколько лет строил собственный бизнес, но затем решил, что программирование именно то, чем хочется заниматься дальше. Поэтому Михаил получил специальность фронтенд-разработчика и посвятил себя разработке.

Типичной эту историю назвать нельзя, поэтому решили рассказать о ней на Хабре. Кому-то просто интересно будет почитать, а кто-то почерпнет что-то полезное для себя.

Всё началось с математики и программирования


Я чистой воды технарь, в своё время закончил мехмат Ростовского государственного университета по специальности Математик, системный программист. Причем поступить удалось без экзаменов: в школе я с удовольствием принимал участие в олимпиадах по математике, неоднократно побеждал, поэтому в институт приняли сразу. Учился без особых проблем, университет закончил, получив соответствующую специальность.

Правда, после получения диплома работать по специальности не пошел. Теория в вузе преподавалась отлично, а вот реальной разработки почти не было, поэтому после выпуска у меня не было практического опыта. Я занялся собственным бизнесом и на несколько лет забыл о разработке. 8 лет занимался только развитием своей компании.

Но бизнес был не очень стабильным, сказывались кризисы, поэтому начал искать альтернативу работу, которая была бы одновременно и интересной, и доход приносила. На этом этапе я снова обратил внимание на разработку и решил попробовать вернуться к основам стать программистом. Правда, сначала я обучился на тестировщика, пройдя бесплатные курсы Portnov Computer School. После завершения курсов удалось найти работу в одной из компаний Ростова. Этот момент можно считать первым шагом на длинном карьерном пути в IT. Занимался ручным тестированием, проверял задачи на удовлетворение бизнес-требованиям, а чуть позже разобрался с автотестами на базе Selenium WebDriver.

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

Эта сфера привлекала все больше, поэтому я решил поступить на курсы по программированию. Выбор пал на курс Frontend-разработчик, поступить мне удалось бесплатно я победил в конкурсе GeekBrains Мы ищем таланты. Занять первое место помогло как институтское профильное образование, так и опыт тестировщика.

Следующий этап фронтенд


Почему выбрал именно фронтенд? Во-первых, я понимал обширные возможности отрасли, во-вторых, веб-разработка очень востребованная сфера с постоянным дефицитом разработчиков. Мне всегда хотелось работать там, где пригодятся весь мои опыт и знания.

Я отдавал себе отчет в том, что просто так веб-разработчиком не станешь, поэтому прилежно учился. На учебу уходило 4-5 часов в день в течение 8-9 месяцев, я старался на практике применять полученные знания. Ниже примеры моих работ, выполненных во время обучения.


Вот ссылка на этот проект.

А вот примеры вёрстки, это два курсовых проекта.


Вёрстка из курса HTML5/CSS3. Смотреть онлайн: здесь и тут.

Ну а потом выпуск и поиск работы. Не знаю, повезло ли мне, или работодатель оценил мой опыт тестировщика, но устроиться удалось во время учебы на курсах, через несколько месяцев с начала обучения. Поиски вакансий я вёл через HeadHunter. Забегая вперёд, скажу, что здесь же меня хантят рекрутёры: предложений приходит достаточно много. Другими ресурсами или сервисами на тот момент не пользовался. Разве что завел профиль на LinkedIn, так сказать на вырост.

На работе не только выполнял текучку, но и продолжал активно учиться, благо задачи были самые разные. Объём практического опыта быстро рос. Через полтора года после старта моей карьеры в IT я стал веб-разработчиком полного цикла. Научился создавать как серверную, так и клиентскую стороны приложений. Стек технологий на тот момент (прошло около двух лет) включал Vue (Vuex, Nuxt.js, Apollo), React (Redux) и Node.js (TypeScript, GraphQL, Mongodb). Ну а опыт тестировщика помогал выполнять работу еще эффективнее.

А что сейчас?


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

Чтобы поддерживать знания на актуальном уровне, я не только читаю книги, смотрю профессиональные видео и т.п., но и посещаю IT-конференции. За 2019 год я посетил около 50 таких конференций, а также стал активным участником разных IT-сообществ. На мероприятиях получаешь новый опыт, новые идеи, знакомишься с интересными людьми. Нетворкинг в разработке крайне важен.

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

Текущие задачи и планы на будущее


Сейчас я работаю в отделе интеллектуальной системы управления, которая позволяет улучшать эффективность и качество работы сотрудников. Компания благодаря этому лучше справляется с налаживанием процессов управления. Я главный по фронтенд-направлению: отвечаю за весь код, который будет исполняться на компьютерах пользователей. Мы используем React + TypeScript на фронте и Python на беке. У нас очень популярный и современный стек: Webpack, Redux, Thunk, Styled-Components.

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

Что касается будущего, то пока что я не планирую что-то резко менять. Главное совершенствование тех навыков и знаний, что уже есть, а также приобретение новых. Именно копание вглубь позволяет стать экспертом в своей области. Если распыляться, заниматься побочными задачами, стараясь охватить максимальное количество смежных специальностей, то существует риск остановки развития. Этого стараюсь не допускать.

Немного советов


В процессе учебы и работы я сделал для себя несколько выводов относительно профессионального развития, которыми хотел бы поделиться с Хабром. Скорее всего, они будут интересны тем, кто только начал карьеру в IT или собирается её начать. Ну а профессионалы с многолетним опытом могут дополнить советы в комментариях.

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


Если же нужно подготовиться к интервью в крупную компанию, то необходимо научиться решать алгоритмические задачи, а также хорошо освоить теорию по паттернам проектирования. Проверить себя в решении таких задач можно здесь и здесь.

А чтобы проверить себя на готовность стать программистом, рекомендую закончить бесплатные курсы. Если понравится и всё будет получаться, то, определённо, можно и дальше шагать в этом направлении. Ну а если нет вы ничего не теряете.
Подробнее..

Эксперимент допуск или как студентов уму разуму научить

24.02.2021 08:04:01 | Автор: admin

Чем еще заняться в период пандемии и удаленки, как ни разглагольствованием о великом? У всех нас появилось много свободного времени, которое теперь не обязательно тратить на дорогу, и если кому-то не жалко тратить это время на просмотр сериалов, инстаграм и борьбу с диваном, то мне за первый месяц все это порядком поднадоело и захотелось чего-то продуктивного.

Начитавшись разных статей и книжек про эффективность, а также вдохновившись такими людьми как Стив Джобс сразу хочется пойти и перевернуть этот гребаный мир. Но уж коли никто не хочет дать мне тот самый рычаг, попробуем перевернуть что-то поменьше. Например, нашу закостеневшую систему образования. Ну или не совсем систему, скорее так, маленький ее кусочек, а затем посмотрим на результат. По традиции тренироваться принято на кошечках, а в моем случае на студентах. Эксперимент уже проведен, результат оказался положительным. А благодаря пандемии появилось время об этом написать.

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

Почти четыре года назад мне довелось стать преподавателем двух предметов в Новосибирском Государственном Университете на Факультете Информационных Технологий. Потом из-за нехватки времени появилось желание отказаться от преподавания одного из них, но лектор попросил оставить хотя бы одну группу. Предмет, на мой взгляд, бесполезный, а введен он был для галочки.

Суть лабораторных работ по этому предмету в следующем: показать, что студент умеет работать сbash(файлик скопировать, или там поиск по файлу сделать). Нет, разумеется, умение пользоватьсяbash-ем важно и даже очень. Скорее дело в том, что у лабораторных должна быть какая-то цель, аbashэто всего лишь средство, которое студенты освоят в процессе достижения этой цели. А если заставить студентов изучатьbashради того, чтобы изучитьbash, им это будет скучно и не интересно.

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

  1. Git

  2. Jira\Redmine\Trello

  3. Code review

  4. Unit-тестирование

  5. CI\CD

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

На что вообще клюют студенты-перваки? Надо чтобы было драйвово, интересно, понятно, стильно, модно, молодежно. Кстати, многие аутсорс-компании тоже делают на этом акцент, и мне не верится, что это случайность. Теперь информатика это предмет все обо всем, этакий окружающий мир для программистов.

Нужно было расширить предыдущий список чем-то таким, чтобы, во-первых, приучить ребят работать в командной строке и, во-вторых, посильнее заинтересовать.Фантазия позволила придумать следующую концепцию:

  1. Отменяем лабы и домашки. Пусть все делают на самих парах. Я буду показывать, а они повторять

  2. Оценка должна быть за посещаемость. Иначе вообще никто ходить не будет

  3. Все работы делаются вubuntu. На выбор студентов можно установить ее себе на ноут, можно пользоватьсяVirtualBoxилиWSL

  4. Все, что делают студенты должно быть наглядно. Им это нравится. Круто же когда ты увидел не чиселки в консоли, а открыл самостоятельно настроенный сайт в браузере. Магия должна быть видна невооруженным взглядом

  5. Стоит сделать акцент на таких вещах какNPMиyeoman, они просты и в то же время позволяют делать сложные вещи, это опять же должно повысить интерес к самому процессу и приучить ребят работать в консоли

  6. Часть заданий нужно сделать в группах, это повысит ихSoftSkills

Лайфхак. Если хочется расположить людей к себе, их нужно накормить. Для голодных студентов это актуально вдвойне.

Каждую пару я захожу в одну из кофеен, расположенных в универе, и покупаю себе кофе. Я стал периодически покупать большой ЭмЭмДемс и оставлять его на первой парте. Все желающие могли угоститься. И теперь в девять утра полная аудитория довольных студентов. И нет, мне не платили за рекламу m&m's. Да и в принципе за преподавание платят смешные деньги хватает в аккурат заправить полный бак моего крокодила.

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

ПоднимаемGitlabна локальной машине.Тогда автору показалось это не слишком сложным (инструкция на сайте есть, команд всего несколько), зато очень впечатляющим, круто, когда на твоей машине поднялся огромный сайт с кучей кнопочек и настроек. Плюс ко всему это хорошо коррелирует с рассказом проGitиCI\CD. Здесь был мой первый промах - студентам оказалось сделать подобные вещи сильно сложно. Задача осложнилось тем, что студенты устанавливали себе разные дистрибутивы, и у кого-то все взлетело сразу, а у кого-то вообще никак не стартовало. В общем, они долго плевались и делали это с неохотой. В следующем году это задание будет выброшено, уж слишком сложно получилось. В следующем году планирую сделать определенный образ убунты вVirtualBox, чтобы выполнив все действия по инструкции, все заработало.

УстанавливаемDockerи делаем то же самое в доккере. Это всего одна команда, и тут ребята должны были понять, для чего этот самый докер нужен, и как сильно он упрощает жизнь (не кидайтесь помидорами, я знаю, как он может усложнить жизнь, но они же пока маленькие, не стоит их сразу пугать.) Надо сказать здесь ребятаточно также разбились на два лагеря: те у кого личные ноутбуки с успехом поддерживаютDocker(это либо те, у кого поддерживаетсяHyper-Vили либо же те, кто пользуетсяUbuntuкак основной системой) и те, кому пришлось долго возиться сDockerToolboxиVirtualBox. Я разрешил тем ребятам, у кого не удалось настроить окружение, просто забить на это задание и посмотреть, как это должно выглядеть у той половины, которой все удалось настроить. Задание с докером не хотелось бы выбрасывать особенно потому, что оно отлично вписывается в рассказ про облачные сервисы на подобииAzureиAmazon.Добиться цели, конечно, удалось, ребята увидели, что множество команд можно заменить одной, если вDockerесть уже готовое решение. Но само задание надо будет доработать напильником.

Создаем проект наApacheCordova.Используем тот жеyeoman, комплим и заливаем результат на телефон. Благо, сейчас это можно сделать достаточно просто и даже без проводов. Здесь снова акцент идет на наглядность. Менять в самом проекте ничего не нужно, ну разве что поиграться с какими-нибудь названиями или заголовками. Это было первое задание, когда у студентов действительно загорелись глаза. В следующем году это задание будет передвинуто в самое начало для большей мотивации.

Создаем проект наAngular. Мы создавали обычныйHelloWorld. Суть в том, чтобы показать студентам процесс создания проекта. Хотелось, чтобы они увидели разные подходы и не испугались, когда их попросят сделать что-то подобное на работе или в универе. Помню, как сам впадал в ступор, когда приходилось делать подобные вещи, потому что в универе привыкаешь к тому, что как правило надо открытьVisualStudio(илиIdea) и нажать кнопочку наGUI-интерфейсе Создать проект. Но не для всего естьGUIинтерфейс, да и не всегда он нужен. Вроде простая истина, но процесс ее осознания достаточно сложный, а для того, чтобы облегчить эту учесть достаточно всего один раз об этом рассказать.

Последние два задания потребовали наличияNodeJsи это хорошо коррелировало с рассказом про консольные скрипты и что их можно писать не только наbashилиpowershell, но такжеpythonили дажеjs. Просто для каждого языка есть свой интерпретатор. Это опять же не делает их знатоками в данных областях, но расширяет их кругозор.

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

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

Еще в силу моей занятости, несколько пар пришлось отменить. Но восстанавливать как-то надо. По традиции сделали мы это наYoutube. Но как сказал один из наших преподавателей про онлайн-образование: Лекция по интернету - это худшее, что могли придумать, я ведь никогда в жизни столько сам с собой не разговаривал. Все-таки тяжко говорить, не видя других лиц и их реакции.

Подводя итоги

Было бы нечестно сказать, что все прошло гладко, скорее здесь был первый блин комом.Я взял достаточно высокую планку, многие вещи студентам были не понятны. Пришлось на ходу переобуваться и менять задания, но думаю в следующем году получится найти баланс между сложностью и заинтересованностью, при котором все будут довольны. Позитивно сказалась работа в группах, индивидуально ребята не могли все осилить, а когда в группе есть 1-2 человека более сильных, то процесс идет лучше. Тут главное не допустить ситуации, когда только эти двое работают, а остальные сидят в телефонах. Еще один прием, который я взял на вооружение, дать ребятам разные задания, а затем сделатьswapи заставить их научить друг друга. Все это повышаетSoftSkills, которые обязательно пригодятся в жизни.

В целом, студенты были довольны предметом. По моим ощущениям, им было куда интереснее, чем прошлые два года. Удалось хоть не на много, но расширить их кругозор и заинтересовать их магией программирования. В начале этого семестра был удивлен тем, что студенты, которых мне довелось учить информатике год назад, сами связались со мной и попросили преподавать у них Объектно-Ориентированное Программирование. Хотя еще на парах по информатике я говорил им, что это две совершенно разные вселенные, на ООП халявы не будет, из-за ООП люди вылетают из универа, но их это не остановило. Что ж, хотят пожестче пускай.

А еще не так давно пара студентов с четвертого курса попросились ходить на пары по тому же ООП. Я опять же не против и добавил этих ребят в общий чатик в ВК, и вот какой получился у них диалог. Все-таки приятно, когда старания не проходят даром!

Касаемо ООП все осталось как и раньше, ничего лучше я придумать не смог. Мы все так же играем в реальную работу, заливаем код вGit, двигаем задачи вTrello, создаем пул-реквесты, используемIoC-контейнеры и пишемUnit-тесты. Подробно об этом я писал в прошлой статье.

Еще как оказалось, если взять ребят, которых я уже учил, им гораздо легче рассказывать про сложные вещи. Они уже более или мене подготовлены, они знают что-то в теории и теперь им можно показать, как оно работает на практике. Можно быть уверенным, что ребята имеют некоторый бэкграунд. В общем, это круто, когда можно не учить с нуля, а продолжить их обучение. Получается, что это уже не два отдельных предмета, а целая система, в которой прошлые школьники вначале получают полезную и легко воспринимаемую информацию, а по мере их взросления коэфициент ответственности растет, и на втором курсе им уже придется пыхтеть изо всех сил. Разве не так и должно быть все устроено в жизни? И мне бы хотелось дать им такие знания и возможности, при которых, если не все, то большая часть дверей для них будет открыта. Опыт оказался весьма интересным, и нужно развивать такие подходы в дальнейшем. Когда удастся все сбалансировать, думаю, будет полезно посмотреть в сторону развития в студентахSoftSkills, но пока это только перспективы. А пока, было бы очень полезно получить фидбек от читателей на тему того, что они думают на этот счет.

Подробнее..

Про курсы, марафоны и ожидании

25.02.2021 08:12:25 | Автор: admin

Я тут решил поделиться своими выводами относительно курсов обучения онлайн.

Примерно пару лет назад я решил сменить вид деятельности. И, так как со школы мне нравилась математика, информатика и всё такое, то я решил пойти в разработчики. Тогда я не понимал, что это, имел только приблизительные представления. Но твердо решил, что буду делать что-нибудь, что связано с "сайтостроением".

В сети я нашел пару бесплатных курсов по верстке и решил заниматься по ним. Но, т.к. у меня было много вопросов, а ответы на них я получал очень и очень долго и от посторонних лиц, то я решил пройти платный курс. Платный курс закончился печально. Это оказался так называемый марафон. И я скажу сразу - избегайте марафонов. Про них я напишу позже.

Поэтому я стал искать платные курсы. Ну как искать - забил в гугле и сравнил программы и цены. В итоге нашел то, что мне надо и недорого. И, если честно - тот объем информации что есть на курсе, позволил легко понять суть профессии верстальщика, так же наметить подробный план дальнейшего развития до разработчика. Уже сейчас, проходя этот курс, я понял чего я хочу и как этого добиться.

Кроме верстки я приобретал курсы по PHP, Python, основам программирования в целом. Но эти курсы я не прошел по двум причинам. Первое - я не до конца понимал чего я хочу. Второе - курсы были такие замудреные, хотя и сказано, что они для тех кто вообще не шарит, но даже для тех кто шарит немного они не помогут. В итоге деньги за них мне вернули полностью и без проблем.

И вот к каким выводам я пришел в результате своих мытарств. Мое видение платных и бесплатных курсов уложилось в сравнении плюсов и минусов. Там же все более-менее расписано.


Плюсы бесплатных

  • Бесплатность. Тут все понятно.

  • Доступность. Тоже понятно. Без регистрации и смс.

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

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

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

Минусы бесплатных

  • Актуальность. Информация актуальна на момент ее публикации. Так как большинство курсов выкладывают на ЮТ, то переснимать видео, в котором будет актуальная информация никто не будет. Ну я такого не нашел. Смотреть курсы 3 летней давности и больше нет никакого смысла. Даже сегодня смотреть курсы 2020 года где все завязано на Bootstrap 4 уже не актуально. Да и вообще, смотреть курс, где рассказывают о технологии, которая не использует современные тренды, не вижу смысла. Если только для общего развития.

  • Поддержка. В 99% отсутствует от слова "совсем". Максимум на что можно рассчитывать - ответ на комментарии.

  • Объем знаний. Зачастую, из-за того, что автор понимает, что поддерживать тему не планирует, он дает только то, что считает нужным и в чем он сам хорошо разобрался. Очень редко когда даются ссылки на дополнительные ресурсы. Так же редко рассматриваются альтернативные варианты получения аналогичного результата.

  • Процесс обучения. Строится по принципу "Повторяй за мной", т.е. простое копирование кода. Очень редко встречается человек, которые разъясняет основы, что он делает, почему и для чего.

  • Последовательность. Уроки идут так как решит автор. В принципе, в платных так же. Часто встречаются моменты, когда автор скачет от темы к теме. Я находил много курсов, которые начали "За здравие", а закончили "За упокой". А еще бывает так, что по каким-то причинам курс или забрасывают или автор начинает вести новый. Начинал про верстку, а потом резко перешел на PHP.

  • Ресурсы. Уроки могут проходить на разных ресурсах. Иногда автор создает сайт, на котором выкладываются уроки. Видео к урокам находится на ЮТ в 99% случаев, а может вообще на специфических ресурсах (что бы не скачали). Получается, что комментарии могут быть везде. А в них есть ответы на вопросы. В итоге - не знаю где задать вопрос.

  • Отсутствие самостоятельных заданий. В бесплатных их нет по причине того, что их проверять никто не будет. Обычно это сводится к тому, что верстается один конкретный проект. Магазин, лендинг, визитка. И весь курс заточен под конкретный макет.

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


Плюсы платных

  • Актуальность. Автор всегда старается давать актуальную информацию. Если курсу не один год, и его постоянно покупают, то автор следит за тем, чтобы информация планомерно обновлялась.

  • Поддержка. Тут понятно, ответы дает сам автор, что не может не радовать. К тому же всегда есть раздел вопросов/ответов в которых другие пользователи разобрали большую часть непонятных моментов.

  • Процесс обучения. Строится по принципу "Повторяй за мной". т.е. простое копирование кода. Но, в отличии от бесплатных я могу попробовать сделать по другому и если не получится то получу консультацию от автора.

  • Последовательность. Курс - законченный продукт с определенным последовательным объемом информации.

  • Ресурсы. Курс расположен на одном ресурсе где автор выкладывает уроки, видео, образцы кода, тут же происходит общение. Очень удобно.

  • Самостоятельные работы с возможностью разбора и получения обратной связи.

  • Срок обучения. Обычно весь курс виден сразу и я могу планировать свое время на обучение.

  • Возврат денег. В тех курсах, которые мне не подошли мне всегда возвращали все деньги.

  • В хороших платных курсах доступ к материалам остается навсегда и бесплатно.

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

  • Домашние задания с проверками и разборами ошибок.

Минусы платных

  • Не бесплатно.


Марафоны.

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

Чем плохи марафоны?

Во первых - временем прохождения. Я живу в Иркутской области. Все марафоны, что мне попадались, идут по московскому времени. Я проходил свой с 23.00 до 2-3 часов ночи, а утром на работу. И так 2 недели.

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

В третьих - там сильно никто помогать не планирует. Никто не будет сидеть с тобой пока ты разбираешься в теме. Если не успеваешь, то это твои проблемы. Организаторы тоже люди и им тоже надо отдыхать, заниматься своими делами и т.п.

В четвертых - там, по сути, нет никакого обучения. Все чему учат это печатать код как показывают на экране. А иногда сводится и к такому:

По поводу второго пункта. Меня насторожил тот факт, что в группе было, как минимум треть, тех кто проходил марафон во второй раз. Потом уже я понял, что это были те, кто отстали на первом и сейчас, ради заветного сертификата, проходят его еще раз. У меня не принимали домашку, объясняя тем, что она не подходит под Pixel Perfect, как исправить и что, никто ничего не говорил. Плюс ко всему, во время марафона постоянно говорили, что скоро стартует такой же марафон

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

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


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

Но! На сегодняшний день курсы - единственный способ быстро получить новую профессию. И неплохую профессию, с высокой з/п и без требования предъявить диплом о высшем образовании. Курсы дают неплохую теоретическую базу и примерное направление дальнейшего развития с указанием знаний, которые необходимо получить дополнительно. Но никто не будет переживать за тебя, поддерживать и подсказывать. Курсы учат учиться.

Учись быть самостоятельными!

Напиши про свой опыт обучения. Может там где я увидел минусы ты увидел плюсы и наоборот? А может я что-то упустил? Будет интересно почитать.

Подробнее..

Категории

Последние комментарии

© 2006-2021, personeltest.ru