Andrey Aleksandrov

April 25, 2021

Статическая типизация в мышлении

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

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

С большими проектами так не прокатывает. Абстракцией вокруг столько, что все не влезает в голову и начинается путаница кто что на вход принимает. Функция используется в таком кол-ве мест, что ее изменение может непредсказуемо раздолбать половину проекта. И тут ты либо вводишь статическую типизацию, чтобы компилятор подсказывал где мы все сломали добавлением аргумента или вызовом какой-то функции поверх аргумента, а аннотации типов функции начали помогать тебе начать пользоваться незнакомой абстракцией не погружаясь в тонкости ее реализации. Либо же, ты начинаешь покрывать это все большим кол-вом явных проверок типов в коде, пишешь дополнительные тесты, которые все это проверяют, и добавляешь комментарии к каждой функции, которые объясняют, что сюда можно, а что нельзя передавать.

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

Я думаю, многие слышали про такие темы как Second Brain, экзокортекс и тому подобные. Т.е. идеи использования компьютера как расширителя возможностей своего мозга. Если начать слушать доклады на эту тему, то вы обнаружите что под вторым мозгом почти всегда подразумевают какую-то одну программу, в которой человек ведет свои заметки. Я не согласен с такой концепцией, потому что компьютер еще очень много где помогает моему мозгу думать. По мимо заметочника, в моем понимании, в экзокортекс входит и календарь, и тудушник, и Miro, и Telegram, и Twitter и наверняка много чего еще, что я пока еще не осознал как часть экзокортекса. Поняв, что мое представление о компьютере как втором мозге отличается от "массового", я решил попытаться описать, а как это все сейчас у меня работает. И... Не смог! С описанием отдельных кусочков я справляюсь. Вот так я работаю с календарем, вот так веду заметки, вот так веду задачи, вот так проекты и т.д. Но как только я пытаюсь собрать все эти кусочки в одну целостную картину, т.е. "большой сложный проект", получается какая-то невнятная каша. Перестаю понимать как выражать связи между кусочками, как выражать их взаимодействие между собой и на какие кубики можно опираться, чтобы решить такую задачу. Т.е. как будто бы не хватает каких-то типов объектов.

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