- Контрибьюшен в любой open-source проект или библиотеку.
- Контрибьюшен в Metarhia.
- Проект студенческой группы или общественный проект в открытом коде.
- Собственный open-source проект.
- Можно использовать любой язык и все встроенные в него библиотек.
- Нельзя использовать сторонние библиотеки, устанавливаемые из npm, githib и т.д.
- Репозиторий обязательно размещается на https://github.com в открытом доступе.
- Нужно развить навыки групповой работы, для этого студенты объединяются в группы по 2-5 человек; группа может писать один общий проект или сделать перекрестный ревью кода индивидуальных проектов каждого участника группы. Пересмотрите:
- Проект не может быть одномоментно залит на гитхаб за день до сдачи, его нужно
вести в гитхабе на протяжении нескольких месяцев, чтобы была видна работа,
история коммитов и PR (pull request). Хорошо, если можно будет проследить
улучшение кодовой базы, рефакторинг и оптимизацию. Пересмотрите:
- Общие антипаттерны для всех парадигм, и
- Антипаттерны процедурного программирования;
- Лекция про рефакторинг.
- Хорошее ведение репозитория: issues, pull requests, milestones (см. кнопки на закладках issues и pr в github), discussions (не обязательно), kanban (средство планирования проекта, ищите на закладке project в github), wiki (не обязательно).
- В каждом проекте должны быть юниттесты для проверки работоспособности.
- Репозиторий должен включать:
- Лицензию и список контрибьютеров
- Файл
README.md
с кратким (1-2 страницы) описанием проекта. Никакие папки с бумагами не нужны, все только в электронном виде без бюрократии. - Настроенный линтер (а если кода на JavaScript, еще и prettier). Пример проекта с конфигурацией тут: https://github.com/HowProgrammingWorks/NodejsStarterKit
- Файл
package.json
в котором в разделеscripts
есть командаlint
- Файлы
.eslintrc.json
,.eslintignore
и.prettierrc
- Перед каждым коммитом запускайте из командной строки:
npm run lint
(часть проблем автоматически исправляется, остальные - правим руками). - Дотфайлы для системы контроля версий и менеджера пакетов.
- Библиотека для работы с IPv4 и IPv6 адресами: парсер, сравнение, манипуляции, работа с масками и диапазонами, сериализаци в виде строки и числа, любые другие операции, которые вы придумаете.
- Парсер HTML, CSS, JSON, YAML или любого другого формата файлов.
- Разработать универсальный класс для кэширования: вычислений, операций ввода/вывода, запросов к базе данных или других операций, требующих ускорения при помощи кешировани (на выбор). Содержащий конфигурируемый кеш с такими характеристиками: определенный размер в количестве записей или объеме памяти, время вытеснения из кеша, приоритеты вытеснения.
- Реализовать машинную проверку правильности синтаксиса и стиля кода. Отдельная тема может быть по исправлению простейших синтаксических ошибок. И еще одна тема по автоформатированию кода, приведению его к соглашениям по стилю.
- Усовершенствованный EventEmitter, например, с такими возможностями: одноразовая и N-разовая подписка, автоматическая отписка после таймаута или отправки специального события, ожидание событий на синтаксисе async/await и др.
- Проекция структур данных в памяти. Можно сделать специальный синтаксис (язык проекции), что уже сделано на JavaScript в репозитории https://github.com/HowProgrammingWorks/Projection
- Разработать простую Key-value (ключ-значение) in-memory СУБД (систему управления базами данных, которая хранит все в оперативной памяти). В самом простом случае это хеш-таблица. Пример реализации Redis, Memcached или MongoDB, можно взять их интерфейсы за основу и модифицировать.
- Разработать планировщик задач в виде класса или прототипа, который умеет повторять выполнение метода по расписанию, например: по пятницам в 2 ночи или каждый второй понедельник месяца в 12:30 по UTC. Он создает необходимые для этого таймеры и исполняет задачи.
- Утилиты для интерфейса командной строки.
- Нужно заполнить форму: https://forms.gle/u7v7nUFxamcgJ2aQ6
- И дать мне права на редозиторий, мой аккаунт: https://github.com/tshemsedinov