Речь программистов

Сейчас кое-что об одном комплименте в мой собственный адрес.

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

Когда-то, когда я начинал программировать, это занятие было внове, программистов было мало, и соответственно, многие люди интересовались – а что это за занятие, в чем его специфика, в чем его сущность. И когда меня спросили об этой сущности я ответил, что «на мой взгляд главная сущность программирования в том, что сколь угодно сложное дело можно разбить на такие простенькие кусочки, что каждый из этих кусочков в состоянии будет выполнить любой дурак».
Вот это основной принцип. А все дальнейшее – уже технологические тонкости. Скажем, можно разбивать задачу на куски, идя сверху вниз, от некоторого самого общего представления об ее сущности, постепенно детализируя это представление и доводя его до таких вот простейших решений. Когда я начинал программировать, идея программирования сверху вниз была формализована в виде технологии т.н. структурированного программирования. Основоположник ее – Эдсгер Вибе Дейкстра считается по праву одним из величайших теоретиков и практиков программирования. Сейчас он уже к сожалению, ушел от нас.

Есть и другой способ – набирать сложный комплекс из уже готовых простеньких кирпичиков, программируя снизу вверх, постепенно складывая из элементарных операций сложные блоки, пока не наберешь из них некоторый комплекс, способный решить изначально поставленную задачу. Сейчас, насколько мне известно (я к сожалению, уже более 13 лет не программирую), идеи программирования снизу вверх точнее всего формализованы в идее… сейчас, как же она называется, извините… Вы знаете, уже забыл. Стыдно конечно, но вот что происходит с человеком, который очень долго не практикуется в каком-то деле. Ладно, извините, но от конкретных названий идея не зависит. В любом случае программировать можно и снизу вверх, и сверху вниз. Реально на практике как-то комбинируются оба подхода. Неизменным остается главное – программирование, это в конечном счете разбиение сложной задачи на какие-то простые и общепонятные элементы. И естественно, такое разбиение возможно не только применительно к компьютеру, но и к нашим собственным мыслям. Ну а дальше правило «кто ясно мыслит, тот ясно излагает» не устарело за пару сот лет, прошедших с тех пор, как оно было сформулировано в такой стихотворной форме. И несомненно, хороший программист способен к четкому изложению своих мыслей, способен четко организовывать деятельность других людей, так же четко как организует деятельность машин. Многие известные мне программисты стали прекрасными менеджерами и организаторами именно благодаря этому структурному мышлению.

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

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