Привет. Гоу разберем почему вам может быть полезно вносить вклад в сообщество программистов. Речь пойдет про запросы на внесение изменений через форк проекта.

Гит система

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

Подчерпнуть новое

Очевидно, вклад в чужой репозиторий требует прочтения чужого кода, что само по себе учит новому. Подход к написанию, объявление полей и свойств, применение атрибутов, событий, делегатов, пространств имен, assembly definition (в проектах Unity); шаблоны проектирования на конкретном примере, вложенные методы, способы инициализации, приемчики старой школы программистов по типу использования адреса ячейки памяти в качестве индексации коллекции… Да просто обнаружить, что лучше в методе Awake() проводить инициализацию игрового объекта (внутренняя работа), а в Start() сделать ту часть работы, которая требует связи с внешним миром (подписаться на событие, подтянуть параметры другого объекта).

// good
public int Health => _health;
[SerializeField] private int _health;

// nice
[field: SerializeField] public int Armor {  get; private set; }

Пример из Unity/C# проекта. Параметр персонажа, такой как здоровье или броня, можно прописать в одну строчку, ограничив доступ к изменениям и не потерять возможность отображения в инспекторе.

Могу порекомендовать посмотреть ролик с фишками C# на эту тему.

Рефакторинг

Раз вы хотите внести изменения в чужой код, значит это… Рефакторинг! Отличный способ попрактиковаться в этом направлении. Приятное с полезным.

  • Видишь повторяющиеся строки кода? Вынеси в отдельный метод.

  • Видишь смешение логики? Извлеки одну логику в отдельный класс.

  • Схожее поведение у разнотипных классов? Вынеси интерфейс.

  • Неразлучно передается много данных? Можно собрать в структуру.

  • Метод принадлежит чужому классу, нелогичное расположение? Перенеси в более очевидное место.

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

Большой класс
Большой класс

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

Пример с принципами SOLID. Если неукоснительно следовать принципу Брабары Лисков (если в функцию вместо базового класса подставить наследника, то логика не должна быть нарушена; наследники не меняют поведение предков), то можно сказать, что виртуальные методы вам строго запрещены. Конечно это не так.

Совершенствование проекта

Конечно же при внесении изменений проект становится лучше.

  • получает новый функционал

  • становится оптимизированным

  • исправляются баги

  • исправляются ошибки нетехнического характера

В том числе благодаря вам!

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

Стиль написания и уважение

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

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

Коммуникация

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

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

Итог

Запросы на принятие изменений – мощный способ совершенствоваться, помогать в этом другим. Умение писать грамотный и понятный код, знать тонкости игрового движка и языка программирования, налаживать общение в процессе работы – вот чему можно научиться в процессе. Главное – получайте удовольствие от проделанной работы!

Комментарии (5)


  1. nemajo
    04.04.2024 16:23

    Чему могут научить пул реквесты в чужие проекты


  1. rukhi7
    04.04.2024 16:23
    +1

    на примере игр (Unity и C#) и ассетов к ним разберем на примерах

    Где примеры то разобрал?


    1. ValeryPopov Автор
      04.04.2024 16:23

      Согласен, что примеров из игр не было, поправил статью. Я не правильно выразился. Пытался сказать, что приведенные строки кода и скрины реквеста относятся к Unity (например, атрибут SerializedField).


  1. mvv-rus
    04.04.2024 16:23
    +10

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

    Некоторые сомнительные рекомендации:

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

    Есть такое новое, которому лучше не учиться. Пример - да прямо там рядом на картинке. После того, как в C# появились автоматические свойства (auto property) - уже больше 10 лет как ЕМНИП - совершенно незачем для реализации доступа к полю/свойству только для чтения приделывать ещё и теневую переменную. Да и до того незачем было городить две реализации: оптимизация путем замены свойства полем выгляит явно сомнительной и, скорее всего, преждевременной: метод получения свойства чтение поля почти наверняка будет встроен в код по месту. И, кстати, давать примеры кода лучше не картинкой а вставкой кода.

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

    • Видишь повторяющиеся строки кода? Вынеси в отдельный метод.

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

    Вежливость, конструктивность помогут тебе.

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


    1. ValeryPopov Автор
      04.04.2024 16:23

      Спасибо за конструктивную критику. Статью я поправил, пример с кодом заменил. Пройдемся по порядку.

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

      Есть такое новое, которому лучше не учиться

      Считаю придиркой. Конечно есть такое новое, чему лучше не учиться. Значит ли это, что не учиться вовсе? Никогда не смотреть чужой код?

      Пример - да прямо там рядом на картинке

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

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

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

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

      "Рас" и "Раз" поправил, это мой давний косяк, раЗ я пишу статью. Пора мне уж научиться раС и навсегда)))

      Давайте становиться лучше!