«It does not matter how much time you need. The bug MUST be urgently fixed on Friday! »
Таковы заказчики: накануне милая девушка из благополучной страны желает тебе хорошо, насколько это у нас тут возможно, провести вечер, а наутро – всё, из-за её плеча выглядывает суровый господин директор.

Рис. 1. Заказчик, пожирающий исполнителя
Дима Б. – опытнейший разработчик. Он умело сплёл сеть из писем-запросов на уточнение, пояснение и расстановку приоритетов, произвёл оценку времени в двух вариантах, оптимистическом (около недели) и пессимистическом (втрое дольше), пожаловался менеджеру и коллегам, и пошёл обедать.
Дима К. – это я. Дима – имя программистское: на древнем компьютерном языке оно обозначает объявление массива. Ещё у нас в проекте, кроме Дим, есть Максы. Когда появился очередной Макс, и заказчики поинтересовались, существуют ли в нашей стране какие-нибудь другие имена, я ответил, что так, вообще – может быть, и да, но среди программистов – точно нет.
Мне попалось другое задание, которое, впрочем, тоже надо было сделать к пятнице. Оно было сформулировано в типичной категорической манере со словами типа immediately и множеством восклицательных знаков. Я, как водится, уверил коллег, что сделать это нереально, что заказчики хотят невозможно и что им, на самом деле, нужно совсем другое, вскипятил чайник и приступил к работе.
Надо сказать, что сущность прикладного программирования – это рутина. Мы не запускаем космические корабли, не создаём новое смертоносное оружие. Увлекательного мало. Мы удовлетворяем фантазии заказчиков, примерно как это делают представительницы древнейшей профессии, только у нас немного другая специализация. И там, и тут профессиональное удовольствие можно получить либо от освоения новой технологии, либо от решения интересной задачи. Некоторые чего-то ждут от карьерного роста, но это не профессия, это карьера.
Итак, мне повезло: задача оказалась нетривиальной, и по пути я даже изобрёл нечто новое. Если кто-то уже слышал об асинхронной рекурсии, то я – ещё нет, так что в таком случае будем считать, что мне до неё додуматься пришлось независимо.*
Дело вот в чём (данный абзац далёкие от программирования читатели могут спокойно пропустить). Мы используем ASP.Net. Есть дерево, узлы которого раскрываются по мере обращения, асинхронно (т.е. отправляется запрос на сервер, после чего, через некоторое время, подготовленные данные принимаются на клиент). Нужно осуществить поиск элементов дерева, причём оно не должно перестраиваться без необходимости. Как известно, правильно сформулировать задачу – это уже почти её решить, так что после возникновения термина асинхронной рекурсии мне оставалось только реализовать идею. Рекурсия нужна для обхода дерева, асинхронность – для того чтобы вернуться к рассмотрению узлов, требующих асинхронного заполнения данными. Если кому-то интересно, как это реализуется при помощи Javascript, Infragistics UltraWeb TreeView и такой-то матери, могу сей научный материал предоставить в качестве отдельной статьи.
Ну, а Дима Б. к исходу четверга повеселел, порозовел и даже перестал произносить имя той самой девушки сквозь зубы. К пятнице мы успели.
-----
* После написания статьи я как добросовестный исследователь изучил, что по этому поводу известно в сети. Нашёл работу Николая Вольфа «Асинхронная рекурсия», примерно о том же. У дураков мысли сходятся, или же great minds think alike.
Таковы заказчики: накануне милая девушка из благополучной страны желает тебе хорошо, насколько это у нас тут возможно, провести вечер, а наутро – всё, из-за её плеча выглядывает суровый господин директор.

Рис. 1. Заказчик, пожирающий исполнителя
Дима Б. – опытнейший разработчик. Он умело сплёл сеть из писем-запросов на уточнение, пояснение и расстановку приоритетов, произвёл оценку времени в двух вариантах, оптимистическом (около недели) и пессимистическом (втрое дольше), пожаловался менеджеру и коллегам, и пошёл обедать.
Дима К. – это я. Дима – имя программистское: на древнем компьютерном языке оно обозначает объявление массива. Ещё у нас в проекте, кроме Дим, есть Максы. Когда появился очередной Макс, и заказчики поинтересовались, существуют ли в нашей стране какие-нибудь другие имена, я ответил, что так, вообще – может быть, и да, но среди программистов – точно нет.
Мне попалось другое задание, которое, впрочем, тоже надо было сделать к пятнице. Оно было сформулировано в типичной категорической манере со словами типа immediately и множеством восклицательных знаков. Я, как водится, уверил коллег, что сделать это нереально, что заказчики хотят невозможно и что им, на самом деле, нужно совсем другое, вскипятил чайник и приступил к работе.
Надо сказать, что сущность прикладного программирования – это рутина. Мы не запускаем космические корабли, не создаём новое смертоносное оружие. Увлекательного мало. Мы удовлетворяем фантазии заказчиков, примерно как это делают представительницы древнейшей профессии, только у нас немного другая специализация. И там, и тут профессиональное удовольствие можно получить либо от освоения новой технологии, либо от решения интересной задачи. Некоторые чего-то ждут от карьерного роста, но это не профессия, это карьера.
Итак, мне повезло: задача оказалась нетривиальной, и по пути я даже изобрёл нечто новое. Если кто-то уже слышал об асинхронной рекурсии, то я – ещё нет, так что в таком случае будем считать, что мне до неё додуматься пришлось независимо.*
Дело вот в чём (данный абзац далёкие от программирования читатели могут спокойно пропустить). Мы используем ASP.Net. Есть дерево, узлы которого раскрываются по мере обращения, асинхронно (т.е. отправляется запрос на сервер, после чего, через некоторое время, подготовленные данные принимаются на клиент). Нужно осуществить поиск элементов дерева, причём оно не должно перестраиваться без необходимости. Как известно, правильно сформулировать задачу – это уже почти её решить, так что после возникновения термина асинхронной рекурсии мне оставалось только реализовать идею. Рекурсия нужна для обхода дерева, асинхронность – для того чтобы вернуться к рассмотрению узлов, требующих асинхронного заполнения данными. Если кому-то интересно, как это реализуется при помощи Javascript, Infragistics UltraWeb TreeView и такой-то матери, могу сей научный материал предоставить в качестве отдельной статьи.
Ну, а Дима Б. к исходу четверга повеселел, порозовел и даже перестал произносить имя той самой девушки сквозь зубы. К пятнице мы успели.
-----
* После написания статьи я как добросовестный исследователь изучил, что по этому поводу известно в сети. Нашёл работу Николая Вольфа «Асинхронная рекурсия», примерно о том же. У дураков мысли сходятся, или же great minds think alike.