Wednesday, May 31, 2006
Эссе
Философия моих работ
Программирование: парадигма имплементации инкапсулирования в архитектуре “Diamond”, или И другие страшные слова
Я - раб, я - царь, я - червь, я - Бог!
Г. Р. Державин
Программист... герой ненашего времени. Десять или пятнадцать лет назад его фигура была овеяна мрачными легендами, ставившими его в один ряд с викторианским курителем опия и юродивым времен свет Васильича. Его невеста рисовала пни на полях девичьего дневника, потом уволил одного и стало их FF, кибернетика опять зазвучала как нечто западническое, но без прошлой продажности, с осмыслением и некой таинственностью. Умиленные родители наблюдали, как их чада вырисовывают кружочки в MS Paint и перешептывались «Вырастет – программистом станет. Будет в банке много зарабатывать». Программист получает от вас набор ужасающей информации «А это вот здесь такой чтоб выбрать и потом сюда чтоб показать», грызет ногти, закусывает извлеченными из бороды крошками, урчит, посвистывает на 14400, а через месяц выдает вам «прогу». И вы в священном экстазе кликаете, тыкаете, восхищаетесь и трясущимися руками отдаете ему мятую сотку, потому что из свежей и хрустящей сворачивать трубочки намного удобнее.
Сейчас все проще и, наверное, правильнее. Конечно правильнее. Программист – не культ. Он – работник. В большинстве случаев – самый обычный. Причем в своей пищевой цепочке – самое низшее звено. На каждого Васю найдется свой информационный архитектор, бизнес-аналитик, два дизайнера и пятнадцать менеджеров, не говоря уж о массачусетском офисе, в котором сидят стотысячмиллионов злобных тестеров. Обычная производственная рутина.
Программист получит на вход диаграмму классов. Программист получит на вход структуру нормализованной базы данных. Программисту дадут полный перечень всех необходимых ему интерфейсов, с указанием всех методов, сигнатурами, описаниями и /*комментариями*/. Программисту нарисуют «морду» будущего приложения, расскажут что и где и как и зачем и почему (нет, почему наверное не расскажут) работает. И он сядет и все это заимплементирует, не чувствуя ни полета, ни озарения.
Нам совершенно не интересен такой программист, создавший двадцать электронных магазинов сотовыми телефонами, одиннадцать сайтов турагентств и бесчисленное множество черно-розовых порно-сайтов с двумя кнопками: «Заплатить бабло» и «Позырить затак». Нет-нет, мы пройдем мимо этого скромного труженика, как прошли бы мимо рабочего, делающего гайку, привычным движением нарезающего резьбу и знающего краешком своего утомленного сверлением и распиливанием мозга, что гайка эта нужна для бельгийского синхрофазотрона.
Мы посмотрим на того программиста, в работе которого есть творчество. Творчество ничем не худшее, чем работа журналиста (хорошего журналиста, конечно же), или дизайнера (не того, кто рисует черно-розовые дизайны), или даже архитектора. Любая из этих профессий сопряжена с рутиной куда более серьезной, чем замена ленты в пишущей машинке или смешиванием красок на палитре. И все же, мы говорим о творчестве, о воплощении какой-то частички своего внутреннего мира в материал. Мы не имеем в виду бетон, газетную полосу или cpp-файл. Мы говорим о материале как о некой категории, определить которую следовало бы как «овеществленную идею, физический предмет, создание которого стало возможно благодаря использованию идеи».
Автору было интересно узнать о существовании библиотеки (http://www.jacana.org.uk/pattern/) шаблонов (паттернов) проектирования помещений различного рода. Создание подобной библиотеки стало возможным благодаря огромному накопленному опыту дизайнеров и архитекторов. Сами авторы считают ее более чем набором готовых решений – они считают ее Языком. Ее роль сложно недооценить. Например, реализация (имплементация) шаблона «Свет с двух сторон каждой комнаты» позволила архитектору Рою Леону создать великолепный офис компании Джоэля Спольски (http://www.joelonsoftware.com/articles/BionicOffice.html). Однако Язык Паттернов никогда не сумел бы стать языком, системой, содержательным хранилищем идей, будь он простым архивом готовых решений. Создание подобной информационной системы невозможно без особого, качественно нового взгляда на предметы (объекты). Назовем подобный подход программистским. И вот почему...
Многие авторы отмечают все нарастающий темп развития общества, определяющий и определяемый изменениями не только в области науки и техники, не только культуры и религии, не только морали и нравственности, определяемый и определяющий во многом способ мышления, мировоззрение, приемы осмысления. Информационное общество создается. Нельзя говорить о его завершенности, но уже очевидно, что некоторые (условно) социальные срезы уже удовлетворяют подобному определению. Рост количества информации привел к качественным изменениям.
Сам же этот рост стал возможным благодаря возникновению «компьютеров». Мы намеренно закавычиваем данное слово, дабы предостеречь читателя от ошибочного понимания его как «рабочих станций», «персональных компьютеров» или даже «очень больших машин, которые очень быстро считают». Совершенно ясно, что именно развитие техники в эту новую ветвь заставило людей задуматься о манипулировании Информацией, этим уникальным товаром. Идея стала первоценной. Знания и Идеи дают колоссальный доход, не сравнимый с техническими новшествами самими по себе.
Терабайты информации потребовали научиться хранить их так, чтобы не потратить всю жизнь на отыскание цифр, как некий Шенкс. Люди вынуждены были совершить новый шаг. Понятие информационной системы столь же отлично от архива, сколь понятие общества отлично от группы людей. Гуру программирования за чудовищно малый срок (что такое несколько десятилетий?) создали идейно новые понятия. Уровни абстракции наслаивались один на другой, заставляя забыть о том, что целое число хранится в памяти как 32 бита, каждый из которых может находиться в состоянии 0 или 1. Появление объектно-ориентированной модели заставило программистов смотреть на привычные вещи по-новому. Человек, поработавший с этим несколько лет, глянет на входную дверь с мыслью «Это входная дверь. Объект класса CDver. У этого класса имеется метод Open(), переводящий флаг m_isOpened в значение true и позволяющий на время, пока этот флаг остается неизменным, другим объектам проходить через дверь». Это не просто игра воображения, и практически не аллегория. Это другой взгляд на вещи.
Примечательно, что подобное мировоззрение не осталось в замкнутом кругу профессионалов. К примеру, математический подход выработался сотни лет тому. Но до сих пор применяется лишь теми, кто непосредственно занимается математическими изысканиями. Суть в том, что продукт деятельности математика остается в лучшем случае готовой отмычкой, и никому не интересно, что же происходит внутри, разве что из праздного любопытства или профессионального интереса.
Программирование же работает, как уже говорилось, с Информацией. Всякий пользователь системы, пусть даже и не проникает в нее, взаимодействует с ней, а потому вынужден перенимать часть логики ее создателя. Многие бизнесмены и маркетологи совершенно осознанно взаимодействуют с объектами, вызывая их методы, изменяя свойства. «Это объект НовыйКонтрактСМолокозаводом, он относится к типу Контракт. Его Статус сейчас Новый. Для изменения Статуса необходимо для данного объекта вызвать Метод Редактирование».
Таким образом, в жизнь информационного общества прочно входит «программистский» подход, определяющий многие совершенно бытовые вещи и действия. Программисты же продолжают развитие своей сферы деятельности, привнося все новые и новые парадигмы. Существует несколько систем Шаблонов Программирования, определяющих основные типовые задачи и их возможные решения. И, поскольку развитие общества, экономики, индустрии ставит все время задачи новые, постоянно появляются новые Идеи. Высокоуровневое программирование становится сверхвысокоуровневым. Среды программирования приближаются к тому уровню, когда программист тратит все меньше времени на техническую рутину и может все больше его уделять осмыслению, анализу и синтезу.
И в заключение. Дабы у читателя не возникло ложного ощущения, что творчество возможно только при работе с языками высокого уровня, процитируем фрагмент достаточно распространенного в русском Интернете сочинения, написанного от лица программиста на самом низком из возможных уровней – ассемблере однокристаллических чипов, определяющих весьма специфические и очень-очень жесткие требования к разрабатываемым программам.
«Как-то в полусне я оделся и вышел на улицу. Под ногами мерзко визжал снег. Кругом все было серо и как-то тускло. Мне больше не нужен был ни комьютер, ни распечатки. Вся схема была во мне.. Или вне меня? Она помигивала разноцветными просвирками, имея форму причудливых и чем-то даже красивых трехмерных фигур или это какие-то ажурные конструкции? Тоненько попискивали контрольные маркеры временных отметок висящие впритирку к этим кристаллам странных, каких-то завораживающих форм. И все это летело, куда-то перемещаясь и вращаясь, в каком то странно меняющем форму канале? Трубе? Оно проноситься вплотную ко всем его стенкам, как по команде невидимого штурмана, в нужный момент, разворачиваясь по непонятно какому наитию, чтобы выступающая грань не зацепилась за препятствие. Но каков его капитан или кто там? Штурман? Ведь не пройдет же! Там нельзя пройти! Hо нет! Чудесным образом все сооружение как-то грациозно изворачивается, ровно в нужное мгновенье и беззвучно проскакивает.. нет! Величаво минует препятствие.. А впереди следующее.. И вдруг, край ажурного сооружения своим крохотным выступом цепляется. Визг и грохот! Лопаются и сминаются сверкающие нити, и все дробится на миллионы осколков..»
Объект ДокументMicrosoftWord имеет метод Close().
Программирование: парадигма имплементации инкапсулирования в архитектуре “Diamond”, или И другие страшные слова
Я - раб, я - царь, я - червь, я - Бог!
Г. Р. Державин
Программист... герой ненашего времени. Десять или пятнадцать лет назад его фигура была овеяна мрачными легендами, ставившими его в один ряд с викторианским курителем опия и юродивым времен свет Васильича. Его невеста рисовала пни на полях девичьего дневника, потом уволил одного и стало их FF, кибернетика опять зазвучала как нечто западническое, но без прошлой продажности, с осмыслением и некой таинственностью. Умиленные родители наблюдали, как их чада вырисовывают кружочки в MS Paint и перешептывались «Вырастет – программистом станет. Будет в банке много зарабатывать». Программист получает от вас набор ужасающей информации «А это вот здесь такой чтоб выбрать и потом сюда чтоб показать», грызет ногти, закусывает извлеченными из бороды крошками, урчит, посвистывает на 14400, а через месяц выдает вам «прогу». И вы в священном экстазе кликаете, тыкаете, восхищаетесь и трясущимися руками отдаете ему мятую сотку, потому что из свежей и хрустящей сворачивать трубочки намного удобнее.
Сейчас все проще и, наверное, правильнее. Конечно правильнее. Программист – не культ. Он – работник. В большинстве случаев – самый обычный. Причем в своей пищевой цепочке – самое низшее звено. На каждого Васю найдется свой информационный архитектор, бизнес-аналитик, два дизайнера и пятнадцать менеджеров, не говоря уж о массачусетском офисе, в котором сидят стотысячмиллионов злобных тестеров. Обычная производственная рутина.
Программист получит на вход диаграмму классов. Программист получит на вход структуру нормализованной базы данных. Программисту дадут полный перечень всех необходимых ему интерфейсов, с указанием всех методов, сигнатурами, описаниями и /*комментариями*/. Программисту нарисуют «морду» будущего приложения, расскажут что и где и как и зачем и почему (нет, почему наверное не расскажут) работает. И он сядет и все это заимплементирует, не чувствуя ни полета, ни озарения.
Нам совершенно не интересен такой программист, создавший двадцать электронных магазинов сотовыми телефонами, одиннадцать сайтов турагентств и бесчисленное множество черно-розовых порно-сайтов с двумя кнопками: «Заплатить бабло» и «Позырить затак». Нет-нет, мы пройдем мимо этого скромного труженика, как прошли бы мимо рабочего, делающего гайку, привычным движением нарезающего резьбу и знающего краешком своего утомленного сверлением и распиливанием мозга, что гайка эта нужна для бельгийского синхрофазотрона.
Мы посмотрим на того программиста, в работе которого есть творчество. Творчество ничем не худшее, чем работа журналиста (хорошего журналиста, конечно же), или дизайнера (не того, кто рисует черно-розовые дизайны), или даже архитектора. Любая из этих профессий сопряжена с рутиной куда более серьезной, чем замена ленты в пишущей машинке или смешиванием красок на палитре. И все же, мы говорим о творчестве, о воплощении какой-то частички своего внутреннего мира в материал. Мы не имеем в виду бетон, газетную полосу или cpp-файл. Мы говорим о материале как о некой категории, определить которую следовало бы как «овеществленную идею, физический предмет, создание которого стало возможно благодаря использованию идеи».
Автору было интересно узнать о существовании библиотеки (http://www.jacana.org.uk/pattern/) шаблонов (паттернов) проектирования помещений различного рода. Создание подобной библиотеки стало возможным благодаря огромному накопленному опыту дизайнеров и архитекторов. Сами авторы считают ее более чем набором готовых решений – они считают ее Языком. Ее роль сложно недооценить. Например, реализация (имплементация) шаблона «Свет с двух сторон каждой комнаты» позволила архитектору Рою Леону создать великолепный офис компании Джоэля Спольски (http://www.joelonsoftware.com/articles/BionicOffice.html). Однако Язык Паттернов никогда не сумел бы стать языком, системой, содержательным хранилищем идей, будь он простым архивом готовых решений. Создание подобной информационной системы невозможно без особого, качественно нового взгляда на предметы (объекты). Назовем подобный подход программистским. И вот почему...
Многие авторы отмечают все нарастающий темп развития общества, определяющий и определяемый изменениями не только в области науки и техники, не только культуры и религии, не только морали и нравственности, определяемый и определяющий во многом способ мышления, мировоззрение, приемы осмысления. Информационное общество создается. Нельзя говорить о его завершенности, но уже очевидно, что некоторые (условно) социальные срезы уже удовлетворяют подобному определению. Рост количества информации привел к качественным изменениям.
Сам же этот рост стал возможным благодаря возникновению «компьютеров». Мы намеренно закавычиваем данное слово, дабы предостеречь читателя от ошибочного понимания его как «рабочих станций», «персональных компьютеров» или даже «очень больших машин, которые очень быстро считают». Совершенно ясно, что именно развитие техники в эту новую ветвь заставило людей задуматься о манипулировании Информацией, этим уникальным товаром. Идея стала первоценной. Знания и Идеи дают колоссальный доход, не сравнимый с техническими новшествами самими по себе.
Терабайты информации потребовали научиться хранить их так, чтобы не потратить всю жизнь на отыскание цифр, как некий Шенкс. Люди вынуждены были совершить новый шаг. Понятие информационной системы столь же отлично от архива, сколь понятие общества отлично от группы людей. Гуру программирования за чудовищно малый срок (что такое несколько десятилетий?) создали идейно новые понятия. Уровни абстракции наслаивались один на другой, заставляя забыть о том, что целое число хранится в памяти как 32 бита, каждый из которых может находиться в состоянии 0 или 1. Появление объектно-ориентированной модели заставило программистов смотреть на привычные вещи по-новому. Человек, поработавший с этим несколько лет, глянет на входную дверь с мыслью «Это входная дверь. Объект класса CDver. У этого класса имеется метод Open(), переводящий флаг m_isOpened в значение true и позволяющий на время, пока этот флаг остается неизменным, другим объектам проходить через дверь». Это не просто игра воображения, и практически не аллегория. Это другой взгляд на вещи.
Примечательно, что подобное мировоззрение не осталось в замкнутом кругу профессионалов. К примеру, математический подход выработался сотни лет тому. Но до сих пор применяется лишь теми, кто непосредственно занимается математическими изысканиями. Суть в том, что продукт деятельности математика остается в лучшем случае готовой отмычкой, и никому не интересно, что же происходит внутри, разве что из праздного любопытства или профессионального интереса.
Программирование же работает, как уже говорилось, с Информацией. Всякий пользователь системы, пусть даже и не проникает в нее, взаимодействует с ней, а потому вынужден перенимать часть логики ее создателя. Многие бизнесмены и маркетологи совершенно осознанно взаимодействуют с объектами, вызывая их методы, изменяя свойства. «Это объект НовыйКонтрактСМолокозаводом, он относится к типу Контракт. Его Статус сейчас Новый. Для изменения Статуса необходимо для данного объекта вызвать Метод Редактирование».
Таким образом, в жизнь информационного общества прочно входит «программистский» подход, определяющий многие совершенно бытовые вещи и действия. Программисты же продолжают развитие своей сферы деятельности, привнося все новые и новые парадигмы. Существует несколько систем Шаблонов Программирования, определяющих основные типовые задачи и их возможные решения. И, поскольку развитие общества, экономики, индустрии ставит все время задачи новые, постоянно появляются новые Идеи. Высокоуровневое программирование становится сверхвысокоуровневым. Среды программирования приближаются к тому уровню, когда программист тратит все меньше времени на техническую рутину и может все больше его уделять осмыслению, анализу и синтезу.
И в заключение. Дабы у читателя не возникло ложного ощущения, что творчество возможно только при работе с языками высокого уровня, процитируем фрагмент достаточно распространенного в русском Интернете сочинения, написанного от лица программиста на самом низком из возможных уровней – ассемблере однокристаллических чипов, определяющих весьма специфические и очень-очень жесткие требования к разрабатываемым программам.
«Как-то в полусне я оделся и вышел на улицу. Под ногами мерзко визжал снег. Кругом все было серо и как-то тускло. Мне больше не нужен был ни комьютер, ни распечатки. Вся схема была во мне.. Или вне меня? Она помигивала разноцветными просвирками, имея форму причудливых и чем-то даже красивых трехмерных фигур или это какие-то ажурные конструкции? Тоненько попискивали контрольные маркеры временных отметок висящие впритирку к этим кристаллам странных, каких-то завораживающих форм. И все это летело, куда-то перемещаясь и вращаясь, в каком то странно меняющем форму канале? Трубе? Оно проноситься вплотную ко всем его стенкам, как по команде невидимого штурмана, в нужный момент, разворачиваясь по непонятно какому наитию, чтобы выступающая грань не зацепилась за препятствие. Но каков его капитан или кто там? Штурман? Ведь не пройдет же! Там нельзя пройти! Hо нет! Чудесным образом все сооружение как-то грациозно изворачивается, ровно в нужное мгновенье и беззвучно проскакивает.. нет! Величаво минует препятствие.. А впереди следующее.. И вдруг, край ажурного сооружения своим крохотным выступом цепляется. Визг и грохот! Лопаются и сминаются сверкающие нити, и все дробится на миллионы осколков..»
Объект ДокументMicrosoftWord имеет метод Close().