Целесообразна ли статическая типизация в веб-программировании?
Добрый день! Я не жду конкретного ответа, и ряд ссылок на то, что следует почитать, меня вполне устроит, если вопрос абсолютно не корректен.
Недавно я задумался над тем, на чем вообще в основном пишется backend для веб сервисов. В основном это Python, Ruby, PHP, JS. Все это языки с нестрогой типизацией, и получив опыт в разработке достаточно большого проекта (~8000 строк) и большой команде, 7 человек, включая меня. Я заметил, что достаточно часто выпадают ошибки, связанные с тем, что пришла переменная не того типа, как ожидалось, и все потому что программист не проверил ту часть проекта, в которой возникла ошибка, или проверил, но с другими входящим данными. Я знаю, что подобные вещи можно решить модульным тестированием. Однако нередко случается так, что на него нет времени. И я знаю, что тип данных в вышеупомянутых ЯП можно проверить и поставить assert. Но статическая типизиация, мне кажется, что все-таки лучше решает подобные проблемы.
Я задумался, об использовании языка программирования (ЯП) со статической типизацией и увидел, что для backend довольно популярен Java, однако, насколько я понял, что по потреблению памяти она Python обгоняет. Мне не ясна ситуация с C#. Я видел есть проект Nancy, который, благодря Mono можно запустить на Linux. Еще я знаю, что у D, Rust, Go есть веб-фреймворки. Точнее у D есть фреймворк для создания приложений для обработки асинхронных запросов, но эти проекты пока что рискованно использовать в production.
После всего этого я подумал, что статическая типизация при веб-разработке нецелесообразна, или же все несколько сложнее? Я имею ввиду, что может после определенного этапа часть функционала уходит в библиотеки, написанные как раз на ЯП со статической типизацией.
На самом деле статическая типизация нужна всегда и везде. Другой вопрос, что программист не должен объявлять типы самостоятельно, этим должен заниматься компилятор (выводить типы из самой программы).