Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Мыши продемонстрировали неожиданные способности к абстракции и делению объектов на категории

Научно-популярноеМозг


Учёные из Института нейробиологии им. Макса Планка, изучая на примере мышей то, как в мозге идут процессы категоризации объектов, продемонстрировали, что даже мыши способны разбивать объекты на категории и оперировать абстрактными концепциями. В исследовании были найдены нейроны, отвечающие за кодирование категорий. Работа опубликована в журнале Nature.

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

Как поясняет Сандра Рейнерт, один из авторов работы каждый раз, когда ребёнок видит, к примеру, стул, этот опыт сохраняется в его мозге. На основе сходства между разными стульями мозг ребёнка вычленяет абстрактные свойства и функции стульев, формируя у себя категорию «стул». Это позволяет в дальнейшем очень быстро связывать новые встреченные стулья с существующей категорией.
Читать дальше →
Всего голосов 13: ↑13 и ↓0 +13
Просмотры2K
Комментарии 7

Прошу помощи ссылками по ООП в PHP

PHP
Господа PHP-разработчики и «претендующие», прошу — поделитесь ссылками на ресурсы, где можно подчерпнуть знания, помогающие добиться хорошего понимания ООП в PHP. А именно, на те сайты где много рассказывается о паттернах (маперы, фасады, фабрики и т.д.) и уровнях абстракции (не скажу точнее, т.к. сам сомневаюсь в собственной интерпретации термина).
Так же, возможно, на скрипты (движки) чего-либо, разработанные с применением описанных подходов.
Всего голосов 41: ↑23 и ↓18 +5
Просмотры7.1K
Комментарии 98

Многоуровневая абстракция

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

Данная статья содержит лишь теорию. Практической будет следующая статья (постараюсь чередовать).
Читать дальше →
Всего голосов 17: ↑14 и ↓3 +11
Просмотры11.8K
Комментарии 20

www.contextfreeart.org — программирование на службе искусства

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

Сегодня наткнулся на интересный проект: contextfree

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

Начнем с простого примера:
startshape JustASquare //Начальный символ грамматики

background { b -1 } //Здесь мы задаем фон. b -1 - означает преобразование
//По умолчанию фон белый (brightness = 1), мы изменяем brightness до 0.

rule JustASquare { // Здесь мы задаем простое правило.
SQUARE { b 1 r 45 } // Белый квадрат, повернутый на 45 градусов.
}



Дальше сложнее...
Всего голосов 73: ↑72 и ↓1 +71
Просмотры1.4K
Комментарии 44

Абстракция БД

PHP
Когда я только начинал писать на PHP, ООП я владел, пожалуй, на уровне синтаксиса, не более. В то время мне вполне хватало функций mysql_*. Со временем, опыта становилось больше, я начинал задумываться об оптимизации. Этот топик описывает эволюцию моего кода.
Читать дальше →
Всего голосов 2: ↑2 и ↓0 +2
Просмотры4.2K
Комментарии 48

Что такое полиморфизм на самом деле. В PHP он тоже существует.

PHP
Написать этот пост побудила недавняя статья о полиморфизме. Она вызвала много споров, но знающие люди понимают, что автор написал скорее о наследовании и о переопределении методов, чем о полиморфизме. Не буду говорить ни хорошее ни плохое о той статье, а просто расскажу, что такое полиморфизм на самом деле. Дабы начинающие php-программисты не остались в заблуждении.
Читать дальше →
Всего голосов 136: ↑117.5 и ↓18.5 +99
Просмотры72.6K
Комментарии 82

10 приемов, разрушающих хрупкую красоту кода

Разработка веб-сайтов
Статья приводится в сокращении из-за ограничения на объем материала.

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

Последние несколько лет я собирал приемы программирования, разрушающие в программном коде его утонченную красоту:
  1. Объявление всех переменных в начале программы;
  2. Возврат результата функции через ее параметр;
  3. Отсутствие локальных функций;
  4. Отсутствие else if;
  5. Использование параллельных массивов;
  6. Хранение размера массива в отдельной переменной;
  7. Доступ к свойствам объекта через obj.getProperty() и obj.setProperty(value);
  8. Использование рекурсии для вычисления факториалов и Чисел Фибоначчи;
  9. Отсутствие именованных параметров функции;
  10. Невозможность объявления объектов «на лету».
Наверняка, в некоторых местах вы будете со мной несогласны — ведь чувство красоты у всех разное.


Объявление всех переменных в начале программы


В двух словах:

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


Читать дальше →
Всего голосов 402: ↑324 и ↓78 +246
Просмотры93.2K
Комментарии 411

Высокоуровневая абстракция в программировании. Наш друг и враг

Чулан
Большая часть прогресса, который мы наблюдаем за окном, это результат человеческой лени. Лень было красить забор кисточкой, изобрели валик. Лень было красить валиком, изобрели пульверизатор. Ну Вы поняли. Какое это все имеет отношение к программированию? Самое непосредственное!

Друг


Первые программисты манипулировали такими понятиями как «0» и «1» и это было долго и непонятно. Человеческая лень предложила при помощи ноликов и единичек написать программу преобразующую MOV, ADD, JMP в новые нолики и единички, понятные процессору.
Читать дальше →
Всего голосов 39: ↑24 и ↓15 +9
Просмотры570
Комментарии 21

Применение метамодели при проектировании баз данных с несколькими абстрактными слоями

SQL
Классический подход предусматривает разработку структур баз данных, где все сущности информационной модели находятся на одном абстрактном уровне, являются однородными. Однако, сложные и слабо-структурированные предметные области приводят реляционную декомпозицию к комбинаторному взрыву, непропорциональному росту количества таблиц и связей. А динамические предметные области, в которых ежедневные изменения являются нормой жизненного цикла, требуют постоянного реинженеринга структуры реляционной базы данных.
Читать дальше →
Всего голосов 37: ↑34 и ↓3 +31
Просмотры10.8K
Комментарии 58

Применение метамодели при проектировании баз данных с несколькими абстрактными слоями (часть 2)

SQL
В последнее время реляционные СУБД немного потеснены системами с альтернативными моделями данных. Отчасти это вызвано задачами повышения производительности за счет упрощения структур хранения. С другой стороны, идут поиски путей расширения выразительных средств, в том числе за счет перехода к более богатым информационным моделям. Ведь многие поняли, что повышения уровня абстракции предметной области на один порядок дает расширение сферы применения продукта в десятки раз и возможность занять многие смежные ниши, порой увеличивая количество клиентов в сотни и тысячи раз.

Первая часть: http://habrahabr.ru/blogs/sql/119317/
Читать дальше →
Всего голосов 4: ↑4 и ↓0 +4
Просмотры5.8K
Комментарии 4

Про абстракции и метод рефакторинга «Extract method»

C++
Из песочницы
Абстракции чрезвычайно важны в программировании и это все знают. Они помогают нам отделить существенные детали чего бы то ни было от несущественных. В идеале они должны выделять только самое главное, эссенцию, без всяких посторонних примесей, минимум характеристик объекта или процесса, но идеал встречается не так уж и часто.
Читать дальше →
Всего голосов 77: ↑72 и ↓5 +67
Просмотры3.3K
Комментарии 35

В Chrome (dev) реализованы будущие функции JavaScript

JavaScript
Комитет ECMA сейчас работает над разработкой следующей версии JavaScript, известной под кодовым названием Harmony. Он должен быть закончен к концу следующего года и станет самым большим обновлением за всю историю языка. Разработчики Chrome и V8 решили уже сейчас реализовать некоторые будущие функции JavaScript в браузере Chrome (версия для разработчиков).

Чтобы активировать новые функции, нужно в последнем релизе с dev-канала набрать chrome://flags и включить флаг Experimental JavaScript features.
Читать дальше →
Всего голосов 40: ↑34 и ↓6 +28
Просмотры2.3K
Комментарии 93

Абстрагирование потока управления

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

Что значит абстрагирование потока управления или «control flow», как выражаются наши заморские друзья? В случае, когда никто не выпендривается, потоком занимаются управляющие конструкции. Иногда этих управляющих конструкций недостаточно и мы дописываем свои, абстрагирующие нужное нам поведение программы. Это просто в языках вроде lisp, ruby или perl, но и в других языках это возможно, например, с помощью функций высшего порядка.
Читать дальше →
Всего голосов 44: ↑40 и ↓4 +36
Просмотры14K
Комментарии 10

Переход с Java на Scala (Clojure, Haskell, Erlang ..) как повышение абстракции программирования

JavaScalaФункциональное программирование
А что такого можно написать на Scala, чего нельзя на Java?
(из разговора с одним моим знакомым другом, человеком и программистом)
The best reason to learn a new programming language is to learn to think differently.
Chad Fowler

Хочу рассказать не о простоте конструкций Scala по сравнению с Java и не о том, что в 1 строчку Scala я могу уместить 20 строк Java. А наоборот, копнуть поглубже, уронить устои ООП и посмотреть на реакцию благородной публики.
Читать дальше →
Всего голосов 52: ↑29 и ↓23 +6
Просмотры31.8K
Комментарии 83

Умение видеть абстракции

Блог компании Инфопульс УкраинаПрограммированиеC++


Моему сыну, как и многим мальчишкам, нравятся автомобили. Причём чем они больше и необычнее — тем больше нравятся. Когда мы идём по улице, а мимо проезжает эвакуатор или снегоуборочная машина, он неизменно дёргает меня за руку, указывает на заинтересовавший его объект и говорит: «Папа, б-р-р!». Говорит он так потому, что ему один год и вышеуказанные два слова составляют 40% его словарного запаса. Тем ни менее, в общем мысль понятна — обратить внимание на автомобиль. Давайте подумаем, каким образом ребёнок в возрасте 8-10 лет сказал бы своему сверстнику то же самое. Что-то вроде «Ух ты, смотри какая крутая тачка!», да? Мысль та же, но обратите внимание — уже шесть слов вместо двух. И, наконец, представьте, каким образом то же самое скажет человек лет в тридцать: «Эй, смотри, да это же Ferrari California 2008-го года выпуска с двигателем V8 мощностью в 454 лошадиных силы и 7-ми скоростной коробкой-автоматом! Она до сотни разгоняется за 3.9 секунды!». Да, здесь уже больше деталей, но, если вы не автомеханик или фанат Ferrari — они вам скорее всего не нужны и не важны. Основная же мысль — всё та же, что и в «Ух ты, смотри какая крутая тачка!» или «Папа, б-р-р!». Но выражена она уже в 30 слов.

Вы заметили, как абстракция «интересный автомобиль» обросла деталями и нюансами, стала занимать существенно больше места в тексте и времени на понимание, анализ и ответ? То же самое происходит и с программным кодом.
Читать дальше →
Всего голосов 188: ↑170 и ↓18 +152
Просмотры81.9K
Комментарии 95

О переменных в CSS и абстракциях в веб-программировании

Разработка веб-сайтовCSS
Из песочницы
Предлагаю вашему вниманию перевод статьи из блога популяризатора веб-технологий Криса Койера About Variables in CSS and Abstractions in Web Languages. В статье автор поднимает вопрос о том, действительно ли CSS нуждается в дополнениях, которые делают его сложнее для восприятия, а порог вхождения — выше, когда у разработчиков уже сегодня есть возможность подняться одним уровнем абстракции вверх.

Переменные приходят в CSS. Уже сегодня есть конкретные реализации, так что их теперь не остановить. В Firefox они появились в версии 29, а в Chrome их можно использовать без префиксов в версиях 29 и старше, если у вас в настройках включён флаг Enable experimental Web Platform features (в русской локали «Включить экспериментальные функции веб-платформы» — прим. перев.).

Скажу сразу, можно сколько угодно спорить о том, хорошо это или плохо, но изменить уже ничего нельзя. Однако, так как мне всё же хочется обсудить эту тему, я продолжу.
Читать дальше →
Всего голосов 29: ↑24 и ↓5 +19
Просмотры20.5K
Комментарии 27

Причуды абстракций

Блог компании LLC Tik-Tok CoachПрограммированиеООП
Tutorial
image

За годы преподавания и коммерческой разработки я повстречал много студентов и разработчиков, которые не до конца понимают смысл слова абстракция. Из многочисленных попыток разъяснить смысл этого термина получилась настоящая статья. Что Вы найдете под катом:
  • Определение понятия абстракции и объяснение откуда оно взялось в ООП.
  • Объяснение на простых примерах, что такое барьер абстракции, побочный эффект абстракции.
  • Как получается хардкод.

Читать дальше →
Всего голосов 35: ↑27 и ↓8 +19
Просмотры24.3K
Комментарии 25

Метапрограммирование с примерами на JavaScript

JavaScriptПрограммированиеАнализ и проектирование систем
Эта статья, еще одна попытка переосмысления метапрограммирования, которые я периодически предпринимаю. Идея каждый раз уточняется, но в этот раз удалось подобрать достаточно простых и понятных примеров, которые одновременно очень компактны и иллюстративны, имеют реальное полезное применение и не тянут за собой библиотек и зависимостей. В момент публикации я буду докладывать эту тему на ОдессаJS, поэтому, статью можно использовать, как место для вопросов и комментариев к докладу. Формат статьи дает возможность более полно изложить материал, чем в докладе, слушатели которого, не освобождаются от прочтения.

UPD: Обновленная видеоверсия статьи на Youtube (лекция записана в Киевском политехническом институте 18 апреля 2019 года в рамках курса «100 видео-лекций по программированию»):

Читать дальше →
Всего голосов 52: ↑39 и ↓13 +26
Просмотры38K
Комментарии 23

Как я использую трейты

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

Воздействие vs Абстракция


Первое, что вы должны сделать — пойти почитать пост “Abstraction or Leverage” от Майкла Найгарда. Это отличная статья.

Если же у вас мало времени, основная суть поста состоит в том, что части кода (функции, классы, методы и т.д.) могут предназначаться либо для абстракции, либо для воздействия. Разница в:

  • Абстракция содержит высокоуровневый концептуальный код, позволяющий лаконичнее работать с ним другому коду.
  • Воздействие содержит код, изменения в котором влияют лишь на определенную часть.
Читать дальше →
Всего голосов 20: ↑19 и ↓1 +18
Просмотры34.4K
Комментарии 31

Длина функции

ПрограммированиеАнализ и проектирование системПроектирование и рефакторингФункциональное программирование
Перевод


На протяжении своей карьеры я слышал множество аргументов о длине функции. Более глубокий вопрос — когда код нужно выносить в отдельную функцию? Иногда рекомендации основаны на размере, например, функция должна помещаться на экране. Другие основаны на повторном использовании — любой код, используемый больше одного раза, должен быть вынесен в отдельную функцию. Но если код используется лишь один раз, то можно его оставить на месте. Мне кажется, что большим смыслом обладает аргумент о разделении намерения и реализации. Если нужно потратить время на поиски фрагмента кода чтобы понять, что он делает, то нужно вынести его в функцию и дать ей такое имя, которое отвечает на вопрос "что". Тогда в следующий раз смысл функции сразу будет очевидным, и в большинстве случаев вас не будет волновать то, как функция выполняет свою работу. Иными словами — что происходит в теле функции.


Когда я стал применять такой принцип, я развил в себе привычку писать очень маленькие функции — обычно не больше нескольких строк. Любая функция длиннее шести строк уже попахивает. Вполне обычное дело для меня — иметь функцию с одной строчкой кода. Кент Бек показал мне когда-то пример из оригинальной системы Smalltalk, и это помогло мне по-настоящему понять, что размер — это не важно. Smalltalk в те годы работал на черно-белых машинах. Если нужно было подсветить текст или графику, то приходилось реверсировать видео. Класс в Smalltalk, отвечающий за графику, содержал метод 'highlight', и в его реализации была лишь одна строка — вызов метода 'reverse'. Название метода было длиннее реализации, но это не имело значения, потому что между намерением и реализацией этого кода — большое расстояние.

Читать дальше →
Всего голосов 47: ↑38 и ↓9 +29
Просмотры17.6K
Комментарии 45
1