Определение сложности языка программирования
Сложность языков программирования можно рассматривать с нескольких точек зрения:
- низкоуровневые языки программирования; традиционно считаются сложными в связи с тем, что написанные на них программы не предназначены для непосредственного восприятия человеком; программы на таких языках представляют собой либо просто ряды и колонки чисел в шестнадцатеричном формате (машинный код), либо листинги, где среди чисел изредка встречаются буквенные сочетания, напоминающие слова английского языка (add, mov и др.); для преобразования машинного кода в приемлемый для восприятия вид существуют специальные программы - дизассемблеры и декомпиляторы;
- сложность освоения; есть языки с низким порогом вхождения, которые сравнительно быстро освоить может даже пользователь, никогда раньше не сталкивавшийся с программированием; в качестве примеров можно назвать Basic, Pascal, JavaScript, основы Python; другие языки, такие, как C++, Haskell требуют дополнительной теоретической подготовки;
- сложность использования; некоторые языки не требуют установки на компьютер никакого программного обеспечения; например, программы на JavaScript можно писать и запускать в любом современном браузере; другие языки требуют наличия довольно сложных установок и настроек; например, для программирования на Java нужны особая виртуальная машина и SDK (набор инструментов), в состав которого входят компилятор, упаковщик, стандартные библиотеки и т.п.;
- сложность предметной области; многие языки, не будучи слишком сложными сами по себе, требуют знаний, не связанных с программированием; например, программирование в среде 1С предполагает, что разработчик бегло ориентируется в бухгалтерском учете и экономике предприятия;
- сложность ради шутки; некоторые языки программирования намеренно сделаны сложными, чтобы дать программистам возможность потренироваться в решении необычных задач или просто позабавиться (см. ниже).
Сложность восприятия кода
Спагетти-код
Причиной сложности программы для восприятия может стать неумелое обращение с языком программирования или применение его для задач, для которых он не предназначен. Например, в ранних версиях Бейсика не использовались подпрограммы и функции, зато интенсивно применялись операторы GOTO, что приводило к появлению т.н. "спагетти-кода", т.е. программ, в которых трудно было разобраться даже самому автору. Такие случаи на ранних этапах развития программирования были характерны не только для Бейсика:
Рисунок 1. Пример спагетти-кода. Автор24 — интернет-биржа студенческих работ
Регулярные выражения предназначены для анализа текста и являются очень эффективным инструментом, применяемым практически во всех современных языках программирования, но их синтаксис выглядит, на первый взгляд, очень "неряшливо", сильно затрудняя восприятие кода. Особенно это характерно для языка Perl, часто используемого для разбора текстовых последовательностей:
Рисунок 2. Регулярные выражения в Perl. Автор24 — интернет-биржа студенческих работ
Обфускация
Намеренное запутывание компьютерного кода (обфускация) имеет две цели. Во-первых, сделать код непонятным для понимания, например, конкурентами или злоумышленниками; во-вторых, замена длинных переменных одно- двухбуквенными делает программу компактнее, что особенно актуально для загружаемых по сети модулей [removed]
Рисунок 3. Обфусцированная веб-страница. Автор24 — интернет-биржа студенческих работ
Экзотические языки программирования
Среди необычных языков трудно выделить наиболее сложный. Определение этого параметра носит субъективный характер. Тем не менее, можно назвать несколько языков, способных привести в затруднение даже опытных разработчиков. В большинстве своем они не предназначены для решения практических задач, а созданы в юмористических целях. Оценить их сложность можно рассмотрев соответствующие фрагменты кода.
INTERCAL (Сompiler Language with no Pronounceable Acronym)
Рисунок 4. Пример кода на INTERCAL Автор24 — интернет-биржа студенческих работ
BrainFuck
Рисунок 5. Пример кода на BrainFuck. Автор24 — интернет-биржа студенческих работ
Malbolge
Рисунок 6. Пример кода на Malbolge. Автор24 — интернет-биржа студенческих работ
Ook
Рисунок 7. Пример кода на Ook. Автор24 — интернет-биржа студенческих работ
Moo
Рисунок 8. Пример кода на Moo. Автор24 — интернет-биржа студенческих работ