ПРИМЕЧАНИЕ. В основном это сборник моих мыслей и наблюдений по этому вопросу. Я программист на C # днем, а Python ночью.
Да, я согласен с некоторыми из сказанных слов, но у меня есть немного времени и мне хочется проработать и поделиться своими мыслями.
F # - функциональный язык. Что означает, что вы действительно больше озабочены глаголами, так сказать. Он по-прежнему статически типизирован и работает на CLR, но вы по-разному структурируете свой код и по-разному решаете проблемы. Обычно люди думают, что функциональные языки более математичны по структуре и их легче доказать формально. Конечно, это обычно считается академическим.
C # и другие статически типизированные ОО-языки действительно больше ориентированы на существительные, чтобы продвинуть мою аналогию. Таким образом, вы структурируете свой код и решаете проблемы, связанные с этим. Конечно, существуют и естественные проблемы с поддержанием состояния и наличием недетерминированных методов для объектов, которые, как правило, чаще встречаются в ОО-языках.
И, конечно, F # имеет некоторые функции и идеи, заимствованные из ОО-языков, в то время как C # имеет идеи и функции, заимствованные из функционала.
Сравнение Python и C # больше связано с разницей между динамической и статической типизацией (хотя python действительно предлагает некоторые функциональные возможности, которых C # до сих пор не имеет). Динамическая типизация, как правило, намного проще обрабатывать операции самоанализа / отражения и изменения во время выполнения, добавляя риск ошибок времени выполнения из-за опечаток или неправильных объектов, используемых в «обычном» коде.
Статические языки обычно имеют некоторые накладные расходы разработчика, которых нет у динамических языков. Похоже, что накладные расходы обычно связаны с необходимостью создания слоев для абстрагирования вещей и создания иерархий наследования и интерфейсов для работы с необходимой / требуемой абстракцией. Так как вы пытаетесь избежать зависимости от типов.
Похоже, что со статическими языками гораздо проще управлять в больших командах. Кроме того, вы легко получаете преимущества рефакторинга со всеми инструментами проверки и проверки.