CMNat

На Пикабу
Дата рождения: 26 июля
17К рейтинг 9 подписчиков 4 подписки 10 постов 4 в горячем
Награды:
5 лет на Пикабу
4

"Соискательский гатлинг" - как джун с улицы одолел конкурентный барьер

Прошел год с моего предыдущего поста про обучение и поиск работы, и вот уже набежал мой первый, так желанный работодателями, год подтверждаемого коммерческого опыта =)
С того момента накопилось немало занимательных историй, тем и наблюдений, которыми мне хотелось бы поделиться с точки зрения молодого инженера, большая часть этих тем будет посвящена непосредственно работе нового разработчика в компании - к чему готовиться, что удивит и с чем придется смириться. Но не будем забегать вперед. В рамках этого поста я затрону темы посвященные процессу поиска работы и взаимодействию с нанимателями. В перечень таких тем входит: "Чего хотят боты: Составление резюме, если вы никто и звать вас никак", "Бесконечность не предел: Правильно взаимодействуем с работодателями", "Расчехляем пулемет: эффективно взаимодействуем с работодателями" и ряд других, не менее забавных артикулов =)
Как обычно, напоминаю, версии для лл нет, а все написанное ниже плод моего воображения мое, весьма, субъективное мнение, основанное на ограниченном опыте взаимодействия с российским рынком it найма в прошлом году.

"Пора искать работу: Как понять, что ты готов?"

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

В предыдущем посте давал субъективную оценку рынка it найма в 2022 году с точки зрения неофита с улицы. Если кратко - вайтюны не нужны, к людям с "быстрым" опытом относятся с понятным скептицизмом. Кроме того, в срезе стартовых позиций, рынок найма перегрет соискателями разной степени подготовленности. И когда я говорю "перегрет", я имею ввиду джуниорские вакансии, на которые приходит по 500+ откликов в неделю. В сети можно найти тонны занимательных статей/видео иллюстрирующих данную проблему.

Соответственно я, как соискатель столкнулся с двумя нюансами вызванными огромным количеством соискателей на позицию:
1) Разброс уровня подготовки среди сотен кандидатов на вакансию достаточно большой. Чтобы заинтересовать работодателя, нужно действительно что-то из себя представлять.
2) Трехзначное количество кандидатов приводит к тому, что уделить должное внимание каждому соискателю (даже просмотреть резюме) физически невозможно - не хватит человеко-часов. Адекватные работодатели используют фильтры hiring-платформы или самописных ботов, для фильтрации откликов по параметрам, например - автоматически отсеивают кандидатов без указанного опыта.

Учитывая эти наблюдения, найм джуна состоит из следующих пунктов:
1) Собес с ботом Грубый отсев кандидатов: Работодатель отсеивает резюме по ключевым словам. Вы готовы к этому этапу, если осознаете свою реальную позицию крайне невостребованного на рынке найма специалиста, а следовательно составляете резюме с упором на соответствие фильтрам нанимателя.
2) Первичный контакт с нанимателем. Это может быть звонок HR или сообщение в мессенджер. В некоторых случаях на этом этапе проводится технический скрининг, но я с таким не столкнулся. На этом этапе роляют софт скилы и вы к нему, скорее всего, готовы, если погуглили пару-тройку статей про процесс прохождения собесов или для вас это не первый собес.
3) Собсна то, за чем вы сюда пришли - техническое собеседование. Вы не готовы к этому этапу, если способны вести последовательную (пусть и не очень глубокую) дискуссию в контексте своего стека, с позиции понимания проблематики. Тут важнее всего именно последнее, не достаточно зазубрить ответы на вопросы, нужно понимание того, о чем вы беседуете, причем желательно, чтобы понимание опиралось на практический опыт.

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

"Чего хотят боты: Составление резюме, если вы никто и звать вас никак"

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

1) Ваш стек - максимально развернутое описание стека. Для джуна без опыта - добавляем сюда все, с чем когда-либо работали или сможете разобраться в течении недели. В начало выносим основные скилы, по которым есть хорошая теоретическая/практическая база, в конец выносим все остальное. Например для меня "основным" был питон с его либами, докер, умение в cli, всякие теоретические штуки, навроде ООП и сетевых протоколов, по которым мог развернуто дискутировать. Второстепенным был Golang, который тогда только начал учить, питонячий numpy, по которому небыло хорошей практики и некоторые другие вещи, которые были четко отмечены как "представляю что это, но с ходу не заведу". Указывать второстепенные скилы, но отмечать их "второстепенность" важно, чтобы обмануть автоматические фильтры, но не обмануть живого нанимателя. Сюда же пихаем инфу об образовании. Если это кулинарный техникум или что-то максимально не релевантное, лучше опустить. (оставьте эту информацию в специальном поле). Курсы в шапке указывать не стоит.
2) Ваш опыт - раздел поделен на два подраздела: коммерческий опыт и портфолио. Если есть сколь угодно релевантный опыт - обязательно указываем (сисадминил в универе, прокладывал сеть, фрилансил курсовые проекты для студентов и т.д.) если релевантного опыта нет - указывать его не нужно. Это же относится к специальным полям на платформах рекрутинга (например hh): если релевантного опыта нет - не указываем ничего. Нерелевантный опыт портит впечатление и закрепляет образ войтюна. В портфолио добавляем развернутое описание проектов со ссылками на гитхаб. Под это можно расписать целую статью, но если кратко - количество проектов не решает, важна оригинальность, сложность а самое главное - вовлеченность автора. Ваши проекты в целом мало кому интересны, а про типичный набор: "бложек", "магазинчик", "калькулятор", нанимателю скучно в сотый раз распрашивать на собесе. Лучше если проект будет один, максимум два - но интересных лично вам, о которых вы можете долго рассказывать с горящими глазами. Не готов утверждать, но мне кажется, что если есть стажировка в компании солиднее чем "ИП Михал-Палыч", можно обойтись и без проектов, но в целом ожидается, что у разработчика не пустой гитхаб.
3) О себе - в этот раздел пихаем все, что не подошло для двух предыдущих. Например, необычные хобби, странные навыки, какая-нибудь не релевантная для работы, но интересная информация =) А вот чего в этом разделе точно не стоит указывать, так это своей личностной характеристики, все эти: "исполнительный", "ответственный", "самостоятельный" и прочие эпитеты, которые и так ожидаются от кандидата. Распространенной ошибкой, является добавление информации о том, что вы "готовы работать за еду, опыт, вообще бесплатно, умоляю возьмите", это воспринимается негативно, будто кандидат не уверен в своем потенциале. В общем-то, наниматель и сам пока не уверен, стоит ли вас нанимать, а неуверенность кандидата в этом вопросе, прошу прощения за тафтологию, не добавляет уверенности нанимателю =)
4) Контакты - в этот блок без лишних комментариев добавляем ссылки на гитхаб, телегу, мыло, твиттер, кодварс. Иными словами, на все, для чего нет специальных полей на площадке (а если есть, всеравно дублируем). Можно указать контакты на социальные сети. Не поленитесь привести в порядок аккаунты, на которые ссылаетесь.

Отдельно, отмечу спорный момент с фотографией - добавлять или не добавлять? На одном из HR-ских стримов услышал позицию выступающего: "Лучше не добавляйте, т.к. фотография способствует субъективной оценке соискателя". Моя позиция - "Добавляйте, т.к. в нашей истории с сотнями кандидатов на позицию, резюме с фотографией лучше цепляет взгляд". Позаботьтесь о том, чтобы в резюме была фотография надлежащего качества.

Нужно ли добавлять объемное сопроводительное письмо? Нет, если вы не персонифицируете резюме под конкретную компанию. Читать опус о том, как вы мечтаете работать в этой компании де-факто никому не интересно. Хорошей практикой является добавление в поле сопроводительного письма, ссылки на pdf с красиво оформленным резюме, который hr сможет распечатать и положить на стол ЛПР.

"Эффективность откликов. Немного о собеседованиях"

Пару лет назад назад в аналогичной статье на хабре читал, что для получения оффера, джуну с улицы нужно отправить 200-300 откликов. Текущая ситуация на рынке it найма, как показал мой личный опыт и опыт моих знакомых, требует от 500 откликов для получения первого оффера. Мне потребовалось 2000 (не пугайтесь этой цифры, ниже расскажу, откуда она взялась). Первое реальное собеседование произошло на ~250м отклике, второе на ~400м. В целом, реальное приглашение на собес прилетает каждый ~150-й отклик. Основная проблема, как мне видится, в конкуренции. На ютубе можно найти забавные исследования, где автор открывает фейковую факансию для джуна в Санкт-Петербурге и на нее откликается 500+ кандидатов за неделю. Делаем выводы.
Сокращу этот раздел до нескольких советов, которые вывел для себя:

1) Если собираетесь отправлять отклики вручную - отправляйте на все, что более-менее релевантно по отношению к вашему стеку. Первое время я отправлял отклики лишь на те вакансии, где соответствие скилам было 9-10/10. Через месяц я начал откликаться буквально на все, чему хоть как-то соответствовал и появились первые приглашения. Причина простая - вас отсеивают не из-за наличия/отсутствия скилов, а просто потому, что перед вами подались 200+ человек.
2) В 2024 нет (почти) ни одной причины не проводить первичное собеседование удаленно. После двух неудачных собеседований в очном формате, я начал отказываться от собеса, если это первое собеседование и для его проведения требовалось ехать в другой город. Вероятность отказа на первичном этапе наиболее высока, а на поездку зачастую тратится целый день. Субъективное мнение, но может быть релевантно для жителей небольших городов.
3) Заморочки и странности. Если на любом из этапов общения с компанией происходят "странные вещи", лучше продолжить поиски. Из особо неожиданного, на одном из (очных) собесов, меня ждал "тест на логику" от hr, включающий вопросы уровня "У Саши было четыре яблока, 50% яблок он отдал...", у товарища на собесе был опрос по астрологии, а у знакомой - "генг-бенг собеседование", в котором одновременно участвовало пять кандидатов. Сюда же отнесу некомфортное поведение со стороны собеседующего. На одном из (очных) собесов меня встретил "скучающий дядя", который с первых секунд дал понять, что он не заинтересован в моем найме, ведя себя максимально высокомерно и постоянно фамильярничая, но я уже потратил пару часов на дорогу к ним и уходить было нелепо. Стоит ли говорить, что ни одна из этих историй не закончилась наймом? Ценность данного совета замечаешь лишь на контрасте с нормально выстроенными собеседованиями.

"Автоматизируем поиск: Джуниорский гатлинг"

В целом, готов утверждать, что 70% проблем вида "Я отправляю отклики, но меня никто не зовет даже на собесы!", вызваны адовым перенасыщением предложения на позициях начального уровня. Решение одно:

Нужно отправлять много откликов. Каждый день. И под "много", я подразумеваю "МНОГО". В идеале - выжимать весь дневной лимит на площадке. В период моего поиска, HH позволял отсылать до 200 откликов в сутки. Вручную, отправлять такое количество откликов ежедневно, безумие, даже если вы будете лишь бегло просматривать требования по вакансии.

Реальные показатели при ручной отправке откликов. Часть "приглашений" на деле - завуалированные отказы.

Реальные показатели при ручной отправке откликов. Часть "приглашений" на деле - завуалированные отказы.

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

Процесс работы бота был максимально жабофицирован, для большей эффективности

Процесс работы бота был максимально жабофицирован, для большей эффективности

В результате, "выжимая" по 200 доступных откликов в день, к концу недели набиралось чуть менее 1000 откликов (по выходным новые вакансии публикуются редко). Количество приглашений выросло в разы, мне буквально заспамили личку на hh. Разумеется, большая часть откликов была проигнорирована или отклонена работодателями. Около 30% откликов делались на нерелевантные вакансии, ввиду того, что таковые иногда попадались в поисковой выдаче, даже при учете весьма жестких фильтров. Но так или иначе, я стабильно получал по 1-2 приглашения на собес каждый день. К сожалению, скрина с пруфами не сохранилось, но уже на вторую неделю у меня было собеседование, которое в конечном итоге, привело к офферу. Признаю, что это не самый этичный подход, вероятно, отнявший небольшое количество времени у сотрудников компаний, отклики на резюме которых, были сделаны по ошибке, но я старался честно приносить извинения каждому, чье сообщение не было похоже на автоответ.

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

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

Заключение

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

Показать полностью 4
35

Ответ на пост «Войти в ай-ти. Достало»1

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


Бэкграунд или "Почему я решил стать разработчиком".


Окей, на данный момент мне 25 лет. На руках у меня диплом специалиста, выданный мне пол года назад Российской Академией Народного Хозяйства и Государственной Службы (РАНХиГС), по направлению "Таможенные платежи и валютный контроль". Можно долго спорить о ценности тех или иных дипломов, но в данном конкретном случае, охарактеризовать ее можно этим мемом:

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

"Но постой! Какие 18 лет?", спросит внимательный читатель "25 - 18 = 7. Ты учился семь лет?". Да, я потратил семь лет своей жизни на профессию, которой я не собираюсь ее посвещать. Хотя не все так однозначно, но об этом далее. Три года я "отмотал" на очном, после чего, по семейным обстоятельствам, пришлось перевестись на заочное отделение. Нюансы перехода и специфика заочки съели два дополнительных года.


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

И оказалось, что я хотел того же, что и остальные. В первую очередь, заниматься действительно важными делами, приносящими удовольствие, а не продавать свое время на развес по графику 1\3 за 250 р.\час. Во вторых, просто быть счастливым. Не экономить на еде. Не бояться просрочить аренду за следующий месяц. Съездить уже, наконец за границу. (Серьезно, я живу в 40 минутах от этих ваших Европ уже более 19 лет и еще не разу там не побывал.) Купить своему бате плойку, чтобы он вечерами гонял со мной в каловдьютию. Наконец, сделать так, чтобы мама ушла на пенсию не за черту бедности, а на заслуженный отдых. Какие то фискальные желания получились, не находите? Ахах. Я уже упоминал о том, что ценности формируются окружением, в котором ты растешь.


Так продолжалось три года. К концу этого периода, мой лучший друг  поступил на "эти ваши it курсы". Я первое время немного подшучивал над ним, ведь это был тот самый человек, который в десятом классе чуть не подрался со мной, пытаясь доказать, что "Беспроводной геймпад на то и беспроводной, что в компьютер ничего вставлять не нужно! Какой еще адаптер? Не понимаю почему оно не работает!". А ведь это именно я "писал" свою первую игру на GM в восьмом классе. Это я, в "додвухфакторную" эпоху воровал аккаунты одноклассников в контакте чрез подменную страницу (да, товарищ майор, в то время, я был глупым, но не подлежащим уголовной ответственности, мои извинения). Это я в соло довел нашу участницу до финала, написав макрос автоголосования на конкурсе красоты в своем городе, когда заметил, что конкуренты из другого университета накручивают голоса. Одним словом, я рос маленьким ламером в окружении компьютеров, и даже пытался что то делать, но никогда не относился к этому серьезно.


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


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


Процесс обучения. О курсах. Что важно иметь в запасе. Без чего будет сложновато.


"Лиха беда - начало" или если вам угодно: "Начало - половина любого дела", цитатка из интернетика, приписываемая то одному то другому мыслителю. Лично я, приписываю ее Йоде из ЗВ, вроде он в каком то из эпизодов ее произнес.

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


Курсы хороши тем, что на них присутствует преподавательский состав, который, по хорошему, будет отвечать на ваши вопросы, неинтересно вести лекции и давать\проверять домашку. Плохая новость в том, что не все курсы одинаково хороши. Какие то курсы, дают слишком общую информацию. Какие то - слишком сильно ведут за ручку. Другие - предлагают людям с улицы заниматься откровенной чепухой, мой фаворит на данный момент реклама: "Создай 9 нейросетей за 3 дня!". Я не представляю, чему вы научитесь за три дня (ничему). Если обобщать - опасайтесь курсов, которые сулят золотые горы за короткий срок. Триггер фразами для вас должны стать такие выражения как "Без опыта", "Без обазования", "За один\два\три месяца" и особенно "Гарантия трудоустройства". Вас, конечно, поводят за ручку какое-то время. Вы что-нибудь напишите на питоне\js, возможно, перепишите у ментора какогони-будь телеграм бота. На этом все. Фундаментальных знаний (или хотябы их подобия), вы не получите. Вы не сможете самостоятельно решить поставленную задачу. Неофит должен осознавать, что разработка это не про написание кода, это про образ мышления, про поиск решений. Это нельзя освоить "в кородкие сроки, с гарантией". Еще одна проблема курсов - хреновое менторство. Может так статься, что вашим "наставником" на курсе, окажусь я. Тоесть человек с опытом разработки около года. Почему? Потому что заработная плата преподавателя на курсах не конкурентна, относительно зп разработчика. Количество желающих "зарабатывать 400 тысяч в месяц, сидя на пляже на ГОА", растет с каждым днем, а преподавателей больше не становится. По этой причине, некоторые организации, набирают в преподавательский состав абсолютных рандомов или даже выпускников этих же курсов. На мой взгляд, существует обратная зависимость между размером онлайн школы и качетсвом преподавания в ней. Я не смогу прямо назвать онлайн школы, которые вам лучше обходить стороной, потому что есть риск, что моя телега\гитхаб подвергнется анальной травле, но намекну - это крупный образовательный конгламерат, состоящий из нескольких школ, рекламу которых, вы чаще всего видите в интернете.


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


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


Как уже не раз говорилось выше, для себя я выбрал именно последний вариант. Потому что, откровенно говоря, возможности отдать от 80 до 120 к, учитывая все вышеназванные риски курсов, у меня нет. Но это ведь не значит, что мы не можем проходить эти самые курсы самостоятельно, правда ведь? Правда. Я решил двигаться в сторону бэкенд разработки, возможно потому, что мне всегда нравились дискуссии на тему телекомуникаций, чего стоит забытый богом телетекст -  "дальний родственник" интернета. А возможно потому, что мне не хотелось конкурировать с легионами выпускников курсов фронтенда. (Спойлер: позже оказалось, что и на бэкенде, среди джунов конкуренция значительная)

В первую очередь, мне был интересны бэкендерский стек технологий. В качестве первого языка, я, как и многие, выбрал Python. В качестве учебного пособия, которое направит меня по нужному вектору, я выбрал слитый курс Хекслета "Python разработчик 2020". И честное слово, если бы я заплатил за него деньги, я не пожалел бы ни рубля. Если ребята с Хекслета сейчас меня читают, пожалуйста не расстраивайтесь, в качестве оплаты я агитирую всех и каждого изучать пайтон именно у вас. Отвлекся. У некоторых крупных площадок, таких как Яндекс и Хекслет, есть бесплатные вводные курсы, на которых можно +\- познакомиться с подачей информации ну и в целом понять, интересно вам это или нет. После прохождения вводного курса, можно купить доступ к полному или поискать его "бесплатную" версию в интернете. Конкретно мой курс, был рассчитан на восемь месяцев, прошел я его за шесть. Помимо, непосредственно, языка, курс подтолкнул к изучению огромного количества тем: настройка окружения, контроль версий, базовые алгоритмы, сетевое взаимодействие, настройка серверов, бд и много чего еще.


Еще перед стартом, друг говорил, что "Сначала бужет очень хорошо получаться, поймаешь эйфорию от того, какой ты умный. Потом кривая сложности резко пойдет вверх. На этом этапе большинство забивает и отсеивается, но ты продолжай еба#ить". Так оно и произошло. Когда подача материала грамотная, основы ухватываешь очень быстро, но когда переходишь на чуть более advanced level, сталкиваешься с первыми серьезными затыками, где материалов курса уже не достаточно. Например, при изучении Python, таким местом для меня стали аккумуляторы. В такие моменты я советую переключиться на какой то другой источник информации - посмотреть видео на ютубе по теме, пошарить что-нибудь на хабре и т.д. Иными словами: "Продолжай еб#шить". Например сейчас я перешел на Golang и там, таким моментом для меня стали интерфейсы. Очевидно, что при самостоятельном изучении, нет ничего важнее упорства. Я мог бы раскрыть эту тему подробнее, но круче цитаты, сказанной в этой статье: https://habr.com/ru/company/domclick/blog/569062/ , я уже ничего не приведу:

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


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


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

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


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


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


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


Результаты через 10 месяцев самостоятельного обучения.


Заголовок звучит слишком пафосно, не правда ли? Итак, прошло 10 месяцев с начала моего пути в разработку. Есть ли мне чем похвастаться? Ну, я попал в 5% лучших, на "отборочнике" контеста, проводимого Ozon Tech в сентябре. Участников было, что-то в районе 2к. Я считаю, это неплохой результат для рандома с улицы. Я никогда не забуду эту задачу про временные интервалы. Видимо, теперь я умею кодить на Python. Контест был достаточно злобным, но это тема для отдельной истории. Как выглядит мой текущий стек? Как то так:

Разумеется, тут перечислены не все скилы, но это именно те вещи, о которых я могу уверенно поддержать разговор с нанимателем. В ближайшее время планирую добавить сюда Golang и его веб фреймворки, как только потыкаю их палкой. Обязательно нужно поработать с каким-нибудь популярным веб сервером, по типу nginx. К слову, интересная штука - парадигмы программирования нескольких языков могут пересекаться, соответственно, если вы умеете уверенно решать задачи на одном языке, решать их на другом, будет уже проще. Написал пару проектов, за которые мне не стыдно, с одним из них можно даже познакомиться в одном из моих постов =) Да, я думаю, стоит избегать дженерик проектов, которые предлагают писать на курсах (все эти клоны телеграма и бложики), а заняться чем-то, что интересно именно вам. Пусть это будет система распознавания лиц с веб интерфейсом, или генератор имен драконов - не важно, главное, чтобы вам было это интересно. Без увлеченности пет проектом, работа над ним быстро превратится в рутину. Ах да, а еще я стал контрибьютором своей любимой игры "Cataclysm Dark Days Ahead". В список моих пулл реквестов входят такие важные багфиксы, как исправление бага с БДСМ костюмом, перемещение кастета профессии "босс мафии", в карман пиджака, а так-же еще не смердженый "mountable hatchet mod" для дробовиков. Отвлекся. "Ну а что там с трудоустройством? Звали ли тебя на собеседования?". Звали. Я решил несколько тестовых, некоторые из них даже проверили. И внезапно, было даже настоящее оффлайн собеседование в компании. Но в целом, о ситуации на рынке труда, с точки зрения джуна (меня), поговорим в следующем разделе.


Востребованы ли джуны?


Имхо, как джун, отвтетственно заявляю, что они востребованы на рынке. Из ~100откликов за 2.5 месяца, мне прислали тестовое около 5 раз. Дважды приглашали на собеседование. На одно я съездил. Звучит как шутка, не правда ли? Вот только я откликался на вакансии, немного выше моего уровня. Тоесть некоторые компании, реально готовы дать возможность проявить себя. Это здорово. А вот войтюны не нужны. Об этом тоже можно сделать вывод из приведенной мной статистики. Мой стек, на данный момент, +\- соответствует стеку любого трейни-выпускника курсов. На мой взгляд, компании намеренно завышают требования отбора из-за всплеска курсов, ибо никто не хочет брать на себя риск, нанимая вчерашних слесарей с таможенниками - даже если они неплохо владеют заявленными компетенциями, это всеравно риск, а риск=расходы. Иными словами, не ждите, что пройдя какой-то курс, или отзанимавшись самостоятельно на протяжении некоторго времени, ваша личка будет ломиться от предложений. Стоит рассчитывать на минимум годовое обучение.


Стоило ли это того?


Перейду к выводу, пока меня окончательно не окрестили душнилой =)

А он следующий: На момент публикации поста, входить в профессию действительно не просто. Easy mode - не существует. Нужно осознавать, что это длительный, даже многолетний процесс самостоятельного обучения. Количество ментальных (да и физических) усилий, которые необходимо приложить, примерно сопоставимо с прилежной учебе в вузе. Однако, это может приносить определенное удовольствие, если вам, так-же как и мне, нравится учиться. В качестве финального совета, хочется отметить важность менторства в процессе обучения. Найдите себе какого-нибудь более опытного товарища, который будет давать вам наставления. Да и в целом, с которым вы сможете обсудить свои успехи и неудачи в процессе. Для меня таким ментором стал мой друг. Я в неоплатном долгу перед ним. "Продолжайте еб#шить", пока однажды не сможете себе сказать:

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

Показать полностью 7
13

Soulcatcher voice changer 1.2 "Идеи из комментариев"

Привет! Эта серия посвящена процессу разработки моего бота для распознавания и модификации голосовых сообщений в Telegram. Статья, является продолжением предыдущего поста из этой серии: Ответ на пост «Я сделал приложение для разумных трат»


Время чтения ~ 7 минут.


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

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

В принципе, дальше вы можете не читать, а перейти в бота и потестить самостоятельно: https://t.me/Soulcatcher_voice_changer_bot а я пока расскажу о каждом изменении и связанными с ними сложностями (мы же любим сложности?) по отдельности.

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

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


Машинная переозвучка тоже получила языковую поддержку. Выглядит это так:

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


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

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


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

Все дело в том, что современное распознавание речи производится при помощи языковых моделей, что само по себе, достаточно дорогой (в контексте аппаратных возможностей) процесс.  Для того, чтобы понять почему это сложнее, чем анаогичное автораспознавание языка в тексте, нужно понять, как это распознавание устроено. Хорошее объяснение одного из популярных подходов представлено на этой странице: https://translatedlabs.com/определение-языка (Не реклама, мне до работы в таких компаниях еще далеко)

Простыми словами, происходит сравнение переводимого текста с заранее загруженными образцами. В чем же проблема сравнить переводимый голос, с заранее записанными файлами? Дьявол кроется в деталях. Текст по своей сути так-сказать "стабилен", вне зависимости от автора, стиля и назначения текстовой информации, одни и те же слова, дадут предсказуемый, одинаковый результат при любом форматировании. Голос же, имеет такие неочевидные для компьютера свойства как тональность, интонация, акцент. Именно для этого существуют голосовые модели, уникальные для каждого языка и предназначенные для обработки этих, свойственных только человеческому голосу данных. Если еще проще, то при попытке сравнения одного и того же текста, продиктованного разными людьми с некими контрольными показателями, мы всегда будем получать разные результаты. Поэтому голос предварительно необходимо привести в "стабильный" вид при помощи голосовой модели. Для точного распознавания, необходимо применить к записи голоса все доступные языковые модели и только после этого, производить сравнение. Как было отмечено выше, для массового применения, это слишком дорогая (долгая) операция. По этой причине, я пошел по проторенной дорожке и ввел необходимость явно указывать язык распознавания:

Языки были выбраны по принципу "топ семь смешных лягушек 9 самых популярных языков мира"  =)

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


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

P.S. Возвращаясь к проблеме выбора API Google Translate в качестве штатного переводчика. Один находчивый человек в комментариях, посоветовал использовать DeepL для этих целей, в целом, я присоединяюсь к его мнению, DeepL реально превосходит все остальные решения на две головы за исключением одного но: Он не доступен в России. Клянусь, я пытался подделать эстонскую кредитку, чтобы зарегистрироваться на их ресурсе, но все тщетно. Если у кого то есть идеи, как это обойти не тратя кучу денег - буду рад их услышать.


-----


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

https://github.com/Raiksler/Soulcatcher-voice-changer

Показать полностью 8
132

Ответ на пост «Я сделал приложение для разумных трат»2

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


Еще до введения соответствующего платного функционала в телеграм премиум, я разработал бота, преднозначенного для распознавания и\или модификации речи в голосовых сообщениях. Да, прямо как в ВК. Хотя скорее, как в ВК образца 2017 года, т.к. в угоду бесплатности, а так-же в силу ограниченности аппаратных возможностей сервера, бот использует не самые совершенные технологии распознавания, но тем не менее. Хочется быстро пробежать глазами длинное голосовое? Или в силу физических особенностей, нет возможности слушать голосовые? А может нужно отправить голосовое сообщение не "засветив" голос? (И зачем это вам...) О том, как реализовать все это (и немного более) при помощи моего бота, я расскажу ниже!


Как это работает? На самом деле просто. Заходим в бота по ссылке: https://t.me/Soulcatcher_voice_changer_bot или вбиваем в поиск тг "Soulcatcher"...

Переходим в бота, тыкаем Start...

Кликаем help, для выбора режима работы

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


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

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

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


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


Благодарю вас за время, потраченное на чтение поста и надеюсь, что бот окажется кому-то полезным =)


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


https://github.com/Raiksler/Soulcatcher-voice-changer

Показать полностью 5
7

Бан аккаунта PSN за рейд в DayZ?

Салют!

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


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

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

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

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

Бан аккаунта PSN за рейд в DayZ?
Показать полностью 1
Отличная работа, все прочитано!