🔥

Тред (Фил Ранжин)


Обещал тред про js, делаю тред про js. На чистом джаваскрипте нельзя делать большие проекты. Только по одной причине - динамическая типизация. Она не подходит для крупных проектов - совершенно не подходит. В этом треде объясню, почему

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

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

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

Поэтом взять и сказать, что автопроверки нам не нужны. мы не можем. Ещё как нужны! Ведь мы постоянно плодим баги. Поэтому нам нужны и типы, и тесты, и код ревью, и конвенции, и практики по надежному программированию Даже со всеми этими вещами мы постоянно ошибаемся

Но с ними - на порядок меньше, чем без них. Особенно, если умеешь ими пользоваться.

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

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

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

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

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

Кроме читаемости, типы ещё помогают мыслить при проектировании. Когда пишешь код на жс, ты ведь все равно используешь типы, у себя в голове. Потому что описываешь процессы реального мира, где наше сознание тоже выделяет у всего типы.

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

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

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

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