Архивы: по дате | по разделам | по авторам

Hello, World!

Архив
автор : Денис Коновальчик   29.06.1998

Начну с любопытного, хотя и несколько огорчительного для себя события: не так давно в ходе еженедельных баталий по e-mail команда знатоков "Новички" (ныне - "Сталкер"), в рядах которой состоит ваш покорный слуга, потеряла важное турнирное очко, не "взяв" довольно простой вопрос американских "Вилладжеров". Ответом должна была стать фраза, ставшая для людей определенной специальности во всем мире тем же самым, что и "Мама мыла раму" для первоклассников. Сразу нескольким членам команды по этому поводу припомнилось нечто, ставшее названием этой статьи. Но удержаться на этой версии нам так и не удалось. Все карты спутало замечание, что в вопросе говорилось о людях ОПРЕДЕЛЕННОЙ специальности, а программы сочиняют "все кому не лень". И сакраментальное "SOS" (далеко не блестящий результат долгих колебаний и споров) лишило нас заветного очка. Горе от ума, прямо по Грибоедову…

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

И тому есть несколько причин. С одной стороны, "производственное" значение кодирования неуклонно снижается - зачем писать все "с нуля", если повсюду распространились "быстрые" средства разработки (как, например, поистине "народный" компилятор Delphi от Borland… пардон, от Inprise), расселились всевозможные "Офисы" и "Сьюты" с богатым арсеналом макросов на все случаи жизни, из-за чего изобретение собственных "велосипедов" теряет практический смысл. С другой стороны, азы того же Паскаля сейчас преподают практически во всех технических вузах, да и разнообразной литературы, посвященной конкретным языкам и средам программирования, хоть отбавляй. Но основным козырем в этой колоде все-таки представляется все большая доступность Интернета. Ибо в его недрах любители программистских досугов могут отыскать поистине неоценимые для себя сокровища (как задачи, так и решения), найти сильных спарринг-партнеров и поучаствовать в захватывающих поединках (последнее, наверно, свойственно любителям всех на свете головоломок). О некоторых из таких соревнований и пойдет далее речь.

Еще "в сравнительно незапамятные времена" в Сети появились глобальные соревнования программистов. По крайней мере, аж в 90-м году впервые был проведен "Internet Programming Contest", организованный одним из американских университетов (www.cs.duke.edu/~ola/ipc.html) и, увы, тихо почивший в бозе несколько лет назад. Но прогрессивные идеи "основоположников жанра" живы и воплотились в многочисленных сетевых соревнованиях. Любой желающий узнать о них поподробнее может выбрать "товар по купцу" в каталоге Yahoo из раздела "Соревнования по программированию" (www.yahoo.com/Computers_and_Internet/Contests). При этом, правда, необходимо помнить, что отправиться отсюда можно в места порой самые неожиданные: наряду с традиционными соревнованиями "сишников", "паскалистов" и других "язычников" присутствуют также ссылки на конкурсы Web-дизайнеров, "аниматоров" (работающих в жанре GIF) или, например, взломщиков многострадального сайта Macintosh (уж в такое время живем, знаете ли). Вдоволь в свое время постранствовав по всему архипелагу ссылок, выделю в нем, пожалуй, два "островка". Одним из них является конкурс "Программист месяца", уже упомянутый в "Терре" (см. #246). Другим - конкурс виртуозов языка Си.

Надо заметить, что странички "сект" энтузиастов какого-то языка программирования в Сети распространены широко. Но эта, пожалуй, стоит особняком. Речь идет о легендарном конкурсе, носящем звание "The International Obfuscated C Code Contest" (http://reality.sgi.com/csp/ioccc). Данное состязание, по словам его организаторов, уже пятнадцатый год подряд (!) преследует цель "демонстрации важности стиля программирования (в ироническом ключе)", а также "потрясения компиляторов необычным кодом". Впрочем, разбор присылаемых конкурсных работ способен потрясти не только компилятор. Это нужно видеть! Поистине мал золотник, да дорог: программы-крошки по условиям конкурса не должны превышать 3 килобайт в размере (по этой же причине "скачивание" всего архива исходных текстов "победительниц" в копеечку точно не влетит). При этом каждая из них выражает собственную оригинальную концепцию, а некоторые могут быть отнесены к произведениям литературного или изобразительного искусства ("полотна" попадаются воистину неподражаемые). По мере ознакомления с работами лауреатов в памяти возникают пожелтевшие страницы журнала "Наука и жизнь", на которых в конце восьмидесятых теснились такие же крохотные и остроумные поделки отечественных левшей от программирования. В качестве примера приведу очаровательный "паровозик", доехавший на всех парах до финала конкурса в далеком 86-м году и умеющий не только красоваться в виде листинга, но и печатать свое название весьма оригинальным образом (см. листинг). Правда, отмечу, что для окончательной доводки его, как и большинство представленных на конкурсе "исходников", нужно "собрать", используя приведенный на сайте make-файл.

extern int

errno

;char

grrr

;main( r,

argv, argc ) int argc ,

r ; char *argv[];{int P( );

#define x int i, j,cc[4];printf(" choo choo\n" ) ;

x ;if (P( ! i ) | cc[ ! j ]

& P(j )>2 ? j : i ){* argv[i++ +!-i]

; for (i= 0;; i++ );

_exit(argv[argc- 2 / cc[1*argc]|-1<<4 ] ) ;printf("%d",P(""));}}

P ( a ) char a ; { a ; while( a > " B "

/* - by E ricM arsh all- */); }

В век промышленной разработки программ, где "один в поле не воин", все больший вес приобретают командные соревнования программистов. Флагманом среди них является проводимый под эгидой авторитетной международной организации ACM (Association for Computing Machinery) студенческий чемпионат мира, виртуальная "штаб-квартира" которого расположилась по адресу: http://acm.baylor.edu/acmicpc. Используемые средства программирования тут достаточно консервативны (Borland Pascal 7.0, Borland C++ 3.1), а правила неизменны, строги и просты. Команда, в которую входят "трое, не считая компьютера", в течение нескольких часов решает предложенные задачи, отсылая тексты своих программ по сети на сервер, который в автоматическом режиме прогоняет на них систему тестов. И если хоть на одном из них программу удается "подловить", решение возвращается авторам на доработку, причем каждая неудачная попытка карается штрафным временем. Победители определяются в первую очередь по числу сданных задач, затем - по минутам, набежавшим от начала соревнований по каждой сданной задаче. Команды университетов и академий всего света выясняют отношения в региональных (полуфинальных) группах, победители которых получают путевки на весенний финал.

Первыми российскими "ласточками" в европейских отборочных подгруппах стартовали (и довольно успешно) команды вузов Питера и Москвы. В 1996 году Россия наконец получила "свой" - Северо-Восточный Европейский - регион (www.ifmo.ru/neerc, см. рисунок). Ежегодно в Питер и Барнаул, связанные по Интернету, съезжается до 80 команд-участниц из стран СНГ, но число всех желающих этим, конечно же, не исчерпывается. Похоже, впереди уже замаячили четвертьфиналы… По крайней мере, такой статус в нынешнем сезоне получили уральские соревнования (www.usu.ru/win/usu/events/1998/contest98). Добавлю, что по закрученности сюжета, остроте борьбы и самоотдаче участников такие соревнования сродни большому спорту. Предсказывать не берусь, но кто знает, может быть, в следующем тысячелетии их ждет поистине олимпийское будущее?

Такой "массовый забег", как соревнования ACM, - пожалуй, лишь вершина айсберга. Многие учебные заведения проводят свои "междусобойчики" по программированию, по накалу страстей практически не уступающие официальным соревнованиям. Чтобы проникнуться ощущением "тиффози", достаточно лишь бегло пробежаться по страничкам этих alma mater. Нередко здесь же, наряду с упоминаниями о прошлых первенствах, можно "накопать" неплохие архивы задач для собственной тренировки. Особенно ценно, когда подготовка к соревнованиям в вузе, в который ты таким образом "угодил", проводится в форме открытых семинаров, в которых вовсе не чувствуешь себя чужаком. Нередко здесь, как на витрине, вывешиваются задачки, которые регулярно обновляются, а решения принимаются по e-mail. Одним из таких мест является семинар Тима Маргуша (Tim Margush), профессора Акронского университета из Огайо. Вниманию осваивающих язык Си: только что открылся весенне-летний сезон, и для вас здесь припасен набор не очень сложных, но поучительных задач, вписывающихся в рамках общеобразовательной американской программы по информатике (новое задание каждую неделю можно найти по адресу www.cs.uakron.edu/~margush/contest).

Если вы не прочь разобраться с алгоритмом в спокойной обстановке, располагая значительным временем, к вашим услугам - задачники, коих на Сети немало. Сошлюсь на один из самых "толстых" - www.beaulieu-software.ch/contest. Для "решателей" здесь припасены задачки, собранные с различных соревнований, проводившихся по миру в разные годы, а также ссылки на их официальные серверы, предвещающие массу интересных походов по "местам сражений". Для некоторых задач прямо здесь же можно встретить и решения, что, вероятно, будет по достоинству оценено начинающими программистами. Но, вероятно, без маленькой "ложки дегтя" не обойтись: архив, что ни говори, богатый, но принцип расположения задач здесь (как и на подавляющем большинстве подобных страниц) выбран самый простой - хронологический: задачи "приписаны" к тем первенствам, где они "игрались". Насколько удобнее было бы иметь дело с архивом, где задачи сгруппированы по темам и используемым в решениях приемам программирования! Но встретить такие задачники в Сети мне пока не довелось.

И все-таки, упражняться в программировании в одиночестве, "варясь в собственном соку", не так интересно. Для "живых" занятий, пожалуй, необходимы услуги целого коллектива помощников. Но где найти неугомонного руководителя (который бы постоянно тебя "озадачивал"), терпеливого и въедливого "тестера" (который смог бы на совесть проверить твое решение, быстро указав на ошибки)? Не помешало бы и круглосуточное дежурство этой команды, постоянно ожидающей вашего "звонка", да и неплохо было бы пользоваться всем этим бесплатно… Еще какие-то пару лет назад это выглядело чистой утопией, сегодня такие мечты воплотились в жизнь. Естественно, речь идет о Web-сервере, который выступает во всех перечисленных ипостасях одновременно. Желающие прибегнуть к его услугам приглашаются в знойную Испанию, в Вальядолидский университет (http://acm.gui.uva.es/problemset). Прямо "с порога" вы можете зарегистрироваться, определиться с гражданством, получить пароль и предаться повышению своей квалификации программиста на Си или Паскале. Думается, надолго (на момент написания статьи предлагаемый набор состоял из пяти "томов", по сто задач в каждом). Все задачи "знают" себе цену, ссылаясь на процент удачных подходов, а также "помнят" имена авторов лучших решений. По сложности получается "ассорти": есть своеобразные "мальчики для битья", к которым подходят все кому не лень; есть и вершины, не покорившиеся доселе никому из участников. Статистика подходов к задачам фиксируется в досье, результаты которого отображаются в неофициальных - личном и "командном" (по странам мира) зачетах. Основным критерием в раздаче "пряников" здесь выступает скорость работы программы и срок отсылки решения. Нередки случаи, когда на "доске почета" прямо над твоей размещаются фамилии счастливчиков, придумавших идентичное решение, но приславших его чуть раньше.

Наверное, не имеет особого смысла слишком подробно расписывать прелести такого "задачника онлайн" - вся необходимая информация лежит на сервере, к тому же система постоянно совершенствуется. Добавлю только, что автомат для проверки (ноу-хау университета) сработан на совесть, и, как правило, в течение пяти минут после отсылки кода по e-mail вы уже будете знать, как "сыграло" ваше детище. В ответном письме автомат представит вам "разбор полета" - отчет о компиляции и запуске, а также опишет неполадки (если таковые будут). В случае, если ваш вуз намеревается провести в своих недрах подобное командное первенство, радушные испанцы готовы предоставить вам свою систему (есть только одно ограничение: работает она под Linux).

Поскольку всякий энтузиаст может завести и возделывать в Сети собственный "огород" (были бы только желание да свободное время), здесь достаточно часто можно встретить всякого рода конкурсы "на призы такого-то". Как правило, задания тут довольно специфичны (например, написание минимальной по размеру программы для игры в крестики-нолики), вожделенный приз порой виртуален как и сам конкурс, но иногда победитель способен разжиться в ближайшем будущем чем-то вполне материальным (например, жбаном баварского пива). В любом случае, положительные эмоции от решения интересной задачи порой значат больше, чем призы. А если при этом еще находишь единомышленников…

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

© ООО "Компьютерра-Онлайн", 1997-2021
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.