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

Обучение программированию

Как BBC и Гарвард вырастили целое поколение первых программистов

11.03.2021 12:11:09 | Автор: admin

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

Но это не первый подобный замысел, попытки поднять компьютерную грамотность предпринимались и раньше. В начале 80-х корпорация BBC при поддержке правительства Великобритании запустила необычный курс дистанционного обучения и популяризации компьютерных технологий под названием BBC Computer Literacy Project. На текущий момент это самый беспрецедентный замысел такого рода по своим масштабам: он выходил на протяжении почти десяти лет, собирая огромную аудиторию. В те годы Великобританию по праву можно было назвать самой продвинутой страной в сфере Информационных технологий, тогда она обогнала даже США.

Предпосылки


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

В 1978 году в рамках популярного документального телесериала Horizon году вышла серия Now the Chips are Down, в которой рассказывалось о влиянии компьютеров на современную жизнь. Ходили слухи, что эту серию показали кабинету министров Великобритании и пристыдили британское правительство, что население страны плохо осведомлено о новых технологиях, и это угрожает экономике страны, на фоне начинающегося всемирного бума персональных компьютеров; в Штатах только-только начали выпускать Apple II, один из самых популярных компьютеров того времени, который взорвал рынок.

В конце 70-х BBC Education провела международное исследование, финансируемое Комиссией по кадровым услугам, итогом которого стал отчет под названием Microelectronics, в котором излагались мнения различных специалистов из промышленности, профсоюзов и преподавателей на современные тенденции использования компьютеров. Что примечательно, в нем действительно неплохо проанализированы перспективы развития компьютерных технологий, обсуждались проблемы, которые актуальны и сегодня, такие как: распознавание и синтез речи, влияние технологий на бизнес, образование, здравоохранение и даже некоторые философские проблемы.


Кристофер Эванс

Примерно в это же время Кристофер Эванс пишет футурологическую научно-популярную книгу The Micro Millennium, в которой описывает свое видение развития компьютерных технологий до 2000 года. Позже по этой книге снимут сериал The Mighty Micro из шести эпизодов, который выйдет на телевидении осенью-зимой 1979 года и сильно впечатлит Пола Кривачека из BBC (он впоследствии, станет продюсером Computer Literacy Project).


Пол Кривачек в 1982 году


Кеннет Бейкер

Пост министра по Информационным технологиям в Британии тогда занимал Кеннет Бейкер. Он очень активно выступал за внедрение компьютеров в образовании и на производствах, справедливо негодуя, что страна сильно отстает в сфере IT. А в 1980 году он выступил с речью National Strategy for Information Technology, в которой критиковал систему образования за отсталость, убедил правительство снабдить школы новыми компьютерами BBC Micro и объявить 1982 год годом высоких технологий, что сильно способствовало проекту CPL.

Разработка программы


Все это привело к тому, что в конце 70-х BBC, вместе с британским правительством, задумались о том, что необходимо заинтересовать людей программированием, показать, что это не очень сложно и доступно каждому, кто задастся целью получить новую специальность. Назвали его незатейливо: Проект компьютерной грамотности, или Computer Literacy Project.

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


On the Move

Любопытно, что при разработке концепции сериала, использовался опыт по ликвидации неграмотности среди взрослого населения страны. Как ни удивительно, в конце XX века в Великобритании существовала такая проблема, что несколько миллионов взрослых людей имели трудности с чтением и письмом. Проект был запущен в 75 году как телесериал под названием On the Move. Нескольких десятков серий содержат короткие зарисовки из жизни двух курьеров разьезжиющих на фургоне, Альфы(Боб Хоскинс) и Берта (Дональд Ги), в которых Альф подшучивает над грамотностью Берта и радуется его успехам. Кроме этого в каждой серии присутствует интервью с человеком, который рассказывает, как изменилась его жизнь после повышения грамотности, и выступления знаменитых ведущих того времени. В конце каждой серии показывали телефон службы доверия, по которому можно было позвонить и получить консультацию.

CLP предваряли несколько коротких сериалов по теме, чтобы подготовить зрителей к проблеме и проанализировать реакцию аудитории: The Silicon Factor и Managing the Micro. В первом сериале компьютерные технологии демонстрируются обычным людям и показывается их мнение, а второй сериал был научно-популярным, где рассказывалось о работе микропроцессоров и компьютеров.

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

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


К выпуску железа для телепередачи подошли ответственно, был запущен тендер по разработке компьютера, который был бы достаточно простым и без серьезных затрат мог познакомить людей с новой профессией. Итоговая цена была начальной модели чуть больше 200 фунтов, что примерно соответствовало средней зарплате за неделю или две. Более мощная версия стоила 325 фунтов, дороже, но тоже сравнительно бюджетно. Подробнее об истории его создания и спецификацией можно ознакомиться в этой статье на Хабре: BBC Micro компьютер, который обыграл ZX Spectrum.


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

Кроме руководств, в рамках программы выпускались и другие книги о компьютерах и программировании, одна из них стала настоящим бестселлером; было продано 80 000 экземпляров:


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


Запуск проекта


Первая часть образовательного проекта была выпущена в 82-83 годах, она содержала четыре сериала, в каждом из которых последовательно разбираются несколько примеров применения компьютеров. Всего было показано 31 серий, по 25 минут. В каждом эпизоде обсуждается небольшая реальная задача, которую предлагается решить зрителям, используя их компьютер BBC Micro и прилагающиеся к нему руководства. В первых сериях разбираются основы программирования на Бейсик, далее задачи постепенно усложняются.


Дополнительно был запущен 30-часовой курс программирования на Бейсике, в National Extension College, на который зарегистрировалось более 150 000 человек, с отсевом меньше 3%, что и по нынешним меркам может считаться превосходным результатом для дистанционного обучения программированию.

Итоги первого года CLP были по настоящему впечатляющие! Аудитория каждого выпуска была от 500 000 до 2 000 000 зрителей. Не удивительно, что количество проданных компьютеров было более двух миллионов (включая продажи в других странах), потому что без компьютера смотреть передачу не имело смысла. 85% начальных школ и 65% средних выбрали BBC Micro в качестве образовательного компьютера. Компания Acorn, производившая компьютер, тоже не осталась без пряника, ее оборот вырос с 1 миллиона фунтов в 1979 году, до 20 миллионов в 1982.

Второй этап, 1983-1989


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

Развитие компьютерной техники в течение существования программы привело к тому, что в ее выпусках обсуждалось программирование не только на компьютерах BBC Micro, но и на других, включая ZX Spectrum, который первоначально был конкурентом на место компьютера программы, но проиграл состязание.

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

Наследие


Посмотреть первую часть сериала из 10 эпизодов можно на сайте Интернет Архива.

Кроме этого, BBC хранит архив игр для своего компьютера на сайте Complete BBC Micro Games Archive.

Эмуляторы BBC Micro существуют практически для всех платформ, включая мобильные, например: Beebdroid.

В 2015 году на фоне очередного снижения интереса к IT и недостатка специалистов BBC попробовала тряхнуть стариной и выпустила простенький одноплатник для очередной образовательной программы: The BBC micro:bit. Это типичный Chip-on-Board, построенный на процессоре ARM, вдвое меньше банковской карты и с довольно скромными аппаратными возможностями: процессор ARM Cortex-M0 работающий на 16 МГц, с 16 килобайтами оперативки и 256 килобайтами флеш-памяти, акселерометром, компасом, термометром и матрицей из 25 светодиодов. Из интерфейсов USB, BT и пара кнопок. В 2020 году вышла вторая ревизия на более мощном процессоре ARM Cortex-M4, дополненная микрофоном и динамиком; флеш-память увеличили до 512 килобайт, а оперативную до 128 кб.


Первоначально предполагалось, что программироваться одноплатник будет на адаптированных версиях Pyton и JS, но позже к нему выпустили еще несколько языков программирования, от Бейсика до Паскаля и С++.

***


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

Подробнее..

Почему бухгалтеров мы можем обучать, а программистов нет

11.02.2021 00:06:26 | Автор: admin

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


Позвали Григория Петрова, DevRelа Evrone.com (ex. Voximplant, Radmin, Digital October Center) ивдохновителя сообщества Moscow Python, рассказать, как писать хороший код самому инаучить команду. Аеще обсудили, как понять, какие механизмы нас тормозят, икак посмотреть нанейрофизиологию через призму прикладной разработки ируководства технической командой. Разговор оказался настолько интересным, что сделали статью поего следам.


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





Хороший код, что это?


Объективные критерии назвать сложно, укаждого свое мнение. Главное понять, для чего мыпишем код. Конечно, есть разработчики, которые относятся ккоду как кискусству, новосновном оннужен бизнесу, чтобы решать бизнес-задачи ипозволять людям взаимодействовать друг сдругом исинформацией. Добавим, чтоIT как индустрии всего лет 2030, иневсе компании понимают, что именно они хотят икак написатьТЗ спервого раза. Иногда самое интересное открывается только после начала разработки. Поэтому хороший код это поддерживаемый код, который негниет отсобственной сложности заполгода, его можно расширять вразные стороны или пивотнуть влюбое время. Новые разработчики смогут разобраться схорошим кодом заразумное время.


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



Вчем, собственно, проблема?


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




Взято наBonkersworld.

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


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


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





Немного теории


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


Сейчас готовых ответов иинструкций, что конкретно делать, чтобы получить результат, нет, ноесть вполне интересные теории. Например, теория Грациано (Attention Schema Theory) описывает, что такое личность икак работает сознание. Врусской нейрофизиологии есть прекрасная теория когнитома Константина Анохина.




Когнитом. Изпрезентации К.В.Анохина от2015 года

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


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


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


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


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



Чем нам это поможет напрактике? Решить ссегодняшнего дня делать все правильно недостаточно


Мыговорим джуну: Тебе надо давать читаемые имена идентификаторам, инам кажется, джун, как вFPS, взял новый BMG изDoom ипошел вбой. Нонет, джун впошаговой стратегии: чтобы новый навык приобрести, ему нужно множество раз повторить одно итоже действие.


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


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


Для запоминания нового обязательно используйте интервальные повторения (Spaced repetition). Можно пользоваться приложениями наподобие Anki или специализированными программами. Даже вIDE есть функции, которые подсказывают, что здесь можно было использовать hotkey, аздесь такую-то особенность языка. Сотни повторений вразных контекстах верный путь куспеху.


Мыестьто, что мыделаем: недумаем, немечтаем, аименно делаем. Если просто слушаем ичитаем что-то онавыке, томыте, кто хорошо читает ислушает, нонете, кто этим навыком владеет.


Чтобы добиться результатов, нужно:


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

Звучит просто, анапрактике? Рассмотрим напримере онбординга.



Онбординг разработчика сразных точек зрения


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


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


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




Взято наTeamLead Conf

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



Можноли подготовиться квыходу вновую компанию?


Чтобы войти вкурс, потребуется несколько месяцев. Хорошобы проработать ежедневную практику влюбой ToDo-программке десять пунктов, которые выбудете выполнять каждый день: посмотреть как устроены репозитории вкомпании, пройтись поистории последних коммитов, прочесть одну статью извнутренней wiki, посмотреть один code review итому подобное. Этот механизм нужно отладить, ипосле выхода наработу добавлять всписок новые элементы, ключевые для конкретной компании.



Как все-таки писать хороший код вреальных условиях?


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


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


Если удалось избавиться отнедоделок, тоостается проблема. Как написать простой код, понятный другим разработчикам? Из-за того, что индустрия молодая инет универсального обучения мывсе самоучки, несмотря напрофильное высшее образование. Пятнадцать лет назад обучали ООП, асейчас Rust иGo считают наследование антипаттерном. Как результат, когнитомы увсех разные. Если взять двух хороших программистов, топересечение деревьев смыслов уних может быть всего 1015 %. Код будет понятным программистам сболее похожими участками когнитомов. Поэтому читаемый код это код, написанный привычными конструкциями. Привычными вэтом языке, вэтом стеке ивэтом году.


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



Способность кобучению ивозраст


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


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


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



Универсальное заклинание


Поделимся методом, который наш спикер использует сам ирекомендует другим.


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


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



Что такое пять участков?


Приведем пример. Вызапоминаете подряд семь названных вам цифр (пример такого ряда: 1 9 8 4 4 5 1). Каждая цифра это один элемент, который необходимо удерживать впамяти. Если вашему мозгу удалось распознать паттерн или проассоциировать эти цифры сдатами или книгами, товпамяти нужно будет удерживать только две единицы информации (1984 и451 поФаренгейту), анесемь. Этот прием называется группированием или свертыванием (Chunking).


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


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



Рекомендации: что почитать ипосмотреть



  • Книга Кто заглавного (Майкл Газзанига) для тех, кто интересуется работой мозга.


Полное видео беседы сГригорием:



<рекламная пауза>
По статистике g-mate, минимум 3050% работодателей готовы рассматривать удаленку, а релокейт среди локаций на второй месте по популярности. И надоевший всем коронавирус не препятствие: за время пандемии и в России, и за рубежом наём ускорился в 3 раза.
Регистрируйтесь в @g_jobbot, подходящие вам вакансии с релокейтом будут приходить в Телеграм.
</рекламная пауза>
Подробнее..

Главное мотивированность и настойчивость как в Deutsche Telekom IT Solutions растят своих специалистов

25.05.2021 18:15:50 | Автор: admin

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

День карьеры на факультете прикладной математики и механики Воронежского госуниверситетаДень карьеры на факультете прикладной математики и механики Воронежского госуниверситета

Вы оба набирали стажёров. Почему возникла такая потребность?

Сергей: В компании я являюсь руководителем трайба Test Management SSC Russia. Одна из моих задач это поиск стажёров для различных проектов, не только для себя, но и для коллег. Часть стажёров приходит к нам непосредственно через HR-отдел. Например, они могут увидеть вакансию на корпоративном сайте или на HH.ru и откликнуться. Других мы находим через программу рекомендаций, в рамках которой действующие сотрудники могут предлагать кандидатуры своих знакомых. В случае прохождения стажировки и успешного трудойствойства кандидата такой сотрудник получает бонус. Наконец, кого-то мне приходилось искать и самостоятельно.

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

Дмитрий: У меня немного другая специфика. Сергей набирает людей про запас, чтобы сначала выучить, а уже потом выбрать для них проект. Мне нужны были стажёры в конкретную команду в проект Open Telekom Cloud. Задача была важная, требующая оперативного решения, поэтому я сам был замотивирован заниматься поиском.

По какой причине чаще всего отсеиваются кандидаты?

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

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

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

Сергей: Часто в резюме написано B2, С1, а человек этому уровню не соответствует. История из реальной практики. Приходит ко мне кандидат. В резюме указано, что уровень владения английским С1, т.е. продвинутый. Спрашиваю: Could you please briefly tell us about yourself?. Отвечает на русском: Извините, я сегодня рассказ о себе не готовил. То есть даже эту фразу произнести на английском он не смог.

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

По каким ещё критериям проходит отбор?

Сергей МорозовСергей Морозов

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

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

А что важно указывать в CV?

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

Дмитрий: Да, это очень типично. Как-то перед собеседованием я просматривал резюме девушки, которую мне рекомендовали как хорошего специалиста в Python. Так у неё ни разу слово Python в CV не мелькнуло. Если бы я изначально об этом её навыке не знал, то как должен был догадаться?

Такое ощущение, что сейчас бум платных курсов по программированию и тестированию. Часто их указывают в CV?

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

Но если человек прошёл стажировку в другой компании и его не взяли на младшего инженера, значит, он недостаточно хорош. Разве не так?

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

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

Как проходит стажировка? Ваши подходы чем-то отличаются?

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

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

Дмитрий: Я уже говорил, что мы берём людей в конкретный проект. Люди сразу работают над реальными задачами. Что касается подбора менторов, то здесь есть два варианта развития событий. В каких-то командах Open Telekom Cloud много специалистов из России, а в каких-то единицы. Может сложиться, что стажёр попадёт в команду, где вообще никого из России нет. Ментором тогда станет иностранец и задания будут исходить от него. Но в таком случае мы всё равно подыскиваем и русскоязычного наставника. Его можно найти в другой команде, которая выполняет похожие задачи.

Приходят ли на стажировку люди с абсолютно не профильным образованием и бэкграундом? Насколько они бывают успешны в профессии?

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

А какой вообще процент стажёров в итоге становится специалистами?

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

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

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

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

Подробнее..

Мои рассуждения на тему Как учиться программировать на JavaScript

15.02.2021 22:09:28 | Автор: admin

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


Немного о себе

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

Рассуждения о сути программирования

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

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

В итоге огромная пропасть существует между джунами и сеньорами. Практически никто не хочет брать джунов на работу, как минимум хотят мидлов (а лучше сеньоров, но не за дорого). А откуда набраться мидлам и тем более сеньорам, если джунов никуда не берут?

И как мне видится, тут есть два пути:

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

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

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

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

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

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

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

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

Итак, какой же стек я предлагаю выбрать?

Git

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

TypeScript

TypeScript - это не полноценный самостоятельный язык, а, по сути, надстройка над JavaScript, которая вводит типизацию в этот нетипизированный язык.

В чем смысл?

Вообще, я всегда был за то, чтобы учить выбранный язык в чистом виде, и только после этого переходить к каким-то готовым решениям (библиотекам и т.п.). Но в случае с TypeScript у меня мнение поменялось. Дело в том, что если мы говорим об обучении с упором на то, чтобы как можно быстрее влиться в коммерческую разработку, надо понимать, что априори мы рассчитываем на командную работу. Обучаясь в этом направлении, вы очень нескоро еще сможете взять целый проект в свои руки. Вместо этого вы будете работать с другими специалистами, совместно выполняя задачи. Но даже если вы сами будете тянуть какой-то проект, современный JS устроен так, что своего кода пишется минимум, а бОльшая часть проекта - это сторонние компоненты. Так вот, работая с большим количеством сторонних компонентов, у вас будет постоянная головная боль: Какие сущности в этих компонентах есть? С какими параметрами их можно вызвать (сколько параметров, какие типы)? Что в результате их выполнения ожидать? Вот если писать на чистом JS, вам постоянно надо будет держать это все в голове, все это знать, или постоянно сидеть в сторонней документации (которой может еще и не быть).

В случае же работы с TypeScript, вы как будто работаете не один, как будто кто-то сидит в вашей IDE и постоянно помогает вам в написании кода, следя за тем что и как вы пишете. И если вы что-то пишете не то, TS вам подсказывает, типа "Здесь ожидается логическая переменная, а ты строку пытаешься скормить" или "здесь условие никогда не выполнится, потому что ты пытаешься жестко сравнить число со строкой, а они никогда друг другу не равны" и т.п. То есть здесь смысл в том, что вы учитесь не тому "что делать", а тому "как делать". И это на самом деле сильно проще. Вам коллега ставит задачу "Забери по АПИ курсы валют и скорми массив числовых значений мне в компонент", и это уже довольно четкая задача, потому что вам уже определено условие: "дай массив чисел". Вы можете здесь ошибиться логически, к примеру, взяв не те числа не из того АПИ. Но вы не сможете скормить не массив, или массив не чисел. То есть решив, как вам кажется, задачу, получив результат и попытавшись отдать решение коллеге, уже IDE вам частично проверит результат, до того, как вы потревожите коллегу.

С typescript легко можно играться в playground. Вот пример.

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

React

Про React очень много написано и наверняка все слышали. Так же наверняка слышали и про другие библиотеки типа Vue, Svelte и т.п. Не хочу разводить холивар, но буду советовать выбирать именно React. Поймите правильно: я советую то, с чем сам работаю и что хорошо знаю. Так повелось, что я пишу на Реакт и знаю, что его хватает на большинство задач. А раз тема топика - на чем сосредоточиться по минимуму, чтобы в скором времени выйти на работу, говорить про все мы тут просто не можем.

Styled-Components

Само собой веб-интерфейсы - это JS+HTML+CSS. На чистом CSS уже давно никто не пишет, чаще используют препроцессоры типа SASS, LESS и т.п. Но я советую все же не изучать эти технологии, а сразу изучать styled-components. По моему опыту эта технология гораздо лучше подходит для использования в TS+React -проектах, так как получается более качественно типизацию проработать и гораздо проще работать с вложениями, оперируя не только классическими селекторами, но используя вместо селектором сами компоненты. Это позволяет более четко контролировать целостность проекта.

GraphQL

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

Next.JS

Не все проекты обязательно крупные и пишутся с нуля (хотя сейчас с нуля вообще уже мало что пишется, даже в очень крупных компаниях). Есть спросы и на простые сайта. А простые сайты должны не только просто работать, но и должны хорошо индексироваться поисковиками (то есть обязательно поддерживать качественную работу в режиме SSR (Server-Side-Rendering)), иметь высокие очки производительности (то есть конечные скрипты должны собираться с учетом лучших практик) и т.п. Поверьте, пытаться реализовать все это самостоятельно - очень серьезная задача, требующая огромного опыта и трудозатрат. Вместо этого советую взять Next.JS.

Next.JS - довольно популярный и уже довольно взрослый веб-фреймворк на JS+React плюс все остальное необходимое (включая перечисленные выше технологии). Есть много примеров реализации с применением различных технологий (включая GraphQL, Prisma, Nexus, Styled-Components и т.п.). На нем нельзя просто так сделать вообще все, но он вполне годится под 90%+ современных проектов. К тому же у него отличная документация и активное сообщество (даже в телеге есть очень активное русскоязычное сообщество, которое легко гуглится).

То есть если его взять, можно буквально в считанные дни сделать средненький сайт. А если у вас проект сильно сложнее, то все равно Next.JS наверняка пригодится, потому что он умеет не только в роутинг обычных HTML-страниц, но и можно выстраивать всевозможные API, при чем не только GraphQL. В общем, это такой мощный швейцарский нож с zero-configuration.

Резюме

Да, в сумме, перечисленные выше технологии - это совсем не мало. Но повторюсь - их достаточно для реализации многих проектов. И стратегия здесь следующая: если несколько человек будет изучать один общий стек технологий, то можно объединяться для реализации конечных проектов. И пусть каждый сам по себе не будет знать всего, все же можно разделять на более узкопрофильные задачи и каждый в отдельности может прокачиваться по более ему понравившемуся направлению (кто-то в React, кто-то в Styled-Components, кто-то в GraphQL). И на выходе получать комплексный качественный продукт. Нужен лишь хотя бы один боле менее опытный специалист, который понимает в целом как все это надо делать, который сможет поставить задачи, проверить результат, дать советы и т.п.

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

В итоге я решил, что для этого необходим ресурс, на котором были бы уроки, справочник технологий, проекты с задачами с указанием требуемых технологий и их уровней, обсуждение всего этого и т.д. в таком роде. Собственно говоря, я попытался реализовать такой апгрейд на своем сайте и многое уже сделано и в целом протестировано. Уже сейчас несколько человек обучаются и демонстрируют вполне нормальный прогресс. Вот я и решил, что хотя еще не все сделано, но "лучшее - враг хорошего". Уже сейчас проект выполняет многие задачи в плане совместного обучения. Если вы хотите тоже учиться, присоединяйтесь: https://freecode.academy

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

Подробнее..

Ontol подборка видео-лекций и каналов для продвинутых программистов

14.04.2021 12:16:12 | Автор: admin
image

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

В перерывах между полетами на реактивном ранце и переводами материалов Y Combinator, я делаю проект Ontol такое место в сети, где максимальная концентрация полезного, апгрейдящего мировоззрение материала (ценного на горизонте 10+ лет, например, такого), которым можно делиться бесплатно в 1 клик. (канал в телеграм: t.me/ontol)

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



Simple Made Easy 2012 (Rich Hickey)


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



The Mess We're In (Joe Armstrong)


Джо Армстронг один из создателей Erlang. Он работал в лаборатории компьютерных наук Эрикссон в 1986 году и был частью команды, которая разработала и внедрила первую версию Erlang. Он написал несколько книг про Erlang, в том числе Programming Erlang Software for a Concurrent World. Джо имеет докторскую степень в области компьютерных наук Королевского технологического института в Стокгольме, Швеция.



The Unreasonable Effectiveness of Multiple Dispatch (Karpinski)


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

  1. Совместное использование базовых типов в большом количестве пакетов, обеспечивающих разную функциональность;
  2. Совместное использование общих алгоритмов, которые работают с различными реализациями общих абстракций.

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



Low Level JavaScript


image

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

Пример лекции:



David Beazley


Дэвид Бизли автор книг Python Cookbook и Python Essential Reference. Вот его канал.

Пример лекции:



Jacob Sorber


Якоб Сорбер освещает темы, полезные как для новичков, так и для продвинутых: network programming, threads, processes, operating systems, embedded systems и других.

Пример лекции:



Computerphile


Канал Computerphile младший брат Numberphile. Про всякие компьютерные штуки.

Пример лекции:



Category Theory (Bartosz Milewski)


Серия Теория категорий Бартоша Милевски открывает новый взгляд на программирование в целом.

Пример лекции:



Build a 65c02-based computer from scratch (Ben Eater)


Разбираемся, как работают компьютеры. В этих лекциях Ben Eater создет и программирет базовый компьютер с классическим микропроцессором 6502.

Пример лекции:



Building an 8-bit breadboard computer! (Ben Eater)


Попытка построить еще один 8-битный компьютер с нуля.

Пример лекции:



How to Become a Good Backend Engineer (Hussein Nasser)


Прокачиваем Backend.

Пример лекции:



Semicolon&Sons


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

Пример лекции:



Andrew Kelley


Эндрю создает язык системного программирования Zig. Но он также останавливается на других общих проблемах системного программирования, которые не зависят от языка. Перееехал с YouTube на Vimeo из-за бесящей рекламы.

Пример видео:



Jon Gjengset


Мы создаем библиотеки и инструменты на языке программирования Rust. У Джона Дженгсета лучший канал про Rust для учеников среднего и продвинутого уровней. Также он соавтор/создатель Missing Semester

Пример лекции:



George Hotz | Programming | Livecoding SLAM | twitchslam | Part1


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



Jordan Harrod


Аспирантка Гарварда и Массачусетского технологического института, изучает интерфейсы мозг-машина и машинное обучение для медицины (анестезия) и рассказывает про взаимодействие человека с ИИ и алгоритмами.

Пример видео:



ACM SIGPLAN


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

Пример видео:



Fun Fun Function


Канал, где можно узнать и про софт скилы и про трансдьюсеры.

Пример лекции:



GOTO Conferences


Канал от сообщества GOTO

Пример видео:



Javidx9


Для тех, кто занимается программированием игр. Видео от Javidx9 четкие, лаконичные и насыщенные примерами.

Пример видео:



TechLead


Уволенный из Google и Facebook техлид за стаканчиком кофе делится мудростью.



TheCherno


Канал от бывшего разработчика из EA. Видео в основном посвящены C ++ и разработке игровых движков.

Пример видео:



DefogTech


Темы канала: Java concurrency, distributed systems, system design, microservice.

Пример видео:



Simons Institute video archive

.
Больше теории, чем программирования, но много концепций SOTA.

Пример видео:



C Weekly With Jason Turner


Советы и новости про C++. И живое программирование.

Пример видео:



CppCon 2020


CppCon это ежегодная недельная встреча всего сообщества C ++. Канал конференции.

Пример видео:



NDC London 2020


Канал крупнейшей в Европе конфы по .NET & Agile development

Пример видео:



Подробнее..

Признайтесь вы в этом не ориентируетесь

17.04.2021 14:23:59 | Автор: admin

Спросите: играют ли ваши дети в Роблокс-игры? - Ответ будет положительным!А как ваши дети-подростки выбирают компьютерную игру? Знаете? - Давайте попробуем сами: "Карантин", "Граница", "Белый Дом", "Пигги" и еще куча разных названий... Даже встроенный в некоторые игры 30-секундный трейлер ничего не проясняет! Нужно просто начать игру!

И тут оказывается, что игры имеющие самые разные названия похожи друг на друга, как братья-близнецы. Большинство представляют собой "симуляторы убийств" - не важно, чем и по какому поводу! Бей битой! Стреляй! Бей ножом! Не нужно особенно разбираться! Здесь почти каждый - враг! А раз так, то просто бей каждого - чтобы выжить! Хочешь получить автомат, а не пистолет, монтажку или нож? - Плати и стреляй хоть ракетами!

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

А что, если научить детей делать "хорошие" игры, чтобы они могли и играть, и удивлять своих друзей? Сделать их Творцами и Повелителями своих собственных Миров! Сегодня вряд-ли кого-либо нужно убеждать, что навыки программирования - дело полезное. Без "цифры" уже нельзя обойтись и сегодня. Завтра - тем более! Более того, программирование - важнейший из навыков, которым могут овладеть современные дети, ведь оно развивает другие (самые полезные) "4К-навыки". Вопрос лишь в доступности обучения программированию и в мотивации самих детей.

Возможно даже, что ваш ребенок уже (в той или иной мере) освоил программирование в среде "Scratch". А вот до признания среди сверстников, уверен, дело не дошло, а это сильно демотивирует! Спросите: "Почему?" Ответ прост - все хорошо, но в среде "Scratch" нет простой возможности для работы с 3D-моделями, да и разрешение изображений очень низкое ("пиксельное"). То есть, все, что ни сделает ваш ребенок в среде "Scratch" будет сильно проигрывать в качестве картинки современным игровым платформам типа "Roblox". Такими достижениями трудно похвастать перед сверстниками! Многие не оценят!

Точно такая же ситуация возникла и у одного из наших курсантов. Достаточно преуспев в "Scratch" (дважды заняв 2-е места в Международной Scratch-Олимпиаде и дважды став дипломантом конкурса "Мастер_ИТ"), он с головой погрузился в самостоятельное изучение Роблокс. Оказалось, во встроенной библиотеке ("тулбоксе") Роблокс лежит в свободном доступе такое огромное количество всяких 3D-моделей, картинок и звуковых файлов, что Scratch и не снилось! И с разрешением в Роблокс все в порядке!

И, как говорится: "Терпение и труд все перетрут!" Стало получаться! За плечами нашего курсанта разработка уже нескольких Роблокс-игр. И если первые две игры были созданы из уже готовых моделей и без самостоятельного кодирования, то последующие строились с использованием своих кодов, что сделало игры классными и сразу отразилось на их посещаемости другими игроками. Более того, мальчишке захотелось поделиться знаниям, полученными из изучения (англоязычных) инструкций Роблокса, и собственными лайфхаками - он освоил видеоредактор Movavi. После серии видеороликов, созданных в помощь фанатам популярных Роблокс-игр, он решил начать публиковать уроки по программированию в Роблокс на своем youtube-канале и приглашает всех желающих стать его подписчиками-учениками. Понятно, что нельзя было не пригласить в читатели журнала и программистов-скрэтчеров. На его "профиле" сайта "Scratch" появились соответствующие мультики-приглашения.

В сравнении со многими имеющимися в youtube роликами, уроки юного преподавателя имеют несомненные достоинства: они компактны и очень качественны - с ними разберется даже первоклашка! А уж тем, кто освоил Scratch - тем более! Особое достоинство скриптов, описываемых юным учителем - наличие комментариев к каждой строке кода. Его устные объяснения коротки, но очень продуманны и потому его уроки воспринимаются очень легко. Важно, что автор сразу же демонстрирует и варианты модификации своих программ. Применив эти модификации, каждый сможет запрограммировать именно то, что ему нужно. Приглашайте ваших детей поучиться! Это легко и интересно!

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

Или вот еще одна его относительно "мирная" Роблокс-игра - "Полигон". Здесь начинающий игрок-роблоксер научится ловко управлять своим игровым аватаром и боевой техникой - танками и БТРами. Это - ролевая игра, в которой можно, начав призывником, стать крутым бойцом спецназа военной разведки, научиться метко стрелять и преодолевать сложные препятствия на танках "Армата" и "Т-70".

Думаете это просто? - Ошибаетесь! Модели танков, БТР и автомобилей в Роблокс не всегда имеют низко расположенный центр тяжести. Поэтому иногда даже наезд гусениц танка на самый обыкновенный бордюр дороги может приводить к опрокидыванию модели, в которой сидит ваш аватар. Метко стрелять из танка по подвижным мишеням - тоже не просто! А когда вы станете "профи", вы сможете примерить на себя роль врага-диверсанта, попробовать разыскать секретный центр управления и запустить ядерную ракету или телепортироваться в игру "Зона боевых действий", чтобы помочь "нашим" и, победив врага, под звуки российского гимна поднять флаг Родины...

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

Подробнее..

Recovery mode Признайтесь вы в этом не ориентируетесь

17.04.2021 16:06:40 | Автор: admin

Спросите: играют ли ваши дети в Роблокс-игры? - Ответ будет положительным!А как ваши дети-подростки выбирают компьютерную игру? Знаете? - Давайте попробуем сами: "Карантин", "Граница", "Белый Дом", "Пигги" и еще куча разных названий... Даже встроенный в некоторые игры 30-секундный трейлер ничего не проясняет! Нужно просто начать игру!

И тут оказывается, что игры имеющие самые разные названия похожи друг на друга, как братья-близнецы. Большинство представляют собой "симуляторы убийств" - не важно, чем и по какому поводу! Бей битой! Стреляй! Бей ножом! Не нужно особенно разбираться! Здесь почти каждый - враг! А раз так, то просто бей каждого - чтобы выжить! Хочешь получить автомат, а не пистолет, монтажку или нож? - Плати и стреляй хоть ракетами!

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

А что, если научить детей делать "хорошие" игры, чтобы они могли и играть, и удивлять своих друзей? Сделать их Творцами и Повелителями своих собственных Миров! Сегодня вряд-ли кого-либо нужно убеждать, что навыки программирования - дело полезное. Без "цифры" уже нельзя обойтись и сегодня. Завтра - тем более! Более того, программирование - важнейший из навыков, которым могут овладеть современные дети, ведь оно развивает другие (самые полезные) "4К-навыки". Вопрос лишь в доступности обучения программированию и в мотивации самих детей.

Возможно даже, что ваш ребенок уже (в той или иной мере) освоил программирование в среде "Scratch". А вот до признания среди сверстников, уверен, дело не дошло, а это сильно демотивирует! Спросите: "Почему?" Ответ прост - все хорошо, но в среде "Scratch" нет простой возможности для работы с 3D-моделями, да и разрешение изображений очень низкое ("пиксельное"). То есть, все, что ни сделает ваш ребенок в среде "Scratch" будет сильно проигрывать в качестве картинки современным игровым платформам типа "Roblox". Такими достижениями трудно похвастать перед сверстниками! Многие не оценят!

Точно такая же ситуация возникла и у одного из наших курсантов. Достаточно преуспев в "Scratch" (дважды заняв 2-е места в Международной Scratch-Олимпиаде и дважды став дипломантом конкурса "Мастер_ИТ"), он с головой погрузился в самостоятельное изучение Роблокс. Оказалось, во встроенной библиотеке ("тулбоксе") Роблокс лежит в свободном доступе такое огромное количество всяких 3D-моделей, картинок и звуковых файлов, что Scratch и не снилось! И с разрешением в Роблокс все в порядке!

И, как говорится: "Терпение и труд все перетрут!" Стало получаться! За плечами нашего курсанта разработка уже нескольких Роблокс-игр. И если первые две игры были созданы из уже готовых моделей и без самостоятельного кодирования, то последующие строились с использованием своих кодов, что сделало игры классными и сразу отразилось на их посещаемости другими игроками. Более того, мальчишке захотелось поделиться знаниям, полученными из изучения (англоязычных) инструкций Роблокса, и собственными лайфхаками - он освоил видеоредактор Movavi. После серии видеороликов, созданных в помощь фанатам популярных Роблокс-игр, он решил начать публиковать уроки по программированию в Роблокс на своем youtube-канале и приглашает всех желающих стать его подписчиками-учениками. Понятно, что нельзя было не пригласить в читатели журнала и программистов-скрэтчеров. На его "профиле" сайта "Scratch" появились соответствующие мультики-приглашения.

В сравнении со многими имеющимися в youtube роликами, уроки юного преподавателя имеют несомненные достоинства: они компактны и очень качественны - с ними разберется даже первоклашка! А уж тем, кто освоил Scratch - тем более! Особое достоинство скриптов, описываемых юным учителем - наличие комментариев к каждой строке кода. Его устные объяснения коротки, но очень продуманны и потому его уроки воспринимаются очень легко. Важно, что автор сразу же демонстрирует и варианты модификации своих программ. Применив эти модификации, каждый сможет запрограммировать именно то, что ему нужно. Приглашайте ваших детей поучиться! Это легко и интересно!

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

Или вот еще одна его относительно "мирная" Роблокс-игра - "Полигон". Здесь начинающий игрок-роблоксер научится ловко управлять своим игровым аватаром и боевой техникой - танками и БТРами. Это - ролевая игра, в которой можно, начав призывником, стать крутым бойцом спецназа военной разведки, научиться метко стрелять и преодолевать сложные препятствия на танках "Армата" и "Т-70".

Думаете это просто? - Ошибаетесь! Модели танков, БТР и автомобилей в Роблокс не всегда имеют низко расположенный центр тяжести. Поэтому иногда даже наезд гусениц танка на самый обыкновенный бордюр дороги может приводить к опрокидыванию модели, в которой сидит ваш аватар. Метко стрелять из танка по подвижным мишеням - тоже не просто! А когда вы станете "профи", вы сможете примерить на себя роль врага-диверсанта, попробовать разыскать секретный центр управления и запустить ядерную ракету или телепортироваться в игру "Зона боевых действий", чтобы помочь "нашим" и, победив врага, под звуки российского гимна поднять флаг Родины...

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

Подробнее..

JetBrains Academy платформенные обновления, любимые проекты пользователей и годовая подписка

17.06.2021 14:15:17 | Автор: admin

Привет, Хабр!

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

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

Платформенные обновления

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

  • Появилось два подготовительных трека для пользователей, только начинающих свое знакомство с программированием: Python for Beginners и Preparing for the AP Computer Science. Первый поможет сделать первые шаги в изучении Python, второй в изучении Java. После их прохождения вам будет легче перейти на треки Python Developer и Java Developer. Обратите внимание, что трек Preparing for the AP Computer Science находится на ранней стадии разработки и доступен бесплатно.

  • Мы создали два новых трека для более подробного изучения отдельных концепций Java и Python. Java Desktop Application Developer подойдет для совершенствования навыков написания десктопных приложений на Java. Natural Language Processing научит работе с текстовыми данными с помощью Python. Обратите внимание, что треки находятся на ранней стадии разработки и доступны бесплатно.

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

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

    Аналитика обучения пользователя JetBrains Academy Аналитика обучения пользователя JetBrains Academy
  • Появились персональные бейджи виртуальные награды за успешное обучение и помощь пользователям. Среди них: Committed Learner, Brilliant Mind, Helping Hand, Sweetheart и многие другие.

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

    Карта знаний. Раздел Computer science > Programming languages > Java > Code organization > Code styleКарта знаний. Раздел Computer science > Programming languages > Java > Code organization > Code style
  • Для ознакомления с JetBrains Academy теперь предлагается экскурсия, разъясняющая новым пользователями термины и концепции, которые важно знать при обучении на платформе.

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

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

    Возможные действия при работе с комментариями пользователей JetBrains AcademyВозможные действия при работе с комментариями пользователей JetBrains Academy

Любимые проекты пользователей

Со времен нашего прошлого поста мы добавили более 50 новых проектов, 300 тем и получили более 280 тысяч комментариев пользователей! Мы проанализировали любимые проекты наших пользователей и составили из них рейтинг тех, которые оказались наиболее полезными, увлекательными и простыми в понимании среди более чем 110 других проектов.

Java Developer

  1. Проект Simple Banking System. Работая над упрощенной версией банковской системы, вы изучите основы SQL и познакомитесь с алгоритмом Луна, помогающим избежать ошибок при вводе номера банковской карты.

    Что отмечают пользователи: практика ООП и структурирования кода, знакомство с базами данных через JDBC.

  2. Проект Tic-Tac-Toe with AI. Напишите собственную игру в крестики-нолики и сыграйте в нее с компьютером! Работая над этим проектом, вы узнаете о планировании и разработке сложных программ с нуля, научитесь использовать классы, объекты и методы в Java, обрабатывать ошибки и осуществлять ввод данных.

    Что отмечают пользователи: интересное применение рекурсии, углубленное ООП, знакомство с алгоритмом Минимакс.

  3. Проект Maze Runner. Предлагаем вам написать программу по созданию лабиринтов и нахождению выходов из них! Вы научитесь работать с классом Random и многомерными массивами, а также сохранять результат работы программы в файл.

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

Python Developer

  1. Проект Simple Banking System. Работая над упрощенной версией банковской системы, вы изучите основы SQL и познакомитесь с алгоритмом Луна, помогающим избежать ошибок при вводе номера банковской карты.

    Что отмечают пользователи: практика ООП и структурирования кода, работа с базами данных через SQLite.

  2. Проект Rock-Paper-Scissors.Предлагаем вам создать усовершенствованную версию игры камень-ножницы-бумага камень-ножницы-бумага-ящерица-спок а затем сыграть в нее против компьютера! Это хорошая тренировка навыков написания алгоритмов, работы с массивами, модулем random и форматированием строк.

    Что отмечают пользователи: работа с файлами и коллекциями.

  3. Проект To-Do List.Создайте свой список дел для управления повседневными задачами! Создавая эту программу, вы потренируетесь работать с циклами и условными операторами, а также изучите основы SQLAlchemy.

    Что отмечают пользователи: знакомство с базами данных через SQLAlchemy.

Kotlin Developer

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

    Что отмечают пользователи: практика ООП, особенно классов данных.

  2. Проект Tic-Tac-Toe. Напишите собственную игру в крестики-нолики и сыграйте в нее с компьютером! Работая над этим проектом, вы узнаете о планировании и разработке сложных программ с нуля, научитесь использовать классы, объекты и методы в Java, обрабатывать ошибки и осуществлять ввод данных.

    Что отмечают пользователи: отличная проработка основ Kotlin.

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

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

Годовая подписка

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

В декабре мы объявили о введении годовой подписки на JetBrains Academy. Ее стоимость равна пяти месяцам ежемесячной подписки! Теперь, в зависимости от целей и сроков обучения, вы можете воспользоваться наиболее удобной для вас формой подписки. Оформить ее можно на странице подписки вашего профиля на JetBrains Academy или на нашем сайте.

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

Мы всегда рады вашим комментариям здесь, в Twitter, Facebook и на Reddit! Они помогают нам развивать функциональность JetBrains Academy и делать проекты более качественными, полезными и увлекательными.

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

Ваша команда JetBrains Academy

Подробнее..

Java Core для самых маленьких. Часть 1. Подготовка и первая программа

11.02.2021 22:07:58 | Автор: admin

Вступление. Краткая история и особенности языка.

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

Начало разработки языка было положено еще в 1991 году компанией Sun Microsystems, Inc. Вначале язык был назван Oak (Дуб), но в 1995 он был переименован в Java. Публично заявили о создании языка в 1995 году. Причиной создания была потребность в независящем от платформы и архитектуры процессора языке, который можно было бы использовать для написания программ для бытовой электротехники. Но поскольку в таких устройствах применялись различные процессоры, то использование популярных на то время языков С/С++ и прочих было затруднено, поскольку написанные на них программы должны компилироваться отдельно для конкретной платформы.

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

Установка программного обеспечения - JDK

В первую очередь, нам нужно установить на компьютер так называемую JDK (Java Development Kit) - это установочный комплект разработчика, который содержит в себе компилятор для этого языка и стандартные библиотеки, а виртуальную машинуJava (JVM) для вашей ОС.

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

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

Процесс установки для ОС Windows имеет несколько этапов. Не стоит пугаться, все очень просто и делается в несколько кликов. Вот здесь подробно описан процесс установки. Самое важное для пользователей Windows это добавить системную переменную JAVA_HOME. В этой же статье достаточно подробно расписано как это сделать (есть даже картинки).

Для пользователей MacOS также стоит добавить переменную JAVA_HOME. Делается это следующим образом. После установки .dmg файла JDK переходим в корневую папку текущего пользователя и находим файл .bash_profile. Если у вас уже стоит zsh то ищем файл .zshenv. Открываем этот файл на редактирование и добавляем следующие строки:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Homeexport PATH=${PATH}:${JAVA_HOME}

Здесь обратите внимание на версию JDK указанную в пути - jdk1.8.0_271.jdk. Могу предположить, что у вас она будет отличаться, поэтому пройдите по указанному пути и укажите свою версию. Сохраняем изменения и закрываем файл, он нам больше не понадобится.

Теперь важно проверить правильность установки JDK. Для этого открываем командную строку, в случае работы на Windows, или терминал для MacOS. Вводим следующую команду: java -version Если вы все сделали правильно, вы увидите версию установленного JDK. В ином случае вы, скорее всего, допустили где-то ошибку. Советую внимательно пройтись по всем этапам установки.

Установка IDE

Теперь нам нужно установить среду разработки, она же IDE (Integrated development environment). Что собой представляет среда разработки? На самом деле она выглядит как текстовый редактор, в котором мы можем вводить и редактировать текст. Но помимо этого, этот текстовый редактор умеет делать проверку синтаксиса языка на котором вы пишете. Делается это для того чтобы на раннем этапе подсказать вам о том, что вы допустили ошибку в своем коде.

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

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

Для начала нам нужно выбрать и среду разработки. Их довольно таки много, и самыми популярными из них являются: IntelliJ IDEA, NetBeans, Eclipse. Для себя я выбираю IntelliJ IDEA. Она является самой удобной на мой взгляд, и хоть она и платная, на официальном сайте можно найти бесплатную версию которая называется Community. Этой версии будет вполне достаточно для изучения основ Java. Вообщем будем работать в IntelliJ IDEA.

Итак, открываем браузер, в поисковой строке вводим "Download IntelliJ IDEA Community" или переходим по этой ссылке. Выбираем версию ОС и качаем версию Community.

В установке IntelliJ IDEA нет ничего военного. На крайний случай на ютубе есть множество видео о том, как установить эту программу.

Первая программа

Теперь мы готовы создать нашу первую программу. В окошке запустившийся IDE нажимаем New Project.

В новом окошке в левой панели выбираем Java.

Обратите внимание! В верхнем окошке, справа, возле надписи "Project SDK:" должна находится версия Java, которую вы установили вместе с JDK. Если там пусто, то вам нужно будет указать путь к вашему JDK вручную. Для этого в выпадающем списке нажмите "Add JDK..." и укажите путь к вашему JDK, который был предварительно установлен.

Теперь можем нажать на кнопку Next. В следующем окошке, вверху, поставьте галочку Create project from template и выберите Command Line App. И снова нажимаем Next.

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

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

После указываем путь к проекту программы.

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

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

Это окно, то что вы будете видеть 80-90%, а иногда и 100% времени, работая программистом.

Для того чтобы закончить ваше первое приложение, останется добавить строчку кода System.out.print("Hello world!"); как показано на скриншоте.

Чтобы скомпилировать и запустить на выполнение вашу программу, вам нужно нажать кнопочку с зеленым треугольничком на верхней панели справа, или в меню найти пункт Run -> Run Main. И внизу на нижней панели, под окном редактора, в консоли, вы увидите результат выполнения вашей программы. Вы увидите надпись Hello World! Поздравляю, вы написали свою первую программу на Java.

Разбираем первую программу

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

Пройдемся по порядку:

В начале мы видим package com.zephyr.ventum; - это объявление пакета, и это постоянный атрибут файлов с исходным кодом в Java. Простыми словами, это локация вашего файла в проекте и любой .java файл должен начинаться с подобной строки.

Ниже, public class Main { - это стандартное объявление класса в Java, где public - это модификатор доступа который дает программисту возможность управлять видимостью членов класса, class - является ключевым словом объявляющим класс, Main - это имя класса. Все определение класса и его членов должно располагаться между фигурными скобками { }. Классы мы рассмотрим немного позже, только скажу что в Java все действия программы выполняются только в пределах класса.

Ключевое слово - это слово зарезервированное языком программирования. Например, package - это тоже ключевое слово.

Еще ниже, public static void main(String[] args) { - эта строка является объявлением метода main. Метод (или часто говорят функция) main это точка входа в любой java-программер. Именно отсюда начинается выполнение вашего кода. В проекте может быть несколько методов main, но мы должны выбрать какой-то один для запуска нашей программы. В следующих статьях мы еще вернемся к этому. Сейчас же у нас только один метод main.

Фигурные скобки {} у метода main обозначаю начало и конец тела метода, весь код метода должен располагаться между этими скобками. Аналогичные скобки есть и у класса Main.

Следующая строка является // write your code here однострочным комментарием.

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

Многострочный комментарий будет выглядеть следующим образом:

/* write  your  code here */

Мы просто располагаем несколько строк между символами /* и */

System.out.print("Hello world!"); - строка которая находится внутри метода main является командой, которая выводит в консоль строку "Hello world!"

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

Затем мы закрываем тело нашего метода main } а также закрываем класс Main }.

На этом статья подходит к концу. Автором конкретно этого материала является Егор и все уменьшительно ласкательные формы слов сохранились в первозданном виде.

В следующей статье мы поговорим о типах данных в Java.

Подробнее..

Java Core для самых маленьких. Часть 2. Типы данных

15.02.2021 14:04:42 | Автор: admin

Вступление

В этой статье мы не будем использовать ранее установленную IDE и JDK. Однако не беспокойтесь, ваш труд не был напрасным. Уже в следующей статье мы будет изучать переменные в Java и активно кодить в IDEA. Эта же статья является обязательным этапом. И в начале вашего обучения вы, возможно, будете не раз к ней возвращаться.

1998 - пин-код от моей кредитки является ничем иным как числом. По-крайней мере для нас - для людей. 36,5 - температура, которую показывают все термометры в разных ТРЦ. Для нас это дробное число или число с плавающей запятой. "Java Core для самых маленьких" - а это название данной серии статей, и мы воспринимает это как текст. Так к чему же я веду. А к тому, что Джаве (так правильно произносить, на тот случай если кто-то произносит "ява"), как и человеку, нужно понимать с чем она имеет дело. С каким типом данных предстоит работать.

Фанаты матрицы и, надеюсь, остальные читатели знают, что на низком уровне, вся информация в ЭВМ представлена в виде набора нулей и единиц. А вот у человеков, на более высоком уровне, есть высокоуровневые языки программирования. Они не требуют работы с нулями и единицами, предоставляя возможность писать код понятный для людей. Одним из таких языков программирование и является Java. Мало того, Java - это строго-типизированный язык программирования. А еще бывают языки с динамической типизацией данных (например Java Script). Но мы здесь учим нормальный язык программирования, поэтому не будем отвлекаться.

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

Примитивы

В языке Java существует 8, оскорбленных сообществом, примитивных типов данных. Их также называют простыми. И вот какие они бывают:

  • Целые числа со знаком: byte, short, int, long;

  • Числа с плавающей точкой: float, double;

  • Символы: char;

  • Логические значения: boolean.

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

Тип byte

Является наименьшим из целочисленных. 8-разрядный тип данных c диапазоном значений от -2^7 до 2^7-1. Или простыми словами может хранить значения от -128 до 128. Используется для работы с потоками ввода-вывода данных, эта тема будет рассмотрена позже.

Тип short

16-разрядный тип данных в диапазоне от -2^15 до 2^15-1. Может хранить значения от -32768 до 32767. Самый редко применяемый тип данных.

Тип int

Наиболее часто употребляемый тип данных. Содержит 32 разряда и помещает числа в диапазоне от -2^31 до 2^31-1. Другими словами может хранить значения от -2147483648 до 2147483647.

Тип long

64-разрядный целочисленный тип данных с диапазоном от -2^63 до 2^63-1. Может хранить значения от -9223372036854775808 до 9223372036854775807. Удобен при работе с большими целыми числами.

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

Тип float

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

Тип double

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

Тип char

16-разрядный тип данных в диапазоне от 0 до 2^16. Хранит значения от 0 до 65536. Этот тип может хранить в себе полный набор международных символов на всех известных языках мира (кодировка Unicode). То есть по сути каждый символ представляет из себя какое-то число. А тип данных char позволяет понять, что это число является символом.

Тип boolean

Может принимать только 2 значения true или false. Употребляется в условных выражениях, к примеру 1 > 10 вернет false, а 1 < 10 - true.

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

Подробнее..

Опрос А вы бы отдали своего ребёнка в IT?

10.03.2021 16:14:14 | Автор: admin
Вы бы посоветовали своему сыну или дочери пойти работать в IT? Считаете ли, что через 10-15 лет эта отрасль всё ещё будет на волне? Сделала ли работа в IT счастливым вас, сделает ли счастливым вашего ребенка?

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

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

А вы какую позицию занимаете?

Вот что говорит мой коллега, тимлид в Southbridge. Его старший ребенок учится в 6 классе.

Вопрос в том, интересно ли это ребенку? Как по мне, работа обязательно должна приносить удовольствие.

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

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

Владимир Гурьянов

Пожалуйста, проголосуйте в опросе и напишите в комментариях, что вы думаете по этому поводу. Редкий случай, когда ваш комментарий действительно может что-то изменить.
(Если опрос недоступен, можно проголосовать здесь: https://forms.gle/ous7bRovTQgp7LEf7).
Подробнее..

Курсы PHP-программирования в Минске. Куда пойти учиться?

14.03.2021 02:16:56 | Автор: admin

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

Другое дело что не все так просто. Чтобы попасть в ряды элиты, нужно пройти определенный путь. Можно ли его заменить самообразованием без наставника и практики, просто реализовав правило 10 000 часов? Как показывает опыт нет. Кандидату в разработчики либо не хватит терпения, либо обучение будет слишком несистемным и безрезультатным. Разберемся подробнее.

Для чего нужны курсы?

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

  1. Обучение в ВУЗе. По крайней мере в Минске ситуация складывается таким образом, что максимум, который можно получить в рамках академического образования, это основы ООП. Количество практики и пригодных для этого навыков стремится к 0.

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

  3. Видео-уроки, самоучители и прочее. До определенного (невысокого) уровня да, но не более.

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

  • Полноценная программа обучения, включающая теоретическую и практическую части.

  • Наличие преподавателя, который может уделить время ученику.

  • Обучение в аудиториях, никакой дистанционки.

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

Manao Team

Трудоустройство: +

Сайт компании

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

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

IT-академия Stormnet

Трудоустройство: +

Сайт компании

Другая академия, предлагающая обучение в группах, состоящих их 6-12 человек. В блоке На кого рассчитан курс указано, что жестких требований к ученикам нет, но в то же время организаторы будут рады заявкам от кандидатов, уже получивших базовые знания по HTML/CSS/JS. На курсе обучающиеся применяют сторонние библиотеки, не ограничиваясь возможностями стандартного PHP.

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

Курсы Древо Знаний

Трудоустройство: +

Сайт компании

Если бы мы показали вам скриншот из Instagram-аккаунта данной компании, то вы подумали бы: При чем здесь PHP?. Этот образовательный центр действительно может похвастаться большим разнообразием программ много оффлайн-специальностей (от красоты и здоровья до рукоделия). И притом среди всего этого присутствуют не менее многочисленные IT-направления, среди которых разработка на PHP. В принципе это обычное явление среди общих профильных курсов. 60 академических часов, бесплатный документ государственного образца + сертификат. Параллельно ведутся сразу 3 группы утреннего, вечернего и выходного формата.

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

IT-академия IT Star

Трудоустройство: +

Сайт компании

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

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

Институт Бизнес-Технологий

Трудоустройство: +

Сайт компании

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

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

Центр Обучающих Технологий

Трудоустройство: +

Сайт компании

Что сразу хочется отметить действительно расширенную программу обучения. Общий курс разбит на 16 тем, продвинутый на 18. Это одна из немногих программ, где изучаются все от основ HTML и CSS до обзора востребованных технологий и особенностей командной разработки. Преподаватель с внушительным опытом работы и в частности преподавания более 7 лет. 15 + 17 занятий = 128 часов. До 6 человек в группе. Есть скидка для тех, кто приводит с собой друга. 27 лет опыта работы.

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

Учебный центр Новое Завтра

Трудоустройство: +

Сайт компании

Сильное преимущество открытые уроки, благодаря которым ученик может оценить качество обучения еще до оплаты курса. Также проводится обучение основам четырех популярных CMS (1С-Битрикс, WordPress, Joomla, Drupal).

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

Заключение

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

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

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

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

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

  • Если у организаторов курсов нет собственных рабочих мест, то нужно понимать, есть ли у них компании-партнеры, которые готовы принимать учеников по рекомендации. У кого-то число партнеров составляет 6-7, у кого-то 30+. А кто-то и вовсе предлагает услуги посредников (HR/специалисты по рекрутингу).

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

Кого в итоге выбрать? Решение за вами. Главное делайте это в соответствии со своими целями/требованиями и возможностями.

Успехов!

Подробнее..

Почему мы отказываем многим стажерам на должность PHP-разработчика

01.04.2021 16:06:37 | Автор: admin

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


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

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

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

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

Антисовет 1:

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

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

2. Невыполнение тестового задания

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

В качестве ремарки здесь нужно обозначить ряд моментов:

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

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

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

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

Антисовет 2:

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

3. Игнорирование правил/системы

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

Антисовет 3:

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

4. Отсутствие оперативного ответа

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

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

Антисовет 4:

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

Если на примете есть компания А, с которой уже общаетесь, то про остальных забудьте. А Вас точно возьмут. B, C и D пусть подождут у них ведь никогда не закончатся вакантные места, да и рабочих мест в офисе, а также опытных наставников на всех хватит.

5. Неявка на интервью

Есть кандидаты, которые являются большими молодцами по всем четырем предыдущим пунктам. База есть, с домашним заданием не подводят, все делают по правилам и оперативно. Но потом, когда наступает момент для явки на собеседование (будь то в офис или даже по Zoom/Skype), вдруг пропадают. Мы понимаем, что все люди разные. Кто-то является интровертом, кто-то экстравертом. Кто-то считает, что уже давно наступил век мессенджеров, и общение вживую вообще не нужно. Но в нашем случае это, что называется, путь в никуда. Мы не отказались от практики личного общения и вообще работы в офисе. Это наша принципиальная позиция. И если человек стесняется либо считает не столь важным посетить в назначенное время наш уютный офис, то это будет не просто поводом для отказа, а фактически невозможностью его приема на стажировку. У нас (как и у многих других) дистанционка для стажеров не практикуется.

Антисовет 5:

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

6. Непринятие условий оффера

Такое случается довольно редко, но тем не менее. Есть кандидаты, которые не согласны на предлагаемые условия. Чаще всего они хотят:

  • Уменьшение количества часов стажировки в день.

  • Получение гарантии трудоустройства.

  • Удаленный формат без появления в офисе.

  • Сокращение длительности стажировки.

  • Полную отмену стажировки и сразу же переход в боевой режим.

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

Антисовет 6:

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

Бонус

В качестве дополнения ответим на еще один популярный вопрос.

Почему вас никто не приглашает на стажировку?

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

Думаю, Вы поняли, каким здесь будет антисовет

Последний антисовет:

Не ищите стажировки и не откликайтесь на те, которые находите. Компании сделают все за Вас сами.

Подробнее..

Из филолога в Python-разработчики как переучиться и чего ждать от новой профессии

03.04.2021 00:05:49 | Автор: admin

Стать разработчиком, если ты не технарь и у тебя нет профильного диплома, вполне реально много подобных примеров можно найти в сети. Считается, что Python один из самых простых способов войти в эту профессию, но есть масса нюансов, которые могут повлиять на обучение. О том, как его построить, чтобы не обжечься на первом языке программирования, рассказываетпреподаватель Python в GeekBrains и главный инженер Сбера по разработке в Data Analytics Вероника Голубева.

Вероника Голубева, преподаватель Python в GeekBrains и главный инженер Сбера по разработке в Data Analytics Вероника Голубева, преподаватель Python в GeekBrains и главный инженер Сбера по разработке в Data Analytics

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

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

Достаточно легкоязык программирования Pythonдается гуманитариям лингвистам, филологам. По сути, он как иностранный язык, только легче: так же нужно изучать синтаксис, но больше логики, строже правила и нет исключений. Перейти на Python с другого языка программирования очень легко, но, если вы новичок и выбираете, с какого языка начать, начните с Python. На нём будет гораздо легче, чем на условном Java, обучиться базе циклам и объектно ориентированному программированию.

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

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

Как и где учиться

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

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

Чтобы сохранить мотивацию, можно смотреть видео о профессии: на YouTube есть классные ролики о том, что можно научиться делать, они цепляют.

Программирование на Python это сложно. Не понимать что-то нормально.

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

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

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

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

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

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

И некоторые учебники не предполагают самостоятельногоизучения Python, например Марка Лутца немногие смогут дочитать до конца. Такие книги хороши для закрепления знаний. Как вариант, можно попробовать занятия на Coursera или подобных ресурсах. Есть сайты и даже игры с базовыми задачками по программированию. Но в большинстве своём они далеки от того, что придётся делать на работе.Обучение Pythonна курсах дополнительно экономит время: вам не нужно искать ответы самостоятельно. Вы можете задавать их преподавателю, чтобы лучше разобраться в теме. Но читать учебники нужно. Они дают возможность глубже вникнуть.

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

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

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

Как устроиться на работу джуном

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

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

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

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

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

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

По сути, джуниоры отличаются от мидлов только опытом работы: у первых есть только знания, которые они учатся применять, а мидлы уже понимают, на чём они специализируются и как эффективно решать рабочие задачи. Мидлам нужно хорошо знать библиотеки и понимать, какие алгоритмы они используют и почему. Алгоритмы это база: их спрашивают даже на собеседованиях в Google и Amazon. Без знаний алгоритмов невозможно заставить код работать хорошо и быстро. Если вы пытаетесь прокачаться до мидла, попробуйте прочитать книгу Python Cookbook Дэвида Бизли.

Как проходить собеседования

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

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

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

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

Список самых частых вопросов

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

  • изменяемые и неизменяемые типы данных это спрашивают практически на любом собеседовании;

  • итератор, генератор, декоратор;

  • разница между листом и генератором об этом обязательно спросят;

  • магические функции;

  • реализация алгоритма сортировки слиянием Python;

  • multithreading vs. multiprocessing.

Вотздесьможно посмотреть подробнее про типовые вопросы.

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

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

Подробнее..

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

21.04.2021 20:21:36 | Автор: admin

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

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

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

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

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

Как обычно преподают программирование (и не только)

В 90 процентов курсов (и не только по программированию) осуществляется следующий порядок обучения: теоретический блок практика теоретический блок практика и т. д., пока не дойдет до финального экзамена. По сути, так устроена вся мировая система образования.

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

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

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

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

Как обучать эффективнее в новых условиях?

С этим вопросом мы удалились на подумать и в течении долгого времени не вышло ни одного нового курса от нашей команды. Но результат того стоил мы внедрили в обучающий процесс новую методику, основанную наUODP(User Oriented Development Process), которая ориентируется на потребности студентов.

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

  • Программа максимально сосредоточилась на практике, минимум теоретических основ;

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

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

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

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

Насколько этот подход оказался эффективным?

Говоря честно, этот подход конечно оказался сложнее прежней схемы но показывает невероятную эффективность. В обычном курсе 10% учеников не заканчивают курс, 75 справляются, но не получают желаемого результата, и только 15% достигают того, что хотели: получают новую, интересную им профессию.

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

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

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

Если вам интересно узнать подробнее о нашем процессе обучения заходитек нам в Discord там живое общение студентов и печеньки.

Подробнее..

Перевод Почему стоит начать изучение программирования с языка C

03.05.2021 16:20:48 | Автор: admin
Краткое содержание: автор статьи объясняет, почему С хорош именно на этапе обучения и прокачки мозгов будущего программиста. А через некоторое время, или даже параллельно, можно выучить более современный язык и заняться, например, Enterprise- или Web-разработкой.


Фото: Liam Briese on Unsplash

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

Назовём навскидку несколько популярных языков. Для Enterprise-разработки активно используют Java (скоро там закрепится и Kotlin), C#, для Web-разработки JavaScript, Go, Python и PHP, для мобильной разработки Swift, Java/Kotlin, ну и осмелюсь назвать JavaScript (потому что может, потому что React Native). Разработчики игр часто пользуются C# и С++. Все они востребованы по нескольким причинам:

  • упрощённый синтаксис (в большинстве своём) и ясная семантика на фоне языка C;
  • полнофункциональный набор стандартных API;
  • активная поддержка сообщества;
  • растущая экосистема фреймворков и библиотек.

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

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

Рано или поздно они задаются вопросом: какой язык программирования лучше учить первым? В школе и университете на этот вопрос могут ответить за вас: чаще всего обучение там начинают с языка С/С++ (именно вот так, через /). Но на альтернативных обучающих площадках вряд ли вам тоже кто-то предложит просто поизучать С для расширения кругозора или прокачки мозгов. Всем хочется побыстрее, что называется, войти в ИТ. Так что, как видите, тут и там вам придётся проявить волю и самостоятельность, если решите начать изучение с языка С.

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

C заставляет глубоко прорабатывать решение проблемы


Более современные языки предлагают сразу несколько встроенных абстракций (или абстракций из стандартных библиотек) на все распространённые случаи жизни. Это в первую очередь относится к стандартным алгоритмическим задачам. Например, если вам нужно скопировать определённые элементы из первого массива во второй, вы можете использовать встроенный метод filter() в JavaScript. Если пишете на Java, в вашем распоряжении метод filter() из пакета java.util.stream.

JavaScript: Array.filter()

const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];// если длина слова больше 6, добавляем его в результирующий массивconst result = words.filter(word => word.length > 6);  console.log(result);// получится вот такой результат: Array ["exuberant", "destruction", "present"]

Java: stream().filter()

List<String> lines = Arrays.asList("spray", "limit", "elite");// преобразуем List в StreamList<String> result = lines.stream()              // хотим исключить elite         .filter(line -> !"elite".equals(line))     // сформируем коллекцию и преобразуем в List       .collect(Collectors.toList());   //получится вот такой результат:  spray, limit        result.forEach(System.out::println);   

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

#include <stdio.h>#define SIZE 5void copy_aka_filter_arr(double trg[], double src[], int n);int main(void){    int i;    double source[SIZE] = {1.1, 2.2, 3.3, 4.4, 5.5};    double target[SIZE];    printf("Source:  ");    for (i = 0; i < SIZE; i++){        printf("%5.1f ", source[i]);    }    putchar('\n');    copy_arr(target, source, SIZE);       return 0;}void copy_aka_filter_arr(double trg[], double src[], int n){// копирует i-й элемент из исходного массива в новый, если он больше 3.3. // иначе записывает в i-й элемент нового массива 0.0     int i;    for (i = 0; i < n; i++){            if (trg[i]) > 3.3){                     trg[i] = src[i];            }            else{                trg[i] = 0.0;            }    }           printf("Target: ");    for (i = 0; i < SIZE; i++){        printf("%5.1f ", trg[i]);    }    putchar('\n');}


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

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

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

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


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

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

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

C учит свободе и ответственности


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

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

C мотивирует к написанию чистого кода


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

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

Пока не убедил?


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

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

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



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

Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

Подробнее..

Что не так с современным преподаванием информатики

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

Привет, Хабр! Меня зовут Анна Агабекян, я ментор и автор курсов по направлениям "Тестировщик-автоматизатор на Python" (QAP-тестирование) и Fullstack-разработчик на JavaScript в SkillFactory, а также преподаю физику и информатику в лицее. Параллельно с преподаванием я веду научную работу, посвящённую проблемам образования, и на её основе решила сделать статью для Хабра, так как, на мой взгляд, проблема качественного образования в области информатики и IT сейчас стоит очень остро, но остаётся неосвёщенной. Как преподаватель я вижу, что сейчас процесс развития образовательных организаций отстает от требований IT-сферы. Хотела бы с вами поделиться своим видением данной проблемы и возможных путей решения.


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

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

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

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

Языки программирования, используемые в учебных заведениях

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

Эволюция языков программированияЭволюция языков программирования

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

  • Паскаль;

  • Бейсик;

  • Кумир;

  • Fortran;

  • Алгоритмический язык.

  • Вы имеете в виду английский?

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

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

  • нет инструмента для быстрого создания интерфейса программы;

  • слабая графическая часть, которая может рисовать только простейшие объекты;

  • ограничения по размеру используемой памяти в переменных и циклах;

  • нет встроенной поддержки web-сервисов и страниц;

  • Паскаль не знает, как работать с современными базами данных, протоколами обмена, облачными хранилищами и сервисами.

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

  1. Чистота и ясность кода, читаемость кода.

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

  3. Многогранность и гибкость, возможность писать сложные программы кратко и красиво.

  4. Простота синтаксиса, прозрачность интерпретации языковых конструкций.

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

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

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

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

Сравнение ЯП, используемых в обучении программированию

Разберём главные отличительные особенности языка программирования Python и проведём сравнение с Паскалем.

1. Простой синтаксис и низкий порог входа.

Python вместо знаков препинания или ключевых слов (в Паскале такими словами являются begin и end) использует отступы для обозначения выполнения блока. Программы, написанные в одну строку или с другими нарушениями в структуре, не смогут быть выполненными в Python. Такая особенность позволит сократить размер кода и увеличить читаемость программы. Синтаксис Python приучит школьников писать красивый код, что улучшит написание и понимание кода. Так, например, различаются записи цикла на Паскале и Python (таблица ниже).

Сравнение синтаксиса цикла с предусловием в Паскаль и Python

Паскаль

Python

while s + n < 150 do

begin

s := s + 15;

n := n - 5

end;

writeln(n)

while s + n < 150:

s = s + 15

n = n - 5

print(n)

2. Динамическая типизация.

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

Сравнение синтаксиса объявления переменных в Паскаль и Python

Паскаль

Python

var s, n: integer;

begin

s := 0;

n := 75;

end.

s = 0

n = 75

3. Лаконичный и изящный код.

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

Сравнение синтаксиса переприсвоения переменных в Паскаль и Python

Паскаль

Python

c := a;

a := b;

b := c;

a, b = b, a

4. Высокоуровневые типы данных.

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

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

Сравнение синтаксиса заполнения массива в Паскаль и Python

Паскаль

Python

const n = 100;

var a: array[0..n - 1] of integer;

for i := 0 to n - 1 do

a[i] := 0;

n = 100

a = [0] * n

5. Широкое применение.

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

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

Так как же можно всё поправить?

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

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

Например, если учебная программа подразумевает преподавание только языка Паскаль, преподавателю должен понимать и другие современные, промышленные языки, особенно если в классе есть ученик, заинтересованный в программировании. Иначе создаётся ситуация, как сейчас, когда уже немолодой преподаватель монотонно подаёт информацию о том, что нужно для того, чтобы в Turbo Pascal возвести x в степень 14.

И, конечно, не обойтись без изменений в местных органах Министерства образования и самой школе. У них должны быть механизмы и ресурсы для отправки преподавателя на дополнительное обучение, в том числе и на частных платных курсах, даже за рубежом. Также не стоит забывать о книгах и иных источниках новой, полезной информации. Необходимо предоставить больше свободы преподавателям-энтузиастам, которые хотят, например, дать своим ученикам Python или C++, а не навязывать Паскаль, как в новых учебниках для 1011 классов, где по ФГОСам есть только упомянутый язык. К сожалению, в нынешних реалиях России всё это выглядит утопией. Хотя по-прежнему будут существовать разработчики, использующие устаревшие языки, нужно учитывать, что в ближайшем будущем они будут заменены более распространёнными.

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

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

Узнайте, как прокачаться и в других специальностях или освоить их с нуля:

Другие профессии и курсы
Подробнее..

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

16.06.2021 22:19:34 | Автор: admin

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

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

В результате родился проект Объясняем код. Посмотреть, что это такое можно на code-explained.com. Код проекта выложен на Гитхаб.

Чем я вдохновлялся

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

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

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

Как сегодня изучают алгоритмы

Преподаватель записывает на доске код, а потом по шагам объясняет, как он работает.

В видео на Youtube происходит нечто подобное ведущий берет код алгоритма и отрисовывает этапы его работы

На ИТ-ресурсах создают анимации.

А кто-то даже пытается объяснить работу алгоритма через танец.

Почему эти подходы казались мне неэффективными

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

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

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

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

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

Как это технически реализовано

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

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

while (true) { // Итерируемся по списку    this.addBP('check-not-found'); // Метод сохраняем состояние    if (this.newList.get(this.newListIdx) === null) {        // this.newList -- это немутабельный список        break;    }    this.addBP('check-found'); // Выполнена очередная строчка, сохраняем состояние    if (EQ(this.newList.get(this.newListIdx), this.number)) {        this.addBP('found-key');        return true;    }    this.fmtCollisionCount += 1; // Для динамических комментариев иногда нужно сохранять статистикуу    this.newListIdx = (this.newListIdx + 1) % this.newList.size; // Переходим к следующему индекксу    this.addBP('next-idx');}

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

Много строк возникает из-за особенностей браузерных API и производительности в разных браузерах. Например, большой проблемой оказалось сделать так, чтобы браузеры не склеивали последовательные изменения друг с другом. Если добавить div с определённой начальной позицией, и потом сразу же поменять координаты на конечные, то браузер склеит эти два изменения в одно. Div сразу окажется в конечной позиции без анимации. Чтобы такое не происходило, приходится вставлять задержку в два фрейма анимации с помощью window.requestAnimationFrame().

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

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

Что дальше?

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

Подробнее..

Из первых уст. Про впечатления от курса Яндекс Практикума Разработчик С

05.04.2021 20:15:29 | Автор: admin

Приветствую уважаемое сообщество.

В последнее время стало появляться множество курсов, связанных с IT. Вполне логично, что народ стал делиться своими наблюдениями от их прохождения. Так на Хабре можно найти отзывы об обучении на некоторых факультетах (курсах) от Яндекс Практикума [1-3]. Однако про курс "С++ разработчик" такой информации еще не было, был только рекламный пост о его запуске [4], после которого я туда и вписался, попав в первый поток (когорту).

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

О первом лице

Мне 38 лет и последние 12 лет (после защиты кандидатской) работаю в одном из научных учреждений Санкт-Петербурга. До этого успел немного поработать в IT (выездной сисадмин, установка торгового оборудования). Опыта коммерческой разработки нет. Зато есть небольшой опыт разработки программ для управления научными приборами на Delphi.

Мотивация

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

Опущу тему про почему выбор пал на Яндекс Практикум, самое интересное - что же там внутри.

Что внутри

Про тренажер, про спринты, наставников, дедлайны все уже было здесь на Хабре расписано вдоль и поперек [4-6]. Я даже догадываюсь о возможных причинах написания тех публикаций (только некоторых). Нам сейчас пообещали взамен на отзыв один из подарков на выбор. Очень хочу получить Яндекс.Носки. Не знаю пока что это и как выглядит, но представляю, что это носки из спец шерсти, которая акупунктурно воздействует на определенные точки стопы так, что в мозгу стимулируются области, ответственные за мыслительный процесс.

Как и наверно в большинстве онлайн-курсов все начинается с вводного бесплатного курса, где можно оценить свои силы, время, удобство и стиль изложения материала. Что мне больше всего понравилось, финальным проектом вводного курса был вполне законченный проект "поисковик по поиску потерянных домашних животных" с ранжированием результатов выдачи и стоп-словами. Хотя в описании вводного курса было указано ориентировочное время прохождения 24 часа, я его решал целый месяц во время отпуска. Зато на основе готового поисковика, пока ждал начала уже платного обучения, довольно легко сделал программу "Любимая фраза классиков литературы", куда вошло большинство изученных алгоритмов и приемов. Таким образом, на вводном курсе были даны базовые типы, строки, вектор, словарь, немного шаблонов и лямбда функции. Подача материала мне понравилась, она была выполнена в виде комикса с некоторой историей и юмором.

Главные герои вводного курсаГлавные герои вводного курса

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

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

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

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

Что конкретно

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

Страничка моей лабораторииСтраничка моей лаборатории

По ходу обучения мы разработали свои версии стандартного вектора. Сначала детский вариант - на основе std::array, затем, вот только что, с использованием размещающего оператора new и инициализацией объектов в сырой памяти, по количеству копирований и перемещений не уступающий std::vector.

Второй крупный проект, который мы уже заканчиваем - это городской маршрутизатор. Все началось невинно, с разработки справочника остановок и маршрутов автобусов, однако очень скоро программа обросла функцией генерации карты маршрутов в SVG, работой с JSON для ввода и вывода данных, используя библиотеки которые сами же и разработали. Самая жесть была с построением оптимального маршрута между остановками с использованием графа, библиотеку которого к счастью нам уже дали готовую и надо было всего лишь разобраться с ее API. Из освоенных технологий: умные указатели, move-семантика, полиморфизм и наследование, RAII, variadic templates. Если в начале курса в тренажер для проверки приходилось загружать единственный файл main.cpp, то последний проект состоял из 24 файлов с самописными библиотеками, пространствами имен и пр.

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

Про проблемы тренажера

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

Про портфолио

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

Мой репозитарий с решенными задачамиМой репозитарий с решенными задачами

Про ревьюеров

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

Про нагрузку

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

Про трудоустройство

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

Что не хватает

Обязательной практики в реальной компании. Читая Хабр можно лишь отдаленно представить, чем занимаются начинающие разработчики в реальных компаниях. То, что есть дедлайны и спринты? Да, к этому готовят. Разбираться в чужом коде? Да, практически в каждом задании в тренажере дается код-заготовка и нужно понять и расширить его функционал. Уметь работать с GIT? Все итоговые работы мыотправляем ревьюеру через репозитарий на Github. Умение общаться с такими же новичками и опытными специалистами? Тоже да. На курсе все общение построено через Slack, все друг другу помогают советами, иногда всем миром пытаемся понять, что еще не нравится тренажеру, чтобы он засчитал задание.

Насчет типов задач, которые даются в тренажере. Практически не встречались задачи на алгоритмы, о которых недавно рассказывали тут в теме про собеседования в Яндекс [7]. Все задачи имеют адекватную связь с реальностью. Разве что при работе над темой про умные указатели мы клонировали октопусов. Знаете как называется осьминог с 4 щупальцами? Квадропус. А осьминог без щупалец? Колобок. Так авторы задания шутливо давали имена переменным в заготовке кода.

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

Личные впечатления

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

Список источников:

[1] Что вас ждет на курсе Алгоритмов в Яндекс.Практикуме

[2] Опыт обучения из первых рук. Яндекс.Практикум Аналитик данных

[3] Яндекс.Практикум Аналитик данных. Окончание обучения

[4] C++ в Практикуме. Как обучить студентов плюсам, не отпугивая

[5] Веб-тренажёр Яндекс.Практикума. Как всё устроено

[6] Что вас на самом деле ждёт на курсе про алгоритмы в Яндекс.Практикуме

[7] Собеседование в Яндекс: театр абсурда :/

Подробнее..

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

Кирилл

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

Влас

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

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

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

  • тимлиды;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • DevTools Profiling (Advanced)

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

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

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

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

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

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

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

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

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

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

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

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

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

Виктор

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

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

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

На языке цифр

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

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


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

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

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

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

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

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

Татьяна


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

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

Подробнее..

Категории

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

  • Имя: Макс
    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