Увидел мышление в типах об других
С января обучаюсь web-программированию в школе с открытым расписанием. Там есть хорошая возможность много обсуждать задания между студентами и общаться с менторами. Некоторые заметили, что я задаю интересные вопросы и недавно спросили меня, как я учусь вообще.
Я взглянул на свою учебную деятельность и вывел простой алгоритм/последовательность/практику:
- Попробовать что-то сделать, прийти к какому-то результату
- Написать тест, сверстать сайт, написать функцию, не важно
- Нарисовать схему/сделать модель/описать текстом полученные данные в экземплярах
- Тест 1: пустой GraphQL запрос посылается на адрес сервиса AWS AppSync, поскольку в нем отсутствует подпись пользователя Б, сервис отвечает с сообщением В
- Это хороший результат, но он слишком не_универсален, это данные/информация, а не знания
- Сделать то же самое, но теперь в типах
- Интеграционный тест: пустой GraphQL запрос посылается на GraphQL сервер, поскольку в запросе отсутствует заголовок с авторизацией, сервис отвечает отказом
- Здесь начинаются интересные вопросы
- Что такое интеграционный тест? Что интегрируется с чем?
- Какие в принципе бывают GraphQL запросы? Давайте сделаем тест с очень длинным запросом, вообще без запроса, с неправильно форматированным запросом, …
- А если мы используем не GraphQL, а REST API?
- Какая в принципе бывает авторизация?
- Теперь то же самое, но для каждого объекта указываю, во что он входит
- GraphQL запрос - часть тела HTTP POST сообщения, входящего в стек TCP/IP
- GraphQL сервер - часть облачной инфраструктуры, описанной как Infrastructure-as-Code, поднятой у провайдера облачной платформы
- Авторизация - часть заголовка HTTP POST сообщения
Выполнять это все крайне контринтуитивно: тест написан, все работает (или не работает, как это и ожидается), хочется оставить первое описание, как самое понятное, ведь в нем объекты, которые видны на экране монитора.
Но этот подход позволяет мне учиться работать не с конкретным инструментом, но доходить до сути - выделять операции и объекты в типах, а также дотянуться вниманием до различных понятий, уложить их у себя в голове не отдельно, но связать с другими.
Также в разговорах я заметил, что постоянно говорю в типах предметной области/мета-модели, например, когда речь заходит о различных сервисах AWS, я говорю не их названия, но “база данных”, “функция”, “репозиторий”, “пайплайн”.
Для меня этот подход сейчас кажется тривиальным, но когда мне задали тот самый вопрос я был просто ошарашен фактом своего же мышлениях в типах, а не в экземплярах.