Кодировать легко.
Программирование интуитивно понятно.
Программирование — это разумно.
Кодировка новая.

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

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

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

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

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

Люди, ошиблись.

Я быстро обнаружил, что изучение Ruby совсем не похоже на те годы, которые я потратил на изучение санскрита, французского или английского языка; или даже то адское время, которое я напихал на комп. Экзамены. Для меня в Ruby не было единообразной красоты исчисления или увлекательной абстракции прекрасной постструктуралистской критики. Для меня мои первые набеги на Ruby были просто серией бесконечных разочарований. Обычно представлено неудачными тестами или «не совсем» четким пониманием того, что на самом деле происходит! Позднее я понял, что во многом это произошло из-за большого нарушения семантики. В большинстве учебных пособий, книг и даже инструкторов использовалась лексика, которая никогда не определялась и/или имела альтернативное значение вне сферы программирования! Это происходило даже на схематических рисунках и в обычном описательном языке!

А потом я открыл для себя объектную ориентацию.

После того, как мы, наконец, преодолели основные этюды с командами git, условными операторами и циклами, Object Orientation была представлена ​​как эта Big. New Thing, все захватывающее, абстрактное и сложное. Но я нашел принципы объектно-ориентированного программирования знакомыми и старыми.

Мол, действительно старый.

Когда Платон изобрел ориентацию объекта

Где-то в III веке до н. э. греческий философ Платон постулировал, что физический мир вокруг нас нереален. (В двух словах)

Вместо этого все, что люди воспринимали вокруг себя, на самом деле было «формой» (то есть версией) НАСТОЯЩЕГО. Следовательно, истинная реальность состояла из истинных форм вещей.

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

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

Подумайте о лошади.

Эта воображаемая лошадь, вероятно, отличается от лошади, воображаемой вашим соседом, вашей матерью, вашим начальником.

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

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

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

Эти вещи есть у всех лошадей. Это то, что делает лошадь, осмелюсь сказать, лошадью. Но все ли лошади имеют эти вещи точно так же?

Конечно, нет!

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

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

Истинная форма Лошади: идеальная, совершенная, абстрактная Лошадь, существующая за пределами нашего понимания.

Хотя мы, простые смертные, не можем на самом деле «видеть» эту лошадь, мы знаем ее по ее атрибутам. В результате мы знаем, что все физические лошади должны иметь одни и те же атрибуты, чтобы считать их лошадьми.

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

(Если вам интересно: более поздние философы, такие как епископ Беркли, утверждали, что Истинные Формы были творением вне человека, только для того, чтобы быть задуманными и построенными высшей силой. Следовательно, все человеческое понимание Формы могло быть получено только через отдельные примеры этой «высшей» чистой форме. У Беркли также были довольно интересные мысли о том, что язык подобен потоку. Вы никогда не сможете стоять в одном и том же потоке дважды, потому что вода всегда движется. быть одними и теми же словами, были отправлены и поняты с немного разными значениями, о чем я постоянно думал, сталкиваясь со знакомыми, но новыми терминами в веб-разработке!)

Все старое новое

Объектная ориентация в языках программирования — это идея, что центральная структура языка — это «объект». Эти языки оперируют взаимодействием объектов и данных, в отличие от более линейных функций ввода/вывода более исторических языков программирования. (При обсуждении линейных функций подумайте об аналогии с «функциональными» машинами из средней школы.)

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

Вернее, это совпало с моим Платоном, и все обрело смысл.

Точно так же, как Платон говорил, что у всего есть Истинные Формы, в Ruby есть Объекты. В Ruby большинство типов данных и почти все, что они создают, являются объектами. Например, все имеет истинную форму, а в Ruby это называется Object.

Давайте представим, что мы создаем объект лошади в программе Ruby. Для Платона это сделало бы нас высшей силой, создающей Истинную Форму. Лошади имеют массу атрибутов, которые определяют их лошадиные качества. Эти атрибуты мы уже обсуждали ранее:
четыре ноги, грива, хвост, глаза и т. д.

Мы хотели бы присоединить все эти отличительные признаки к Объекту Лошади (Истинной Форме). Мы делаем это в ruby, выполнив следующие действия.

class Horse  
     #All the Attributes of a Horse would go here
     #such as:
     @number_of_legs 
     @color
     @eyes
     @hooves
     @tail
     @mane
#Ignore these @ symbols for now, we'll get into them later!
end

Класс Лошадь указывает на то, что мы создаем Объект (Истинная Форма Платона).

Создав объект, нам нужно создать все атрибуты этого объекта, которые, как мы знаем, будут иметь все «формы» этого объекта.
Нам нужно записать все атрибуты, такие как четыре ноги, глаза, копыта и т. д., которые, как мы знаем, будут у ВСЕХ лошадей.

Платон называл версии Истинной формы просто «формами». К счастью, Ruby несколько точнее, и каждая версия класса Object считается экземпляром класса.

Коричневая лошадь — это один из экземпляров Лошади, который является коричневым.

Пятнистая лошадь — это экземпляр The Horse, который был замечен.

Лошадь с очень коротким хвостом — еще один пример Лошади, также известной как Объект Лошади.

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

a_spotted_horse = Horse.new

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

Чтобы еще больше отличить a_spotted_horse, мы можем пойти и назначить цветовой атрибут этой конкретной лошади, которую нужно обнаружить. Мы можем сделать это, потому что мы создали класс Horse, чтобы включить цвет атрибута, и поэтому каждый экземпляр Horse будет иметь цвет, который мы можем заполнить.

Во второй части я подробно расскажу, как на самом деле создаются эти атрибуты и как они соотносятся с каждым экземпляром («формой») лошади.

Нет левого полушария, нет правого полушария

Я всегда чувствовал, что разрыв между гуманитарными науками и областями STEM был скорее культурным, чем естественным. Меня всегда успокаивало наброски дипломных работ с выражениями и переменными, а также объяснение математики с точки зрения художественного функционала. Тем не менее, когда я начал рубин, я начал сомневаться в своем давнем неверии в это так называемое разделение. К счастью, объектная ориентация восстановила мою веру.

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

Возможно, Люди, в конце концов, не так уж и ошибались.

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