Sep 08, 2007 22:51
Хелемские программисты
--------------------------------------------------------------------------------
© Lincoln Spector - Gigglebytes, Computer Currents, November 14 ('95) issue
--------------------------------------------------------------------------------
Однажды Хелемские программисты решили написать новую базу данных для синагоги.
- Она должна отслеживать информацию о каждом семействе в Хелеме - указал Шмуль, которому нравилось считать себя руководителем проекта. - Мы должны знать, кто на ком женат, кто их дети, и всех их родственников вплоть до двоюродных и троюродных.
- Понимаю, - сказал Мендель. - Это должна быть реляционная база данных, со связями-реляциями.
- Но кого и с кем мы будем связывать? - спросил Моше.
- Ну, я в любом случае не хотел бы, чтобы мой сын связывался с твоей дочерью - заметил Аврам.
- Господа, господа! - воззвал Шмуль. - Давайте не забывать, для чего мы здесь. Значит, так. Я предлагаю создать таблицу для мужчин, таблицу для женщин, таблицу для семей и таблицу для детей.
- Будет ли у рабби отдельная таблица? - спросил Аврам.
Все согласились, что рабби стоит выделить отдельную таблицу, поскольку он мудр.
- А что насчет пользовательского интерфейса? - спросил Моше.
Все посмотрели на Шмуля.
- Разумеется должен быть, - сказал он. - Иначе кто же это будет использовать?
- Да, но какой - с системой меню, многооконный или же на веб-страничках? И какого вида должна быть Помощь(help)?
- Нужна ли вообще Помощь? - спросил Мендель. - Разве не сказано в Талмуде, что мы должны учиться? Давайте напишем документацию, которую ученые люди смогут обдумывать и подробно обсуждать.
Но Моше по-прежнему был недоволен.
- Что случится, если у Йоселя и Шандель появится еще один ребенок? Как Мордха, лучший ученик рабби, зарегистрирует это?
- Все знают, что он делает, - ответил Аврам. - Он записывает это на клочке бумаги.
- В которую потом заворачивает рыбу, - добавил Мендель.
- Да, но что он будет делать, когда наша система будет завершена?
Все согласились, что это очень хороший вопрос.
Впрочем, у Шмуля быстро нашелся ответ.
- Он включит компьютер, зайдет в нашу базу данных и введет в нее имя новорожденного.
- Да, но как база данных узнает, что Йосель и Шандель его родители?
- Не смеши меня, - сказал Аврам. - Хелем - маленький городишко, здесь все всех знают. Когда на свет появляется младенец, как может кто-то не знать его родителей?
- Но как люди узнают? - спросил Мендель.
- Ну, это просто, - ответил Аврам. - Еще до того ребенок родился, можно догадаться, посмотрев на его отца. Почему бы нашей программе не сделать то же самое?
- Потому, что у компьютера нет глаз.
- А-а! - воскликнул Шмуль. - У компьютера-то глаз нет, но у Мордхи есть, вот пусть Мордха и рассказывает компьютеру все, что видит. И если однажды он скажет: “Йосель выглядит очень счастливым”, а в другой раз: “В городке родился младенец”, то программа сможет это понять.
Мендель задумался.
- Возможно, но мне не хочется полагаться на то, что Мордха будет все рассказывать компьютеру. Допустим, он забудет рассказать, что видел, как рабби кушал, так что, программа должна решить, что сегодня Йом Кипур? Будет гораздо лучше, если мы напишем процедуру для запроса в базу данных, которая поможет Мордхе найти семью ребенка. В конце концов, разве мы не программисты? Мордха сможет запустить запрос из главного меню и это выдаст ему на просмотр данные о семье Йоселя и Шандель.
- А он сможет там добавить нового ребенка? - спросил Моше.
- Конечно, нет! - возразил Мендель. - Для этого он должен перейти на экран добавления нового ребенка с главного меню. Так что после того, как он выполнил запрос и нашел Йоселя и Шандель, он кликнет по кнопке, чтобы возвратиться в главное меню. Оттуда вообще можно попасть в любую часть базы данных.
Моше тут же заподозрил опасный изъян.
- Но если он покинет экран просмотра, в котором нашел родителей и вернется в главное меню, как компьютер узнает, что ребенок принадлежит Йоселю и Шандель?
Этот вопрос настолько озадачил хелемских программистов, что Аврам был вынужден спросить:
- А Маймонид говорит что-нибудь по этому поводу?
- Ай! - воскликнул Моше. - Кого интересует Маймонид? Он программировал на COBOL!
Тогда Шмуль нашел решение.
- Это же сама простота! Мы поместим на экране ввода нового ребенка кнопку, которая позволит Мордхе выполнить запрос к таблице семей. Когда он найдет Йоселя и Шандель, он сможет нажать кнопку, которая вернет его назад в главное меню и оттуда опять перейти к добавлению ребенка.
- Это гениально! - воскликнул Моше. Потом он задумался. - Но когда он возвращается к экрану ввода нового ребенка, будет ли компьютер знать, что Йосель и Шандель его родители?
- Конечно, нет. Но он всегда сможет снова нажать кнопку запроса.
Моше уже не выглядел уверенным.
- А что, если ему не понравится вертеться в бесконечном цикле?
- Цикл, шмикл! Он учится, чтобы стать раввином, верно? Ну так он должен узнать о бесконечности.
- У меня есть идея получше, - перебил Моше. - Мы можем попросту сделать так, что все новорожденные по умолчанию будут считаться детьми Йоселя и Шандель!
Все программисты согласились, что это наилучший план. Они уже вовсю поздравляли друг друга, когда Аврам вдруг спохватился:
- Ой-вей! Все-таки мы кое-что забыли. Во что же теперь Мордха будет заворачивать свою рыбу?
Моше засмеялся.
- Это же так просто. Мы дадим ему возможность распечатать отчет!