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

Курсы программирования

Интервью с СЕО FitBase будущее за автоматизацией

28.05.2021 18:18:56 | Автор: admin

Знаем, как сложно родителям выбрать профессию для своего ребенка. Этот выбор определит, будет ли он доволен своей жизнью и будет ли он с удовольствием просыпаться по утрам, чтобы пойти на работу. Для того, чтобы немного облегчить выбор родителей, команда школы программирования для детей Пиксель провела серию интервью с состоявшимися специалистами в мире IT. В предыдущем интервью мы рассказали о менеджере проектов АСУ.

Василий Суворов, CEO FitBaseВасилий Суворов, CEO FitBase

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

Сколько тебе лет? Какой ВУЗ окончил?

Мне 33 года, окончил МГУС, факультет Информационные технологии.

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

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

Ты учился программированию самостоятельно или ходил на дополнительные курсы, кружки?

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

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

Расскажи о своей работе, какие у тебя обязанности, сколько зарабатываешь?

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

Команда FitBaseКоманда FitBase

Как ты подбираешь программистов в свою команду? Какими качествами должен обладать крутой специалист по твоему мнению? У меня плохой опыт поиска разработчиков через привычные для этого площадки вроде HeadHunter или Мой круг. Если нам требуются люди, я в первую очередь спрашиваю команду, есть ли кого посоветовать. И таких сотрудников у нас большинство. Из последних кейсов поиска сотрудников могу поделиться одним лайфхаком. Для поиска мобильного разработчика мы проанализировали сообщество фреймворка React Native, выявили там самых активных ребят, рассказали про продукт и предложили присоединиться к нему. В итоге мы нашли крутых мобильных разработчиков.

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

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

Знаю, у тебя есть сын. Ты бы отдал его в программирование? Знаешь какие-нибудь школы по программированию?

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

Какие профессии в области IT наиболее перспективные по твоему мнению?

Я думаю, будущее за нейроинтерфейсами, робототехникой и автоматизацией.

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

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

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

Подробнее..

Из песочницы Как из медиа перейти в разработку

19.07.2020 16:19:03 | Автор: admin
image
emile-perron/Unsplash

Я опытный журналист, редактор и начинающая разработчица (JS, node). Если бы мне девять месяцев назад сказали, что я буду работать техредом и деврелом в российской IT-компании, и с головой окунусь в разработку ПО вместе с несколькими сотнями сильнейших разработчиков, я бы не поверила.

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

Почему я хотела сменить профессию


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

Дизайна и маркетинга в моей жизни уже было слишком много. За 20 лет своей карьеры я писала про печатные и издательские технологии в ИД КомпьютерПресс, работала в лучшем когда-то ИД Independent Media, где делала бренд-медиа для крупных брендов и самый крутой журнал о йоге, выпускала академический бюллетень в Вышке, работала на модных медийных стартапах, успела повариться в SUP-Media и руководила сильными редакциями.

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

Мне хотелось другого:

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

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

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

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

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

Как не надо делать
Для погружения в IT я выбрала прыжок с разбегу интенсивные дорогие курсы (200к+ за 12 недель). Не стоит так делать, если вы новичок в программировании. Интенсивные курсы не подходят для тех, кто с нуля. Не верьте, если вам говорят обратное менеджеры курсов. На дорогих курсах сегодня не учат лучшие программисты. Такой ценовой уровень просто разогрев рынка.

А как стоит делать, давайте рассмотрим.

Как выбирать язык и направление


image
goran-ivos/Unsplash

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

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

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

// ВИДЕОФОРМАТ. Одним из первых видосов про профессию русского программиста стал для меня сатирический спич программиста С0ера. Он зародил во мне сомнения, что программисты хотят, чтобы их стало на Земле больше. Несмотря на то, что из каждого утюга говорится об остром общемировом дефиците двух миллионов разработчиков прямо сейчас.

Фильм Дудя про Кремниевую долину подстегнул наших IT-блогеров сделать ответный ролик про русских программистов: минский блогер Лекс (IT-Борода) собрал в одном видео всех активных русскоговорящих ютьюберов, которые рассказывают о разработке или учат своих подписчиков кодить.

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


Слушайте подкасты. Мой личный топ-5 на сегодняшний день (ссылки на ApplePodcasts):


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

Читайте книги про программирование. Рекомендую начать с книг Роберта Мартина, писателя и разработчика, автора принципа SOLID. Они помогут получить представление об архитектуре, культуре и философии программирования. Без теоретических знаний не проходит не одно собеседование. Знание теории закон вхождения в профессию и залог роста в ней.

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

Ещё мне как js-разработчице помогают ресурсы MDN, блог StackOverflow в том числе, learnJavaScript, Metanit, Telegram и YouTube разработчика Владилена Минина.

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

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

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

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

Как выбирать ментора


image
adi-goldstein/Unsplash

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

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

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

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

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

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


image
timothy-dykes/Unsplash

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

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

Публикуйте свои решения с codewars себе на github. И да, решайте задачи на codewars. И да, заведите аккаунт на github.

Купите второй монитор. Это удобно.

Коммитьте звёздные проекты на github. Вам зачтётся (но это не точно).

Разговаривайте с уткой. Не игнорируйте метод утёнка, чтобы решить задачу. Он и правда помогает.

Боритесь с соблазном заплатить много денег за обучение. Всё есть в интернете, переплачивать имеет смысл лично вашему репетитору/ментору/наставнику, если его объяснения хорошо вам заходят.

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

Как выбирать курсы


Поделав вышеперечисленные упражнения несколько месяцев, вы вполне сойдете за джуна, если у вас в портфолио на github уже будут свои проекты и какой-то уровень прокачки на codewars. Но на этом этапе велик риск словить синдром самозванца.

Это не такая уж редкая болезнь в IT. С ней, как и с прочей неуверенностью и помогут справиться интенсивные (и не очень) курсы. За время подготовки к курсам вы уже наверняка сможете накопить и на обучение, и на подушку безопасности, которая поможет вам, пока вы учитесь и ищете работу.

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

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

На курсах кстати вы можете понять, какой вы командный игрок, и насколько хороши ваши soft skills. Это очень важное знание, потому что кодинг лишь небольшая часть разработки и возможно для кого-то самая приятная. Львиная доля процессов в IT построена на взаимодействии между людьми, умении договариваться и работать в команде.

При выборе курсов смотрите на:


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

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

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

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

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

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

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

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

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

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

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

Подведу итог по первым шагам по уходу в разработку:

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

Из песочницы Субъективный обзор некоторых российских бесплатных образовательных платформ

02.08.2020 18:05:07 | Автор: admin
Expose the lies that enrage me (с) Arch Enemy

Случается, закончил человек не самый плохой ВУЗ, работает себе без особых проблем, но вокруг постоянно появляется что-то новое, неизведанное и хочется не отстать А бывает, студент ощущает, что с его ВУЗом что-то не то, учат чему-то не тому и за свою судьбу как-то страшновато пойдешь то ли на биржу труда, то ли в светлое IT будущее. Казалось бы, в чем проблема?! Займись самообразованием ресурсов в сети полно. Однако хотелось бы получить все в одном месте, с какой-то гарантией качества (свободного времени и так не хватает). Поэтому я попробовал бесплатно поучиться на ряде российских обучающих платформ. Оказалось, что и там с IT темами все довольно печально много никчёмных материалов, пустых обещаний, неудобств и откровенной халтуры. Expose the lies. В этой статье хочу поделиться субъективными впечатлениями о своем опыте прохождении ряда бесплатных IT курсов на российских обучающих платформах за примерно 1 год. Напишу о Skillfactory, Открытом образовании (openedu), GeekBrains и Stepik. В конце я подведу краткие итоги. Предлагаю заинтересовавшимся читателям обсудить статью и свой опыт онлайн обучения в комментариях.

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

1. Skillfactory



Платформа Skillfactory (далее SF) предназначена для предоставления платных образовательных услуг. По адресу https://lms.skillfactory.ru/courses на русском языке предлагаются 147 курсов. По адресу https://skillfactory.ru/events имеются и другие бесплатные материалы. Меня они не заинтересовали.


Из курсов SF бесплатным является только один: Открытый курс по Python.

Согласно описанию на сайте, этот курс позволяет освоить Python для анализа данных с нуля. Далее все выводы о SF делаются по опыту прохождения указанного курса.

Курс включает следующие темы: Python; Pandas; визуализация данных; NumPy; HTML-страницы и API ВКонтакте; классы и ООП; базы данных т.е. достаточно много полезных тем в одном месте. Сам курс мне в целом понравился, особенно Pandas, NumPy и визуализация.

Курс состоит из текстовых материалов и нескольких видео. Эти видео рекомендую не смотреть все очень затянуто. Достаточно текстов.

В самом начале курса указано, что коммуникация по курсу будет проходить в Slack (далее Слак). На деле общение ведется только силами обучающихся на курсе сама команда SF на вопросы и замечания по курсу не отвечает ни в Слаке, ни на сайте.

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


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

2. Открытое образование



Платформа Открытое образование (далее ОО) предназначена для предоставления бесплатных образовательных услуг (почему бесплатных в кавычках поясню позднее). Платных курсов я там не видел. По адресу https://openedu.ru/ на русском языке предлагаются 601 курс по разным направлениям подготовки (не только компьютерные науки см. скриншот). Фильтры для выбора интересующих курсов неудобны надо выбирать код направления подготовки, если знаешь. Поэтому понять, сколько на этой платформе именно IT курсов, сложно. Проще периодически просматривать новые курсы и записываться на интересные. Практически у всех курсов есть интервал времени, когда на курс можно записаться. Не успел жди следующего года (семестра или иной даты).

Курсы на ОО готовятся кафедрами различных (не только столичных) ВУЗов.


Научиться делать что-то самостоятельно, пройдя только соответствующий курс на платформе ОО, не получится, т.к. курс соответствует лекциям в ВУЗе, а соответствующих им семинаров нет: решать задачи тут не научат. Рейтинга курсов по отзывам на ОО мне найти не удалось приходится ориентироваться по названию самого курса и ВУЗа. Как оказалось ВУЗ роли не играет: у всех все однотипно. Приятно то, что курсы записаны профессиональными лекторами, поэтому мычания, пауз, повторов практически нет. Однако почти все курсы сделаны в стиле говорящая голова лектор монотонно произносит текст лекции примером такого курса может служить https://openedu.ru/course/spbstu/BIGDATA/.

Некоторые курсы в одном и том же виде без изменений размещаются на разных платформах, например, Санкт-Петербургский Государственный Университет поместил свой курс по базам данных и на ОО, и на Стэпике, и на Coursera: соответственно https://openedu.ru/course/spbu/DTBS/,https://stepik.org/course/2614/promoи https://www.coursera.org/learn/data-bases-intr. Качество от этого не выросло оценка курса на Стэпике 3.8 и 4.1 на Coursera. На самом ОО узнать мнения слушателей о курсах невозможно. Вот некоторые отзывы со Стэпика и Coursera: Курс очень сложен для восприятия, простые вещи объясняются сложным языком; Курс отбивает желание изучать БД; Тестовые задания типичные для российских универов: в лекции упоминается малозначительный факт, а потом тебя просят вспомнить его дословно, например год, в котором произошло событие; в курсе наблюдаются неточности, в частности с пояснениями и слайдами на некоторых видео.

Общение по проблемам на платформе ОО ведется с командой ВУЗа, который разработал курс. Отвечают студенты, а не тот преподаватель, что ведет курс, поэтому качество ответов зачастую вопрошающих не удовлетворяет: в одном случае при выборе определенных ответов система засчитала их как верные, в другом случае как неверные. Как так?? Это была ошибка с нашей стороны Приносим свои извинения Переписывался с сотрудником курса по электронной почте что-либо исправить они уже не могут. Безобразное сопровождение курса (переписка не моя, но с оценкой я согласен). Ответы иногда задерживаются; на некоторые вопросы совсем неотвечают. Пример: Из видео с практикой не понятны формулы, которые использовались для проверки гипотезы по А/В тесту.... На момент написания этой статьи ответа нет, а прошло 3 месяца.

Тестирующая система примитивная в подавляющем большинстве курсов можно только отмечать правильные варианты ответов радиокнопками или чекбоксами. Более продвинутую систему проверки я заметил у курсов ИТМО там код прогоняется на наборе тестов, но эта система загружается по внешней ссылке и крайне немногословна или задача решена (100%), или задача не решена (0%).

Почти все курсы с дедлайнами, как на отдельные темы, так и на весь курс. За это платформе ОО жирный минус. Сертификат о прохождении курса предоставляется только за деньги 1800 рублей с отдельным экзаменом под видеоконтролем это к вопросу бесплатности. Еще один минус. Пишут, что сертификат можно зачесть в своем ВУЗе. Если не хочется платить за сертификат, то опять делаем скриншот на память. Интересно, что скриншот будет выглядеть практически так же, как у Skillfactory (сравните со скриншотом в разделе про SF) кроме заголовка, конечно. Кто у кого скопировал или еще какой-то вариант?


Последнее домашнее задание (HW12 на скриншоте) по курсу Введение в ИИ от ВШЭ было таким: написать эссе Можно ли считать наложение стилей и генерацию картинок творчеством и могут ли нейронные сети стать новым трендом в искусстве?. Вот обсуждение этого задания. Восторгов я не заметил.

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

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

3. GeekBrains




Это платно. А это бесплатно.


Платформа GeekBrains (далее GB) предназначена для предоставления платных образовательных услуг. По адресу https://geekbrains.ru/ на русском языке предлагаются 10 бесплатных IT курсов и 17 интенсивов. Также можно бесплатно посмотреть много (обещают 1197 не считал) вебинаров и пройти ряд тестов. Сами тесты заточены под читаемые в GB курсы, поэтому в них попадаются сомнительные вопросы, например, чему равно значение выражения 0 or () or [] про Python. Полезность такого сокровенного знания под большим вопросом. Если кто-то использует подобный код в реальной жизни, прошу поделиться примерами в дискуссии. Сложилось впечатление, что эти тесты также являются экзаменами по некоторым курсам: сдал я тест по Python, например, потом решил курс по нему же посмотреть гляжу, а финальный экзамен по курсу я уже сдал и некоторое количество баллов за курс мне начислено. Сами баллы, кстати говоря, совершенно бесполезны: их нельзя на что-то потратить и они не отображаются в сертификате за тест.


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


Однако тут (http://personeltest.ru/aways/habr.com/ru/company/ozontech/blog/512026/) можно узнать, что Александр Скударнов, EdProduct направления Программирование образовательного портала GeekBrains, начал с того, что отметил: гарантию трудоустройства никто не даст. Expose the lies

Фильтры для выбора курсов на платформе GB есть. Уровень бесплатных курсов примерно одинаковый для совсем начинающих (у SF курс по Питону был тоже для начинающих, но куда содержательней). После каждого урока предлагают оставить отзыв о нем для контроля качества, т.е. твой отзыв другие учащиеся не увидят.

Качество лекторов очень разное некоторые ведут урок очень живо и излагаемое протеста не вызывает; других можно слушать только на скорости 1.25х или быстрее, иначе уснешь, и к излагаемому ими следует относиться скептически. У одного из таких лекторов я узнал, что в базах данных для приведения таблицы в третью нормальную форму (3НФ) нужно все повторяющиеся значения (например, название производителя) заменить ссылками на строки новой таблицы производителей. Про проверку на транзитивность (https://ru.wikipedia.org/wiki/Третья_нормальная_форма) не было сказано ни слова. Кстати, этот курс уже стал платным стоимость 5500руб.

Техподдержка GB на вопросы отвечает быстро. Недостатки в курсах обещают исправить не проверял. Есть контроль работы техподдержки после обращения присылают письмо с просьбой оценить ответ. Про ситуацию с 3НФ тоже им писал ответили, что ну он, наверно, сказал, как на практике делают. Устроит ли такой ответ про 3НФ на каком-нибудь собеседовании вот в чем вопрос (с).


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

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


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


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

4. Stepik



Платформа предназначена для предоставления образовательных услуг. Перечень курсов по различным предметам размещен по адресу https://stepik.org/catalog. Количество курсов 700. Курсы в основном бесплатные, но есть и платные (22 штуки). В каталоге курсов кроме названия и авторства отображаются: число записавшихся на курс, его стоимость, соответствие критериям Стэпика и средняя оценка по отзывам. К критериям Стэпика и средней оценке у меня накопилось много вопросов см. далее. Наличие сертификата за курс в каталоге не отображается.

Фильтры по курсам есть, но проще периодически просматривать новые курсы и записываться на интересные. Уровень курсов разный есть и для начинающих, и более продвинутые, например, по алгоритмам от Computer Science Center. После прохождения 80% курса Стэпик предлагает оставить отзыв о нем. Предложение довольно навязчивое если один раз отказался, то потом оно повторится. Бывает, что предложение оставить отзыв поступает, даже если отзыв уже оставлен. В таком случае при попытке сохранения нового отзыва появится неинформативное сообщение об ошибке.

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

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

1. Долгая работа проверочной системы: линейная программа на Kotlin из 5 строк проверяется на сайте Стэпика секунд 20-30. Почему так долго? Что-то можно сделать? Ответ: время проверки ответа зависит от загруженности сервера.
Формально все правильно, но осадок остался Хотелось бы, чтобы техподдержка почувствовала испытываемые пользователями неудобства и сама бы предложила сделать, например, более информативное сообщение об ожидании (о его причинах).

2. Некорректная работа сайта: элементы страницы проверочной системы отображаются с задержкой сначала появляется надпись Вы получили 1 балл из 1, а через пару секунд (или дольше) загружаются остальные элементы страницы см. скриншот ниже. Ответ: это нормальное поведение интерфейса. Запишите скринкаст.
А если пользователь, например, не знает, как скринкаст сделать? Я раньше считал, что это обязанность поддержки пытаться воспроизвести issue.

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

Скриншот одной такой переписки я сохранил:


Например, вот эта программа (https://stepik.org/lesson/67625/step/3) проверяется секунд 20-30, после чего появляется надпись про полученные баллы. Потом, еще через пару-пятерку секунд, надпись Проверяем исчезнет, и только тогда появятся поздравления и удобная кнопка перехода к следующей задаче. Непонятно, почему возникает такое дополнительное ожидание.



Есть и забавный момент. Иногда авторы курса с помощью проверочной системы Стэпика собирают статистику, например, Будете ли Вы рекомендовать этот курс?. Независимо от выбора ответа, например, Нет, появляется надпись вида Молодец! Все правильно.

Контроля качества курса со стороны Стэпика нет все возлагается на добросовестность автора. Если тот ошибку исправлять не хочет, то курс останется в изначальном виде см. фрагмент переписки выше. Поэтому при прохождении курса на Стэпике не удивляйтесь, если некоторые ошибки не исправляются по 5 лет примером является тот же курс по алгоритмам от Computer Science Center. Предложения по улучшению сервиса, например, обязательный входной контроль курса или блокировка курса при низких оценках его составных частей (т.н. стэпов), поддержкой также не принимаются мол, спасибо, но у нас на Стэпике свое видение.

Бывает, что ВУЗы халтурят и размещают не специально записанные для курса лекции, а нарезку низкокачественного видео из зала, например, https://stepik.org/course/65388 (средняя оценка курса 4.4, 5318 учащихся). Можно насладиться разговорами лектора с аудиторией или увидеть, как лектор выходит за пределы кадра и там, видимо, что-то чертит маркером на доске. Что именно, можно только догадываться по аудио. Некоторые видео в этом курсе от МФТИ почему-то записаны в зеркальном отражении буквы на слайдах идут справа-налево. Ну а Стэпик опять не при чем.

Не удивительно, что качество курсов на платформе самое разнообразное: ни количество учащихся, ни соответствие критериям Стэпика, ни средняя оценка не гарантируют качество. Пример: курс Нейронные сети и обработка текста от Самсунга 12 731 учащийся, средняя оценка 4.8. Все вроде бы хорошо. А финальную задачу смогли решить 59 человек (https://stepik.org/lesson/261085/step/10?unit=241829). Можно ли такой курс назвать качественным?

Чтобы заранее ответить на возможные вопросы: я в эти 59 человек вхожу, результат по курсу 86% мой худший результат на Стэпике (еще один курс от Самсунга первый мой курс на Стэпике 97%, остальные по 100%. Комплекс отличника, Ja Ja):


На этом же курсе авторы очень плохо отвечали (чаще нет, чем да) на вопросы и замечания. Ответы были зачастую бесполезны: почему сделали вот так ну, так сделали. Сам курс сырой: много опечаток, неточностей Зачем было выкладывать в таком виде, без проверки? Забавный пример: один прогон нейронной сети у авторов курса на некоторых семинарах занимает 1 час (на их оборудовании). Слушателям рекомендуется использовать облачные вычисления в Гугл Колабе, там вычисления происходят соответственно в 2.5 раза дольше. Авторы в качестве задания предлагают подобрать гиперпараметры, что подразумевает прогон обучение несколько раз. А это обычное задание на курсе за 1 балл! По совокупности за этот курс поставил авторам оценку 1.

Заметил, что в положительных отзывах на курсы Стэпика учащиеся часто подчеркивают, что бесплатно приобрели некие знания. На мой взгляд, этого мало для положительной оценки курса. Бывает, что лектор не является профессионалом мычит, заикается, нагнулся и пишет на планшете перед собой (я столкнулся с таким в курсе по Алгоритмам). И к заданиям бывают претензии дольше пытаешься понять, что хотят от тебя авторы, чем решаешь. И примеры из видео не воспроизводятся, т.е. авторы курса выложили код, показали результаты его работы, а эти результаты у учащихся другие, причем найти хоть кого-то, у кого авторский код заработал без изменений, не удалось (https://stepik.org/course/54098) все тот же курс от Самсунга. Это всё к вопросу отсутствия проверки курса со стороны Стэпика при его приеме на платформу, т.к. авторам кажется, что у них все хорошо и поэтому они на замечания реагируют зачастую агрессивно (чаще вообще не реагируют), а на деле все печально. Критерии оценки за курс также обсуждаемы.

Вернемся к платформе. Тестирующая система Стэпика способна проверять код программы допускаются несколько вариантов правильного ответа. Информация о том, какой тест не пройден, не отображается, поэтому примерами тестов учащиеся обмениваются сами в комментариях. В целом, это лучшая система из рассмотренных здесь образовательных платформ. Если бы еще тормознутость убрать, то будет совсем хорошо. Для Котлина, например, могу сослаться на https://play.kotlinlang.org/ там реакция практически мгновенная. А с учетом того, что Стэпик это порождение JetBrains (https://ru.wikipedia.org/wiki/Stepik), то как-то даже странно, почему не обратились к родителю за помощью. Кстати, при активном решении задач по Питону, например, Стэпик предлагает бесплатные лицензии на продукты JetBrains, т.ч. родственные связи и ныне действуют.

У некоторых курсов на Стэпике есть дедлайны. После них баллы за правильные ответы не начисляются. Точнее так: после мягкого дедлайна начисляется половина балла, после жесткого дедлайна ничего не начисляется. Сертификаты имеются и обычные (примерно 70-80 % правильных ответов зависит от автора курса), и с отличием (примерно 90 % правильных ответов). Сертификаты выдаются не за все курсы. На сертификате отображается имя пользователя, введенное в личном кабинете. Ценность сертификатов Стэпика мне не известна.


Если курс не понравился, то бросить его на Стэпике можно в любой момент без обращения в поддержку. Однако в каталоге курсов он будет отображаться.

Выводы

  1. Желание научиться чему-то бесплатно на русском языке вполне выполнимо. В наличии несколько образовательных платформ.
  2. Проблемы с такими бесплатными курсами отличаются от платформы к платформе. Общими являются следующие проблемы: многочисленные ошибки в курсах и отсутствие желания у авторов и платформы их исправлять.
  3. На платных платформах (SF, GB) бесплатные курсы являются, по моему мнению, скрытой рекламой. У GB так и не особо скрытой. С учетом этого, я не рекомендую там искать бесплатных знаний. А с учетом гарантированного трудоустройства и платных тоже.
  4. На ВУЗовской платформе ОО добавляется еще и влияние стиля российского высшего образования: авторы читают лекции в той же манере, что и в аудитории голая теория без практики. Возможно, что поэтому и есть возможность зачесть курс в своем университете какая разница, очно ты лекцию слушал или её же, но онлайн? Поэтому, если Вам не нужен такой зачет за 1800 рублей, то на ОО учиться я также не рекомендую.
  5. Из числа протестированных курсов остается один Стэпик. Недостаток из второго пункта присущ и ему. В техподдержке, такое ощущение, сидит один человек, но толку с него (точнее с неё) никакого. Однако на Стэпике попадаются курсы с большим количеством практических заданий, в том числе и довольно сложных (иногда чересчур). Поэтому искать знаний я рекомендую именно тут, не ожидая особо качественного сервиса, конечно бесплатно же.

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

  1. Перед размещением курса на образовательной платформе курс проходит независимое тестирование, т.е. тестер сотрудник платформы, или фрилансер, или доброволец проходит этот курс и дает авторам список замечаний. После их устранения курс размещается на платформе. Непроверенные курсы в каталоге не отображаются.
  2. Доступность всех материалов размещенного курса обеспечивает платформа.
  3. Курс должен быть создан специально для платформы никаких записей с семинаров или лекций. На мой взгляд, лучший формат курса демонстрация интерактивных слайдов с закадровой озвучкой (без мычания, естественно). Изображение лектора никакой полезной информации не несет.
  4. На курсе не должно быть дедлайнов. Сертификат о прохождении курса обязателен.
  5. После размещения курса, его авторы обязаны отвечать на вопросы учащихся в течение 1 недели и устранять замечания по курсу в течение гарантийного срока, например, 1 год. Срок окончания поддержки должен быть ясно указан в описании курса.
  6. Курс с завершившейся поддержкой должен специально выделяться в каталоге курсов, например, красной рамкой.
  7. Должна быть возможность фильтрации таких курсов в каталоге.
  8. Если авторы нарушают свои обязательства, то запись на курс блокируется, а курс в каталоге платформы не отображается. Уже обучающиеся на заблокированном курсе могут его завершить.
  9. У учащихся должна иметься возможность оценивать как весь курс в целом, так и его отдельные темы, с возможностью оставить пояснение. Если оценка за курс или тему опускается ниже 4.0, то запись на курс блокируется, аналогично предложению 8.
  10. У учащихся должна быть возможность заблокировать отображение курса в каталоге для себя например, если курс не понравился или уже пройден.

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

Субъективный обзор некоторых англоязычных образовательных платформ. Часть 1 Hyperskill.org

13.09.2020 18:19:09 | Автор: admin
Как и обещал в предыдущей статье, продолжаю свои изыскания. Для тех, кто не читал мою первую статью про российские бесплатные образовательные платформы, сообщаю, что я пришел к следующему выводу: с учебой там все довольно печально много никчемных материалов, пустых обещаний, неудобств и откровенной халтуры.

Поскольку сейчас карантина нет, то свободного времени на изыскания не так уж и много, поэтому буду публиковать обзор англоязычных платформ по частям. Сейчас речь пойдет о Hyperskill.org (далее HS) aka Академия JetBrains (далее JB). Предлагаю заинтересовавшимся читателям обсудить статью и свой опыт онлайн обучения в комментариях. Также будут полезны предложения о выборе интересных англоязычных образовательных платформ.

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

Hyperskill.org



Платформа HS предназначена для предоставленияплатныхобразовательных услуг. По адресуhttps://www.jetbrains.com/academy/на английском языке предлагается пройти обучение по 4 направлениям, из них 2 еще не полностью готовы (помечены как beta) см. далее. Русского языка нет и, похоже, не планируется.



Для давно зарегистрированных пользователей, обучение по 1 января 2021 года бесплатное. Я зарегистрировался давно
Приятно то, что тут нет лжи о каких-либо гарантиях трудоустройства: We believe that learning at JetBrains Academy will definitely help you become more prepared for your first job interview. The more complex projects are inspired by test assignments for junior developer positions. We do not have any special agreements with IT companies and therefore cant give any guarantees.
Очень хотелось бы узнать, на чем базируется эта вера. Обычно подобная уверенность основана на впечатляющих регалиях автора/авторов контента. На HS ничего подобного я не увидел Подробнее про авторов HS я напишу чуть ниже в этой статье.

На главной странице HS где-то внизу упомянуто, что для прохождения курса потребуется установить соответствующий продукт JB. Полагаю, что мало кто это прочитает я, вот, не прочел Далее в курсе (например, в теме про IntelliJ IDEA) расскажут о крутости продуктов JB. Но вам не скажут, что делать, если уже установлена другая IDE. Продукт JB ставить обязательно для продолжения курса? Позднее выясняется, что да: без установки продолжить обучение не получится.

Продолжу обзор.



На первом шаге HS предлагает выбрать направление обучения: Java, Python, Kotlin и, судя по скриншоту выше, JavaScript. Время обучения такое:
  • The full Java track takes 144 hours to complete on average.
  • The full Python track takes 93 hours to complete on average.
  • The full Kotlin track takes 47 hours to complete on average.



С JavaScript ситуация на HS непонятная после нажатия кнопки Choose your track, этот пункт отсутствует. Но вот по этому адресу один проект на JavaScript все же есть.

Я решил изучать Java: трек Java Developer, 29 projects, 144 hours, 371 topics. Далее все выводы о HS делаются по опыту изучения Java.
Сразу возник вопрос о реальности оценки времени на обучение: как тут, например, сочетаются уровень сложности и среднее время решения? Ну это только HS может ответить



После выбора трека HS предлагает выбрать проект для обучения одного из четырех уровней сложности: от Easy до Challenging. Я легких путей не искал. Для каждого проекта можно узнать его среднюю оценку учащимися, среднюю продолжительность, количество изучаемых в проекте тем. Выдача сертификата не предусмотрена.



Если промотать список полностью, то видно, что даже самый сложный проект затрагивает меньше 1/3 всех доступных тем: 110 из 371. Поэтому, после завершения первого проекта, можно взяться за следующий или посмотреть т.н. Knowledge map и изучать оставшиеся интересующие темы прямо оттуда.



Каждая тема состоит из теории и нескольких вопросов и/или упражнений. Теория дается в виде текста видео нет. Для меня это плюс. И под теорией, и под вопросами можно подискутировать с другими учащимися. Иногда там появляются и посты членов команды HS: в основном про исправление ошибок в теме fixed.
И вопросам, и теории можно поставить оценку и дать пояснение. Уже отметил, что явные ошибки в контенте HS старался исправить. Но не все

Изучение карты знаний позволяет (highly likely) предположить, что проект задает последовательность изучения тем, а сам материал темы под проект не адаптируется. Заметно, что темы создаются разными людьми наблюдается различие стилей. Попадаются забавные образцы. Например, в теме про IDE можно увидеть следующий оборот: If you're thinking wait, it sounds too good, what's the catch? you are right. Эта тема общая для всех языков в HS: Java, Kotlin, Python.

Принцип создания контента HS затрудняет усвоение материала, т.к. авторы контента не полностью учитывают, что уже было изучено конкретным учащимся, а что нет. Это несколько странно, т.к. зависимости тем на Карте знаний есть, и в большом количестве. Скорее всего, традиционно, что-то пошло не так и какие-то зависимости потерялись. Например, Theory: Standard output дается уже после задач на вывод. Или, другой пример из самого начала курса.


Поработай JVM.

В переписке с HS удалось выяснить, что контент создается по следующей модели: желающий (скорее всего учащийся) пишет тему и несколько примеров к ней. За это он получает 20003000 руб. Я попытался убедить представителя HS, что такая модель, очевидно, ведет к невысокому уровню курса и наличию ошибок. Успеха я не достиг. Однако, как часто бывает, Хабр помог: я наткнулся на статью об онлайн-школах. Там я нашел возможное объяснение такой позиции HS: третья ошибка высокая себестоимость продукта авторы хотят, чтобы курс был максимально качественным. HS, похоже, эту ошибку не хочет совершать: при их подходе стоимость контента будет близка к минимальной, а пипл хавает и так. Хотя и не всегда достаточно часто в обсуждении советуют почитать тему на, например, http://tutorials.jenkov.com/ на HS информации для решения задачи зачастую не хватает.
Со своей стороны могу также порекомендовать известный JavaRush. Читал их статьи мне понравилось
Если кто-то хочет поработать в HS за указанный выше прайс (а может и больший как договоритесь), то обращайтесь по адресу https://vk.com/wall-118500697_392.

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



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

Большим недостатком платформы HS является тестирующая система проверки заданий идут очень медленно: эта задача, например, проверяется порядка 5 секунд.



А вот эта больше 30 сек.



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

Еще одним предполагаемым средством затягивания учебного процесса является т.н. Code quality не ясно на что он влияет; я лично такого влияния вообще не заметил. Но предупреждениями утомляет (а отключить их нельзя) и побуждает больше времени провести над задачей. А $$$ идут Похоже, что это заговор, да
На скриншоте пример грубой с точки зрения HS стилистической ошибки отняли одну ракету.



Другой пример грубой стилистической ошибки: int x2 = 0, x3 = 0, x4 = 0, x5 = 0;. Считается, что так писать нельзя. И пропуск пробела это тоже грубая ошибка.
Или еще пример проверки стиля: correct, but can be improved.



При этом сам HS такие конструкции часто использует в теории, например, тут.



И в рекомендованных решениях тоже:


Editors choice!

Кстати, после этого я прошел еще с десяток тем, но про ошибку The user-supplied array is stored directly мне еще ничего не рассказали. Ну, мы то знаем А вот тот, кто не знает, при таком лоскутном обучении может и зависнуть над этой ошибкой.

Полагаю, над контентом работают в основном студенты за малый прайс. Их труды, похоже, проверяются аналогичным способом; если вообще проверяются писал выше про посты членов команды HS. Их основное содержание: исправлено, исправлено Поэтому попадаются глупые ошибки, на которые учащиеся не указали. Например, в уже упомянутом тесте на знание Java в одном из вопросов попались два одинаковых ответа. Или задачи в тесте формально разные, но по факту для их решения надо помнить ключевые слова при объявлении метода main.
Аналогично и при решении задач по определенной теме уже в треке: зачастую задачи отличаются лишь именем переменной и её типом.

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



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



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

Имеются и другие ошибки в самом интерфейсе платформы HS: сколько-сколько мне секций осталось до конца темы?!



Думаю, что про Hyperskill написал достаточно. Перехожу к выводам.
  1. Платформа HS первая из рассмотренных мной англоязычных образовательных платформ.
  2. Старожилы продолжают до конца года учиться бесплатно, а новичкам придется заплатить по 25$ в месяц после 67 дней халявы.
  3. Несмотря на платность платформы, её проблемы схожи с бесплатными родственниками: ошибки, как в контенте, так и на самой платформе, а также отсутствие желания у платформы эти ошибки полностью исправлять. Похоже, что на тестировании сэкономили.
  4. Имеются и специфические для HS проблемы, связанные со способом формирования контента множеством отдельных безымянных авторов по темам а именно: видимая лоскутность как по стилю, так и по последовательности предлагаемых для изучения тем. Естественно, что на обучении все это сказывается негативно. Информации систематически не хватает.
  5. Достоинством такого лоскутного подхода является возможность предложить учащимся множество проектов без особых денежных затрат HS.
  6. Периодически возникает ощущение, что скорость прохождения трека HS искусственно замедляет. Полагаю, что это связано с повременной оплатой обучения. Доказать это, естественно, я не могу. Возможно, что просто бюджет на доводку платформы закончился. Об этом может свидетельствовать и предлагаемый HS трек по JavaScript, которого, на самом деле, практически нет.
  7. Бюджета, похоже, не хватило и на тестирующую систему работает крайне медленно. Об этом свидетельствует и принудительный перевод тестирования предлагаемых задач на собственный компьютер учащегося начиная с определенного этапа обучения.
  8. Можно приветствовать входное тестирование уровня знаний ученика для составления персонального плана обучения. Вот если бы этот план был доведен до ума и при обучении не предлагались тупые задачи при правильных ответах в тесте на относительно сложные вопросы!
  9. Ну и самое главное: рекомендую ли я учиться на HS? За 25$ в месяц я бы не стал, тем более за 50$ в месяц. Бесплатно поучиться можно, но помните про п.2 выше.
Подробнее..

Как сменить свою специальность на программиста?

04.07.2020 18:11:54 | Автор: admin
Вам надоела ваша работа? Нет перспектив? Возможно, только начинаете свой путь?
В данной статье мы рассмотрим какой путь надо пройти, сколько времени, сил и денег надо затратить чтобы с нуля дойти до уровня, когда вам начнут присылать приглашения на работу за рубежом на очень вкусных условиях.



Здравствуйте, меня зовут Александр Зеленин. Я программист с более чем 15 годами опыта. За это время удалось поработать на позициях от веб-разработчика до CTO, в компаниях разного уровня (от 5 человек, до 2000+, стартапах, корпорациях), в разных странах и городах. Так же собеседовал более тысячи человек за всё время, вёл образовательные курсы, менторил и так далее.

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

Обязательно ли релевантное высшее образование?


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

Но, всё же, с высшим образованием проще?


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

Я интроверт. Программист это же самый круто вариант для интровертов, да?


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

Сложно учиться?


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

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

Оно того стоит вообще?


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

Специалист высокого уровня может рассчитывать на следующее (на момент написания этой статьи):

  • Для РФ: зарплата в районе 200 000 рублей белая, ДМС (на семью), печеньки, свободный график, оплата образования/садика детей, поездки на профильные конференции, высокую стабильность, интересные задачи, полный пакет для переезда (квартира на месяц, билеты, перевозка грузов, помощь с поиском жилья и т.п.)
  • Для Европы: зарплата в районе 5000 евро, и в принципе всё что и выше. В пакет для переезда часто ещё включают единоразовую выплату в районе 7000 евро. Часто ещё местная пенсия начинает капать и есть возможность позже получить вид на жительство / гражданство
  • США/Канада/Швейцария/Мидл Ист: зарплата в районе 10000$, и все плюшки выше

Что значит специалист высокого уровня?


Принято условно делить специалистов на 3 уровня. Часто очень разнятся требования, но в общем случае они следующие:

  1. Junior может эффективно решать задачи, но требуется помощь более опытных коллег при столкновении с неопределенностями (не понятна задача, не ясно как решать, не ясно кого спросить и так далее)
  2. Middle самостоятельная единица, которая может и задачу решить очень хорошо, и всю информацию собрать сам из нужных источников
  3. Senior эксперт, который хорошо знает не только программную часть, но и понимает бизнес, в котором работает и может предлагать решения на совершенно разных уровнях

Окей, и сколько времени учиться на каждый из уровней?


Самый первый этап, пожалуй, самый сложный психологически. На Juniorа вам потребуется около 1500 часов чистого времени (это полгода по 8 часов каждый день).

После чего джуниором проработаете около 1.5 лет.

После чего мидлом ешё года два.

Если не меняли предметную область, то добро пожаловать в сеньёры (4-5 лет суммарно).

Погоди, погоди Я вот видел курсы, там 3 раза в неделю по 2 часа и через два месяца мне обещают зарплату в 100 000 в месяц!


Ну если обещают, значит так и будет (нет).

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

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

Окей, окей, а вообще польза от курсов платных есть?


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

Какие курсы порекомендуешь?


Бесплатные. Я серьёзно. Главная ценность курсов общение с ментором. На этом их польза заканчивается. Проблема многих подобных платформ в том, что: на них много участников и внимание ментора рассеивается, менторы не квалифицированы.

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

Эээ, так как тогда учиться?


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

Ментор, ментор что, совсем никак без него?


Можно и без него. Но тогда надо намного больше читать, делать, пытаться ориентироваться во всём и перепроверять себя постоянно.

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

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

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


Подловили. Это очень сложный вопрос. По предыдущему опыту сокращение количества часов увеличивает срок обучения непропорционально (т.е. по 4 часа будет не ожидаемый год, а, скажем, 1.5-2). Так же, в зависимости от текущей работы, усвоение сложного материала может просто не идти и всё, то есть совмещать может не получится. Это всё зависит, всё индивидуально.
Один из способов это накопить средств и уделить полгода на такой переход. Это может быть очень сложным, когда уже есть семья или другие требования в виде ипотек и подобного. А ещё может получиться что с ходу сложно найти работу или какие-либо непредвиденные обстоятельства типа короновируса.

Другой способ это ну фигачить по полной. А вы чего хотели? :-D

У меня друг закончил курсы за два месяца и начал получать 5000$ в месяц сразу после


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

Где искать работу?


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

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

Можно ли устроиться сразу на удалёнку?


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

Мне 45. Возьмут ли меня Juniurом без живого опыта?


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

Какой язык учить?


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

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

Я думал ты пошутишь про английский. Надо его учить?


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

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

Погоди, ты сказал язык не важен что?


Это не совсем так. Он важен, конечно, но после определённого этапа (senior) вам будет всё равно на каком языке писать. Концепты, на которых строится программа, переносятся из языка в язык и именно их изучение занимает намного большее время.

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

Окей, можешь накидать мне план что делать то?


  1. Определитесь реально оно вам нужно. Стоит ли оно того?
  2. Решите чем хотите заниматься. В идеале составить список компаний, в которых хотели бы работать. В идеале выбрать, где хотите быть через полгода, через два и через пять.
  3. Напишите в компании, где хотите через полгода работать. Узнайте условия найма, что нужно выучить и так далее.
  4. Составьте план тем, которые надо изучить (из описания вакансий и информации из пунктов 2 и 3)
  5. Учите, практикуйте. Каждый день. Каждый. Обязательно. Без пауз.
  6. Решайте задачки на платформах типа Leetcode и Hackerrank. Минимум 1 в день, хотя бы easy уровень.
  7. По мере продвижения можно контактировать с рекрутерами из компаний и искать возможность чтобы вас наняли. Чем раньше, тем лучше. Для увеличения шансов можно попробовать сделать какое-нибудь мини-решение полезное для компании, чтобы заинтересовать их.
  8. Найдите ментора.

Вне зависимости от языка список тем, которые я рекомендую включить в план: контроль версий (git, github), структуры и алгоритмы (знать все распространённые, big O, знать что что-то такое есть и уметь найти быстро), IDE (зачем, как настроить), отладка и профилирование (как искать ошибки, точки остановки и прочее), тестирование (написание хотя бы простейших тестов и понимание что включать в них), базы данных (реляционные, сетевые, документо-ориентированные), документирование (как писать, зачем), планирование и приоритизация (сколько займёт, что делать и когда), изучить Style Gudie по вашему языку, linux (базовое понимание что там, зачем и куда, умение запустить свой код там), пакетные менеджеры (как пользоваться, зачем, как поддерживать), семантичное версирование (зачем оно, как следовать), фреймворки (на нужном языке, хотя бы для ознакомления несколько), инструменты для сборки и автоматизации, криптография (базово что существует, а не как сделать), авторизация и аутентификация (что есть что и что для этого существует).

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

Я видел, что компания, которая мне интересна обучает с нуля и нанимает. В чём подвох?


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

Жесть, всё сложно.


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

Из песочницы Вы безумны, остановитесь пока не поздно

18.11.2020 14:04:51 | Автор: admin
image

Привет Хабр! Всего каких-то пару лет назад на страницах нашего любимого ресурса красовались вдохновляющие статьи успешного успеха, как вчерашний сантехник / таксист / сварщик / сутенёр успешно интегрировался в IT сообщество и начал зарабатывать 100500$ в секунду левой пяткой. Здорово, не правда ли? Но всё ли так радужно с этими историями с точки зрения действующих разработчиков? Прошу под кат.


Ты кто такой?


Позвольте представиться. Я являюсь обычным .NET разработчиком в рядовой государственной компании, основным способом заработка которой является разработка программного обеспечения. За спиной оконченный с отличием %City%ГТУ где-то за МКАДом, служба в рядах Вооружённых Сил России, и мечтания о светлом будущем. Звёзд с неба не хватаю и на роль нового Короля разработки не претендую (привет Фил).

Как и многие, я познакомился с программированием ещё в школьные годы. Правда, в силу возраста, я начинал с Pascal в красивой IDE. Потом были поделки калькуляторов всех мастей на Delphi, которые даже использовались при решении домашних задач по математике. Потом учёба в университете, великий и могучий C++, понимание что всё тлен и путешествие в чудесный мир C# с LINQ и асинхронностью.

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

Но что происходит сейчас в мире информационных технологий? На каждом углу реклама курсов, которые сделают из тебя настоящего программиста за 21 день с гарантированным трудоустройство сразу на позицию %Language% Middle Developer. Разговоры о том, что программировать уже нечего, достаточно только объединить готовые решение, заботливо скомпилировав и отправив в удалённый репозиторий. Разглагольствования некоторых медийных личностей, утверждающих что программисты больше не нужны (вы поняли о ком я), на фоне разговоров о безумных зарплатах в IT. И даже крупные компании, такие как Google, вносят сумбур. Какое-то время назад я посмеивался над этим, но уже не до смеха

Так больше продолжаться не может


Всё началось с желания моего хорошего друга стать крутым разработчиком, пускай это будет Алексей. Алексей амбициозный парень в возрасте 25+, окончивший 11 классов и не доучившийся в техникуме на технической специальности, не имеющей с IT ничего общего. Я, как единственный знакомый программист, был привлечён консультантом по новому для него миру. Главный вопрос был с чего начать и что делать. Я конечно же начал советовать читать умные книги, но этот способ не подошёл. Алексею не хватало усидчивости вчитываться в каждое слово, поэтому абзацы и даже целые главы читались по диагонали без единой попытки перевести код со страниц в IDE с красивой подсветкой. Если человек не видит результат, он начинает искать серебряную пулю. Так вышло и в этой ситуации. Был оплачен доступ к популярному онлайн ресурсу, предлагающему задачи для решения в онлайн компиляторе. Но роста не было, как оказалось не было понимания базовых вещей. Алексей не опускал руки и упорно продолжал долбиться в закрытые двери, при этом моей виной было непонимание этого аспекта, и последовавшая за этим фатальная ошибка предложение поехать туда, где водятся программисты, в надежде устроиться стажёром. Приехав в большой город, Алексей тут же приступил к поиску работы. Но к большому сожалению (этого следовало ожидать), предложений по работе не поступало. Через какое-то время Алексей решил, что нужно что-то более действенное, и начал искать новую серебряную пулю. Этой серебряной пулей оказался один из многочисленных онлайн курсов по программированию.

Без имён и фамилий


По правде сказать, я отнёсся к этой затее с большим недоверием. Но контракт уже подписан, группа таких же вайтишников набрана, галера несётся в светлое будущее. И так, что из себя представляют эти курсы. Кратко подготовка будущих специалистов к собеседованию, с попытками направить человека в нужные темы в надежде дать понимание глубоких механизмов языка. Да, именно языка. В понимании местной публики программиста программистом делает знание языка и его фреймворков, не более. Тут стоит оговориться о слушателях этих курсов. Я был свидетелем знакомства группы. Как и ожидалось, люди достаточно разношерстные, разных возрастов (были очень немолодые), полов и профессий, 90% из которых о языках программирования услышали только вчера. Но всех их объединяло одно желание стать Middle разработчиком с заработной платой от 100 000 рублей по окончании курсов. Достаточно амбициозно и смешно, подумал я про себя. Судя по лёгкой улыбке на лице владельца курсов на том конце монитора при озвучивании желаний, уверен, он думал точно так же.

Прошло время, слушателей пичкали информацией с онлайн курсов, расположенных на популярных платформах (интересно, авторское право соблюдено?), каждому дали наставника, который должен был учить и строго экзаменовать. В конце курсов предполагалась практика на боевом проекте длительностью несколько недель, для закрепления знаний. Пришло время выпуска, мне было интересно чем это всё закончится. И тут мне в руки попало видео с закрытого разговора владельца курсов, который опрашивал бывших выпускников на предмет их текущих успехов. И тут я, мягко говоря, очень удивился. Для некоторых соискателей, нет ничего сложного в собеседованиях, по их словам. Максимум что могут спросить по их мнению, это, например, что такое коллекция и что такое список. На вопрос о сложных темах, таких как многопоточность, отвечают, что это сложно и проще просто выучить, как я понимаю речь идёт о заучивании определений. Team Lead по их мнению, это этакий менеджер, который тупо получает деньги и что-то там рассказывает команде, поэтому почему бы и не стать им сразу. Духовный лидер же подначивает кандидатов в IT: Нужно торговаться на собеседованиях, 150 не деньги.

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

Мошенничество или лайфхак?


Мне был интересен вопрос, каким образом будут позиционировать людей после курсов, обладающих нулевым опытом, но жаждущих позиции Middle разработчика? Всё просто, им нарисовали год опыта работы в компании! Да, вот так просто. Гугл ничего не знает об этой организации, от слова совсем. Ни единого упоминания, количество найденных страниц всего одна, ведущая на какой-то агрегатор случайных слов. Ну да ладно, настоящего самозванца точно выявят на собеседовании, не зря на Хабре столько статей от HRов и разработчиков с историями о том, как правильно собеседовать. К огромному сожалению, оказалось что всё это не более чем трёп о сферическом коне в вакууме. Уж простите.

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

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

МТС Банк. Данная организация предложила по результатам собеседования должность Senior разработчика ещё одному соискателю. Хорошо, Middle разработчик это хоть и самостоятельная боевая единица, но за ним всё равно приглядывают старшие коллеги. Но Senior разработчик, это человек, который может управлять другими людьми и принимать решения. Вы с ума сошли? Какие решения может принимать человек, который понятия не имеет что такое настоящая работа программистом, да ещё и учить других жизни?

И ряд других компаний.

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

Чем это плохо?


Качество кадров. Это главное. От качества кадров зависит качество продукта, качество кодовой базы, безопасность, производительность. Это взгляд со стороны разработчика. Со стороны бизнеса, это скорость разработки, потому что для неопытного разработчика все задачи будут в новинку, соответственно решения задач будут занимать гораздо больше времени, и не только своего. Это очевидно. Заберись такой бриллиант повыше, и весь этот поток /*цензура*/ кода польётся в продакшн без код ревью на радость пользователям и людям, которые будут это поддерживать в будущем.

А какое решение?


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

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

Тем, кто принимает решения об оффере, внимательно смотреть на опыт работы и реальные навыки, образование наконец. Резюме этих людей не содержат ссылки на репозитории с их pet projects, потому что их нет. За то пестрят названиями самых актуальных инструментов, используемых в разработке. Всё по методичкам от умных HR, как сделать классное резюме. Уличить в обмане реально сложно, потому что их пичкают информацией о том, как обмануть систему с непоколебимым видом. При этом им придумывают легенду о предыдущем месте работы с предположительными вопросами от интервьюера и вариантами ответа.

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

Вместо заключения


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

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

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

DINS Scala School

04.02.2021 14:12:29 | Автор: admin

Приглашаем в онлайн-школу DINS: здесь мы научим программировать на Scala и сделаем оффер лучшим студентам. Прием заявок открыт до 16 февраля. Подробности под катом.


Для кого Scala School

У идеального студента Scala School есть техническое образование и/или опыт программирования. Если технического образования нет не беда: достаточно курсов по программированию или самостоятельного обучения.

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

Зачем участвовать

  • Ты научишься писать полноценное бэкенд-приложение на Scala.

  • Получишь сертификат о прохождении обучения.

  • У тебя появится проект для портфолио.

  • Обзаведешься полезными знакомствами в IT-сообществе.

  • Получишь работу в DINS, если хорошо проявишь себя на курсе.

Программа курса

  • Scala 101

  • Коллекции

  • Функциональное программирование

  • Асинхронное программирование

  • Http4s, server & client

  • Базы данных

  • Асинхронное общение, Kafka

  • Подготовка к финальным проектам. Мастер-классы Telegram-боты и Frontend на Scala

  • Фичи и MVP. Protobuf и GRPC

  • Проектная работа, презентация проектов

Как проходят занятия

Курс стартует 2-го марта и продлится до конца мая. Занятия будут проходить с 19:00 до 21:00 МСК по вторникам и пятницам. Все обучение будет в онлайне, так что участвовать можно из любого города.

Как подать заявку

Для поступления в Scala School нужно подать заявку на сайте школы до 16 февраля и сделать тестовое до 21 февраля. Мы внимательно изучим результаты тестовых и сообщим о поступлении до 26 февраля.

Если есть вопросы задавай их в комментариях к посту или пиши на scala-school@dins.ru.

Подробнее..

Моделирование дома в SketchUp и перенос его в Unity 3D

24.01.2021 00:17:21 | Автор: admin

Учебные материалы для школы программирования. Часть7

Spoiler

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

Сегодня, мы создадим здание и перенесем его в Unity. Хочу обратить ваше внимание на то, что для импорта готового здания, необходимо, чтобы SketchUp стоял на том же ПК. Без программы Unity не сможет импортировать модель.

Порядок выполнения

Откроем SketchUp и выберем шаблон Simple Template - Meters.

Выберем инструмент фигуры и нарисуем на земле квадрат по форме дома.

Теперь, выдавим его с помощью инструмента выдавить/вдавить (push/pull).

Сделаем стены. Для этого используем инструмент Сдвиг (Offset).

Повторим операцию ещё раз.

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

Лишние линии убираются инструментом Ластик (Erase).

Выдвигаем стены.

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

Нарисуем на стене квадрат и выделим его.

Нажимая Ctrl+C и Ctrl+V, копируем его по стене, привязывая к линии.

После копирования окон лишнии линии стираем.

С помощью инструмента Вдавить/выдавить вдавливаем окно до состояния "На грани" (On Face).

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

Вырежем дверь похожим образом.

Используем инструмент "Ведёрко" (Paint Bucket) для наложения текстур. Выберем подходящую текстуру и зальём пол с фундаментом.

Аналогично поступим со стенами.

Чтобы наложить текстуру на замкнутый контур, нажмём Shift, чтобы наложить на все плоскости, имеющие такую же текстуру Ctrl.

Текстура на стену легла не идеально. Перейдём в свиток Текстура-Позиция, и перетягивая красный ползунок мы изменим позицию текстуры, а зелёным её размер.

Сейчас текстура этой стены отличается от остальных стен. Используем клик левой кнопки мыши по этой стене с зажатым Alt на инструменте "Ведёрко", чтобы запомнить настройки текстуры на этой стене.

И красим инструментом "Ведёрко" остальные стены.

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

На одном из торцов дома создадим плоскость для крыши.

Попрошу заметить, что мы вышли из группы кликом по пустому месту на экране. Если плоскость маленькая, её можно увеличить инструментом "Растянуть" (Scale).

Рисуем на плоскости очертания крыши. Лишние линии можно стереть.

Инструметом Выдавить/вдавить придаём объем.

Используем "Сдвиг" на крыше, чтобы добавить объёма.

И вдавим плоскость немного внутрь.

Окрасим всё подходящими текстурами и удалим человека. Домик готов для импорта в Unity!

В настройках импорта в Unity надо выставить галочку Generate Colliders, а во вкладке Material Use External Materials.

При этом, импортируются все материалы и создадутся папки.

Теперь, у вас есть своя собственная модель дома, для использования в играх!

Подробнее..

Сборка Colobot Gold

10.11.2020 04:12:16 | Автор: admin
Всё большую популярность набирает компьютерная игра для программистов Colobot Gold. О ней не раз писали на хабре, но материал со временем устаревает. Происходит активное развитие программы. И у многих пользователей возникает желание попробовать новейшие возможности Colobot Gold. Так, один мой знакомый прочитал про новый тип роботов, которого ещё нет в официальной master версии и попросил меня написать эту инструкцию по сборке исполяемого файла из исходников Colobot Gold.

Сборка возможна на различные платформы, но проще всего реализуется на дистрибутивах Linux, Например, на Ubuntu 20.

Пару вводных о процессе сборки, то есть о процессе получения исполяемого файла. Исходный код программы Colobot ссылкается на другие исходные коды, совершенно других проектов. Для того, чтобы собрать Colobot нам нужно подключить в систему соответствующие сторонние пакеты. Откроем консоль и пропишем
0)
sudo apt-get install build-essential cmake libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsndfile1-dev libvorbis-dev libogg-dev libpng-dev libglew-dev libopenal-dev libboost-dev libboost-system-dev libboost-filesystem-dev libboost-regex-dev libphysfs-dev gettext git po4a vorbis-tools

1) Теперь создадим базовый каталог для наших манипуляций, пусть ColobotBld. (Команда mkdir создаёт диалог с заданным именем). А также каталог, который впоследствии будет содержать непосредственно исполняемые файлы, пусть exe.
mkdir ColobotBldcd ColobotBldmkdir exe

2) Воспользуемся модным нынче средством доставки (версий) исходного кода и запросим последнюю (dev) версию.
git clone -b dev https://github.com/colobot/colobot.git 

3) Видим, что в базовом каталоге ColobotBld появилась папка colobot. Перейдём в неё
cd colobot

4) Скачаем все подмодули
git submodule update --init

5) Создадим так называемый каталог сборки, пусть build. Таким образом у нас есть базовый каталог ColobotBld, в котором находятся каталоги colobot и exe. colobot, помимо исходников, теперь будет содержать папку build для сборки, то есть создания промежуточных файлов во время компиляции.
mkdir build

Соответсвенно компилировать нужно, находясь в папке build, так что перейдём в неё
6)
cd build

7) Далее укажем системе сборки откуда что брать: исходники из каталога colobot, а исполняемый файл класть в каталог exe. Я использую полные пути для избежания путаницы, оставлю здесь без изменений как пример, разумеется на вашей системе полные пути другие.
cmake /home/andrei/Загрузки/ColobotBld/colobot  -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/home/andrei/Загрузки/ColobotBld/exe

7) Далее сообщим утилите make где лежат исходные коды
make /home/andrei/Загрузки/ColobotBld/colobot

8) Запустим сборку
make

9) Так как на шаге 7) мы указали куда складывать исполняемый файл, то следующий код это и сделает. Желающие могут оформить в пакет
make install

Теперь заходим в папку exe/games и запускаем файл colobot.

10) Весёлое упражнение для тех, кто считает себя уже освоившимся в консоли Linux: перейдите в папку exe/games в консоли и запустите (из консоли) файл colobot!

Итак, мы успешно собрали из исходников игру для программитстов Colobot Gold. Сдаётся мне, что эта задача посильный урок новичкам, кто начинает свой путь в мире автоматизации, написания скриптов.
Подробнее..

Учебные материалы для школы программирования. Часть 1

02.01.2021 18:15:24 | Автор: admin

Наш век запомнится мне, как время стартапов. От школьника-активиста, до жителя Кремниевой долины - все делают своих единорогов. Как поняли - так и делают. Я тоже не прошла мимо тренда на безграничные возможности самореализации, и запустила школу программирования для детей Step to Science. Время жизни этого проекта было наполнено открытиями, борьбы со страхами, маленькими и большими победами, ошибками и много чем еще. Весной 2020 года команда столкнулась с сами знаете с чем, и, немного порефлексировав, я приняла решение закрыть проект.

За годы работы школы, был найден оптимальный алгоритм обучения ребят занимательной науке разработки игр на Unity 3D. Мы перебрали много тем, которые смогли захватить интерес школьников от 10 до 16 лет, опробовали десятки способов передачи информации, тренировки навыков и оценки заложенных знаний. Эта кропотливая работа принесла нам отличные результаты, в виде комплексной программы по созданию компьютерных игр на Unity 3D, и учебных успехов, которые достигали наши ребята!

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

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

Spoiler

Справка для моих коллег - педагогов:

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

Образовательные цели:

Знакомство с работой движка и языком программирования C#;

Освоение на практике основных принципов и технологий создания современных трехмерных компьютерных игр;

Формирование навыков моделирования объектов, создания персонажей и анимации, навыков работы с текстурами и освещением, проектированием ландшафта, работы со звуком, спецэффектами;

Образовательные задачи:

Создать портфолио проектов ученика;

Получить практические навыки профессионального разработчика игровых приложений;

Прохождение полного цикла знакомства с профессией game development.

Количество детей в группе: 7-10 человек.

Возраст детей: 10-16 лет.

Форма и режим занятий: занятия проходят в практической форме, 2 раза в неделю по 2 академических часа с 10 минутным перерывом.

Минимальные технические требования к ПК: OS Windows 7 SP1+, 8, 10, только 64-разрядные версии; ЦП поддержка набора инструкций SSE2; видеокарта с поддержкой DX10 (версия шейдеров 4.0).

Общая продолжительность программы: 2 модуля по 48 часов каждый.

Знакомство с Unity 3D мы начнем с легкой в разработке и веселой игры "Spaceship". Этот проект мы всегда делали на первом пробном занятии, т.к. благодаря простоте, ученик быстро получает желаемый результат, укрепляется в вере в свои силы, получает массу положительных эмоций и в глазах зажигается тот самый, желаемый родителями, интерес к новым знаниям!

Итак, поехали!

Spaceship

В данном занятии рассмотрено создание простого космического симулятора.


Занятие является пробным и рассчитано 1.5 - 2 часа времени.


Версия Unity 3D от 5.5 и выше. На компьютеры учеников должен быть скопирован файл Spaceship_template (если ссылка сломалась - пишите в Telegram @Evgeniya_Koroleva).

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

Порядок выполнения.

Откроем юнити и создадим новый 3D проект, нажав на кнопку New. Дадим проекту имя и нажмём Create project.

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

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

Чтобы выйти из режима игры, ещё раз нажмём на Play.

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

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

В данном окне надо найти поле Skybox Material и нажать на кнопку выбора материала.

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

Окно Lighting можно закрыть.


Чтобы небо отображалось в окне Scene редактора, должна быть нажата кнопка показа неба и атмосферных эффектов (выделено красным) , а в выпадающем списке должна стоять галочка напротив пункта Skybox (выделено синим).

Космическому симулятору необходимы точки, смотря на которые мы бы понимали, что объект двигается. Для этого проекта такой точкой является космический корабль SF_Corvette-F3.
Найдём его в ресурсах и выложим на сцену.

Скорее всего, камера окажется внутри корабля и в окне Game корабль будет виден наизнанку. Выберем инструмент Move tool (выделен красным) и выдвинем камеру наверх.

На данном этапе стоит рассказать о том, как перемещаться по карте в режиме редактирования, а именно в окне сцены зажимаем правую кнопку мыши и летаем, нажимая WASD. Для большей скорости перемещения удерживаем Shift.


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

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

Чтобы камера лучше видела игрока, можно развернуть её с помощью инструмента Rotate tool.

Настало время добавить кораблю способность двигаться. На данном этапе стоит рассказать ученикам о том, что всё поведение объектов полностью зависит от компонентов, которые находятся на этом объекте. Допустим, объект SpaceFighter содержит компонент Transform, который задаёт объекту его положение в пространстве. Чтобы корабль мог летать, необходимо добавить ему компонент физики. Выделим SpaceFighter и нажмём в панели настроек кнопку Add Component, в появившемся выпадающем списке выберем Physics->Rigidbody.

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

Чтобы этого не происходило, нам необходимо отключить гравитацию. Для этого достаточно у компонента Rigidbody убрать галочку Use Gravity.

В самой нижней строке мы видим сообщение об ошибке. Это сообщение говорит нам о том, что требуется сделать пересчёт физической модели столкновения для объекта. Для этого откроем объект SpaceFighter, нажав на стрелочку рядом с ним и найдём объект Default. По умолчанию на данном объекте находится компонент Mesh Collider. Выставим на компоненте галочку Convex и увидим реальную физическую модель столкновений для данного объекта.

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

Теперь заставим наш объект двигаться. Для этого в объект SpaceFighter, рядом с Rigidbody, добавим ещё один компонент Constant Force (выделено красным).

Данный компонент добавляет силу, которая будет двигать наш корабль. Чтобы объект полетел вперёд, выставим ему в отмеченном синим цветом поле значение в районе 100.

Нажав на Play, мы можем видеть, как корабль улетает вдаль.

Теперь, прикрепим камеру к игроку. Для этого достаточно объект Main Camera перетянуть мышью на объект SpaceFighter.

Должно быть так

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

Далее, необходимо добавить управление нашему игроку. Для этого в папке CustomResources/Scripts найдём скрипт Player_Battleship и перекинем его на игрока.

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

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

Теперь наш корабль, напротив, стал довольно медленно поворачиваться. Настроим управление корабля:

Теперь можно заметить ещё одну странность корабль игрока проходит сквозь корабль SF_Corvette-F3. Чтобы этого избежать, необходимо на корабль SF_Corvette-F3 добавить компонент Mesh Collider.


Обратите внимание, что галочку Convex ставить нет необходимости. Данная опция нужна лишь для движущихся объектов, а этот корабль неподвижен.

Осталось немного добавить фоновую музыку и звуки полёта.


Возьмём звук \Absolute Space & Sci-Fi Vol.1 - Sample Pack - Voltz Supreme\Preperation - 70 bpm\Variations\Preperation - No Snare or Vox.mp3 из папки проекта и просто перекинем на любой объект, допустим, на космический корабль SF_Corvette-F3.

В этом случае автоматически добавится компонент AudioSource, в котором можно будет настроить звук, например, убавить громкость (выделено синим). Рекомендуемый уровень громкости 0.3.

Чтобы добавить звук полёта, возьмем звук Standard Assets\Vehicles\Aircraft\Audio\FlightWind.wav
и перетянем его на игрока. В настройках поставим галочку Loop (выделено синим) это закольцует звук и он будет проигрываться постоянно. Скрипт Player_Battleship автоматически найдёт этот звук и будет управлять его громкостью в зависимости от скорости игрока.

Если учащиеся справилась с заданием раньше срока, можно добавить немного динамики нашему проекту. Для этого закинем на объект Main Camera скрипт Player_Camera и настроим в соответствии со скриншотом.

Также можно добавить следы на краях крыла: внутри объекта SpaceFighter есть две точки trail и trail_1.
Добавим на них компонент Trail Renderer и протестируем - должны получиться яркие розовые линии.

Чтобы это исправить, в компоненте Trail Renderer найдём массив Materials, раскроем его, найдём поле Element0 и нажмём на кнопку выбора- кружок с правой стороны поля.

Выберем белый материал, допустим, этот:

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

В конце можно добавить простой прицел, создав объект типа Image и настроив его:

В поле Sprite компонента Image нажмём на кружок выбора и выберем текстуру прицела.

Выберем прицел.

В компоненте Image нажмём на появившуюся там кнопку Set Native Size (выделено красным). Дополнительно, можно выбрать цвет прицела, нажав на поле Color (выделено синим).

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

После данного действия будут созданы файл *.exe, папка *_GameData и UnityPlayer.dll, где * - выбранное имя. Файл UnityPlayer.dll в зависимости от версии может и не создаваться. Для работы готовой игры на другом компьютере все сгенерированные в ходе данного действия файлы и папки должны находиться в одной директории.

На этом мы завершаем первое занятие-знакомство с Unity 3D.

Следующие проекты - в следующих постах на habr. До скорых встреч!


P.S.: за помощь в подготовке проектов, невероятный преподавательский талант и незабываемый черный юмор, спасибо Александру Борисову!

Подробнее..

Домино на Unity

05.01.2021 18:18:32 | Автор: admin

Учебные материалы для школы программирования. Часть 2

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

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

Spoiler

Хочется напомнить, что занятия разрабатывались для детей 10-16 лет, поэтому многие этапы упрощены.

Первое занятие вы можете найти по ссылке http://personeltest.ru/aways/habr.com/ru/post/535916/

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

Домино

Цель данного занятия - научиться создавать и редактировать игровые объекты, компоненты и материалы. Итак, начнем!

Импортируем приложенный ассет. Скачать его можно по ссылке

Создаём новую сцену. На сцене создаём плоскость с помощью quad или plane, выставляем размер 200х200.

Создаём новый куб и придаём ему форму домино. На этом этапе нужно показать несколько способов, как это можно сделать инструментами или ручным вводом.

Spoiler

Unity - отлично интегрируется с уроками по математике и физике. Смело вплетайте сложные или "скучные" темы по этим предметам в ваше занятие по Unity. Такой прием поможет не только преподнести тему интересно, но и ответит на частый вопрос "а зачем мне это учить, если в жизни не пригодится?" - пригодится, отвечаем мы, и рассказываем на проекте Домино, например, о понятии линейного размера.


Далее, на наше домино надо закинуть Rigidbody, чтобы домино могли падать.

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

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Reset : MonoBehaviour {  Rigidbody rig;  Vector3 startPos;  Quaternion startRot;    // Use this for initialization  void Start() {    rig = GetComponent<Rigidbody>();    startPos = transform.position;    startRot = transform.rotation;  }    // Update is called once per frame  void  Update() {    if(Input.GetKeyDown(KeyCode.Space)) {      if(rig) {        transform.position = startPos;        transform.rotation = startRot;        rig.velocity = Vector3.zero;        rig.angularVelocity = Vector3.zero;      }     }  }}

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

Этот этап урока отлично подойдет, чтобы рассказать о глобальной и локальной системе координат, о центре объекта и его позиции (center / pivot).

Несмотря на малый, с первого взгляда, объём занятия, у ребят уходит 1,5-2 часа. Время затрачивается не только на выставление домино в желаемой последовательности (рекомендуем каждому воплотить свою задумку по "узору" расположения костей), но и на разбор важных, для дальнейшей работы, тем: система координат, точки отсчёта, понимание углов Эйлера (pitch, yaw, roll), и масштабирования объектов.

Если занятие пройдёт быстрее, чем ожидалось, добавьте скрипт GameLogic, создав препятствие для шарика. Закиньте скрипт на пустой или статичный объект (пол или трамплин).

Этот скрипт по нажатию на пробел выставляет шарик в изначальное положение и включает-выключает объект-препятствие.

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

Подробнее..

Flappy Bird на Unity 3D

10.01.2021 16:05:45 | Автор: admin

Учебные материалы для школы программирования. Часть 3

Spoiler

Часть 1 вы можете найти здесь

Часть 2 вы можете найти здесь

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

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

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

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

Решением стало снизить количество рассматриваемых тем из школьной программы, и добавить в проекты элемент узнаваемости, соревновательности и веселья! Так появилось занятие по сборке аналога игры Flappy Bird.

Цель занятия: научиться работать с 2д-физикой и Canvas при использовании последнего на разных разрешениях целевой платформы.

Рассматриваем с учащимися темы:

- включение AudioSource посредством Event-системы UI;
- детектирование тапа по экрану посредством Event-системы UI - Спрайты;
- система анимаций в разрезе 2D-игр;
- коллайдеры в 2D и их редактирование;
- сборка проекта под Android.

Поехали!

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

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

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

Стоит рассказать ребятам об особенностях работы коллайдеров, накладываемых на спрайт. Например, на птице установлен Polygon Collider 2D, позволяющий точно подобрать форму коллайдера под спрайт без необходимости делать его выпуклым для симуляции физики, как в 3D.

Анимация спрайтов.

Следующим шагом будет создание движущихся труб. Трубы устроены следующим образом: пара труб с установленным между ними триггером со скриптом, убивающим игрока, расположены в одном объекте. Передвигать нужно именно этот объект. Записываем на него анимацию, выходим из режима записи и проверяем.

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

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

В Canvas создаём панель и делаем её абсолютно прозрачной.

Все элементы управления закидываем внутрь этой панели. Это обязательно. Если этого не сделать, панель и кнопки могут некорректно отвечать на нажатия.
На панель необходимо закинуть компонент EventTrigger, и создать новое поле OnPointerEnter. В это поле закидываем птицу и выбираем внутри метод Jump.

После этого птица корректно начнет реагировать на нажатия по экрану.

Компиляция проекта под андроид.
Зайдём в File->Preferences->External Tools. Внизу страницы находятся три поля - SDK, JDK и NDK. Рядом кнопки Browse и Download. Первая - для выставления нужной папки, в которую установлены sdk, jdk, ndk, вторая - перекидывает на страницу загрузки того или иного инструмента.

Сперва необходимо установить Android studio и необходимые пакеты инструментов и SDK. На момент написания этих строк, устанавливалось API уровня 16 и 25. Также для компиляции необходим JDK.
NDK для данного проекта устанавливать нет необходимости.

Далее необходимо зайти в File-> Build Settings , выбрать платформу Android и нажать Switch Platform.

Затем переходим в Edit -> Project Settings -> Player

В свитке Resolution and presentation выбираем расположение Landscape left, это заставляет экран всегда быть в одном положении и не поворачиваться, если включён автоповорот.

В свитке other settings необходимо выставить имя приложения в том же формате, что и стандартное. Тем не менее, изменить это поле обязательно, в противном случае компиляция не пройдёт успешно. Также необходимо выбрать минимальные и целевое API.

По желанию можно выставить иконку и компилировать. На выходе мы получим APK файл игры.
Если подключить телефон на андроиде в режиме отладки и нажать Build and Run, то игра автоматически установится на телефон и запустится.

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

Подробнее..

Деревья (плагин SpeedTree) на Unity 3D

24.01.2021 00:17:21 | Автор: admin

Учебные материалы для школы программирования. Часть6

Spoiler

Предыдущие уроки можно найти здесь:

  1. Spaceship

  2. Домино

  3. Flappy Bird

  4. Гравитационная комната

  5. Платформер

В Unity, в asset store, можно найти множество готовых объектов для будущей игры, но иногда, хочется сделать что-то своими руками. Для зданий, и других простых архитектурных объектов, мы часто использовали SketchUp, для "живых" анимированных объектов - Blender. На этом уроке, мы сами "вырастим" дерево в Unity!

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

  • Tinkercad - составление фигур из геометрических форм;

  • SketchUp - для более детально проработанных архитектурных объектов;

  • ZBrush - можно создавать сложные, крутые модели, а можно ограничиться "лепкой" колобка, что тоже очень занятно!

Но вернемся к теме занятия, и рассмотрим, как создать дерево с помощью плагина SpeedTree, включенного в дистрибутив Unity.

Порядок выполнения

Создадим новыи проект, в нем создадим терреин.

Добавим на него объект 3D Object Tree

Добавим дереву ветки, создав блок веток. Увеличим их количество примерно до 20 (интересующие параметры выделены синим). В каждом блоке изменяем параметр Frequency (цветом на скриншоте не выделен).

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

Далее, добавим к этим ветвям еще несколько веток.

Не забудем про листву.

Следующий шаг - выставление материалов.

Для деревьев важно выставлять материалы с помощью шеидера Nature. Импортируем стандартныи ассет Environment, он содержит готовые материалы. Материалы коры нужно назначить всем веткам. Если материал не подходит, Unity предложит использовать корректныи материал.

Жмем Apply и "переконвертирования" материала. Будьте осторожны, Unity часто вылетает на этом этапе.

Итак, дерево готово! Его можно разместить на терреине благодаря Mass Place Trees.

При должном усердии, можно получить вот такой лес:

Подробнее..

Эффект дождя. Частицы в Unity 3D

31.01.2021 22:19:51 | Автор: admin

Учебные материалы для школы программирования. Часть9

Spoiler

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

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

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

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

Перейдем от слов к делу.

Порядок выполнения

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

В проект импортируем приложенный ассет. Ассет содержит текстуры, звук и стандартный контроллер игрока.
Создадим простую карту, поставим игрока, и внутри него на высоте около 30 метров создадим три системы частиц.

Назовём их Rain, Dust и Storm.

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

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

Также, стоит поставить галочку ColorOverLifetime и выставить ему такое значение, чтобы дождь плавно исчезал и появлялся.

Создадим и настроим материал в соответствии со скриншотом.

Теперь, настроим рендер. Первое, что нужно сделать это закинуть материал и выставить ему режим отрисовки, как Stratched Billboard с растяжкой по длине 2. Обязательно нужно поменять MaxParticleSize, иначе частицы не будут апскейлиться и будет эффект, как будто они нас облетают.

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

На этот раз, настроек чуть меньше.

Дальнейшие настройки мало чем отличаются от дождя, более того, цвет по времени применён тот же самый .

Самое интересное начинается в материале. Он отличается от остальных, т. к. будет анимирован.

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

Перейдем к грозовым облакам.

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

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

Также, нельзя обойти стороной и Color Over Lifetime. Он придаст нашим облакам эффект грозовых.

Далее, всё по стандарту создаём материал и настраиваем. Использована стандартная текстура дыма из Unity, она отлично пойдёт в качестве облаков.

Рисуем методом Horizontal Billboard, данный тип не поворачивает спрайт на игрока.
На сцену добавляем звук ливня. Звук довольно сильно добавляет эффект, подчёркивая систему частиц.

Дождь готов!

Подробнее..

Жидкий персонаж на Unity 3D

04.02.2021 18:19:53 | Автор: admin

Учебные материалы для школы программирования. Часть11

Spoiler

На сегодняшнем занятии мы познакомимся с физикой на джоинтах движка BOX 2D, на примере создания персонажа, похожего на главного героя Gish или Slime Laboratory.

Порядок выполнения

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

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

Установим на каждую сферу Rigidbody2D массой 0.5 и CircleCollider2D. Центральная сфера имеет массу 0.05 и drag = 1 и не имеет коллайдера.

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

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

Для придания формы используем среднюю точку. От каждой, из 9-и окружающих её сфер, создадим ещё по одному джоинту.

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

Итоговая система джоинтов должна выглядеть примерно так:

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

Теперь придадим "лизуну" очертания. Для этого в ассет приложена 3д-модель со скелетом, каждая из 9-и костей которого управляет по одному вертексу по периметру.
Для неё написан скрипт Goo, который управляет привязкой и отвечает за перемещение нашего главного героя.

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

Разберём немного сам скрипт:

using System.Collections;using System.Collections.Generic;using UnityEngine; public class Goo: MonoBehaviour {    public ConstantForce2D ForceObject; // центральная точка как объект приложения силы    public float maxForce = 4f; // сила передвижения publicTransform[] bones; // массив костей    public Transform[] go; // массив сфер    public float sphereRadius; // радиус сферы, можно брать автоматически, но в данном случае выставляем вручную    public Transform center; // центральная точка как трансформ    ConstantForce2D[] frc; // все объекты приложения силы      // Use this for initialization    void Start() {        frc = newConstantForce2D[9]; // инициализируем        // находим все объекты приложения силы        for (int i = 0; i < 9; i++) {             frc[i] =go[i].GetComponent<ConstantForce2D>();        }    }    // Update is called once per frame     void Update() {        for (int i = 0; i < 9; i++) {             // выставляем кости по точкам с небольшим смещение            bones[i].position = go[i].position + (go[i].position - center.position).normalized * sphereRadius / 2f;            // добавляем всем точкам силу по горизонтали            frc[i].force = newVector2(Input.GetAxis("Horizontal") * maxForce, 0f);         }        // и центральной точке тоже        ForceObject.force = newVector2(Input.GetAxis("Horizontal") * maxForce, 0f);        // нажали пробел        if (Input.GetKeyDown(KeyCode.Space)) {            foreach(Transformrig ingo) {                rig.GetComponent<Rigidbody2D>().velocity += new Vector2(0, 6f); // прыжок            }        }    }}

После отключения MeshRenderer у сфер, можно увидеть, что всё адекватно работает. Для полноты картины, фон и камеру прикрепляем к центральному объекту. У риджитбади центрального объекта нужно запретить вращение по Z. Можно добавить, на свое усмотрение, пару глаз.

На серые объекты вешаем скрипт RandomColor и выставим ему палитру.

using System.Collections;using System.Collections.Generic;using UnityEngine; public class RandomColor: MonoBehaviour {    SpriteRenderer rndr;     public Color32[] colors;        // Use this for initialization    void Start() {        rndr = GetComponent<SpriteRenderer>();         rndr.color = colors[Random.Range(0, colors.Length)];    }}

Теперь при старте уровень приобретёт цвет.

На этом, сборка нашего проекта завершена!

Подробнее..

Тир. Стрельба рейкастами на Unity 3D

06.05.2021 18:22:32 | Автор: admin

Учебные материалы для школы программирования. Часть17

Предыдущие уроки можно найти здесь:

В этом проекте рассмотрим процесс работы:

- с рейкастами и векторами;
- с методами других пользовательских классов;
- с AudioSource и с Rigidbody через код;
- три основных составляющих выстрела, психологически действующих на игрока (звук, свет и свечение, анимация и след от выстрела);
- инстанцирование префабов.

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

Порядок выполнения

Создаём новый проект, импортируем приложенный ассет.
Помимо стандартных ресурсов пакет имеет сторонний плагин для рисовки декалей. Его работа в контексте данного урока не рассматривается.

Проект урока разбит на 2 части - тир и гранаты.

Тир

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

Внутри проекта есть скрипт DecalShooter, который создаёт декали, и в котором расположен весь код стрельбы, включая рейкаст. В нём будет вводиться код взаимодействия с мишенью.
Для начала, необходимо подготовить саму мишень. Ею служит цилиндр, который необходимо уменьшить по Y до состоянии платины, удалить CapsuleCollider и поставить MeshCollider с галочкой Convex. Дополнительно, на цилиндр устанавливается текстура мишени, внутри цилиндра создаётся point light, подсвечивающий мишень, и объект с AudioSource для воспроизведения звука, а на сам цилиндр устанавливается Rigidbody с обработкой коллизий типа Continius Dynamic и галочкой isKinematik. У AudioSource не забудьте убрать галочку PlayOnAwake и закинуть звук попадания в мишень.

Следующим шагом становится создание скрипта Target, который сразу же накладываем на нашу мишень.

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

using System.Collections;using System.Collections.Generic;using UnityEngine; public class Target : MonoBehaviour {    public GameObject light;    public Rigidbody rig;    public AudioSource src;     bool enabled = true;     // Use this for initialization     void Start() {        rig = GetComponent<Rigidbody>();        src = GetComponent<AudioSource>();     }     // Update is called once per frame     void Update() {     }     public void shoot() {        if (!enabled) {           return;        }         rig.isKinematic = false;         light.SetActive(false);         src.Play();         enabled = false;    } }

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

   if (Input.GetKeyDown(KeyCode.Mouse0)) {            time = 0.3f;             ShootSource.Play();             anim.Play("fire");             Muzzleflash.SetActive(true);            // Сама стрельба             RaycastHit hitInfo;            Vector3 fwd = transform.TransformDirection(Vector3.forward);                         if (Physics.Raycast(transform.position, fwd, out hitInfo, 100f)) {                GameObject go = Instantiate(                    DecalPrefab,                    hitInfo.point,                     Quaternion.LookRotation(                        Vector3.Slerp(-hitInfo.normal, fwd, normalization)                     )                ) as GameObject;                go.GetComponent<DecalUpdater>().UpdateDecalTo(                    hitInfo.collider.gameObject,                     true                );                Vector3 explosionPos = hitInfo.point;                Target trg = hitInfo.collider.GetComponent<Target>();                                if (trg) {                    trg.shoot();                }                                Rigidbody rb = hitInfo.collider.GetComponent<Rigidbody>();                                if (rb != null) {                    rb.AddForceAtPosition(fwd * power, hitInfo.point, ForceMode.Impulse);                    Debug.Log("rb!");                }             }            // Сама стрельба         }

Данный код пытается получить компонент из объекта hitInfo и, если это удаётся, вызывает методshoot. Мишень падает, свет от мишени выключается, звук попадания воспроизводится. Далее, желательно дать группе свободное задание по кастомизации своего проекта. Как альтернативу, можно предложить изменить код таким образом, чтобы мишень меняла цвет при попадании. Делается это заменой в Target строк:

light.SetActive(false);

на

light.GetComponent<Light>().color = Color.red;

Таким образом, свет меняется и не удаляется.

Гранаты

Эта часть урока должна ещё больше закрепить понимание векторов и работы рейкастов.

Для начала, создадим другой скрипт - дальномер.

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI; public class Lenght :  MonoBehaviour {    public Text Dalnost;    float rasstoyanie = 0; // переменная для расстояния до цели     // Use this for initialization     void Start() {     }     // Update is called once per frame     void Update() {        RaycastHit hitInfo;                if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hitInfo, 200)) {            rasstoyanie = hitInfo.distance;            Dalnost.text = rasstoyanie.ToString();        }    }}

Скрипт закинем в FPScontroller/FirstPersonCharacter. В Canvas создадим текст, закинем его в скрипт.
В этом скрипте реализован простейший рейкаст, и на его примере мы разбираем, как рейкаст передаёт информацию в структуру и как нам получать из структуры эту информацию.
При срабатывании рейкаста мы выводим дальность на экран.

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

using System.Collections;using System.Collections.Generic; using UnityEngine;using UnityEngine.UI; public class Length :  MonoBehaviour {    public Text Dalnost;    float rasstoyanie = 0; // переменная для расстояния до цели     public GameObject sharik;     // Use this for initialization    void Start() {     }     // Update is called once per frame     void Update() {        RaycastHit hitInfo;                 if(Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), outhitInfo, 200)) {            rasstoyanie = hitInfo.distance;             Dalnost.text = rasstoyanie.ToString ();            if(Input.GetKeyDown(KeyCode.Mouse1)) {                GameObject go = Instantiate(                    sharik,                     transform.position + Vector3.Normalize(hitInfo.point - transform.position),                     transform.rotation                );                Rigidbody rig = go.GetComponent<Rigidbody>();                rig.velocity = Vector3.Normalize(hitInfo.point - transform.position) * 10;            }         }    } }

Сразу же возникнет вопрос - зачем такое решение? К тому же, при направлении в небо бросок не произойдёт. Сделано всё это в учебных целях. Т.к. в рамках урока код пишется поэтапно, на данном участке объясняется, как найти вектор направления на объект по конечным и начальным координатам. Теперь дело за самой гранатой. Создадим скрипт Grenade.

using System.Collections;using System.Collections.Generic;using UnityEngine; public class Grenade :  MonoBehaviour {    public Transform explosionPrefab;     void OnCollisionEnter(Collision collision) {        ContactPoint contact = collision.contacts[0];                // Rotate the object so that the y-axis faces along the normal of the surface        Quaternion rot = Quaternion.FromToRotation(Vector3.up, contact.normal);        Vector3 pos = contact.point;         Instantiate(explosionPrefab, pos, rot);        Destroy(gameObject);    }}

Закидываем на сцену гранату, на меш Body ставим коллайдеру Convex, добавляем гранате RIgidbody и наш скрипт. Получившуюся гранату добавляем в префаб и удаляем со сцены.

Скрипт удаляет объект, на котором висит, но до этого инстантиирует объект, который мы выбираем в качестве эффекта взрыва.

Создадим эффект взрыва. В нём должен быть свет от взрыва, AudioSource с галочкой PlayOnAwake и звуком взрыва, Spital Blend на 90 процентов переведённый в 3д и увеличенный радиус распространения звука.
Для правильной отработки всех эффектов и разлёта Rigidbody нужно создать ещё один скрипт. Его мы назовём Explosion:

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Explosion :  MonoBehaviour {    public float radius = 5.0f;    public float power = 10.0f;    public GameObject svet;    void Start() {        Destroy(svet, 0.1f);        Vector3 explosionPos = transform.position;        Collider[] colliders = Physics.OverlapSphere(explosionPos, radius);        foreach(Collider hit in colliders) {            Rigidbodyrb = hit.GetComponent<Rigidbody>();            if (rb != null) {                rb.AddExplosionForce(power, explosionPos, radius, 3.0f);            }        }    }}

Его нужно закинуть на эффект взрыва и создать префаб.
Данный префаб и используется в скрипте гранаты для создания взрыва.

Готово!

Подробнее..

Курс Flutter от Surf успеть за технологиями будущего

29.10.2020 16:15:50 | Автор: admin
Нет времени ждать, пока все поймут, что за Flutter будущее, и начнут где-то учиться. Надеяться, что кто-то сделает крутые курсы, и после них мы сможем находить разработчиков не наш путь. Поэтому мы в Surf решили взять процесс в свои руки и сделать курс по Flutter.




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

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

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

В статье мы подробно рассказываем про курс, а вот краткая выжимка:
  • Flutter это полезно и открывает двери в новую технологию.
  • Основы можно изучить за 4 месяца или быстрее. Курс состоит из 9 блоков, 59 уроков и мастер-классов по сложным темам. Для 48 уроков мы записали качественные лекции примерно по часу каждая.
  • Мы сделали акцент на практике, потому что мы разработчики и знаем, что нужно, чтобы быстро изучить новую платформу.

Почему Flutter


Flutter всего два года, а на него не боятся переходить крупные компании. Мы в Surf уже сделали большие проекты. Например, приложения для Росбанка, сети аптек Ригла и KFC. Flutter активно развивает создатель Google и процесс не замедлила даже пандемия коронавируса. Количество вакансий на бирже фрилансеров Upwork тоже растт: спрос удвоился за полгода. На HeadHunter спрос почти утроился по сравнению с прошлым годом, но кажется, что вакансий пока мало: они часто скрыты среди предложений для нативщиков вроде ищем разработчика для iOS/Android с опытом работы на Flutter.

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

Какие знания пригодятся для прохождения курса


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

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

В ходе курса мы будем пользоваться инструментами, которые входят в привычный набор любого современного разработчика. Большое подспорье умение работать в IDE на базе IntelliJ IDEA или VS Code, системе контроля версий Git. Не помешает и понимание принципов написания чистого кода, SOLID.

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

Кто преподаватели


Наши преподаватели практики, а не теоретики. Это люди, которые работают в Surf и каждый день разрабатывают приложения на Flutter. Они сами учились с нуля и знают подводные камни и сложности, с которыми можно столкнуться. Мы вложили в курс весь практический опыт Surf, а также свои боли и проблемы, которые мы уже преодолели. Помогать осваивать Flutter будут:

Евгений Сатуров тимлид разработчиков в Surf и технический евангелист Flutter. Основатель и ведущий подкаста Flutter Dev Podcast.

Артм Зайцев руководитель Flutter-отдела в Surf. Ведт подкаст вместе с Евгением Сатуровым.

Михаил Зотьев ведущий Flutter-разработчик в Surf. Пишет статьи и делится наработками с сообществом Flutter.


Бэкстейдж со съемок видеоуроков: в кадре Михаил Зотьев, за кадром Артём Зайцев

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

Как проходит обучение


Мы сами не раз учились на курсах и знаем, что сухая теория не помогает стать разработчиком. Тем более что найти теорию легко у Google прекрасная документация по Flutter. Другое дело практика. После части уроков нашего курса нужно сделать домашнее задание, его проверит преподаватель в течение суток. Только после проверки откроется следующий урок не сделать не получится. Исключение первый тематический блок про язык Dart, в нм уроки открываются пачками сразу по несколько штук.


Темы уроков из блока про язык Dart

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

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


Вариант домашнего задания

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

Сколько времени занимает учба


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

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

Мы рассчитываем, что на изучение курса у студентов будет уходить в среднем 35 часов в неделю. Так весь курс можно будет закончить за 4 месяца. Всего в курсе 48 уроков и 57 домашних заданий. Плюс вебинары и мастер-классы обсуждение теории и вопросов студентов в режиме онлайн. Вебинары будут проходить вечером в пятницу, чтобы рабочие вопросы не мешали учбе.

Что на выходе


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

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

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

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

Сейчас курс доступен по спецпредложению. Узнать цену, прочитать подробности и записаться можно на нашем сайте. А посмотреть тизер к курсам на Youtube.
Подробнее..

Дом в лесу. Работа с освещением в Unity 3D

25.01.2021 20:08:49 | Автор: admin

Учебные материалы для школы программирования. Часть8

Spoiler

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

Материалы к уроку здесь. Ну что, поехали!

Порядок выполнения

Начнем с нового проекта, и, для экономии времени и сил, добавим в него ассет Nature Starter Kit 2.

Откроем демо-сцену.

Удалим из неё камеру, добавим игрока от первого лица из ассета Characters, и импортируем дом из прошлого урока.

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

Далее, перейдём во вкладку материалов модели и сменим тип импорта материалов с Internal на External. Кликаем "принять", при этом происходит импорт материалов из папок SketchUp. В итоге, дом становится материальным и раскрашивается в нормальные цаета.

Но дом "просвечивает" по углам - давайте избавимся от этой проблемы:

Для этого выставим компонентам Mesh Renderer параметр Cast Shadows в значение Two sided. Теперь, свет проходит только через окна.

Уберём синеву и снизим яркость света. Для этого откроем панель Lighting и выставим Ambient Color значение пониже.

Теперь, найдём источник направленного света и изменим его цвет и интенсивность. Сделаем почти чёрный цвет с лёгким синеватым оттенком.

Добавим на вход светильник создадим сферу и новый для неё материал, выставим светимость материала в виде светло-серого цвета.

У сферы отключим отбрасывание теней.

Внутри сферы создадим Point Light, у которого увеличим дальность и выставим тип теней Soft Shadows.

Теперь, займёмся созданием фонарика. Для этого в игрока, во вложенный объект, который содержит камеру, добавим компонент Light и выставим его в режим Spot.

Добавим фонарику дальности и направим всего игрока на стену так проще настраивать.

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

Это световое пятно добавит нашему фонарику необходимый эффект.

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

using System.Collections;using System.Collections.Generic;using UnityEngine; public class Flashlight : MonoBehaviour {   bool isOn = false;  public Light lightComponent;   // Use this for initialization  void Start () {   }   // Update is called once per frame  void Update () {    if (Input.GetKeyDown(KeyCode.F)) {      isOn = !isOn;      lightComponent.enabled = isOn;    }  } }

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

Если учащиеся справились раньше, можно добавить звук включения / выклчюния фонарика: импортируем приложенный звуковой файл (в папке материалов к уроку), на объекте фонарика добавим компонент AudioSource и закинем в него звук, уберем чекбокс PlayOnAwake.

Код тоже придётся модифицировать, добавив обращение к AudioSource.

using System.Collections;using System.Collections.Generic;using UnityEngine; public class Flashlight : MonoBehaviour {   bool isOn = false;  public Light lightComponent;   // Use this for initialization  void Start () {   }   // Update is called once per frame  void Update () {    if (Input.GetKeyDown(KeyCode.F)) {      isOn = !isOn;      lightComponent.enabled = isOn;      GetComponent<AudioSource>().Play(); // Звук фонарика    }  } }

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

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

Подробнее..

Категории

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

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru