"Забытый стиль ООП в Smalltalk"

Уже долгое время я пытаюсь разобраться в том, как же правильно “готовить” этот самый ООП, и долгое время смотрел в основном книги, посвященный паттернам проектирования. Но когда говорят о развитии ООП, то часто упоминаются язык, который оказал значительное влияние на объектно-ориентированный подход - Smalltalk и его создатель - Алан Кей. В какой-то момент возникла мысль - возможно стоит взглянуть на, так сказать, исток всего этого подхода (да, формально первым языком, использующим концепцию объектов была Simula, но именно Smalltalk популяризовал ООП), чтобы приблизиться к пониманию того, каким он задумывался изначально.

[Read More]

NoSQL в Clickhouse

Clickhouse колоночная база данных, это значит что данные в ней хранятся не как строки, а именно буквально как колонки (можно увидеть как каждая таблица физически разделяет данные на файлы по колонкам). Эта особенность отличает Clickhouse от классических SQL баз данных вроде PosgreSQL и MySQL.

[Read More]

Хак для изучения новых языков программирования

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

[Read More]

Такой странный Си

Недавно снова вернулся к попыткам разобраться в Си и закрыть этот гештальт. Потому что, откровенно говоря, больше всего удовольствия от языка программирования получаю от языка, который позволяет почувствовать что мы что-то реально делаем с компьютером, двигаем байтики, копируем память, размещаем структуры в памяти. По сравнению с этим продолжения, монады, алгебраические типы данных (хотя последние можно связать с struct и union) кажутся чем-то далёким от реального мира. Даже странно, что и то и другое существует в одном пространстве языков программирования.

[Read More]

Трюки в программировании in small

Говоря о программировании, его часто разделяют на уровни: “programming in the large” и “programming in the small” (есть конечно искушение перевести их как “программирование по-большому” и “по-маленькому”, но пожалуй, не стоит).

[Read More]

More on Hoare Logic

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

[Read More]

Устройство Даффа

Те, кто интересуется системными языками вроде C и C++ обычно рано или поздно натыкаются на так называемый “Метод Даффа” (Duff’s Device). Его идея в общем заключается в ускорении работы циклов при помощи трюка, который, вероятно, сильно удивит пользователей современных языков программирования.

[Read More]

Логика Хоара и Динамическая типизация

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

[Read More]

Квантовое программирование - возможно самая странная парадигма среди ЯП

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

В квантовы вычисления вместо двоичной логики c 0 и 1 используются кубиты. Кубиты похоже на обычные биты в том смысле, что их значения также могут быть равными 0 и 1, но особенность здесь в том, что кубит сам по себе не находится в одном из этих состояний, но пребывает в суперпозиции. Мы не можем знать точное значение кубита без специальной операции измерения, т.к. он находится в определённом вероятностном состоянии между 0 и 1. Эти вероятности обычно обозначаются как A и B, и означают примерно что A^2 это вероятность перехода в состояние 0, соответственно B^2 - в состояние 1. Знать заранее результат невозможно (из-за фундаментального физического закона, а не скажем нехватки технологий), а сам процесс измерения приводит к тому, что кубит из суперпозиции переходит в одно из 2-х состояний, при этом предыдущие значения A и B теряются. Считается, что по причине этого явления кубит (до измерения) как бы находится одновременно во всех состояниях, а значит, например, 4 кубита будут представлять собой одновременно 16 состояний.

[Read More]

Схожеcть принципов в ООП и ФП - Часть 2

Продолжая тему с применением традиционных подходов из ООП практики в функциональном программировании.

Мы уже рассмотрели, как принцип разделения интерфейсов из SOLID вполне успешно может использоваться и в ФП. Для убедительности, рассмотрим еще одну букву из знаменитого набора принципов, и попробуем применить принцип “Инверсии управления”, он же Dependency Inversion в функциональном коде.

[Read More]