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

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

Я - @rsakutin

РКН - https://www.gosuslugi.ru/snet/67d8231025b58f3d79091b83
Download Telegram
Ищите 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
👍3
Это угроза
👍3
Ко мне обратились Google и захотели купить мою игру!

"Хабуди Хабудай получает палкой по по пузу - это то, чем должна гордиться наша платформа" - заявил представитель сервиса Google Play. Они заплатили мне 1 000 000 рублей за то, чтобы релиз был только на их платформе так, как хотят стойко ассоциироваться с качественными играми и кодом.

Мне уже перевели первые 250 000 рублей авансом на которые я купил подарок своей жене.

Она у меня инженер-строитель по этому под Autocad и Revit подарил ей компьютер на RTX 3070ti и i7 9-th поколения. Пусть работает.

Если тоже хотите делать игры и покупать любые понравившиеся сборки то записывайтесь на курс на котором я доведу вас до первой зарплаты в GameDev - https://ijunior.ru/unity-start?utm_source=telegram&utm_medium=socity&utm_campaign=computer

А если вы уже не маслёнок и хотите улучшить качество своего кода и уже через месяц получить x2 к зарплате, то приходите на напильник - https://ijunior.ru/napilnik?utm_source=telegram&utm_medium=socity&utm_campaign=computer
👍3
Ребят у меня аж сердце разболелось

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

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

Кстати уже через 4 дня вы теряете скидку в 30% на второй поток курс Напильник. После него вы устроитесь на работу, если до сих не получается, или увеличите свою ЗП в два раза если уже работаете.

Подробности - https://ijunior.ru/napilnik?utm_source=telegram&utm_medium=socity&utm_campaign=shitpost
👍3
Записываясь на курс Напильник от Пармезана Сыкушкина вы получаете:

1) Высокое качество кода;
2) Понимание ООП, Паттернов, SOLID и Grasp.
3) Возможность проходить собеседования на зарплату x2 от текущей.

Да и вообще код хоть нормально писать научитесь, а то че как дураки сидите?

Скидка в 30% сгорает через 3 дня - https://ijunior.ru/napilnik?utm_source=telegram&utm_medium=socity&utm_campaign=parmezan
👍3
Ой не удалось развести аудиторию :)

Ребят, зарплата программиста запросто позволяет покупать сборки пк и за 200 000 и за 300 000, а если вы этим горите запросто можно и за 1 000 000 взять откладывая пол годика.

Не все нищие в нашей стране.

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

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

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

Просто рофлянки.

А компьюхтер настоящий, просто для красивой фотки вставил.

Понтоваться вещами считаю не круто и вообще стараюсь жить скромно и больше вкладывать в компанию нежели в покупки.
👍3