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

Начинающим

История о том, как я иду к должности JS разработчика через обучение на курсах в Skillbox

21.06.2021 14:12:41 | Автор: admin

Как пришел я к тому чтобы вообще начать учить JS

В 2019 году, 1 сентября, в дождливый осенний день, я решил навсегда завязать с прошлым. Последние 5 лет работы менеджером не приносили удовольствия и не несли перспектив. Увольняюсь с должности менеджера вино-торговой компании, подумал я. И погружаюсь в программирование!

Три месяца до декабря я упорно изучал HTML + CSS и верил, что легко попаду в разработчики, стоит мне только захотеть! Каким же большим было моё разочарование, когда я понял что в этом мире не все так просто. Первое тестовое задание я получил от компании Тензор это была разработка игры на чистом JavaScript либо с применением любого фреймворка:

  • Angular.js;

  • Vue.js;

  • React.js;

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

Морской бой тестовое задание в ТензорМорской бой тестовое задание в Тензор

Мой первый купленный курс

В Феврале 2020 года, работаю курьером в пиццерии. Мечтаю о ноутбуке что бы параллельно кодить. Всем рассказываю про свой путь. Но все еще одинок в этом.

Принимаю решение вложить 13 тысяч рублей в курсы по верстке сайтов. Стоит сказать что такую смешную сумму, мне пришлось просить разбить на 4 платежа по 3 250 рублей. Ибо в додо я делал 20 тысяч в месяц максимум.

Моя морда на работе в феврале 2020Моя морда на работе в феврале 2020

К тому моменту, я имел за спиной 1 2 кривых пет-проекта по верстке, но основ все еще не понимал до конца. На курсе познакомился с такими инструментами как: HTML, CSS Bootstrap, SASS Git, Gulp Autoprefixer, Pixel perfect, БЭМ JavaScript, Ajax, PHP

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

Ошибка 1 Не закреплял полученные знания

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

Ошибка 2 Дал слабину, расслабился

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

Ошибка 3 Начал искать новую информацию для изучения не имея четкого плана

Еще 3 месяца я читал, пытался кодить, изучал JavaScript. Но не по учебнику или по плану, а просто так, хаотично, без примеров и задач, чаще просто смотря видео. А без базы понять что такое prototype или методы перебора массивов было почти нереальной задачей.

Ошибка 4 Мало теории, еще меньше практики

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

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

Книга по JS для начинающихКнига по JS для начинающих

Вот я и на полпути к мечте! подумал про себя и начал искать работу снова

Редактирование резюме, вставка парочки кривых учебных проектов и подача на все вакансии в своем городе. Из 30 откликов 25 игноров, 3 отказа и 2 тестовых задания. Два тестовых задания были мне не по зубам и я честно признаться, сразу писал что-то типа:

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

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

Олицетворения меня как трусаОлицетворения меня как труса

Я же поступал как удобно мне. Ведь я был вынужден где-то работать. У меня ребенок, кредиты, я как обычный среднестатистический человек устаю в течении дня и приношу домой копейки чтобы хватало на оплату еды, жилья и дешевых вещей. А тут вечером нужно еще позаниматься JavaScript + верстка, а лучше React поучить и всякие там видеоуроки посмотреть (обязательно с практикой). Одним словом не до тестовых заданий, особенно которые не знаешь даже как решать.

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

Сразу скажу это не реклама для Skillbox, это лично мое мнение

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

Это junior с задатками team lead! Наш мальчик! Браво!.

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

Несколько выводов для сомневающихся:

  • покупка курса в кредит (точнее в рассрочку) не сделала меня более мотивированным. Однако, у меня появился структурированный материал по стеку Frontend по которому я в свободное время мог теперь двигаться и не тратить время на поиск инфы;

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

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

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

Моя шкала прогресса Моя шкала прогресса

Как лучше проходить курс на Skillbox по моему мнению

Сложно сказать однозначно. Типа так делай, а так не делай. Ведь все мы разные. Кто-то обладает 12 часами свободного времени в день и тонной мотивации. А кто-то только 1 час вечером и абсолютно без сил.

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

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

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

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

  4. Фреймворк тут на ваше усмотрение какой выбрать. Главное начинайте освоение хотя бы после прохождения основ.

Представим что у вас 30 уроков в каждом разделе. При ежедневных вложениях по чуть-чуть, уже через 90 дней вы сможете сделать от 30% до 50%. А это всего 3 месяца. Еще 3 месяца и можно приступать к фреймворкам.

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

Мотивация на результатМотивация на результат

В процессе обучения мои амбиции росли и я вместе с ними.

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

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

Представьте, вам звонят днем, вы поднимаете трубку с незнакомого номера телефона, а там:
Добрый день, это HR компании войтиВайти, ваше резюме нам прислали из центра подбора персонала компании Skillbox, вас рекомендовали как разработчика и так далее.
Помню когда получил первый раз такой звонок, чуть не выпал в осадок. Хорошо стул был неподалеку. К сожалению, у меня не вышло устроиться пока что никуда.
НО отмечу, что я прошел 8 собеседований. Выполнил несколько тестовых заданий, вспотел на нескольких технических интервью. С вопросами про reduce, map, filter, работу с объектами и про жизненный цикл компонент (и массу чего еще).

Получил ссылки на книги которые лучше бы прочитать. Получил ссылки на источники которые лучше бы изучить.

Вот и фидбек. Получается я стал и стану еще опытнее и умнее. А получилось бы это если бы я ничего не делал. А просто пытался учиться самостоятельно? Не знаю.

Напишите в комментариях что вы думаете по этому поводу!?

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

Вот я и на Хабре, благодаря обучению и постоянному желанию поймать свою первую компанию за хвост и устроиться Junior разработчиком.
Здесь научился заполнять аккаунт таким образом, чтобы быть не привлекательным, а техничным. Смешно, конечно, когда смотря на резюме Senior разработчика, там написано только знание 2-3 технологий и нет волшебных слов, которые можно скопипастить себе в профиль.
Но главное писать то в чем ты точно разбираешься. Я так и сделал! Жаль что Junior специалистов ищут крайне редко, в наше время. Сейчас скорее возможно устроиться middle. Но это другая тема для следующего разговора.

В итоге мое резюме выглядит следующим образом:

Резюме мое первая страничкаРезюме мое первая страничка

Как это все организовало меня как личность и изменило в лучшую сторону

В итоге, друзья, две попытки устроиться куда-либо показали, что порог входа в IT-индустрию на 2021 год серьезно так подрос!

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

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

Сейчас план такой:

  • делать 1 пет-проект в неделю, чтобы их было больше. Это плюс для работодателя понять мой уровень, а для меня, набить руку на практике;

  • изучать алгоритмы 1 в неделю, с закреплением на практическом примере;

  • читать 10 страниц в день разнообразных книг по JavaScript, таким образом если 1\10 от всей информации прилипнет это уже победа;

  • 1 метод в неделю изучать, усваивать и закреплять на примере.

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

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

Изучая React по гайдам Димыча IT-kamasutra путь самурая, в каком то 6 или 8 выпуске, в комментах нашел инстаграм не равнодушного человека изучающего JS + React. Попав к нему на канал телеграмм, познакомился с ребятами из разных уголков мира и все хотят что то уметь, и умеют в чем-то больше меня, а в чем-то меньше.

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

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

Спасибо Андрею из Питера за помощь в освоении сложных моментов и Тимуру из Владикавказа за легкое менторство. Это очень ценно парни!

Учусь писать на ReactУчусь писать на React

Точно не пожалел о своем пути

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

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

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

Тогда еще в 2019 году я задался целью, изучать JavaScript минимум три года. И только после этого времени оглянуться и спросить себя на верном ли я пути?! Знаете, в нашем мире сегодня все достается очень быстро. Кредит пожалуйста за 15 минут. Пицца доставка от 30 минут. Телевизор доставим на дом.

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

Радость за успехРадость за успех

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

Продолжайте учиться каждый день, друзья.

Продолжайте делать, даже когда не понимаете.

Продолжайте стараться, даже когда нет сил.

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

Подробнее..

Киберцветок

07.03.2021 00:21:34 | Автор: admin

Вдохновлялся идеей о ГМО-растении. https://nplus1.ru/material/2020/04/27/shining

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

Зелёный светодиод. https://roboshop.spb.ru/radio/led-0603-greenЗелёный светодиод. https://roboshop.spb.ru/radio/led-0603-green

Основные этапы

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

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

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

Питание - бескорпусный li-ion аккумулятор на 700 мАч. Максимальный ток потребления 10 мА, так что хватает надолго. Плата зарядки аккумулятора по micro-USB тоже присутствует.

Куплен подходящий цветок драцена. У неё довольно широкие листья и растут по всему кругу, если смотреть сверху.

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

Электроника СвецвеЭлектроника Свецве

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

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

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

Свецве. работа в темнотеСвецве. работа в темнотеКрепление скотчемКрепление скотчем

Модернизация

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

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

Световоды диной 70 - 100 ммСветоводы диной 70 - 100 ммПроцесс распихивания и крепления световодовПроцесс распихивания и крепления световодовСвецве. ИтогСвецве. ИтогСвецве. ИтогСвецве. Итог

Благодарю за внимание, а милых дам с праздником!

Подробнее..

Перевод Три редко используемых возможности Python 3, о которых каждый должен знать

09.08.2020 22:07:12 | Автор: admin


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

Данная статья является переводом 3 Neglected Features in Python 3 That Everyone Should Be Using.

Перечисления


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

Объявление перечисления в Python очень просто сделать и это было возможно и до третьей версии (хотя и с ограничениями):

from enum import Enumclass State(Enum):  AIR = 0  LAND = 1  SEA = 2  myState = State.AIR# Выводит 0print(myState.value)# Выводит AIRprint(myState.name)

В коде выше перечисление вводится путем объявления класса, наследованного от Enum. А далее просто описываются все нужные состояния. В моем случае: AIR, LAND и SEA.

Функциональность, которая была добавлена в Python 3 возможность использовать .value и .name. Они позволяют получить число и строку соответствующие перечислению.

Например, вывод значения State.LAND.name будет LAND.

Перечисления полезны в коде, когда вы хотите иметь некоторые текстовые идентификаторы для констант. Например, вместо сравнения состояния с 0 или 1 гораздо показательнее сравнивать с State.MOVING или State.STATIONARY. Константы могут меняться и если кто-то посмотрит код позже, то слово MOVING даст гораздо больше понимания, чем 0. В результате сильно повышается читабельность кода.

Больше информации можно найти в официальной документации Python 3 по Enum.

Форматирование


Добавленные в версии 3.6, fstrings это мощное средство форматирования текста. Они позволяют создавать гораздо более читабельный и безошибочный код (чем я наслаждаюсь после перехода из Java). Это лучше, чем format, который использовался ранее в Python. Вот пример использования format:

name = 'Михаил'blog_title = 'codeatcpp.com'# Привет, меня зовут Михаил и я пишу в своем блоге codeatcpp.com.a = "Привет, меня зовут {} и я пишу в своем блоге {}.".format(name, blog_title)

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

Теперь посмотрим на такой же код, но с использованием fstring более читабельный и очень похожий на способ форматирования в Swift.

name = 'Михаил'blog_title = 'codeatcpp.com'# Привет, меня зовут Михаил и я пишу в своем блоге codeatcpp.com.a = f"Привет, меня зовут {name} и я пишу в своем блоге {blog_title}."

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

Использование fstring дает более читабельный и более простой в поддержке код, чем использование классических подходов.

Классы данных


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

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

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

Использование класса данных лучше показывает что вы пытаетесь сделать и также упрощает создание юнит-тестов.

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

from dataclasses import dataclass# Определяем класс данных@dataclassclass Vector3D:    x: int    y: int    z: int      # Создаем векторu = Vector3D(1,1,-1)# Выводит: Vector3D(x=1, y=1, z=-1)print(u)

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

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

Больше информации про декоратор @dataclass можно найти в официальной документации Python 3.

Заключение


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

Как стать тестировщиком или что я узнал за время становления на этот путь?

16.01.2021 16:12:10 | Автор: admin

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

Картинка взята с Я.ДзенКартинка взята с Я.Дзен

Я захотел стать тестировщиком

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

Я решил стать тестировщиком

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

Картинка взята с blog.noveogroup.comКартинка взята с blog.noveogroup.com

Правда, в просто потребляйте информацию есть огромная проблема. Она заключается в том, что многие ресурсы в каких-то вопросах дают разные ответы. Я бы посоветовал так - изучите информацию на основе какого-то авторитетного определённого ресурса и далее на собеседованиях говорите: согласно {наименование_ресурса} я понимаю так... и тому подобное. Авторитетным ресурсом можно использовать книгу или сайты testbase.ru, software-testing.ru, а если есть желание, то можете изучать с помощью силлабуса ISTQB.

Инструменты

С чего начать? С Linux? Или Java? А может Docker?

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

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

Опыт

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

Хочтите чтоб кто-то проверил? Попробуйте написать в телеграм чат QA_Junior.

Резюме

Фото прекрасного резюме взял с okiseleva.blogspot.comФото прекрасного резюме взял с okiseleva.blogspot.com

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

Собеседование

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

  • Тестировщик - это лицо помогающее бизнесу сэкономить денежные средства. Да-да, тестировщик помогает заработать больше и снизить риски потери денег бизнесу;

  • Тестировщик не бог и у него нет никакого права решать не выпускать продукт - мы тестировщики и наша задача протестировать да рассказать о результатах тестирования людям выше;

  • Тестировщик не нашёл/нашёл мало багов - это ничего не говорит об опыте сотрудника или качестве проверки продукта, качестве самого продукта;

  • Тестирование - это информация. Не более.

Задача тестировщика предоставить информацию о соответствии критериям качества, о проблемах, о рисках, о способах сделать лучше (если есть такие идеи) или снять боль с команды/пользователей. Но ключевое слово: предоставить информацию - автор телеграм канала Shoo and Endless Agony в чате QA juniors

Ссылки

Для ознакомления с работой тестировщика можно прочитать эту статью. Мне статья понравилась;

Обзор развития карьеры

Если уже решили стать тестировщиком, то есть курс от mail.ru, а точнее от Алексея Петрова (pifagor_mc), очень понравилась подача материала и это первое что следует посмотреть для становления;

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

Что должен уметь начинающий специалист расписано здесь в разделе С чего начать.

Ольга Назина (Киселёва) представляет примеры хорошего резюме. Очень многое можно в её блоге почитать про тестирование в целом;

Арсений Батыров, который составил резюме из предыдущей ссылки, рассказывает про составление резюме.

*В данном предложении моё мнение - это изучить инструменты более важнее для перспективы трудоустройства, чем трата времени на изучение работы маршрутизации в сети интернет или чем отличается WWW от интернет и прочее. НО! Первое, замечательно будет знать будущему тестировщику веб-сайтов принципы клиент серверной архитектуры - любые знания будут иметь вес для специалиста. Второе, со временем специалист познает основы, допустим, что такое API и чем отличается от UI во время изучения Postman.

Подробнее..

Морской бой на Java для новичков. Level 1

17.06.2021 10:17:44 | Автор: admin

Всем привет!

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

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

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

  2. Одновременно в игре могут участвовать только два человека.

  3. В самом начале игроки "представляются" - программа "спрашивает" (предлагает пользователям ввести), какие у них имена

  4. У каждого игрока есть своё поле - квадрат 10х10 клеток

  5. Затем игроки по очереди расставляют свои корабли. Как и в "бумажной" версии - каждый может поставить 4 однопалубных корабля, 3 двухпалубных, 2 трехпалубных и 1 четырёхпалубный.

  6. Корабли можно располагать только по горизонтали или по вертикали.

  7. Игроки не видят расположение кораблей друг друга.

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

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

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

    Второй вариант, если игрок не попал ни в какой корабль, то ход переходит второму игроку.

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

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

Как и в любом Java приложении нам потребуется класс (не умаляя общности назовём его Main), в котором будет объявлен, я думаю уже всем известный, метод main.

public class Main {public static void main(String[] args) {  //your code will be here}}

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

Опираясь на пункты 1-3 утвержденного сценария, реализуем функционал приложения, который будет предлагать игрокам ввести свои имена. Здесь нам придётся использовать класс java.util.Scanner, который умеет считывать введенные значения в консоли.

public class Main {    static Scanner scanner = new Scanner(System.in);    public static void main(String[] args) {        System.out.println("Player 1, please, input your name");        String player1Name = scanner.nextLine();        System.out.println("Hello, " + player1Name + "!");        System.out.println("Player 2, please, input your name");        String player2Name = scanner.nextLine();        System.out.println("Hello, " + player2Name + "!");    }}

Подробнее о коде:

В строке 2 создаем статичное свойство класса Main scanner.

Нестатический метод nextLine() класса Scanner (строки 6 и 11) обращается к консоли и возвращает строку, которую он еще не считывал.

После получения имени пользователей, программа выводит приветствие в консоль - "Hello, {username} !"

В консоли будем видеть следующее, если запустим код сейчас.

Player 1, please, input your nameEgorHello, Egor!Player 2, please, input your nameMaxHello, Max!

Поговорим о том, как мы будем отображать поле боя и заполнять его кораблями. Пожалуй, что наиболее логичным будет использование двумерного массива char[][] buttlefield. В нем мы будем отображать расположение кораблей. Договоримся, что удачное попадание в корабль противника будем отображать символом #. Неудачный выстрел будем помечать символом *. Таким образом изначально, массив будет проинициализирован дефолтовым для примитива char значением ('\u0000'), а в процессе игры будет заполняться символами # и *.

public class Main {static final int FILED_LENGTH = 10;    static Scanner scanner = new Scanner(System.in);public static void main(String[] args) {    System.out.println("Player 1, please, input your name");    String player1Name = scanner.nextLine();    System.out.println("Hello, " + player1Name + "!");    System.out.println("Player 2, please, input your name");    String player2Name = scanner.nextLine();    System.out.println("Hello, " + player2Name + "!");        char[][] playerField1 = new char[FILED_LENGTH][FILED_LENGTH];    char[][] playerField2 = new char[FILED_LENGTH][FILED_LENGTH];    char[][] playerBattleField1 = new char[FILED_LENGTH][FILED_LENGTH];    char[][] playerBattleField2 = new char[FILED_LENGTH][FILED_LENGTH];}}

Подробнее о коде:

В строке 2 мы создаем константу FIELD_LENGTH, которая будет содержать размер поля - согласно требованию 4 - проинициализируем FIELD_LENGTH значением 10.

В строках 14-18 создаем двумерные массивы char. playerFiled1 и playerField2 - массивы, в которые будем записывать расположение кораблей каждого игрока. Размеры массивов равны размерам поля - логично, ведь эти двумерные массивы фактически отображают поля.

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

public class Main {    static final int FILED_LENGTH = 10;    static Scanner scanner = new Scanner(System.in);    public static void main(String[] args) {        System.out.println("Player 1, please, input your name");        String player1Name = scanner.nextLine();        System.out.println("Hello, " + player1Name + "!");        System.out.println("Player 2, please, input your name");        String player2Name = scanner.nextLine();        System.out.println("Hello, " + player2Name + "!");        char[][] playerField1 = new char[FILED_LENGTH][FILED_LENGTH];        char[][] playerField2 = new char[FILED_LENGTH][FILED_LENGTH];        fillPlayerField(playerField1);        fillPlayerField(playerField2);    }}private static void fillPlayerField(char[][] playerField) {// your code will be here}

Метод fillPlayerField должен быть статическим (static), так как вызываться он будет из метода main, который по определению должен быть статическим. fillPlayerField не будет возвращать никакого значения (void). В этом методе будет реализована логика по получению координат корабля от пользователя и запись в массив playerField нового корабля.

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

Приведу вывод программы в консоль, который мы ожидаем увидеть после создания метода fillPlayerField:

Расставляем 4-палубный корабль. Осталось расставить: 1Input x coord: 1Input y coord: 11. Horizontal; 2. Vertical ?1

Наконец-то приступаем. На данный момент имеем:

private static void fillPlayerField(char[][] playerField) {    // your code will be here}

Нам нужно расставить корабли с палубами от 4 до 1. Здесь дело идёт к циклу. Предлагаю без лишнего пафоса использовать for. Заметим, кораблей с одинаковым числом палуб может быть несколько, поэтому нам нужно ещё как-то контролировать, чтобы пользователь мог разместить лишь определенное число кораблей с заданным количеством палуб (см. бизнес требование 5) - эта задача также эффективно решается с помощью цикла - без пафоса также используем for.

private static void fillPlayerField(char[][] playerField) {// i - счётчик количества палуб у корабля    // начинаем расстановку с корабля, которого 4 палубы, а заканчиваем кораблями с одной палубой    for (int i = 4; i >= 1; i--) {      // см. подробнее о коде под этой вставкой    for (int k = i; k <= 5 - i; k++) {          System.out.println("Расставляем " + i + "-палубный корабль. Осталось расставить: " + (q + 1));        // some your code here        }    }}

Подробнее о коде:

На 5 строчке мы создаём цикл for (int k = 0; k <= 5 - i; k++). Объясню, откуда такая магия. Нам нужно как-то понимать, сколько кораблей каждого типа (с определенным количеством палуб) пользователь может поставить.

Мы можем создать еще один двумерный массив, в котором мы захардкодим что-то в духе:

int[][] shipTypeAmount = {{1, 4}, {2, 3}, {3, 2}, {4, 1}};

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

Я же предлагаю отметить особенность, что сумма количества кораблей и количества палуб - величина постоянная. Действительно, 1 + 2 = 5; 2 + 3 = 5; 3 + 2 = 5; 4 + 1 = 5 . Поэтому, зная количество палуб у корабля (зная тип корабля), мы можем посчитать, сколько кораблей такого типа может быть установлено одним играком. Например, 5 - 1 = 4 - таким образом, каждый игрок может поставить 4 однопалубных корабля. В цикле for на строке 6 реализована проверка условия цикла "лайтовым" способом - на основе этого интересного свойства.

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

private static void fillPlayerField(char[][] playerField) {        for (int i = 4; i >= 1; i--) {            // растановка самих кораблей            for (int k = i; k <= 5 - i; k++) {                System.out.println("Расставляем " + i + "-палубный корабль. Осталось расставить: " + (q + 1));                System.out.println("Input x coord: ");                x = scanner.nextInt();                System.out.println("Input y coord: ");                y = scanner.nextInt();                System.out.println("1 - horizontal; 2 - vertical ?");                position = scanner.nextInt();                // если корабль располагаем горизонтально              if (position == 1) {                    // заполняем '1' столько клеток по горизонтали, сколько палуб у корабля                    for (int q = 0; q < i; q++) {                        playerField[y][x + q] = '1';                    }                }                            // если корабль располагаем вертикально                if (position == 2) {                  // заполняем столько клеток по вертикали, сколько палуб у корабля                    for (int m = 0; m < i; m++) {                        playerField[y + m][x] = '1';                    }                }              // печатаем в консоли поле игрока, на котором будет видно, где игрок уже поставил корабли              // о реализации метода - см. ниже                printField(playerField);            }        }    }

Подробнее о коде:

Корабль помечаем символом '1' столько раз, сколько палуб он имеет - если корабль четырёхпалубный, то он займёт 4 клетки - помечаем 4 клетки значением '1'.

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

static void printField(char[][] field) {        for (char[] cells : monitor) {            for (char cell : t) {              // если значение дефолтовое (в случае char - 0), значит в данной клетке              // корабль не установлен - печатаем пустую клетку                if (cell == 0) {                    System.out.print(" |");                } else {   // если клетка непустая (значение отличается от дефолтового),                  //тогда отрисовываем сожержимое клетки (элемента массива)                    System.out.print(cell + "|");                }            }            System.out.println("");            System.out.println("--------------------");        }    }

На экране метод будет так отображать расстановку кораблей:

 | | | | | | | | | |-------------------- |1|1|1|1| | | | | |-------------------- | | | | | | | | | |-------------------- | | | | | | | | | |-------------------- | | | | | | | | | |-------------------- | | | | | | | | | |-------------------- | | | | | | | | | |-------------------- | | | | | | | | | |-------------------- | | | | | | | | | |-------------------- | | | | | | | | | |--------------------

Вот игроки уже заполнили свои корабли на карте, и теперь мы можем приступить к реализации пунктов 8-10 бизнес-требований заказчика.

Логику по получению от пользователя координат выстрела, обработки выстрела и передачи хода опишем в методе playGame. Дабы придерживаться (или пока только стараться) принципа single responsobility - не забываем делить логику на методы (1 функциональность - 1 метод, но тоже держим себя в руках, код, в котором 100500 однострочных методов тоже не комильфо) - примерно из этих соображений получились еще методы handleShot и isPlayerAlive. Реализация обоих приведена ниже

/*** Метод реализует логику игры: выстрел и передача хода.*/private static void playGame(String player1Name, String player2Name, char[][] playerField1, char[][] playerField2) {        // "карты" выстрелов - создаём двумерные массивы, которые содержат все выстрелы  // удачные (#) и неудачные (*)  char[][] playerBattleField1 = new char[FILED_LENGTH][FILED_LENGTH];        char[][] playerBattleField2 = new char[FILED_LENGTH][FILED_LENGTH];  // вспомогательные переменные, которым будут присваиваться значения текущего игрока -   // игрока, чья очередm делать выстрел. Сначала играет первый игрок, прошу прошения  // за тавтологию        String currentPlayerName = player1Name;        char[][] currentPlayerField = playerField2;        char[][] currentPlayerBattleField = playerBattleField1;  // внутри цикла происходит смена очередности игроков, выстрел, его обработка.  // код внутри цикла выполняется до тех пор, пока "живы" оба игрока - пока у двух игроков  // "частично" цел (ранен) ещё хотя бы один корабль        while (isPlayerAlive(playerField1) && isPlayerAlive(playerField2)) {          // принимаем от пользователя координаты выстрела            System.out.println(currentPlayerName + ", please, input x coord of shot");            int xShot = scanner.nextInt();            System.out.println(currentPlayerName + ", please, input y coord of shot");            int yShot = scanner.nextInt();          // обрабатываем выстрел и получаем возвращаемое значение метода handleShot            int shotResult = handleShot(currentPlayerBattleField, currentPlayerField, xShot, yShot);            // если выстрел неудачный, и не один корабль не повреждён, то очередь переходит к следующему игроку          if (shotResult == 0) {                currentPlayerName = player2Name;              currentPlayerField = playerField1;              currentPlayerBattleField = playerBattleField2;            }        }    }/**    * Метод обрабатывает выстрел. Если выстрел удачный, то есть снаряд достиг цели -    * в клетку записывается значение '#' (отображается к в массиве игрока, так и в массиве соперника),    * а также на экран выводится сообщение 'Good shot!'. В этом случае метод возвращает значение 1.    * В случае неудачного выстрела - в массив battleField записывается значение '0' в элемент [y][x], и    * и возвращается значение 0.    * Возвращаемые значения нам нужны для того, чтобы в методе, внутри которого вызывается метод handleShot,    * мы могли понимать, успешно или неуспешно прошёл выстрел. На основе этого мы принимаем решение, * переходит ход к другому игроку или нет.    */    private static int handleShot(char[][] battleField, char[][] field, int x, int y) {        if ('1'.equals(field[y][x])) {            field[y][x] = '#';            battleField[y][x] = '#';            System.out.println("Good shot!");            return 1;        }        battleField[y][x] = '*';        System.out.println("Bad shot!");        return 0;    }/***Метод определяет, не проиграл ли еще игрок. Если у игрока остался хотя бы    * один "раненный" корабль, тогда пользователь продолжает игру.    * То есть, если на карте у игрока остался хотя бы один символ '1', которым мы отмечали    * корабли, то игра продолжается - возвращается значение true. Иначе false.*/    private static boolean isPlayerAlive(char[][] field) {        for (char[] cells : field) {            for (char cell : cells) {                if ('1' == cell) {                    return true;                }            }        }        return false;    }

Думаю, что к комментариям в коде мне добавить нечего. Единственное, обращу внимание на тонкий момент. Мы привыкли в математике к записи (x, y) - где первой идёт координат абсцисс, а второй - координата ординат. Казалось бы, чтобы обратиться к элементу двумерного массива (иногда срываюсь и называю в тексте элемент клеткой, но суть не меняется) нужно написать arr[x][y], но это будет неверно, и чтобы это доказать воспользуемся неопрвергаемым методом пристального взгляда. Для примера рассмотрим следующий двумерный массив:

int[][] arr = {{1, 2}, {7, 4}, {8, 3, 5, 9}, {1}}System.out.println(arr[0][1]); // ?System.out.println(arr[1][0]); // ?

Теперь вопрос из квиза "Программирование и мир" - что выведется на консоль в строках 3 и 4?
Вспоминаем, что двумерный массив - это не совсем таблица (нам так проще его воспринимать и детектировать его в задачах) - это "массив массивов" - вложенные массивы. Если в одномерных целочисленных массивах элементом является целое число, то в случае двумерного массива - элементом является массив (а в случае трёхмерного массива - элементом является двумерный массив). Таким образом, первый индекс указывает, какой по счёту массив мы выбираем. Второй индекс указывает, какой элемент по счёту мы выбираем в выбранном ранее массиве. Запись arr[1][2] указывает, что мы обращаемся к элементу с индексом 2 (то есть 3 по порядку) в массиве с индексом 1 (или второму по порядку). Соответсвенно, в строке 3 в консоль выведется значение 2, а в строке 4 - 7.

Постепенно подбираемся к концу. Что нам осталось реализовать?

  1. Вывод имени победителя

  2. Проверка клетки, которую пользователь указал как начало корабля

Первое кажется проще, стартанём с него. Потопали в метод playGame - как вы помните, там есть цикл while, в условии которого есть проверка - живы ли еще оба игрока. Напомню, что если игрок "мёртв", то есть у него не осталось ни одного корабля, то игра прекращается, а выживший игрок считается победителем. Собственно, единственное, что добавилось - строчка 36 - вызов метода System.out.println()

/*** Метод реализует логику игры: выстрел и передача хода.*/private static void playGame(String player1Name, String player2Name, char[][] playerField1, char[][] playerField2) {// "карты" выстрелов - создаём двумерные массивы, которые содержат все выстрелы    // удачные (#) и неудачные (*)    char[][] playerBattleField1 = new char[FILED_LENGTH][FILED_LENGTH];    char[][] playerBattleField2 = new char[FILED_LENGTH][FILED_LENGTH];    // вспомогательные переменные, которым будут присваиваться значения текущего игрока -     // игрока, чья очередm делать выстрел. Сначала играет первый игрок, прошу прошения    // за тавтологию    String currentPlayerName = player1Name;    char[][] currentPlayerField = playerField2;    char[][] currentPlayerBattleField = playerBattleField1;    // внутри цикла происходит смена очередности игроков, выстрел, его обработка.    // код внутри цикла выполняется до тех пор, пока "живы" оба игрока - пока у двух игроков    // "частично" цел (ранен) ещё хотя бы один корабль    while (isPlayerAlive(playerField1) &amp;&amp; isPlayerAlive(playerField2)) {      // перед каждым выстрелом выводим в консоль отображение всех выстрелов игрока      printField(currentPlayerBattleField);        // принимаем от пользователя координаты выстрела        System.out.println(currentPlayerName + ", please, input x coord of shot");        int xShot = scanner.nextInt();        System.out.println(currentPlayerName + ", please, input y coord of shot");        int yShot = scanner.nextInt();        // обрабатываем выстрел и получаем возвращаемое значение метода handleShot        int shotResult = handleShot(currentPlayerBattleField, currentPlayerField, xShot, yShot);        // если выстрел неудачный, и не один корабль не повреждён, то очередь переходит к следующему игроку          if (shotResult == 0) {            currentPlayerName = player2Name;              currentPlayerField = playerField1;              currentPlayerBattleField = playerBattleField2;        }    }  System.out.println(currentPlayerName + " is winner!");}

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

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

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

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

Какие нюансы есть в этом алгоритме? Снова посмотрим на рисунок.

Неэффективность нашего простого алгоритма. Некоторые клетки проверяем несколько раз.Неэффективность нашего простого алгоритма. Некоторые клетки проверяем несколько раз.
private static int validateCoordForShip(char[][] field, int x, int y, int position, int shipType) {        // если пользователь хочет расположить корабль горизонтально  if (position == 1) {            for (int i = 0; i < shipType - 1; i++) {if ('1' == field[y][x + i]                                || '1' == field[y - 1][x + i]                                || '1' == field[y + 1][x + i]                                || '1' == field[y][x + i + 1]                                || '1' == field[y][x + i - 1]|| (x + i) > 9) {                    return -1;                }            }        } else if (position == 2) {          // если пользователь хочет расположить корабль вертикально            for (int i = 0; i < shipType - 1; i++) {                if ('1' == field[y][x + i]                        || '1' == field[y - 1][x + i]                        || '1' == field[y + 1][x + i]                        || '1' == field[y][x + i + 1]                        || '1' == field[y][x + i - 1]|| (y + i) > 9) {                    return -1;                }            }        }        return 0;    }

Не забываем проапгрейдить метод fillPlayerField - напомню, что в этом методе реализована логика по расположению кораблей игроками.

private static void fillPlayerField(char[][] playerField) {        for (int i = 4; i >= 1; i--) {            // растановка кораблей            for (int k = i; k <= 5 - i; k++) {                System.out.println("Расставляем " + i + "-палубный корабль. Осталось расставить: " + (q + 1));              // иницализируем переменную начальным значением              int validationResult = 1;            while (validationResult != 0) {              System.out.println("Input x coord: ");            x = scanner.nextInt();            System.out.println("Input y coord: ");            y = scanner.nextInt();            System.out.println("1 - horizontal; 2 - vertical ?");            position = scanner.nextInt();                  // если координата не прошла валидацию (проверку), то метод возвращает отрицательное// значение, конечно, оно не равно нулю, поэтому пользователю придётся ввести координаты                  // ещё раз                  validationResult = validateCoordForShip(playerField, x, y, position, i);                }            // если корабль располагаем горизонтально              if (position == 1) {                // заполняем '1' столько клеток по горизонтали, сколько палуб у корабля                for (int q = 0; q < i; q++) {                    playerField[y][x + q] = '1';                }            }                        // если корабль располагаем вертикально            if (position == 2) {                  // заполняем столько клеток по вертикали, сколько палуб у корабля                for (int m = 0; m < i; m++) {                    playerField[y + m][x] = '1';                }            }              // печатаем в консоли поле игрока, на котором будет видно, где игрок уже поставил корабли              // о реализации метода - см. ниже            printField(playerField);        }    }}

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

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

Всем спасибо, всегда рад обратной связи!

Подробнее..

Что нужно знать начинающим специалистам о процессе найма перед собеседованием? 12 вопросов рекрутерам

01.11.2020 16:04:58 | Автор: admin

Нас часто спрашивают, берём ли мыjunior-специалистов в командуEPAM, какими знаниями нужно для этого обладать, как проходит отбор и многое другое.Не секрет, что наша компания проводит бесплатное обучение специалистов в тренинг-центре, лучшим студентам по итогам тренинга предлагается пройти собеседование на проект.Сейчас в компании проводится подготовка по 14 программамв 11 городах, каждый год тренинг-центр обучает более 600 студентов,и 60%студентов трудоустраиваются в компанию по итогам тренингов.Мы собрали ответы рекрутеров на вопросы, которые помогут лучше понять процесс отбора и наймаjunior-специалистов.

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

1.Как вы оцениваете уровень кандидатов на первом этапе (тестовые задания, собеседования)? По каким критериям вы отбираете релевантных кандидатов?

НинаСказобова,LeadResourceDevelopmentLabHeadНинаСказобова,LeadResourceDevelopmentLabHead

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

2. Джуновотбирают опытные разработчики или рекрутеры?

Мария Выгузова, Resource Development AdministratorМария Выгузова, Resource Development Administrator

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

НинаСказобова, Lead Resource Development Lab Head:

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

3. Какими минимальными знаниями должны обладать джуны?

МарияВыгузова, Resource Development Administrator:

Всё зависит от направления и языка программирования. Еслибрать общие требования, тоджуниорыдолжны знать как минимум принципы ООП, один из языковпрограммированияна уровнеAdvanced, один из фреймворков, уровень английского должен быть не ниже A2+.

4. Что вы можете сказать о среднем уровнеджуниоров, которые приходят на собеседования?

НинаСказобова, Lead Resource Development Lab Head:

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

АлександраЗайцева,Front-endDeveloperАлександраЗайцева,Front-endDeveloper

Я прошла весь путь: от внешнего тренинга поFront-endдо обучения во внутренней лаборатории. <>. Во внутренней лаборатории нас погрузили в реальную жизнь. Здесь уже была немного другая атмосфера, более серьезная, мы начали изучение новых инструментов и фреймворков. Работали со сборщиками иtask-runner, учились писать юнит-тесты ипростенькиесервера на Node.js. После этого мы начали погружаться в изучение фреймворков:Angular,React,ReactNative. <>

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

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

Через 2-3 месяца я уже спокойно брала задачи на самостоятельную разработку с интеграцией с API, написание юнит-тестов и всё, что включало в себя полный цикл разработки.<>

Полное интервьючитайтенапортале Тренинг-центра.

5. Насколько большой может быть разница по скиллам между несколькимикандидатами, которые претендуют на одну позицию?

НинаСказобова, Lead Resource Development Lab Head:

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

Для каждогоспециалистана каждое направление (Javadevelopment, .NET,web-developmentи так далее) в нашей компании есть матрицыкомпетенций, именно на основании этой матрицы оцениваются приходящие кандидаты. Разница в знаниях кандидатов иногда может быть значительной, но это выясняется в процессе общего интервью с рекрутером. После обучения в тренинг-центре разница в знаниях почти не заметна.

МарияВыгузова, Resource Development Administrator:

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

ГригорийСилкин, Software Testing Team LeaderГригорийСилкин, Software Testing Team Leader

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

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

МарияВыгузова, Resource Development Administrator:

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

АртёмЦибенков,JavaDeveloperАртёмЦибенков,JavaDeveloper

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

Записался на бесплатное онлайн-обучение. Прошёл, убедился, что разработка мне интересна.Решил пройти платный полугодовой онлайн-курс поJavaот одной известной компании.Пока проходил онлайн-курсы, в параллели узнавал, какие IT-компании есть в городе, какие у них требования дляcтажрови на вакансииjunior-специалистов.<>

Узнал, чтов офисеEPAMпланируется запуск обучения для начинающих специалистов и одно из направлений разработка наJava. И что новички после окончания получают возможность трудоустройства в EPAM, если пройти техническоесобеседование.<>

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

Понял, что есть немалыйобъминформации и его надо усвоить за 2 месяца. Составил план, получилось, что ежедневно надо заниматься по 8-9 часов. В итоге, после интервью, по окончании обучения меня взяли на позициюJuniorDeveloper.

Полное интервью на сайтеТренинг-центра.

7. Компании борются за сильных специалистов. Борются ли они заджунов?

НинаСказобова, Lead Resource Development Lab Head:

Да, сджуниорамиработа начинается ещёв вузе (со2-го, 3-гокурса) компании проводят мероприятия для студентов, приглашают на практику, выстраивают долгосрочные отношения ещё на этапе обучения кандидата.

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

НинаСказобова, Lead Resource Development Lab Head:

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

9. Что эффективнее и выгоднее стажировки или поискджуновна рынке?

МарияВыгузова, Resource Development Administrator:

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

10. Что происходит послеоффераджуниор-разработчику: процесс обучения,онбординг, менторство? Как скоро он получит боевые задачи?

МарияВыгузова,ResourceDevelopmentAdministrator:

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

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

11. Как вы относитесь кджунам, которым за тридцать или за сорок кандидатам, которые резко решили сменить карьеру и пришли из других сфер?

МарияВыгузова, Resource Development Administrator:

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

ГригорийСилкин,SoftwareTestingTeamLeader:

Мы оцениваем кандидатов по их профессиональным качествам, по знанию технической базы, софт скиллам и английскому языку. Если по этим параметрам кандидат нам подходит, неважно какого он пола, сколько ему лет и так далее. Кроме того у нас есть программа переквалификации из смежных областей. По статистике, примерно 20% наших студентов в возрасте 30+. Надо понимать, что это люди с опытом, и это их не первое место работы.

Владимир Малюгин, Front-End разработчик Владимир Малюгин, Front-End разработчик

<> Когда несколько лет назад я решил выбрать новое направление развития, по совету знакомого преподавателя, обратил внимание на образовательные программы ЕРАМ. Но поступить на внешние курсы поFront-endмне удалось только с третьего раза. Слабым местом был уровень владения английским.

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

<>Я решил повторить путь своего старшего сына, но в отличие от меня, покаджуниора, он ужеteamlead.

Если есть желание и мотивация, то сменить сферу деятельности или научиться чему-то новому не проблема в любом возрасте<>.

Подробнее насайте Тренинга-центра.

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

НинаСказобова, Lead Resource Development Lab Head, EPAM:

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

МарияВыгузова, Resource Development Administrator, EPAM:

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


Подкидывайте идеи, о чём вам ещё было бы интересно почитать. Задавайте свои вопросы в диалогах.

Подробнее..

Портал входа в IT по ту сторону

08.05.2021 14:13:54 | Автор: admin

Предисловие

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

Для кого статья

Для новичка, который только посмотрел в сторону сферы IT, у которого больше вопросов, чем ответов; для начинающего специалиста в сфере, которому непонятно, как и куда шагать

Для чего статья

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

Что планирую рассказать

  • Мой кейс - вход в сферу за 1 месяц и четырёхкратный рост зп за 2 года

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

  • Инсайты, которые я забрала в свой жизненный багаж, поработав в сфере

  • Профориентация на большом и непонятном новичку рынке труда в IT

Почему я решила написать?

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

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

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

А ещё хочу, чтобы экологичность в IT стала нормой, а не бонусом.

Как я вошла в портал IT

Первый фактор, который подтолкнул меня (руководителя из сферы развлечений с коллективом под 100 человек-студентов в подчинении и дёргающимся глазом) к IT сфере - круг общения. В один момент в моем окружении каждый второй оказался ITшником. Мой открытый рот от их рассказов о лучшей жизни, человеческих условиях труда, и их круглые глаза от моих историй про адское выгорание, обязанности 3х специалистов на одном моём горбу за 30 т.р. и виднеющийся потолок роста - всё это наталкивало меня на 2 мысли:

  1. То, как сейчас в моей рабочей среде происходит - мне не нравится

  2. Я могу намного больше дать миру, чем даю сейчас

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

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

Если в цифрах (все даты про 2018 год):

  • 13 октября я уволилась с работы

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

  • 13 ноября мне пришёл оффер в чудесную компанию на должность junior QA engineer

  • 19 ноября я уже вышла на новое место работы

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

Первые трудности: синдром самозванца

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

(с) wikipedia.org

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

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

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

Забегая вперёд, перед тем, как заняться менторством, я отказалась от поста QA lead и зарплаты 120 т.р. - это было через 2 с небольшим года после вхождения в сферу. Я выросла в стоимости в 4 раза (возможно больше, просто не знаю об этом - из работы в найме я приняла решение уйти, да и стоимость на рынке труда, о чём я напишу ниже - тема интимнее, чем вопрос постельных предпочтений...)

Но начиналось всё с неуверенности и целого списка страхов...

Самые большие (читай: больные) страхи, которые я преодолела

  • Я сейчас скажу какую-то фигню, все надо мной посмеются и поймут, что я никакой не ITшник, а просто Юля

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

Мне невероятно повезло в начале пути - я не знала и не столкнулась с токсичностью до тех пор, пока окончательно не окрепла как специалист. Токсики начались чуть позже...

  • Я не понимаю, что от меня хотят - а значит не могу выполнить задание идеально (привет, отличники!)

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

  • Я нифига не знаю теорию, а значит я плохой специалист

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

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

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

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

Итак, мы плавно переходим к следующему этапу моего роста:

Инсайты, которые я забрала в свой багаж и транслирую новичкам

  • Теория - это только инструмент для решения задачи

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

  • Цена на рынке труда - тема такая же интимная и холиварная, как и предпочтения в постели

Всегда будут сторонники с жёсткими взглядами, которые считают, что IT сфера - это жесткий пузырь, что если он, с 10-15 годами опыта на протяжении N-ного количества лет получает +- 80 т.р. - ты не имеешь права получать больше, и тд. Также всегда будут те, кто в сфере и любом передвижении видят возможности - смена места работы, умение продать себя как хорошего soft скиллованного специалиста дороже, более платёжеспособная компания - всё это потенциальные точки роста, и если ты хочешь и можешь ими воспользоваться - то дерзай

  • Токсичность в IT - не новость, но касается она тебя только пока ты позволяешь это делать

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

  • Со сменой сферы твои навыки не обнуляются, особенно если ты был руководителем

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

Профориентация на рынке труда в IT: кто я?

Меняя сферу, мне было тяжело понять, а в какую такую специальность я могу слепить все свои умения и навыки, чтобы качественно применить себя?

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

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

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

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

Итоги

Вместо чётких и непоколебимых выводов оставлю лишь парочку напутствий:

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

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

  • Разреши каждому идти своим путём. Особенно - себе. И это - не только о карьере.

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

Держись и верь в себя, новичок!

Подробнее..

Категории

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

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