Хотите расти как разработчик и найти крутую работу? Не протирайте штаны — займитесь Open Source проектами. Так легче всего попасть в лучшие команды разработчиков и положить себе в резюме настоящий проект, вместо нелепых «примеров кода». Но найти подходящий проект для участия сложно. Начинаются лень и отговорки, а за ними — отсутствие профессионального роста, критики по-настоящему крутых программистов, уныние и застой.
На Cult of Martians мы собираем интересные задачи для современных веб-программистов. Можно выбрать подходящую по сложности, продолжительности и специализации. Задачи не выдуманы «из воздуха» — каждая решает насущную проблему, и решить ее можно через создание нового Open Source проекта или улучшение существующего. Решайте задачи, прокачивайтесь, присылайте решение на оценку. Лучших могут пригласить к себе на работу компании, программистам которых понравится ваше решен ие.
Для продвинутых, задача на неделю
Нужно создать новую библиотеку, которая состоит из:
Внутри библиотека:
Приведенная на Ruby библиотека используется для создания контрактов в приложении.
Контракт — это набор валидаций (тестов), которые запускаются во время production сессии взаимодействия с внешней системой по API (например, CRM системой или социальными сетями).
Такие валидации решают проблему упрощения отладки и распознавания отклонений в поведении внешних зависимостей.
Польза: создать гибкую и универсальную Go библиотеку, вдохновленную функциональным программированием.
Что такое Refinement Type? Это контейнер c правилами валидации для произвольного значения.
Особенности:
валидация должна прогоняться отложенно (lazy);
только один раз на значение (мемоизация);
безопасный способ проверить является ли значение валидным - метод-предикат isValid
;
при попытке извлечь значение (метод с названием unpack
, например):
Простейшая композиция типов должна быть реализована по принципам Algebraic Data Types.
Если типы можно складывать и перемножать, появляется возможность создать систему типов произвольной сложности (например, для описания бизнес логики), что и нужно для контрактов.