Повесть О Парадигмах Программирования

Привет, друг.

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

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

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

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



Повесть о парадигмах программирования

Вначале было машинное слово и только дух витал над компьютером.

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

Кроме самого кода не было ничего, и это было хорошо.

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

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

Кто бы столько ни сделал в далекое время, не было общего видения и понимания.

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

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

Тогда они собрались и создали парадигмы, чтобы навсегда закрепить свою власть.

И они создали кольца, чтобы обуздать свою власть.

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

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

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

Программисты создали процедуры, посмотрели на них и поняли, что это хорошо.

И с тех пор они ими пользуются.



Повесть о парадигмах программирования

Широкое распространение процедур и функций привело к тому, что программы стали достаточно унифицированными.

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

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

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

.

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

И наступила процедурная эра.

Тем временем в мир пришли новые программисты, и они не были такими возвышенными и сильными, как их предшественники, и им было трудно понимать машинные слова.

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

Стало немодным управлять машинным кодом и напрямую доминировать над процессором.

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

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

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

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

Программисты были еще дальше от железа и уже не знали, как работает АЛУ, потому что появилась ОС и уже не нужно было знать железо, о чем, впрочем, никто не горевал, пока все махали, улыбались и радовались.

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

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

И они поняли, что им это сложно, потому что даже мощности процедурного кольца не хватило, чтобы навести порядок в коде.

И тут пришел один техношаман, которого звали Дийкстра, и ему помог Вирт.

Повесть о парадигмах программирования

Дейкстра повысил голос и впоследствии, вооружившись теоремой Бема-Якопини, злоупотреблял оператором goto, утверждая, что колдовство этого оператора порочно и магических слов while, for и if должно быть достаточно для любого хакера.

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

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

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

Код стал красивым, размеченным табуляциями и скобками, обрамленным циклами и блоками.

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

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

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

Мало кто понял, что это за парадигма и в чем ее суть и суть, но для порядка включили ее в книгу и присвоили номер.

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

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

вес, достигнув определенного размера.

Но были инженеры с вооружёнными глазами и они увидели проблему задолго до того, как она стала полностью видимой, и Simula и Smalltalk были созданы их руками, и Алан Кей произнес свою речь.

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

Тогда Алан Кей загрустил и сказал, что C++ — это не настоящее ООП, но было уже поздно, потому что шум был такой, что ни сказкой, ни пером его не описать.



Повесть о парадигмах программирования

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

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

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

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

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

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

Тем временем учёные не унимались и продолжали споры о том, как правильно написать код, чтобы не допустить ошибок, чтобы он выполнялся предсказуемо и не удивлял создателей своим поведением и нравом.

И решили, что чистота и неизменность — это хорошо, а глобальные переменные и побочные эффекты — это зло.

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

Программисты чесали затылки, не понимали, что функциональное программирование — это про объекты, только неизменяемые и без глобализма, но решили, что это сложно и непонятно, а кто понимал FP — это какая-то заумная монада.

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



Повесть о парадигмах программирования

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

неважно, что кто-то думает и утверждает, а если программист пишет не объективно, то он точно не сможет писать функционально.

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

А все, что касается монад и композиций функций, — это метод, а не результат, и палец, а не луна.

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

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

И они создали языки разметки, и xaml, и yaml, и css и много других интересных вещей, и в то же время попутно породили веб и постулировали декларативное программирование.

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

Кодеры, вымытые и чистые, посмотрели на это, пожали плечами и сказали: «Ну, ладно… Вроде тоже неплохо».

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

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

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

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



Повесть о парадигмах программирования

Множество других колец выплавили программисты, написали умные книги и провели конференции.

Тут вам и аспектно-ориентированное, и компонентно-ориентированное, и реактивно-функциональное, и прототипическое, что тоже ООП, но в другом смысле.

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

Воистину, древний мудрец сказал еще во времена до сотворения мира: Получить что-то можно, только отдав что-то.

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

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

И как вы думаете о них, так и все ваши внуки и правнуки будут думать о вас.

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

Это мой завет и мораль.

А тем временем сказка закончилась.

И кто слушал, тот молодец.



Повесть о парадигмах программирования

При создании сказки не пострадала ни одна парадигма.

Пока друг.

Теги: #Популярная наука #ООП #Функциональное программирование #Изучение языков #фп #сказка #парадигмы программирования

Вместе с данным постом часто просматривают: