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

Итак, начнем с простого, зачем оформлять пет-проекты? Если вы, как и я раньше, наивно полагаете, что потенциальные рекрутеры или юзеры (зависит от цели вашего пет-проекта, делаете вы его как демонстрацию ваших навыков или как какой-то продукт, но это не принципиально) будут пытаться понять суть вашего проекта по неоднозначному названию и паре строк в readme файле, то вы сильно ошибаетесь, а если вы думаете, что они станут читать код такого проекта, то ошибаетесь вдвойне. Именно поэтому пет-проектам нужно правильное оформление. Но что же в него входит? Что же, обо всем по порядку:

  1. Название

    Конечно же чем понятнее и однозначнее название, тем лучше, однако, часто бывает такое, что мы уже создали проект и задумались о названии лишь спустя какое-то время, когда изменять везде название (и связанные с ним вещи) накладно или просто лень, либо же когда вы оформляете какой-то старый проект, поэтому этот пункт хоть и важный, но думаю не критичный. И я имею ввиду не только название проекта в гите, заголовок в readme файле, но и название проекта в коде, и связанные с ним вещи (такие как package в java, например, потому что не совсем красивые package, например, потом вам же самим будут доставлять эстетический дискомфорт).

  2. README.md (Описание)

    Дальнейшие пункты все будут так или иначе связаны с файлом readme, однако для простоты чтения я буду оформлять их отдельными пунктами. И первый из них описание. Я не буду вдаваться в синтаксис md и советовать как именно выстроить структуру файла.

    Однако, очевидно, что все пункты следует выделить каким-то образом, например **жирным шрифтом**, чтобы отслеживалась структура. Касательно содержания конкретно пункта "Описание", я рекомендую оставить его кратким, но достаточно описывающим суть проекта, не стоит вдаваться в детали, потому что они будут расписаны подробнее в следующих пунктах.

  3. Стэк технологий/Структура проекта

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

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

    Делается это следующим образом: <details><summary><b>Структура</b></summary>...</details> (не забываем, что в md файлах работает и html , а поддержка спойлеров - отдельная фишка GitHub, md по дефолту, например, их не поддерживает).

  4. Скриншоты

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

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

    Касательно их оформления, обязательно спрятать их под спойлеры, ведь иначе readme получится очень длинным, что не очень приятно для глаза. Во-вторых, я рекомендую оформить их в качестве таблицы, а сами картинки хранить отдельно в папке /pictures, например. Итого у вас получится примерно такая разметка и результат, вроде выглядит неплохо:

    Пример получившейся таблицы
    Пример получившейся таблицы

    <details><summary><b>Скриншоты:</b></summary>
    | ![Main page](/pictures/1.jpg "Main page") | | :--: | | *Main page* |
    ...
    | ![Swagger](/pictures/5.jpg "Swagger") | | *Swagger* |
    </details>

  5. Мануал по запуску/использованию

    Вот мы и подошли, пожалуй, к одному из самых важных пунктов. Не раз я видел проекты, у которых худо бедно было какое-то описание, но абсолютно никаких инструкций по запуску/использованию. Конечно, вы можете надеяться, что рекрутер/пользователь пойдет сам разбираться и смотреть код, но я думаю, вы прекрасно понимаете, что это маловероятно. Именно поэтому это очень важный пункт.
    И так, что же здесь должно быть? Как минимум минимальный гайд по тому, как запустить ваш проект тому, кто хочет использовать его локально (или как подключить/использовать ваш проект, если это библиотека, консольная утилита и т.д.). Но и на этом не все.

    Если вашему проекту для локального запуска необходимы вспомогательные сервисы, например, конкретная база данных или sso, то, очевидно, глупо предполагать, что у кого-то они уже будут стоять, к тому же настроенные под ваш проект. Именно поэтому важно создать какой-нибудь docker-compose файлик, в котором настроить запуск необходимых вам сервисов, с необходимой настройкой (например, если в бд вам нужно инициализировать какую-то схему, использовать каких-то конкретных юзеров в sso и т.д.). Благо это можно сделать, в крайнем случае можно использовать dockerfile для настройки конкретно вашего image и его уже использовать в compose. Например, инициализация БД с нужными вам данными:

    services:
    postgres:
    image: 'postgres:14-alpine'
    container_name: postgres
    ports:
    - "5432:5432"
    environment:
    POSTGRES_USER: postgres
    POSTGRES_PASSWORD: postgres
    POSTGRES_DB: postgres
    volumes:
    - ./imports/init.sql:/docker-entrypoint-initdb.d/init.sql

    Также можно дополнительно добавить второй файлик, который будет запускать также и ваши проекты, но это уже по желанию и в зависимости от вашего языка, насколько просто человеку будет запустить сам ваш проект без докера, нужны ли вашему проекту какие-то дополнительные параметры запуска и т.д. Мое мнение: доп. сервисов вполне достаточно, т.к. настройка еще и вашего проекта в дополнение ко всему этому делу может быть мучительным занятием. В крайнем случае добавьте описание/команду как запустить ваш проект с уже запущенными в докере доп. сервисами.

    Ну и в самом проекте я бы рекомендовал в качестве дефолтных параметров запуска использовать параметры, которые завязаны на ваши сервисы (например, в java, в yaml файле в качестве дефолтных адресов указать адреса, указанные в compose файлике, тогда просматривающему ваш проект достаточно будет запустить лишь compose и проект, без доп. настройки env переменных, например). Ну и рекомендую все это также вынести в отдельную папку docker для поддержания структуры.

Итого: У вас может получиться что-то похожее на этот readme, содержащее достаточно информации для всех интересующихся, при этом не перегруженное и не длинное. Надеюсь эта статья будет кому-то полезна, конечно, это не гарантирует, что правильно оформя ваши проекты вы сразу найдете работу/пользователей (not in this economy), но это однозначно увеличит ваши шансы.

Пример итогового readme файла
Пример итогового readme файла
  1. Honorable mention:
    Можете указать дефолтные адреса, что, где и как доступно и другую необходимую доп. информацию, как это сделал я, но это уже зависит от типа вашего проекта, разумеется.

P.S: Язык оформления, разумеется, выбирайте сами, в зависимости от того, какая "целевая аудитория". Для себя я пришел к выводу, что русскоязычные разработчики поймут англоязычное описание, но англоязычные не поймут русскоязычное

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


  1. Yuri_nedre
    18.09.2023 06:14
    -4

    Есть Зло
    Есть Великое Зло
    И есть Пет-проекты
    п.с. я их тоже местами люблю!


  1. Gremlinquisitor
    18.09.2023 06:14
    +2

    Не понимаю, за что заминусовали статью. По мне так советы толковые, особенно для тех, кто только знакомится с гитом и кто намерен завлечь работодателя петами. Хорошая подача - залог того, что вкладку с проектом не закроют сразу со словами "Чёт какая-то муть, не хочу разбираться".


    1. arzybek Автор
      18.09.2023 06:14

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


      1. Ivnika
        18.09.2023 06:14
        -1

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


        1. arzybek Автор
          18.09.2023 06:14
          -1

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


      1. Gremlinquisitor
        18.09.2023 06:14

        Ну кто-то вредный завёлся, а то и вовсе бот -- времени от написания всего ничего, а сразу три минуса подряд. Но это Хабр, здесь не помогает даже ограничение возможностей раздавать минусы. Остаётся только смириться )

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

        Отдельное спасибо за информацию про спойлеры )


        1. arzybek Автор
          18.09.2023 06:14

          Вам спасибо за добрые слова)


  1. Folko85
    18.09.2023 06:14
    +6

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


    1. arzybek Автор
      18.09.2023 06:14

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


  1. profFortran
    18.09.2023 06:14
    +1

    Как - понятно. Осталось понять, зачем так напрягаться. Среднестатистическая хрюшка всё равно ничерта там не поймёт, даже если заглянет. А на собесе проще так рассказать, что к чему. Главное, самому не забыть. И вот, чтобы не забыть, надо записать в README.


    1. arzybek Автор
      18.09.2023 06:14

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


      1. profFortran
        18.09.2023 06:14

        Да тоже далеко не все смотрят, по опыту знаю. А если и посмотрят, их будут интересовать не красивые картиночки в README, а то, как построена архитектура проекта, как написан код. По крайней мере, меня бы интересовало именно это. Плевать, насколько красиво оно оформлено. Если под красивым фантиком известная субстанция, то конфеткой это не назовёшь.


        1. arzybek Автор
          18.09.2023 06:14

          Ну про картинки я написал, что это чтобы просто дать первое понимание проекта и как-то заинтересовать, конечно в любом случае решает код, но так больше шансов зацепить внимание, чем когда условно пустое описание


  1. igorzakhar
    18.09.2023 06:14
    +6

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

    Разделы в README обычно принято отделять заголовками (маркдаун тэги #, ##, ### и т.д.) , а не жирным шрифтом.


    1. arzybek Автор
      18.09.2023 06:14

      Не помню почему выбрал жирный шрифт, по-моему заголовки показались мне слишком большими, в любом случае, я озвучил это лишь как один из вариантов


      1. igorzakhar
        18.09.2023 06:14
        +1

        Размер заголовков "регулируется" количеством символов # перед текстом заголовка


        1. arzybek Автор
          18.09.2023 06:14
          -2

          Да, я знаю, необходимый мне размер добивался кажется 4 или 3, и я подумал, что легче выделить жирным, насколько я помню, чтобы не громоздить много #


  1. semenovs
    18.09.2023 06:14
    -1

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

    Вот так надо оформлять read me для пет проектов

    https://github.com/torvalds/linux


    1. idd451289
      18.09.2023 06:14

      Ну не согласен

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


  1. zergon321
    18.09.2023 06:14
    -1

    У меня за все случаи подачи резюме только один раз было такое, что тот, кто будет проводить техническое собеседование, взглянул на то, что я делаю на своём GitHub'e. Кандидатов на одну позицию сейчас просто океаны, никто не станет смотреть на пет-проекты, даже резюме глазами пробегают ну очень бегло


    1. bBars
      18.09.2023 06:14
      +1

      Я изучал код кандидатов на гитхабе. Откуда у вас сведения, что это было лишь однажды?


      1. zergon321
        18.09.2023 06:14

        Интервьюер сам мне это сказал уже на собеседовании


  1. bBars
    18.09.2023 06:14
    +1

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

    Я не буду вдаваться в синтаксис md

    И очень зря, потому что выбранный для обозначения секций `**жирный шрифт**` — моветон. Примерно такой же, как и центровка текста пробелами в «богатом» документе.

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

    Ещё я б указал на важность tldr, но не б