Роман Сакутин
103K subscribers
1.34K photos
140 videos
18 files
732 links
Основатель студии разработки игр Агава и школы ЯЮниор. Настоящий программист с опытом 10+ лет.

Служба поддержки школы - @ijuniorSupportBot

Я - @rsakutin

РКН - https://www.gosuslugi.ru/snet/67d8231025b58f3d79091b83
Download Telegram
👍1
Обещал вам вчера подборку, ловите.

Всего я рекомендую 9 книг разбитых на 3 категории:
1) Для начинающих. Вы не работаете или зарабатываете меньше 50 000 в месяц.
2) Для продолжающих. Получаете до 120 000 в месяц.
3) Для профи. Получаете до 200 000 в месяц.

Тут в карусели для первой категории, остальные книги вы можете получить бесплатно здесь - https://napilnik-first.minisite.ai/
👍3
Обновили раскладку по зарплатам для Unity программистов.

Получаете меньше 50 000 рублей в месяц? Тогда у вас беда и вы ещё даже не Junior разработчик. Да это правда, если у вас full-time выработка и вы получаете такую нищенскую зарплату, то подумайте о смене работы.

Сейчас у нас в студии следующие ставки:
1) 56 000 Р. - стажер.
2) 80 000 Р. - Junior.
3) 120 000 Р. - Middle.
4) 160 000 Р. - Middle

Неплохо? Да, но у нас ещё есть бонусная программа которая при полной выработке делает x2 к окладу, и тогда цифры становятся совсем сексуальные.

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

Мы его кстати взяли сразу после курса напильник. Вот такой вот рост зарплаты почти в 3 раза за 3 месяца. :)

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

Прямо сейчас вы можете записаться на напильник с 50% скидкой - https://ijunior.ru/napilnik?utm_source=telegram&utm_medium=socity&utm_campaign=salaryreport

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

При цене курса в 270 000 тысяч, при полной выработке студент может отбить его всего за 3 месяца, а дальше достойно зарабатывать в чистый плюс. Не удивляйтесь если скоро курс станет стоит 500 000, и да, он всё ещё останется выгодным для покупателя. ;)

Подробней про с нуля до первой зарплаты - https://ijunior.ru/unity-start?utm_source=telegram&utm_medium=socity&utm_campaign=salaryreport
👍3
👍3
Ищите Unity разработчика?

Мы готовы поделиться с вами нашими выпускниками. Принимаем запросы от студий, hr-агенств и частных заказчиков. Оставляйте заявку здесь - https://forms.gle/Sn5PcvW6zD47jokx5
👍3
Страшная правда про программистов

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

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

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

И вот будет у него выбор:
1) Еб**ить как конь и зарабатывать 200 000 в месяц.
2) Устроиться в левую студию, топить хавальник почти целыми днями и получать в месяц тысяч 40.

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

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

И вывод звучит просто: работаешь - зарабатываешь, не зарабатываешь - значит не работаешь, или работаешь плохо. Просто и очевидно.

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

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

https://ijunior.ru/napilnik?utm_source=murino
👍3
Страшная правда про программистов

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

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

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

И вот будет у него выбор:
1) Еб**ить как конь и зарабатывать 200 000 в месяц.
2) Устроиться в левую студию, топить хавальник почти целыми днями и получать в месяц тысяч 40.

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

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

И вывод звучит просто: работаешь - зарабатываешь, не зарабатываешь - значит не работаешь, или работаешь плохо. Просто и очевидно.

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

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

https://ijunior.ru/napilnik?utm_source=murino
👍3
Начнём жару? ;)
👍3
Через dynamic в С# можно творить почти любую херню которую хочется

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

Например уже избитая реализация паттерна Visitor через dynamic.

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

Короче.

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

Совсем для пряников вот пояснение как с этой хренабудолой работать:

class ClassicVisitor : IAnimalVisitor
{

public void VisitAll(IEnumerable<Animal> animals)
{
foreach (Animal animal in animals)
animal.Accept(this);
}

public void Visit(Bear bear) { Bears++; }
public void Visit(Lion lion) { Lions++; }
public void Visit(Snake snake) { Snakes++; }
public void Visit(Tiger tiger) { Tigers++; }
}

А есть способ который работает в 5 раз медленней (какой кошмар, да?), но выглядит сексуальней. Во-первых у нас исчезает интерфейс IAnimalVisitor а из Animal пропадает метод Acept.

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

class DynamicVisitor2
{
public void VisitAll(IEnumerable<Animal> animals)
{
foreach (Animal animal in animals)
Visit((dynamic) animal);
}



private void Visit(Mammal mammal) => Mammals++;
private void Visit(Reptile reptile) => Reptiles++;
}

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

Эту и прочие фишки я люблю показывать в практических блоках курса Напильник. Завтра вы потеряете 50% скидку на курс по этому записывайтесь уже сейчас - https://ijunior.ru/napilnik?utm_source=youtube&utm_medium=socity&utm_campaign=dynamic

//
(c) Замеры и примера кода взяты у Bradley Grainger

Кстати у меня давно выходил видос где я показывал как соединить Visitor и Composite для интересной задачи из мира GameDev - https://www.youtube.com/watch?v=MFwiqvk-DN8
👍2
👍2
За 3 месяца поднялся в доходе с 30 000 до 170 000.

Сделали X5 человека и при этом он по тарифу без проверок ДЗ. ;)

Домашки на этом курсе проверяю только я. Сам курс тоже веду только я.

Из тех кого проверял, надеюсь рост в зарплате будет ещё больше. :D

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

Уже сегодня вы теряете 50% скидку на курс, последний день для записи по таким условия - https://ijunior.ru/napilnik?utm_source=telegram&utm_medium=socity&utm_campaign=pankevichreport
👍2
Совсем скоро будет доступна игра: "Хабуди Хабудай получает палкой по пузу за плохой код".

Её делали ученики с курса "С нуля до первой зарплаты" - https://ijunior.ru/unity-start?utm_source=telegram&utm_medium=socity&utm_campaign=habudyjabudai1
👍2
3 книги которые должен прочитать каждый C# программист!

200 лайков и выложу книги для мега-профессионалов ;)

Кстати, на основе этих и многих других книг построен курс Напильник. Если вы хотите быстро впитать основные идеи и резко поднять качество своего кода то записывайтесь - https://ijunior.ru/napilnik?utm_source=telegram&utm_medium=socity&utm_campaign=3booksforadvanced

Через 7 дней сгорает скидка в 30%.
👍2
Ищем Hypercasual-GameDesigner в команду

Предлагаем до 300 000 рублей в месяц + бонусы за тесты + rev-share.

Что ждём от тебя:
1) Виденье рынка и умение пользоваться аналитическими инструментами.
2) Выдавать первичные концепты и ставить гипотезы.
3) Ведение проекта от концепты до релиза под издателем.
4) Режиссура креативов.

Что даём:
1) Деньги бумажные.
2) Офис в Питере или удаленка.
3) Разработчиков, доверие и желание вместе прийти к хиту.

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

Заявки отправляйте через форму - https://forms.gle/F7SDqSVguCgRLGGF7
👍3
Паттерн Visitor не нужен?

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

>Визитёр не нужен в хорошем дизайне

Да, когда функционал зашит в иерархии типов, визитёр не нужен.

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

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

Но визитёр - это всё-таки когда мы соединяем Тип => Действие. Когда мы соединяем Тип => Данные, то принято говорить по-другому.

Допустим, у нас есть модель противников. Классы типа:

Ufo : Enemy
Asteroid : Enemy
Ghost : Enemy

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

Но это нарушает SRP и OCP.

SRP - теперь у нас в Enemy есть новая ответственность, которая там быть не должна.
OCP - мы изменили Enemy для добавления функционала.

А с точки зрения GRASP у нас ещё и получился Strong Coupling. Мы зацепили Противников и ИгровыеПредметы, а смысла в этом ноль, эти иерархии могут и должны существовать независимо и не пересекаться.

Вместо этого мы бы сделали LootFactory с методом Drop(Enemy enemy), который бы по какому-нибудь словарю делал проверку.

ТипПротивника => (Предмет:Шанс, Предмет:Шанс).

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

Хорошо, вроде визитёр не нужен.

А как соединить Тип => Действие?

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

Можно конечно взять типа:


Тип => Делегат

Или

Тип => Тип

И через DI инстанцировать экземпляр обработчик.

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

А если вам не нравится метод Accept в иерархии, вынесите его в метод расширения. ;)

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

Ещё больше правильного применения паттернов и ООП вы найдёте в курсе Напильник - https://ijunior.ru/napilnik?utm_source=telegram&utm_medium=socity&utm_campaign=visiter2

Осталось 6 дней и вы потеряете скидку в 30%.
👍2