Сегодня сгорает 50% скидка на напильник. Второй поток начнётся 15-го ноября, подробности - https://ijunior.ru/napilnik?utm_source=telegram&utm_medium=socity&utm_campaign=50discountcancel
ijunior.ru
Напильник - онлайн-курс по написанию хорошего кода
Не можете устроиться на работу или устали от трясины на текущем месте? Устройте себе перезагрузку за 1 месяц и обучитесь практикам хорошего кода.
👍2
3 книги которые должен прочитать каждый C# программист!
200 лайков и выложу книги для мега-профессионалов ;)
Кстати, на основе этих и многих других книг построен курс Напильник. Если вы хотите быстро впитать основные идеи и резко поднять качество своего кода то записывайтесь - https://ijunior.ru/napilnik?utm_source=telegram&utm_medium=socity&utm_campaign=3booksforadvanced
Через 7 дней сгорает скидка в 30%.
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
Предлагаем до 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%.
К прошлой статье был ряд комментариев. Попробую дать ответ.
>Визитёр не нужен в хорошем дизайне
Да, когда функционал зашит в иерархии типов, визитёр не нужен.
Но есть ряд ситуаций, когда это плохо или невозможно: парсинг лексических деревьев, визуализация (как у нас было, когда мы граф типов рендерили через 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
Ко мне обратились 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
"Хабуди Хабудай получает палкой по по пузу - это то, чем должна гордиться наша платформа" - заявил представитель сервиса 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
Зачем вы так оскорбляете моего друга Хауди Хо? Игру которую сделали ученики моего курса по разработке игр, на котором я доведу вас с полного нуля до вашей первой зарплаты в геймдев, с гарантией результата договором...
В общем игра Хабуди Хабудай получает палкой по пузу не имеет никакого отношения к Абрахаму. Хватит заниматься травлей по интернету то, что он толстый и пишет плохой код не означает, что можно писать про него такие гадости. Прекратите!
Кстати уже через 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
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 и хотела купить его.
Просто рофлянки.
А компьюхтер настоящий, просто для красивой фотки вставил.
Понтоваться вещами считаю не круто и вообще стараюсь жить скромно и больше вкладывать в компанию нежели в покупки.
Ребят, зарплата программиста запросто позволяет покупать сборки пк и за 200 000 и за 300 000, а если вы этим горите запросто можно и за 1 000 000 взять откладывая пол годика.
Не все нищие в нашей стране.
Учитесь, работайте, развивайтесь и сможете позволить себе комфортную жизнь. А думать, что все вокруг также живут на заводской зарплате в 30к и ничего в жизни не имеют... Это путь жить так до конца дней.
Ссылок на мои курсы не будет, идите хотя бы просто книжки умные почитайте, начните с малого.
По поводу аванса от гугла конечно был рофл. Сегодня ребята в офисе подошли и спросили в чём приколюха. Это была отсылка к динозаврику от Хауди Хо когда он всем рассказывал, что к нему обратилась компания Google и хотела купить его.
Просто рофлянки.
А компьюхтер настоящий, просто для красивой фотки вставил.
Понтоваться вещами считаю не круто и вообще стараюсь жить скромно и больше вкладывать в компанию нежели в покупки.
👍3
Пришли мы в офис с утра, а тут Дима сидит.
Всю ночь работал, настолько горит проектом. Осталось 600 лайков на предыдущем посте и отправляем новую версию Хабуди Хабудая на модерацию.
Прошлую напомню отклонила модерацию за жестокость...
Диме мы кстати дадим премию и оплачиваемый выходной, чтобы восстановился. Кранчить - это не путь к успеху.
Всю ночь работал, настолько горит проектом. Осталось 600 лайков на предыдущем посте и отправляем новую версию Хабуди Хабудая на модерацию.
Прошлую напомню отклонила модерацию за жестокость...
Диме мы кстати дадим премию и оплачиваемый выходной, чтобы восстановился. Кранчить - это не путь к успеху.
👍3
Ещё немного лайков и Дима пойдёт спать - https://www.youtube.com/channel/UCUEQBzSZx65-FcVwce8HYNQ/community?lb=UgkxGpyp35XYIYulpXKXcN2qbVoknBZrm11q
👍2
Разбор решения Unity Junior тестового задания для Kefir - Очень хорошая задача
https://www.youtube.com/watch?v=syvjmS-mflY
https://www.youtube.com/watch?v=syvjmS-mflY
YouTube
Разбор решения Unity Junior тестового задания для Kefir - Очень хорошая задача
Для курса Напильник подготовил решение тестовой задачи но к сожалению меня сбрили. :)
Улучшу ваш код и подниму вашу зарплату в два раза - https://ijunior.ru/napilnik?utm_source=youtube&utm_medium=video&utm_campaign=description&utm_content=kefir
Обучение…
Улучшу ваш код и подниму вашу зарплату в два раза - https://ijunior.ru/napilnik?utm_source=youtube&utm_medium=video&utm_campaign=description&utm_content=kefir
Обучение…
👍2
Хотим принести извинения Валерию Токареву за то, что использовали его аватарку в изменённом виде в последнем видео.
Он не писал того, что было показано и такое ощущение возникло из-за нашей невнимательности при монтаже.
Мы долбоёбы, каемся.
Он не писал того, что было показано и такое ощущение возникло из-за нашей невнимательности при монтаже.
Мы долбоёбы, каемся.
👍2
Через 24 часа сгорает скидка в 30% на курс Напильник.
На нём мы изучаем правильно ООП, паттерные, SOLID и прочие штуки.
И не просто теорию мучаем а на реальной практике в Unity а также все вместе решаем тестовые задачи для различных студий.
После курса вы получите уверенность в своём коде а также, скорей всего, подниметесь в зарплате раза в 2.
Не потеряйте ещё один шанс стать крутым программистом - https://ijunior.ru/napilnik?utm_source=telegram&utm_medium=socity&utm_campaign=nasilnik
//
На нём мы изучаем правильно ООП, паттерные, 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
И да мы это отдельно обсуждали не раз на Напильнике ;)
Действительно, если вам нужно не отрицательное число то с точки зрения здравого смысла просто нужно воспользоваться 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