Языки программирования

Материал из Lurkmore

Перейти к: навигация, поиск
Smile.svgВнимание!
Расположенная в этой статье информация принципиально никем не проверялась и, вероятнее всего, добавлена сюда исключительно для лулзов.
«

Известны 10 преимуществ Паскаля перед Си:) Я приведу только одно, но самое важное. На Си вы можете написать: for(;P("\n").R-;P("\ "))for(e=3DC;e-;P("_ "+(*u++/8)%2))P("| "+ (*u/4)%2); На Паскале Вы НЕ МОЖЕТЕ такого написать.[1]

»
— Анонимус

Классификация языков программирования — быдлокодерский расовый холивар, поражающий одеревеневшую кору головы множества программистов. Не отрицая того, что концентрация быдлокодеров, работающих на отдельных языках, по объективным причинам выше, чем на других, анонимус спешит заметить, что участники настоящей специальной олимпиады вместо того, чтобы расширять свой кругозор и изучить что-то новенькое, тратят тысячи времени на попытки доказать, чей язык программирования лучше.

Содержание

Быдлокодерские языки программирования

«

Хороший язык программирования помогает программистам писать хорошие программы. Ни один из языков программирования не может запретить своим пользователям писать плохие программы

»
— Киз Костер
Delphi создан быдлокодерами для быдлокодеров.

Быдлокодерскими языками программирования считаются языки с условно-низким порогом вхождения, а также те, которые используются в больших, очень индус-тривиальных проектах.

Православный язык программирования. Мицгол одобряет.
ПРОФТ! Это точно последователи учения 1C.
  • Visual Basic — зачастую — единственное что знают (и потому яростно любят) школьники. Удобен для тех, кто из всего «компьютерного» знает английский язык или где лежит словарь. Кроме того, существует Visual Basic .net, который к обычному Бейсику имеет весьма смутное отношение, и является альтернативным синтаксисом C#.
  • PHP — почва для самореализации каждого начинающего веб-девелопера, благодаря чему этот язык здесь и находится. Обладает минимальным порогом входа (и выхода). На нем написана куча этих ваших CMS, включая популярные drupal, joomla, wordpress и нашу уютненькую mediawiki — которая, впрочем, будет скоро выпилена Новым Движком™ на расовом erlang.
  • Python — идеальный язык для обучения программированию школоты, так как даже обезьяна осилит. Да что уж там обезьяна, даже 1Сник или похапэшник не облажается. Тем не менее, на нём иногда пишут и серьёзные вещи. Огромный плюс языка — синтаксис, всячески ограничивающий говнокодера в вымещении своих влажных фантазий в файл со скриптом в необработанном виде. В результате даже ОЧЕНЬ ПЛОХО написанный код таки поддаётся синтаксическому разбору среднестатистическим программистом.
  • w:Ruby — тот же Python, только с принудительным ООП и парой-тройкой дополнительных свистоперделок. В своё время взлетел исключительно благодаря рельсам и, собственно, сейчас без них никому не упал. Породил целый пласт веб-разработчиков, мнящих себя (абсолютно безосновательно) илитой среди программистов и считающих (опять-таки безосновательно), что раз илита, то всё позволено и можно хоть в одну строчку программу запихать (в Python'е, к слову, подобный функционал был благоразумно отключён).
  • Javascript — ужас и кошмар любого вменяемого разработчика, на фоне которого PHP выглядит, мать его, Haskell-ем. Несмотря на отсутствие нормальной структурированности и баги в базовой архитектуре, горячо любим нублом за предельно низкий даже среди ближайших конкурентов порог вхождения, а также работодателями, готовыми взять на фирму долбоёба с двухмесячным стажем, который быстро-решительно наваяет им относительно рабочую, но при этом абсолютно неподдерживаемую систему без всякой перспективы к дальнейшему развитию.
  • Pascal — используется для обучения юных, пока не догадались о ещё более упрощённых языках. Когда-то позиционировался как идеальный структурный язык (хотя по факту оным не является). Сам по себе ничего плохого не представляет, однако, в своё время застыл в развитии и в результате стал не нужен. А поскольку во многих вузах этой и не только стран он до сих пор используется для обучения студентоты, после выпуска сталкивающейся с тотальным отсутствием вакансий, обиженные вопли о том, что Pascal — говно, звучат на удивление часто.
  • Delphi — да-да, так называется не только среда, но и сам язык, причём с версии 7 — официально™ [2].
  • COBOL — незаслуженно забытый ужас, летящий на крыльях ночи. Незаслуженно: так как время от времени кто-то должен писать с глобальными переменными, чтобы не терялся полезный опыт.
  •  — Кобол, переведенный промтом.
  • ABAP4 — внутренний язык сапа. При этом является самым высокооплачиваемым языком программирования.
  • Java — потому что её пихают везде, куда не лень и ждут, что она там не будет тормозить.
  • C# — результат скрещивания Java, С++ и Delphi c элементами функциональщины. Медленно, но верно, превращается в самый упоротый из промышленных языков (хотя до C++ ему ещё далеко).
  • FoxPro — до недавнего времени был довольным распространенным СУБД. То немногое, что на нём сделано до сих пор, сука, живет, адски глючит и не собирается подыхать. Типичный пример — «Смета-Багира». Вы не любите кошек? Да вы просто не умеете их готовить! Исторически сложилось так, что на FoxPro переходили с куцего FoxBase и dBase III и прочие клипперасты. Быдлокодеры не использовали новшества чуть менее чем полностью.
  • SAS — внутренний язык системы SAS.
  • PL/SQL — язык СУБД. Если PHP — почва для самореализации каждого начинающего уеб девелопера, то PL/SQL — почва для вхождения в мир начинающих Database Developer-oв. Язык процедурный, нехитрый и вполне доступен для каждого[3].
  • ActionScript — язык Flash. На нем пишутся, в частности, игры и приложения Вcuntакте, а также видеоплееры на YouTube и других видеохостингах.
  • C++ — surprise! То, что С++ приемлем для быдлокодеров, уже давно известно, в том числе и Линусу Торвальдсу. Очень популярен, всем известен, есть много IDE для программирования мышкой. Нуфф саид.
  • Lua — скриптовый язык, напоминающий C++. Используется в некоторых играх (wow, например) и эмуляторах для реализации ИИ и пр. хрени. Грядет на замену убогим шаблонам MediaWiki, в Википедиях уже доступен.
  • Лара Профт (Простая Русскоязычная Общедоступная Функциональная Технология программирования, тихий ужас). Для желающих поблевать, картинка справа, кликать на свой страх и риск.

И хотя на этих языках пишут и годные программисты (как правило, только после того, как к ним применят физические методы воздействия), но, в связи с огромной популярностью среди быдлокодеров, эти языки программирования заслужили сию сомнительную славу. Кроме того, на просторах интернетов можно встретить очень большое количество наполненных ФГМ быдлокодерских обсуждений, связанных с вышеперечисленными языками, например, семяизвержения анонимуса в истории правок этой страницы.

Олдфаги не помнят, ньюфаги не знают...

Что ни Васик, ни Посраль всерьёз вообще даже не рассматривались, даже в статьях «Школа программирования» журнала «Наука и Жизнь». Васик был создан как недо-Фортран для учебных целей, а Посраль — как недо-Алгол для учебных же целей. И предполагалось, что изучивший Васик на достигнутом бы не остановился, а освоившись с программированием перешёл бы с учебного языка на серьёзный Фортран. Ну, а изучивший Посраль, соответственно — мог бы перейти и на Алгол.

Небыдлокодерские языки программирования

Небыдлокодерскими по определению являются ЯП с высоким порогом вхождения, а также полные комбинаторики, лямбда-исчисления и прочего матана. То есть, с одной стороны, это всякая функциональщина и эзотерика, с другой — приближенные к железу и системе вещи. По определению малопопулярны, а потому изучаются лишь задротами или большими энтузиастами, либо профессионалами для решения каких-то очень узкоспециальных (другими словами, никому не интересных) задач.

Академические языки — на них никто не программирует, но очень модно хвастать знанием их:

  • M4 — специально спроектированный быдлокодероустойчивый язык, созданный с целью защиты от быдлокодеров в 1977 году. Долгое время препятствовал простому вхождению в разработку ПО, пока не появилась Delphi и другие революционные языки разработки в один (иногда бездумный) клик, на которых можно и толково зарабатывать деньги, а можно и быдлокодить.
  • Objective-C — необыкновенно высокий порог вхождения которого обусловлен необходимостью быть геем для написания более-менее полезных программ. Всякие хелло-ворлды, на нём написанные, можно компилировать и под другие платформы, но большинству быдлокодеров это не нужно.
  • Swift — переделанный Objective-C от всё той же Apple, но без наркоманского синтаксиса и с автоматическим смазыванием сфинкстера программиста для более губокого зонда в виде серверов Корпорации Содомии. Скорее всего, будет обречён на провал и будет популярен в основном среди извращенцев, дегенератов и прочих яблочников.
  • Smalltalk — «мама» вышеуказанной НЁХ («папой» является ANSI C), разработанный яйцеголовыми бородачами из Xerox PARC. Первый (да в общем-то и единственный) Ъ-объектный язык в мире, отличается челябинской суровостью подхода (в нём ВСЁ объекты, даже цифра «3», которой можно передавать сообщения прямо в коде) и эпической слоупочностью. Вызывает у быдлокодеров короткое замыкание мозга, а у их компьютеров — работу кипятильником, особой популярности не снискал.
  • Ада — боевой язык, разработанный американской военщиной в Пентагоне с целью установления военной гегемонии Соедёнённых Штатов в мире. Применялся и применяется в основном в ПО управления самолётами, подводными лодками, космическими ракетами и огромными боевыми человекоподобными роботами. Технически является жёстко расширенным и невъебически усложнённым диалектом Паскаля. Вроде бы как должен был быть запредельно безопасным и удобным в разработке сложных систем, но сложилось как-то не очень. Название языка — традиционный источник шуток на тему сотонизма, Ада и Израиля. Например, известны случаи, когда старушки, увидев книгу с надписью «Язык Ада», либо орали на весь город, либо падали в обморок. А сам язык назван в честь самого первого в мире программера, который, кстати, был женщиной [1].
  • Perl — старейший из ныне используемых скриптовых ЯП. 20 лет выносит быдлокодерам мозг своим синтаксисом, 10 лет из которых оналитики его закапывают. Объект лютого баттхёрта со стороны малолетних питоноводов, впадающих в когнитивный диссонанс при мысли о том, что не распиаренный гуглом язык может обладать такими же возможностями, как и их прелесть. Взрослые же питонщики существование перла игнорируют.
  • Tcl — всем быдлокодерам вход строго воспрещен. Язык не отвечает достаточно большому количеству понятных для быдла стандартов. Во-первых, синтаксис — это ёбаный кошмар для всех поклонников мейнстримовых языков, такие конструкции, как set set set просто взрывают мозг неподготовленного хомячка. Далее — не нужно состоять ни в одной из популярных сект, в том числе не нужно быть борщехлебом и евангелистом GNU, язык не требует быть геем, не требует поклонение Дяди Билли как пророку мелкомягкой компании. Во-вторых, там метапрограммирование и требование к пониманию св. Матана. Да, анон, это один из немногих языков, в котором ты сможешь описать звук — стулом, а цвет — запахом. В-третьих, жёсткие требования к построению архитектуры приложений. Малоопытный программист превратит код на tcl в АдЪ и Израиль уже на уровне написания учебного калькулятора. В-четвёртых, очень большое количество синтаксического сахара, регулярок и списков, где любой Я-гей теряется, а сишарпист стреляется нахрен. Есть бесконечное число способов достичь результата и снести выстрелом в ногу нахуй свою голову и всех окружающим в радиусе пары сотен километров. В-пятых, язык придуман в том же ВУЗе, что и ЛСД и BSD.
  • Make — язык написания программ для автоматизации процедур сборки других программ или иных хитрых целей, в сочетании с Autotools выносит мозг позволяет творить чудеса.
  • APL — прославился тем, что требует специальной клавиатуры с мат.символоами, а код выглядит как математическое выражение. Алсо, способен легко оперировать с матрицами на уровне простейших операторов, не требуя каких-либо библиотек для этого.

Функциональщина:

  • ML — несколько функциональных языков разной степени кошерности. Характерны развитой системой вывода типов, благодаря чему языки статически и неявно типизированы одновременно (ИЧСХ, довести до ума эту систему не могут уже с OCamlа, хотя альтернатив всё равно нет). Самый современный из адской семейки — F#, OCaml, скрещенный с типовой системой .net и зависимыми типами, тихий ужас.
  • Lisp — позволяет достраивать синтаксис с помощью макросов и получать новые языки. Считается, что для этого достаточно трёх символов: двух скобок и пробела. На данный момент имеет как коммерческие реализации, так и бесплатные. Наиболее живым из последних можно назвать Racket и Clojure. Оба нелюбимы фонатами CommonLisp.
  • Haskell — тот же матан, только шрифты заменили. И припаяли костыль в виде монад. По сути — лагерь штангистов разделился на две составляющие: 1. смотрят на пользователей монад как на гавно и продолжают дрочить матан и жать штангу, сохраняя волосы чистыми и шелковистыми и создавая чёрную дыру на мамкином диване при поглощении в космических масштабах такие вещи как мамкин борщ. 2. не знают мотана и удливляются, что их хацкель — функциональный язык. Всё решают через монады, не понимают ленивости и лямбд, скорее всего берут хацкель, чтобы рассказывать быдлокодирам из мира PHP, что научились забивать гвозди микроскопом (ну или чтобы в среде яблочников считали, что не гей).
  • Erlang — единственный реально необходимый на продакшене функциональный язык, знающие который чуть более чем все — штангисты, презирающие куцые поделки вроде лишпика, хацкеля и прочего грязного дерьма. Алсо, на нем написано много вполне годных ынтэрпрайзных продуктов.
  • Prolog — некогда позиционировался, как серебряная пуля, которая убьёт все остальные языки, но выяснилось, что пуля на самом деле из говна, а почему блестит — неизвестно. Крайне упорот в своей сути, причем упоротость сия никакими практическими преимуществами не обосновывается. Взлетел, но упал, и притом достаточно больно. Ныне почил в бездне отчаяния и безысходности. Goodnight, sweet prince.

Мёртворожденные франкенштейны:[4]

  • PL/1 - легендарный хтонический пиздец! Которым пугали людей ещё во времена войн между Фортраном и Алголом. Мало кто осиливал выучить язык в полном объёме, что ещё прокатывало когда писали код с нуля, но превращалось в полнейший пиздец когда нужно было разбираться в чужом коде написанном на незнакомой части языка.
  • DYNAMO — разработан случайно в 1950-е под руководством Дж. У. Форрестера в MIT. Сначала трудился на IBM 704, IBM 709 и IBM 7090, позже появились версии для всего, что шевелитися. Специально заточен под динамическое моделирование, вроде траекторий на Луну и Марс и посадок Шаттлов.
  • StrongTalk — наркоманская идея скрестить функциональщину, мету и объекты. Делался как диалект Smalltalk, так и остался академическим.
  • D1/D2 — так и сдохший в агонии выродок Александреску. Ответ на самый монументальный вопрос: «Что было бы если бы ТрупСтрауса курил еще больше ганжи, но обладал зойчатками погромирования». Конвульсируют до сих пор. Переодически его выкапывают, насилуют в целях создания в Новозадрюпинске «крутого продукта для академических целей», где собственно его и задрачивают вусмерть, превращая код в еще большую мусорку, чем С++.
  • Rebol3 — к сожалению, мёртвый язык. Мог бы стать идеальным или даже мейнстримом в плане технологичности языка. Имел наркоманский синтаксис, функциональщину и метапрограммирование и ещё много инноваций. Сейчас развивается рассово-немецкой Saphirion, перспектив нет.
  • Groovy — уродец на JVM, нечто среднее между «ужом» и «каменюками». Отсутствие вменяемых инструментов стало последнем гвоздём и язык передан в Apache, как и полагается: гомункулов — в кунцкамеру.
  • Nemerle — попытка польской студентоты взять этот ёбаный C# и довести его до ума. Имеет нормальную функциональщину, метапрограммирование и макросы, при этом не скатился в ML с монадами, функторами и прочей хуитой. То есть удобен, мощен и относительно прост одновременно. Эталон промышленного языка. При этом оказался нахуй никому не нужен, sad but true.
  • Dylan/OpenDylan — попытка Корпорации Содомитов изобрести лишпек, с синтаксисом без скобок. Провалилось, ибо геи не поняли, зачем нужен инструмент, где (в том числе) есть и вагина.
  • Rust — всё, хватит. Кто в 16 лет не был программистом, у того нет сердца. А кто и в 40 лет продолжает этим заниматься — у того нет мозгов.
  • Go — создан для холиваров Rust vs Go. Несмотря на то, что разрабатывается Главной Корпорацией Поиска в Интернете, язык плохо приспособлен к поиску информации о нем в интернете. Посему имеет альтернативное широкоиспользуемое и куда как лучше подходящее для поиска в интернете погоняло golang.

Эзотерика:

  • BrainFuck — ёбаная мозгодробительная херня, которая применяется биологами для моделирования ДНК и прочей псевдо-научной поебени. Больше непригоден ни для чего. Ну и для обучения курсу по написанию интерпретаторов. Создавался как самый минималистичный Тьюринг-полный язык программирования: имеет аж 9 операторов.
  • Befunge — любопытный двумерный язык, в котором программа представляет поле, наполненное командами. Для особых извращенцев есть 3-х мерные, 4-х мерные и прочие n-мерные версии.
  • Whitespace — язык, состоящий из пробелов и табов целиком и полностью. Программа выглядит… Интересно.
  • Malbolge — предельно невменямый тринарный язык, призванный стать самым сложным в истории. Таки да, окромя вывода строк на нём так ничего и не смогли сделать, да и то — пришлось использовать специальную аналитическую программу на Лиспе. Чтобы оценить всю красоту этого монстра, достаточно посмотреть на «Hello World» на нём: (=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<
  • Unlambda — минималистичный функциональный язык программирования. Название дословно означает «не-Лямбда» — иными словами, попытка сваять функциональный язык программирования без лямбда-оператора.
  • Shakespeare — Ассемблер с кучей лишних слов, которые маскируют программу под пьесу Шекспира. Нет, правда.
  • Iota Эталон минимализма. Тьюринг-полный функциональный язык, синтаксис которого состоит из одного единственного комбинатора.
  • YOBAL — язык имиджборд. «ALLOW YOBA ETO TI? PSHH..PSHH… NE SLYSHNOW NE SLYSHNOW! YOBA YOBA VIZOVI STIRALLNOUY MASHINOW!! (VSE SOSNOOLEY)».

Ворнинг, пиплы!

«

Ворнинг, пиплы! Непрокостанный тикет за отмазку не катит. Следующая вписка в Лужах.

»
28-й троллейбус

Внимание, функциональщина. Будьте осторожны.

Именно с этими языками можно наблюдать следующее: какая-нибудь фирмешка, перешедшая в состояние «клюй ближнего — плюй на нижнего», вдруг выбрасывает вакансию вроде «крупная компания, лидер на рынке заказных разработок, от так от надо Lisp-сокровище в интересный проект». Так появляются ужастики и страшилки на форумах, что встречаются конторы-самоубийцы, которые вместо того, чтобы спокойно подохнуть, стараются захватить с собой кого-нибудь из прохожих. На самом деле, всё просто, и никакого заговора против несчастных программистишков не было и нет.

Экологические ниши

«

Запрет вина — закон,
Считающийся с тем,
Что пьётся, и когда,
И много ли, и с кем.
Когда же учтены все эти оговорки,
Пить — признак мудрости, а не порок совсем.

»
Омар Хайам

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

Если кратко, то низкоуровневное программирование велось на всевозможных Автокодах, алгоритмы описывали на Алголе (откуда происходят процедурные языки и ООП), вычислительные программы делали на Фортране, и были ещё две ниши: декларативные языки, такие, как Лисп, и языки для описания бизнес-процессов, такие, как Кобол.

За прошедшие несколько десятилетий ничего не изменилось. Некоторые языки почти полностью повторяют своих предшественников, и различий между Паскалем и Алголом меньше, чем между разными диалектами Лиспа.

Низкоуровневые языки

Они же автокоды. Очень близки к машинному коду, что позволяет при умелом программировании получить высокую скорость:

Процедурные и объектные языки

Прямые потомки Алгола-58, откуда убрали оператор перехода (вернее, научились обходиться без него, а на уровне машинных команд прыжки вперёд через участки кода по-прежнему есть). Программы на них представляют собой последовательности действий, от «x := 2*2» до «господьБог.создатьВселенную()»:

— тысячи их! какой случайный язык, используемый (или использовавшийся) на практике, ни возьми — с высокой вероятностью он будет принадлежать к этой группе. Что и неудивительно: само название «Алгол» происходит от «Algorithmic Language», то есть язык для описания алгоритмов (но сам он, разделив судьбу птеродактилей, полетел в мир иной).

Язык C — особая мякотка. Несмотря на то, что он, строго говоря, является высокоуровневым языком, на фоне таких быдлоязычков, как Жаба или C# его называют низкоуровневым, так как уровень абстракций неприлично низок. Более того, именно на нем в 95% случаев пишут околосистемные вещи, вроде драйверов и ядер ОС, используя, впрочем, тонны ассемблерных вставок. Поэтому однозначно отнести его к какой-то категории, не вызвав бурления говн, невозможно. Иногда даже говорят, что C — «язык среднего уровня».

Прикладные языки

Это внезапно не Алгол! Языком прикладного программирования считали Фортран, на котором изначально предполагалось описывать вычислительные процессы. У него не было и до сих пор нет даже названия: «фортран» означает «транслятор формул», и так назывался не язык, а его компилятор. Изначально там не было даже правил видимости переменных, а все данные лежали в общей области данных: посчитал — и напечатал результат:

Иногда в прессе и на форумах поминают Фортран как что-то плохое. Возможно, так и было, но обижаться на то, что современные скриптовые языки происходят от него — глупость. Именно это направление развивалось больше всего (оно было прикладным) и именно на скриптах были обкатаны многие нововведения (такие, как словари), позже перенесённые в другие языки.

Лет 30-40 тому назад вопрос «Фортран или Алгол» был вполне насущным вопросом, и задавались им всерьёз. Даже был забытый ныне мем: «настоящие програмисты пишут на Фортране».

Языки для написания проводок

Они же «бизнес-ориентированные языки». Первоначально эту нишу занимал простецкий «Common Business-Oriented Language», который использовался в банках. Супермаркеты, ресторашки, кафэтэрии, склады, турагентства, таксопарки, железные дороги, госструктуры и т. п. — так до сих пор и используют его или один из его многочисленных диалектов:

А теперь о грустном, да. Кобол был выблядком среди других языков, и проклятие тяготело над ним с самого начала: данные хранились вместе с кодом и внутри кода, в блоках «var» в заголовках модулей — и там неизбежно накапливался мусор. Позже этот приём перешёл в языки Алгол и Паскаль, а всё это ваше современное ООП — нежизнеспособный гибрид Алгола с Коболом. И какие молитвы ни возноси разным там компиляторам — не взлетит, и всё тут.

Привет из 50-х, коллеги!

Декларативные языки

Самым первым языком, пришедшим в эту нишу, доселе необитаемую, был Лисп, и всё, что здесь тусуется — прямые его потомки. По-видимому, условия здесь настолько не подходят для жизни, что не дохнут только немногие языки. Программы на них представляют собой не набор команд, а описание процесса: не что делать, а как делать. Эту группу надо разделить на функциональные и логические, а также смешанные:

Функциональные языки

Лисп когда-то был автокодом в скобочной записи, но этим дело не ограничилось:

Логические языки

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

Функционально-логические языки

Глубокая идея функциональных языков на самом деле гораздо глубже, чем кажется на первый взгляд. Джон Маккарти, автор Лиспа, перевернул всё программирование 50-х и 60-х годов с головы на ноги: он поставил на первое место не данные, вокруг которых суетятся мелкие программки (как гномы, прыгающие вокруг Белоснежки в диснеевском мультике), а сами эти программки. Данные же он предлагал протаскивать через цепочки выполнения, а язык для описания этого дела был назван «List Processor», то есть Язык Обработки Списков.

А ещё, люди, которые пишут на Коболе, не пишут на этих языках. Так что сохраняй ледяное спокойствие, Анон, выгребая очередную порцию лживых обещаний с какого-нибудь Х#$хантера.

Идеологии aka Парадигмы

«

Разделяй и властвуй (лат. divide et impera)

»
— формула римского Сената

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

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

Экскурс в историю

Многие элементы языков программирования, кажущиеся естественными, на самом деле были придуманы не сразу и не в готовом виде.

Процедурное программирование

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

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

Структурное программирование

Придумано Дейкстрой, форсилось Виртом, придумка заключалась в дальнейшем разбиении кода подпрограмм на более мелкие фрагменты, а именно — на блоки begin и end, а также в отказе от оператора перехода GoTo. Но, кстати, вложенные begin и end появились в Алголе раньше, чем Дейкстра придумал свою парадигму, то есть Алгол появился раньше, чем идея о том, каким он «должен» быть (спойлер: это потому, что Дейкстра участвовал в разработке Алгола). А ещё, в отличие от Алгола, в ранних реализациях Паскаля, который форсили как новейший структурный язык, дело с возможностью вложить в один begin и end сколько угодно других обстояло довольно туговато, так что он был шагом не вперёд, а назад…

Алсо, оператор GoTo стал на долгие годы предметом специальной олимпиады, в которой противники GoTo ссылались на Дейкстру, а сторонники — на Дональда Кнута. Сей именитый срач (со ссылкой на имена авторитетных теоретиков) постепенно затих с распространением ООП.

Модульное програмирование

Несмотря на все усилия, олдовые программы по-прежнему представляли собой длиннющий непрерывный листинг, печатаемый на длинной ленте. Идея модульности заключалась в том, чтобы этот длиннющий код разбить на более короткие и логически цельные == более лёгкие для чтения и восприятия куски.

Изначально для этого был запилен аж целый язык — Modula, представляющий собой модифицированный Pascal. Затем те же фишки добавили в обычный Pascal, а затем возможность разбивать программы на отдельные модули появилась и в других языках. Так что теперь практически все языки являются модульными.

Объектно-ориентированное програмирование

Появилось после того, как кто-то из хороших парней в стопицотый раз прошёлся по граблям с диким криком «почему йА». Идея заключалась в том, чтобы разделить код, разделить данные — а затем соединить соответствующие кусочки кода и данных. Но чтобы данные, ставшие ненужными — выбрасывались, в отличие от Кобола. Начальные подвижки к ООП появились уже в языке Simula, но первым объектно-ориентированным языком стал Smalltalk: собственно, его авторами и был введён сабжевый термин.

Однако кто-то что-то недопонял, поэтому Simula ВНЕЗАПНО обнаружила себя объектно-ориентированным языком, причем эталонным. Сначала ее недо-ООП слизал C++, а постепенно это веяние перешло и в другие языки. Самое смешное, что классическое ООП из Simula, используемое в Java, C#, C++ же и прочем мейнстриме, нихуя не канонично и имеет весьма мутное отношение к идеям, который вкладывались в ООП его создателями. Но всем как всегда.

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

Все мейнстримовые языки сейчас — объектно-ориентированные. Так что применяется ООП почти везде, где надо и где не надо. Иногда — даже работает. Помимо классической C+±подобной реализации, характерные для C++ и потомков (Java, C#, но сходные вещи есть и в PHP), есть более мягкая реализация без приватных полей (Python, Ruby), чуть другое OOP через prototype (характерен для JavaScript, но средний веб-проггер на него забивает) и более хитрый и новомодный «через подмешивание» (Scala, Rust, Go). Последний грозятся добавить в C++, чтобы олдфаги точно на стенку полезли.

Не могу молчать!

В своё время был эпичный срач, в котором олдфаги утверждали что любой алгоритм можно написать и без ООП, а потому оно не нужно. На что сторонники ООП утверждали, что ООП улучшает структуру программы, а «любой алгоритм» можно написать на любой тьюринг-полном языке, включая Brainfuck и Assembler. На это утверждение шёл ответ, что ООП не улучшает структуру, а превращает программу в mind-fuck с трудноуловимыми ошибками и утечками памяти. Что для нуба и в самом деле правда, и потому сторонники ООП это обвинение не только не отрицали, но и указывали на рукожопость и скудоумие, особенно популярным троллингом было «старую собаку не научишь новым фокусам». Финальную точку в сраче ВНЕЗАПНО поставила Windows с ее объектно-ориентированным WinAPI (ЧСХ, со своей реализацией ООП на C). Это был EPIC WIN ООП.

Конкретно соснувшие хуйца олдфаги возненавидели лично Билла Гейтса (который в общем-то объективно говоря ничем не хуже Стива Джобса), и стали дружно фапать на тогда ещё полностью консольный UNIX с его чисто процедурным POSIX, вызывавший у них слезу умиления и ностальгию по тем временам, когда ещё не было ненавистных им юзеров, сидящих на винде. Ну а вчерашнее школоло, студенты-первокурсники, не понимая, где ООП нужен, а где нет, попыталось сесть на оба этих взаимоисключающих стула сразу: с одной стороны, прониклись модным и крутым ООП, развивающимся под Windows же (sic!), а с другой — стали подражать олдфагам, ненавидящим Гейтса, без понимания причин этой ненависти. Вот так: весь этот ихний Масюкль — обезьянничание с ненавидимых и проклинаемых ими же технологий.

Продолжение банкета

Постепенно роль основных критиков ООП перешла к фанатам Лиспа. Забавно, что волну погнал Джон Бэкус, автор Фортрана: получая премию Тьюринга, он высказался в том смысле, прямо со сцены, что «все эти годы мы писали код неправильно». И вот недавно Micro$oft (уже без Била Гейтса) выпустила гибрид ежа с ужом — язык F#, сочетающий в себе «несовместимое»: ООП и функциональное программирование (на самом деле F# — это oCaml с блекджеком и LINQом под .net). Есть аналог и для JVM — Scala. И совсем уж левый Nemerle. Так что готовимся к продолжению банкета со вкусной едой.

Функциональное программирование

Появилось ещё до языков программирования, когда умный математик Алонзо Чёрч придумал лямбда-исчисление. Впервые было реализовано в Lisp (вторым по счёту ЯП после Фортрана). Заключается в низведении функций до уровня данных, а переменных до уровня констант. Идея здравая, поэтому настоящим программистам нравится, а заказчикам нет. А всё потому, что в функциональной парадигме нужно много думать, а потом написать десяток строчек, в то время как при императивном подходе можно написать 100 строчек вообще не думая — с тем же эффектом. Заказчик видит, что производительность (строчек в час) при использовании императивных языков выше, а значит, они лучше. Такие дела.

Функциональный код выглядит короче и наглядней во всех случаях, кроме тех, когда он выглядит длиннее и запутанней. А поддерживать и дебажить его — тот ещё ад, особенно если ошалевший небыдлокодер начинает необоснованно применять монады или функторы (а оно именно так и бывает в 95% случаев). Проблема в том, что большинство функциональщиков нихуя не владеют мат-базисом (λ-исчислением и теорией категорий), поэтому просто не понимают, зачем оно нужно, и используют по принципу «потому что могу» (порядка ради надо отметить, что императивщики дискретную математику вообще и теорию автоматов в частности знают не лучше, но для них это не критично).

Функциональное программирование окружает масса мифов. Перечитавшие Джоэла Спольски фонаты уверены, что любая программа на функциональном языке (даже если это домашка из первой главы SICP) автоматически масштабируется, летает и гарантирует, что его возьмут работать в Гугл. Конечно, функциональный код действительно неплохо масштабируются, но только если хорошенько попотеть. Даже общеизвестный LISP-овый факториал ни фига не пакетен, не масштабируем и тем более не поддерживает потоков. По сути, функциональная парадигма — это отличный инструмент для решения узкого круга задач, но уж никак не серебряная пуля, как рассказывают нам воннаби-небыдлокодеры. К примеру, попытка смоделировать систему с постоянно изменяющимся состоянием на каком-нибудь тру-функциональном Хаскеле превратится в монадный ад.

Поэтому функциональные языки всегда были в жопе, в серьёзном бизнесе не использовались и оставались уделом гиков, ибо деньги ими заработать нельзя. Так что функциональщикам только и остаётся, что после очередного высера на форуме: «вы все быдло с вашим ООП, смотрите как я получу бесконечную последовательность факториалов одной строчкой… как нахуй не надо?!», идти кодить на ненавистных Джавашарпах. Кушать-то хочется.

Событийно-ориентированное программирование

Парадигма, которая представляет программу как набор реакций на изменяющееся состояние. Ближайший аналог ИРЛ — условные рефлексы. Это позволяет здорово упростить представление: вместо одной обширной и необъятной блок-схемы, не умещающейся на листе ватмана формата A0, получается более удобный список небольших блок-схем, повешенных на события, что изрядно улучшает структуру обычной программы. Событийные языки поддерживают встроенный обработчик событий (к таковым относятся Delphi и C#), но при желании можно легко реализовать события на любом ООП языке с помощью паттерна en.w:Observer, чем и пользуются разработчики на C++ и Java. Раньше событийная парадигма была золотым стандартом фреймвёрков (её используют такие мастодонты, как Delphi, WinForms и ранние версии QT), но с популяризацией паттернов en.w:MVC и en.w:MVVM веяние сошло на нет.

Дело в том, что у событий есть одна маленькая проблема. Обработчики, висящие на событии, могут быть объявлены где угодно и кроме как при отладке нигде не видны. Причем они могут изменить состояние вызвавшего их объекта (традиция передавать sender как первый параметр тянется уже добрых четверть века) или вызывать следующие обработчики (ведь события это ни что иное, как реинкарнация оператора goto на более высоком уровне). В итоге простейший код можно превратить в эталонную лапшу. Что быдло и делает.

Визуальное программирование

«

Вот она перед вами, коробка с карандашами
В неё совершенно свободно помещается что угодно.

»
Геннадий Гладков

Бывает для взрослых и детей.

Для взрослых

Суть в том, что вместо написания кода рисуешь то, что нужно:

полностью визуальные
  • ДРАКОН — просто рисуешь блок-схемы (требуется: космоплан «Буран»). Среди разработок примечательны: алгоритм «Кровохарканье» и алгоритм «Острая диарея».
  • LabVIEW — язык и среда разработки. На сегодняшний день является самым мощным и развитым инструментом визуального программирования. Основан на параллельно выполняющихся потоках данных. Позиционируется как инструмент для студентов, учёных и инженеров, не имеющих профильного образования в области программирования. Используется в основном для работы с железом и создания автоматизированных систем. Позволяет писать программы под Windows, Mac OS, Linux, операционные системы реального времени и FPGA (разумеется, только при наличии фирменного оборудования). Имеет бесчисленное количество библиотек, тулкитов и модулей на все случаи жизни — от обработки радиосигналов до разработки промышленных SCADA-систем. Язык имеет чрезвычайно низкий порог вхождения, однако содержит и продвинутые элементы: событийно-управляемое программирование, ООП, взаимодействие с .NET, Фреймворк акторов. Программирование в LabVIEW существенно отличается от того, к чему привыкли пользователи традиционных языков. Например, в нём считается дурным тоном использовать переменные, операторы if/else и последовательно выполняющийся код.
частично визуальные
  • Delphi — рисуешь кнопочки и лепишь на них события: нажатие мышки, отжатие и так далее, «а всё остальное умный Дельфин сделает сам»;
  • WinForms — то же, что и Delphi, только на C#.
  • QT — ещё один аналог, уже на C++. А вообще, тысячи их.
  • SQL Manager Studio и аналоги — вместо написания SQL рисуешь структуру базы данных со связями (спойлер: работает через жопу, но тем не менее запросы быдлокодера, не знающего SQL, более-менее удовлетворяет — через жопу же! LOL~)

Для детей

А это учебные языки для маленьких детей, точнее, для родителей, желающих вырастить программера:

  • Logo — самый знаменитый из таких языков, учит программировать алгоритмы, доставляет тем, что знаменитая «черепашка» для рисования на экране существует и в варианте программируемого робота => суть обучения сводится к весёлой игре «научи Черепашку рисовать на экране или на полу». Язык учит сразу функциональному программированию и основан на LISPе, а точнее, является одной из немногих более-менее успешных попыток запилить в Лисп M-выражения, благодаря чему в отличие от чистого Лиспа гораздо более читабелен и понятен новичкам.
  • Scratch — имеет занятное отображение алгоритмов: вместо традиционных блок-схем используется более красивое и наглядное отображение, показывающее, где у какой команды begin, а где end, вот так, что является нехилым плюсом для обучения и, без сомнения, WINом.
  • Blockly — конструктор Лего от Google — косплеит Скретч.
  • EToys также известный как Squeak — учит ООП и основан на Smalltalk. Любишь котегов? Так-то.
  • Alice визуальный ООП язык
  • КуМир и ПиктоМир — российские языки для детей, основанные на «Ершоле» (поскольку сочинены в основном ершовским учеником Кушниренко), наш ответ Scratch'у. Сначала осваивается ПиктоМир, а затем при помощи КуМира осуществляется переход от визуального программирования к абстрактному, подобно тому как Scratch является визуальной надстройкой над Смоллтоком. Кстати, Андрей Ершов и Джон МакКарти в жизни были большими друзьями, и последние версии ершола — это собственно такой лисп и есть. А Алан Кей, автор Смоллтока и Скрэтча, у МакКарти учился.

Какой язык учить?

Ибо ваистену,

Какой язык учить? Хочешь программировать на выразительном и мощном языке: Python Нужно по-быстрому веб-сайт: PHP Желаешь в тусовку зовущих себя «рок-звездами» программирования: Ruby Реально нужно научиться программировать: C Ищешь просветления: Scheme Уйти в хандру: SQL Потерять одну хромосому: Microsoft Visual Basic Для получения постоянной, заурядной, но хорошо оплачиваемой работы по созданию финансовых приложений в офисной загородке под лампами дневного света: Java Тоже самое, но с аббревиатурами и списком сертификатов в своей подписи: C# Для получения волшебного, забытого в детстве, ощущения избавления от мании величия: Objective C

С закрытой части быдлохабра

Но, однако,

Какой язык учить? если реально нужно научиться программировать, но лень — си-шелл если вы недоучили C и хотите искупить вину страданием — шелл если у вас испорчено большинство кнопок клавиатуры — брейнфак если вы снисходительно относитесь к низшим по званию — ада если вам платят по строчкам кода — фортран если ваша пенсия по старости недостаточна — кобол если ваши программы записаны на магнитофонные кассеты — фокал если вы не доверяете компилятору перемножить два числа — язык ассемблера наоборот делать всегда если — форт если вы ностальгируете по модему без коррекции ошибок — перл если у вас чудовищная память, вмещающая две тысячи ключевых слов — PL/1 если вы хотите это, и то, и чтобы сразу — эрланг если процедуры вам удобно держать в массивах — алгол-68 если всё это для вас детский лепет — хаскелл

Там же в мудрых комментариях

Алсо, немного занудства

«

вы все быдло и задроты. уважающий себя девелопер должен знать несколько языков и хотя бы иметь представления о многих технологиях. И в зависимости от задачи выбирать на чем писать. И не делать фетиш из языка.

»
Феерическая расстановка точек из смежного обсуждения

Если вы вдруг нашли язык, с которым работаете, в разделах «быдлокодерские/небыдлокодерские языки», не спешите огорчаться или радоваться. Сами по себе вышеуказанные языки ничего не пишут и получающийся код является исключительно плодом вашего собственного моска и ручек. Другой вопрос, что некоторые языки проще для освоения и быстрого создания говна в промышленных масштабах, без значительных умственных и физических затрат, что делает их прекрасной средой для размножения быдлокодеров.

Для чего тогда сделано в этой статье вышеуказанное разделение? Just for lulz and holywars.

Также, закон Холивара применительно к языкам программирования звучит так:

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

Язык сам по себе ничего не решает, главное то, что находится в верхней голове, брат.

Галерея

См. также

Копипаста:Программирование — дамп коллективного бессознательного /pr/, содержит провокационные суждения и радикальные мнения о разных языках и технологиях. Особенно интересен обзор языков от функциональщика.

Примечания

  1. Неискажённый вариант примера:
    for(;P("\n"),R--;P("|"))for(e=C;e--;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);
    Взят из шуточной истории языка Си. Пример в действии
  2. Вообще, ошибка как раз заключается в путанице названия среды программирования с названием языка; например, «Delphi 7» — язык программирования или «Delphi» — среда программирования. В обоих случаях утверждения ошибочны.
  3. Попробуйте на нём написать глючащую прогу. Родился приспособлением к Oracle православного языка Ada, разработанного для нужд программирования задач управления войсками Пентагона.
  4. «Особенность» данных языков — это большая шумиха, кучи дерьма на вентиляторе и оргазмы при одной мысли о них. Но так они и не добрались до реального применения, так как были либо слишком наркоманскими, либо слишком сложны. Ну или просто автор забил, так как язык оказался не нужен никому, даже автору.