Языки программирования, какой выбрать?

Я же говорю, что не нужно. Ничего лишнего.

Чем удобней? Конкретно В Вашем случае.

Обычно новый язык я изучаю по книге. В самом начале книге есть что-то типа "пойдите туда-то, скачайте и установите такую-то программу". Удобство изучения языка зависит от удобства/простоты/актуальности этой программы.

Например:

Clojure: Есть Clojure REPL. Код писать в текстовом редакторе, компилировать вручную, запускать из командной строки. Неудобно.

Haskel: Есть WinGHCI. Код приходится писать в текстовом редакторе, но программа сама его скомпилирует и запустит. Гораздо удобнее.

Scheme: Есть DrRacket. Всё автоматизировано. Удобно.

Common Lisp: Есть LispIDE, но нужно знать Emacs. Лично для меня вообще неудобно. Из-за этого я не знаю Common Lisp.

C#/F#: Есть LINQPad. Как и в DrRacket всё автоматизировано. Плюс добавление недостающих директив using одним кликом. Плюс поиск и установка NuGet пакетов в несколько кликов. Плюс супер-функция Dump. Очень удобно.

Второй аспект - наличие стандартных библиотек для стандартных действий.

Третий аспект - актуальность и качество информации в интернете. Кстати, из-за этого плохо начинать с C++ или Java.

Экосистемой Вы называете свалку плохого и/или устаревшего кода в интернете?

Это заблуждение. Функциональные языки более просты в понимании для новичка.

Например, есть задача "вывести на экран сумму квадратов чётных чисел от 1 до 10". Код на Haskel практически один в один повторяет текст задачи:

HaskellВыделить код

| | |
| --- | --- |
| 1 | main = print $ sum $ map (^2) $ filter even [1..10] |

Просто и понятно любому человеку, не знакомому с программированием.

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

Возможно, имеет смысл погуглить статьи на тему "что нового в такой-то версии".

Есть локальные функции (объявление функции внутри другой функции), анонимные функции, замыкания. Функция может возвращать несколько значений. Функции можно собирать и компилировать во время исполнения. На уровне класса можно объявить статическую (обычную "функциональную") функцию. Можно сам класс объявить статическим, тогда по сути он не будут отличаться от пространства имён.

Переменная может иметь тип "функция". Пример переменной, содержащей рекурсивную функцию:

C#Выделить код

1
2
3
4
5
6
7

void Main()
{
    Func<int, int> factorial = null;
    factorial = n => n > 0 ? n  factorial(n - 1) : 1;
    int x = 5;
    Console.WriteLine($"Factorial({x}) = {factorial(x)}.");
}

Создать html файл, написать в нём код и запустить в браузере сложнее, чем написать код в окне и нажать кнопку "Выполнить".

Если же Вы имеете ввиду наличие кнопки "запустить этот код" в туториалах, то это есть и для других языков, включая C#:

https://www.tutorialspoint.com... online.php

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