Простота против лёгкости

Языки программирования можно оценивать по двум критериям: простота и лёгкость.

Например, Ассемблер чрезвычайно простой язык программирования. Простые инструкции, которые выполняют совершенно очевидные вещи. Например, инструкция MOV EAX, ECX помещает значение переменной (регистра) ECX в EAX. Количество переменных (регистров) ограничено. Но давайте взглянем на полную таблицу инструкций для процессора Pentium. Там этих кодов инструкций под тысячу. И все они делают что-то простое. Но писать код держа в уме тысячу кодов дело не простое.

Простота и лёгкость это как две чаши весов. Если выигрываем в простоте, то проигрываем в лёгкости и наоборот, если выигрываем в легкости, то проигрываем в простоте.


А если взять например язык программирования Java. То что мы пишем на языке высокого уровня легко для понимания.

        (new Thread(frontend)).start();
        (new Thread(accountService)).start();

Тут всё ясно создаем два потока и сразу же запускаем их. Но вот, что там происходит внутри этого Thread это уже может быть загадкой. Это легко, но это не просто.

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

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

Вот чем мне нравится Haskell так это тем, что там всё сводится к вычислению выражения. Поэтому чтобы выполнить Haskell-код вам даже не нужен компилятор. Вы можете как в математике упростить выражение и получить результат. Это просто. А вот код на С++ компилируется непонятно во что. Я как-то даже слышал на одной из Яндекс-конференций, что процессор может выполнить две С++ части кода не обязательно последовательно так как они у вас расположены в коде.