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

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

Я - @rsakutin

РКН - https://www.gosuslugi.ru/snet/67d8231025b58f3d79091b83
Download Telegram
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
👍3
Пришли мы в офис с утра, а тут Дима сидит.

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

Прошлую напомню отклонила модерацию за жестокость...

Диме мы кстати дадим премию и оплачиваемый выходной, чтобы восстановился. Кранчить - это не путь к успеху.
👍3
Ещё немного лайков и Дима пойдёт спать - https://www.youtube.com/channel/UCUEQBzSZx65-FcVwce8HYNQ/community?lb=UgkxGpyp35XYIYulpXKXcN2qbVoknBZrm11q
👍2
Хотим принести извинения Валерию Токареву за то, что использовали его аватарку в изменённом виде в последнем видео.

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

Мы долбоёбы, каемся.
👍2
Через 24 часа сгорает скидка в 30% на курс Напильник.

На нём мы изучаем правильно ООП, паттерные, SOLID и прочие штуки.

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

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

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

//
👍2
По поводу uint.

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

Но к сожалению зачастую это жутко неудобно, вот что говорит актуальный гайдлайн по написанию кода от Microsoft: "In general, use int rather than unsigned types. The use of int is common throughout C#, and it is easier to interact with other libraries when you use int."

Весь гайд - https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions

И да мы это отдельно обсуждали не раз на Напильнике ;)
👍2
Игра про Хабуди Хабудая уже набрала почти 1 000 установок!

Спасибо всем за 5 звёзд и отзывы.

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

Пишите чтобы вы хотели видеть на нашем любимом говнокодере?
👍2