Другие языки программирования и технологии

Что значит сложность языка программирования ?? Массивы, ООП и прочее везде есть! В чем именно заключается сложность ?

Я вот так сложность изучения ЯП представляю:

- Есть стандарт языка с формальным описанием синтаксиса/поведения программы.

- Есть набор того, что принято называть "паттернами". Паттерн - это совет типа "не забивайте гвозди в стену отверткой, пораниться легко. Для решения таких-то задач можно пойти такими, такими и такими путями, а вот такими лучше не идти, потому что может произойти то-то и то-то".

Научиться языку - это значит осознать паттерны для него и привыкнуть к ним.

Чем больше времени на это нужно, тем язык сложнее. Чем более технический склад ума для этого осознания требуется, тем язык сложнее.

Иногда искусственные ограничения сильно упрощают язык.

В качестве примера приведу множественное наследование в C++. Во многих более новых языках его просто запретили. Т. е. произошло примерно вот что: авторы подумали "а зачем оно нам нужно? Есть основной паттерн его употребления, когда при множественном наследовании используются классы, содержащие только чисто виртуальные функции. Вот давайте вместо множественного наследования ограничимся этим одним-единственным паттерном, придумаем классы-интерфейсы, чтобы прикладные программисты меньше ошибок при написании совершали, а для разработчкиов кода жизнь упростится".

Сейчас многие разработчики языков пытаются сделать то же самое для асинхронного кода - вместо коллбэков придумывают всякие asynchronuos code blocks, futures и тп. Чтобы асинхронный код было легко писать прикладному программисту без глубокого понимания предметной области.
Еко
Еко
19 662
Лучший ответ
Условно к сложности можно отнести не собственно яп, а парадигму языка, его основные концепции.
https://ru.wikipedia.org/wiki/Парадигма_программирования
Другое дело, что мейнстрим уже не может быть "сложным", ибо доступны описания и во множестве есть носители знаний, готовых в 101й раз объяснить. В этом случае можно говорить лишь о лени.
Сложность ЯП - понятие относительное; но примерно можно считать, что речь идет о том, сколько нужно держать в голове программисту, а что компилятор подскажет. Например, в C++ нет автоматической сборки мусора и проверки границ массива; а JavaScript не проверяет тип переменных. Это иногда приводит к довольно неожиданным результатам, и дебаггинг может быть очень непростым.
Так что Pascal для новичка - самое оно :)

Кстати, разбери хоть один функциональный язык - Lisp или там Haskell. Они сильно не такие.
Олег Колесник
Олег Колесник
60 325
Сложность языка определяется его грамматикой. И никак не зависит от API платформы, для которой есть реализации этого языка, от индивидуальных способностей человека усвоить его конструкции (сложность изучения) и аппаратно-программных интерфейсов платформы, в которой применяется язык (сложность применения) .

Всего существует 4 типа языков. Самые сложные - это языки с фазовой структурой и контекстно-зависимые языки. Для первого типа даже теоретически не могут быть созданы компиляторы. Языков программирования этих типов не существует. К ним относятся только естественные языки общения. Очень хочется отнести к контекстно-зависимым язык C++ из-за звёздочки, значение которой зависит от её положения относительно других лексических единиц, но это не так. :))
Следующий тип - контекстно-свободные языки. Компиляторы для них пишут в огромных количествах, так как к этому типу относятся практически все языки высокого уровня: C, Pascal, OCaml, Lisp, Prolog, Fortran и много-много других.
Самый простой тип языков - это языки с автоматной грамматикой. К ним относятся все ассемблеры, так всеми горячо любимые машины Тьюринга и Поста, обожаемые всеми Brainfuck, Malbolge и почти все остальные эзотерические языки программирования, а также Forth и ещё несколько языков высокого уровня, некоторые скриптовые языки. Компиляторы и интерпретаторы для автоматных языков могут быть написаны буквально "на коленке".

Примерно сложность языка можно оценить по количеству предложений в описании того или иного языка в форме Бэкуса-Наура (БНФ) .
Так, например, Brainfuck и Malbolge можно описать всего одним предложением БНФ.
Среди контекстно-свободных по этому критерию из более или менее распространённых языков самый простой это Oberon-2 (33 предложения) . Следующий - Компонентный Паскаль (34 предложения) . Среди самых сложных - Ada и C++. Остальные языки высокого уровня находятся между ними.

Примерно так определяется сложность языков программирования самих по себе. А то, о чём пишут остальные отвечающие, является сложностью применения и сложностью изучения.
Что имелось в виду под "сложностью языка программирования", вы не уточнили.
Ещё раз повторюсь, что сложность применения зависит от программно-аппаратных интерфейсов платформы, на которой применяется тот или иной язык и от самого языка не зависит. Кроме того, сложность применения одного и того же языка на разных платформах различная. Даже ассемблер может быть простым в применении, если используется на примитивной платформе (пара портов ввода-вывода и система команд процессора из 16 инструкций) . Самым сложным в применении является Malbolge, так как он был разработан применительно к одной единственной платформе - его виртуальной машине, умышленно усложнённой до безобразия.

А сложность изучения зависит от объёма грамматики языка (кол-во терминальных символов и правил их взаимного расположения) и от индивидуальных способностей человека (предварительного развития
его математического, логического аппарата и памяти, наверное).
Под сложностью, обычно, понимают то, на сколько вольно компилятор позволяет обходиться с текстом программы. В "сложных" языках, компилятор с лёгкостью пропустит, например, синтаксически правильные, конструкции но с неизвестным результатом их выполнения. А значит, программисту требуется постоянно помнить все-все ситуации, которые нельзя допускать, при программировании на таком ЯП. Собственно, сам процесс превращается из написания программы в отлов ошибок.

ЗЫ. Попробуй изучить Prolog. Сильно удивишься.
Alexey Pavlov
Alexey Pavlov
37 578
Сложность заключается в библиотеках и API. Это и есть самое сложное в программировании.
Синтаксис и алгоритмика, действительно, одни и те же для всех ЯП.
А вот с библиотеками и API на разных ЯП приходится работать с разными, потому что не все ЯП вообще реализованы под все библиотеки и API.
И вот они - библиотеки и API - почти всегда в корне отличаются друг от друга.
Сравните хотя бы Winforms, JavaFX и Qt. Да что там - даже Winforms и GTK# (т. е. тот же самый C#, но кроссплатформенный) . Небо и земля.
Вот вам сложность: Hello world на brainfuckе

++++++++++[>+++++++>++++++++++>
+++>+<<<<-]>++.>+.++++++++++
>++.<<+++++++++++++++>.+++——.
——--.>+.>.

или же тот же Malbolge

(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<

Второе - смогла написать лишь программа. (Т. Е. первый программист который смог написать Привет мир на Malbolge - компьютер)

А если серьёзно, первый раз слышу чтоб кто-то говорил о сложности.

Языки не делят по сложностям.

Их делят по уровням. Их делят "Компиляциям" (Компилируемый, Интерпретируемый, Машинный код, "Ассемблероподобный")

Есть низкоуровневые, высокоуровневые и сверхвысокоуровневые.

низкоуровневые - языки типа assembler, близкие к машинному коду.

высокоуровневые - языки типа C#,C++,Java...(с ООП, масивы)

сверхвысокоуровневые - таких пока что не существует. Это языки на которых описывается именно "Что нужно сделать" (Без описания "Как это сделать? ")

Вот так их еще можно делить.

Ну если и по сложности (а такой классификации нету) , то только как написал человек выше
Сергей Корченко Есть сверхвысокоуровневые. Например, Icon.
https://ru.wikipedia.org/wiki/Icon_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)

Но судя по всему тот же Icon плохо (или почти не) заточен под API ОС типа WinAPI, поэтому и не получил никакого распространения. Заточить под разные API такой язык очень тяжело, поэтому и не затачивают. .

То есть написать на нем "выведи все строки из массива a" - можно и прямо в одну строчку кода, в чем и заключается сверхвысокоуровневость.

Но даже "выведи все дескрипторы hWnd окон" на нем уж не напишешь, хотя разница очень мала.
Чувак, иди на форум по проораммированию, там тебе все обьяснят.
Mike M. Jerry Опять-же коммент для мастер Yama ну.. .во-первых ООП далеко не во всех языках, во вторых бывают проблемы. Мне н-р к синтаксису LISPа было очень тяжело привыкнуть.
Да и потом brainfuck есть https://ru.wikipedia.org/wiki/Brainfuck
Да и на ассемблере н-р если пишешь ошибки тяжело отлавливать бывает...
только ассемблер только хардкор
Дмитрий Прядко ассемблер для лохов
хексовые коды рулят))