Компактное программирование / Компактнопрограммическая сатира

Возврат на главную страницу

The Evolution of a Programmer

High School/Jr.High:

10 PRINT "HELLO WORLD" 20 END

First year in College:

program Hello(input, output) begin writeln('Hello World') end.

Senior year in College:

(defun hello (print (cons 'Hello (list 'World))))

New professional:

#include void main(void) { char *message[] = {"Hello ", "World"}; int i; for(i = 0; i < 2; ++i) printf("%s", message[i]); printf("\n"); }

Seasoned professional:

#include #include class string { private: int size; char *ptr; public: string() : size(0), ptr(new char('\0')) {} string(const string &s) : size(s.size) { ptr = new char[size + 1]; strcpy(ptr, s.ptr); } ~string() { delete [] ptr; } friend ostream &operator <<(ostream &, const string &); string &operator=(const char *); }; ostream &operator<<(ostream &stream, const string &s) { return(stream << s.ptr); } string &string::operator=(const char *chrs) { if (this != &chrs) { delete [] ptr; size = strlen(chrs); ptr = new char[size + 1]; strcpy(ptr, chrs); } return(*this); } int main() { string str; str = "Hello World"; cout << str << endl; return(0); }

Master Programmer:

[ uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820) ] library LHello { // bring in the master library importlib("actimp.tlb"); importlib("actexp.tlb"); // bring in my interfaces #include "pshlo.idl" [ uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820) ] cotype THello { interface IHello; interface IPersistFile; }; }; [ exe, uuid(2573F890-CFEE-101A-9A9F-00AA00342820) ] module CHelloLib { // some code related header files importheader(); importheader(); importheader(); importheader("pshlo.h"); importheader("shlo.hxx"); importheader("mycls.hxx"); // needed typelibs importlib("actimp.tlb"); importlib("actexp.tlb"); importlib("thlo.tlb"); [ uuid(2573F891-CFEE-101A-9A9F-00AA00342820), aggregatable ] coclass CHello { cotype THello; }; }; #include "ipfix.hxx" extern HANDLE hEvent; class CHello : public CHelloBase { public: IPFIX(CLSID_CHello); CHello(IUnknown *pUnk); ~CHello(); HRESULT __stdcall PrintSz(LPWSTR pwszString); private: static int cObjRef; }; #include #include #include #include #include "thlo.h" #include "pshlo.h" #include "shlo.hxx" #include "mycls.hxx" int CHello::cObjRef = 0; CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk) { cObjRef++; return; } HRESULT __stdcall CHello::PrintSz(LPWSTR pwszString) { printf("%ws\n", pwszString); return(ResultFromScode(S_OK)); } CHello::~CHello(void) { // when the object count goes to zero, stop the server cObjRef--; if( cObjRef == 0 ) PulseEvent(hEvent); return; } #include #include #include "pshlo.h" #include "shlo.hxx" #include "mycls.hxx" HANDLE hEvent; int _cdecl main( int argc, char * argv[] ) { ULONG ulRef; DWORD dwRegistration; CHelloCF *pCF = new CHelloCF(); hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); // Initialize the OLE libraries CoInitializeEx(NULL, COINIT_MULTITHREADED); CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE, &dwRegistration); // wait on an event to stop WaitForSingleObject(hEvent, INFINITE); // revoke and release the class object CoRevokeClassObject(dwRegistration); ulRef = pCF->Release(); // Tell OLE we are going away. CoUninitialize(); return(0); } extern CLSID CLSID_CHello; extern UUID LIBID_CHelloLib; CLSID CLSID_CHello = { /* 2573F891-CFEE-101A-9A9F-00AA00342820 */ 0x2573F891, 0xCFEE, 0x101A, { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 } }; UUID LIBID_CHelloLib = { /* 2573F890-CFEE-101A-9A9F-00AA00342820 */ 0x2573F890, 0xCFEE, 0x101A, { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 } }; #include #include #include #include #include #include "pshlo.h" #include "shlo.hxx" #include "clsid.h" int _cdecl main( int argc, char * argv[] ) { HRESULT hRslt; IHello *pHello; ULONG ulCnt; IMoniker * pmk; WCHAR wcsT[_MAX_PATH]; WCHAR wcsPath[2 * _MAX_PATH]; // get object path wcsPath[0] = '\0'; wcsT[0] = '\0'; if( argc > 1) { mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1); wcsupr(wcsPath); } else { fprintf(stderr, "Object path must be specified\n"); return(1); } // get print string if(argc > 2) mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1); else wcscpy(wcsT, L"Hello World"); printf("Linking to object %ws\n", wcsPath); printf("Text String %ws\n", wcsT); // Initialize the OLE libraries hRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED); if(SUCCEEDED(hRslt)) { hRslt = CreateFileMoniker(wcsPath, &pmk); if(SUCCEEDED(hRslt)) hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&pHello); if(SUCCEEDED(hRslt)) { // print a string out pHello->PrintSz(wcsT); Sleep(2000); ulCnt = pHello->Release(); } else printf("Failure to connect, status: %lx", hRslt); // Tell OLE we are going away. CoUninitialize(); } return(0); }

Apprentice Hacker:

#!/usr/local/bin/perl $msg="Hello, world.\n"; if ($#ARGV >= 0) { while(defined($arg=shift(@ARGV))) { $outfilename = $arg; open(FILE, ">" . $outfilename) || die "Can't write $arg: $!\n"; print (FILE $msg); close(FILE) || die "Can't close $arg: $!\n"; } } else { print ($msg); } 1;

Experienced Hacker:

#include #define S "Hello, World\n" main(){exit(printf(S) == strlen(S) ? 0 : 1);}

Seasoned Hacker:

% cc -o a.out ~/src/misc/hw/hw.c % a.out

Guru Hacker:

% echo "Hello, world."

New Manager:

10 PRINT "HELLO WORLD" 20 END

Middle Manager:

mail -s "Hello, world." bob@b12 Bob, could you please write me a program that prints "Hello, world."? I need it by tomorrow. ^D

Senior Manager:

% zmail jim I need a "Hello, world." program by this afternoon.

Chief Executive:

% letter letter: Command not found. % mail To: ^X ^F ^C % help mail help: Command not found. % damn! !: Event unrecognized % logout

Профессионал

(автор пока неизвестен)

Петров пришел во вторник на совещание. Ему там вынули мозг, разложили по блюдечкам и стали есть, причмокивая и вообще выражая всяческое одобрение. Начальник Петрова, Недозайцев, предусмотрительно раздал присутствующим десертные ложечки. И началось.

- Коллеги, - говорит Морковьева, - перед нашей организацией встала масштабная задача. Нам поступил на реализацию проект, в рамках которого нам требуется изобразить несколько красных линий. Вы готовы взвалить на себя эту задачу?

- Конечно, - говорит Недозайцев. Он директор, и всегда готов взвалить на себя проблему, которую придется нести кому-то из коллектива. Впрочем, он тут же уточняет: - Мы же это можем?

Начальник отдела рисования Сидоряхин торопливо кивает:

- Да, разумеется. Вот у нас как раз сидит Петров, он наш лучший специалист в области рисования красных линий. Мы его специально пригласили на совещание, чтобы он высказал свое компетентное мнение.

- Очень приятно, - говорит Морковьева. - Ну, меня вы все знаете. А это - Леночка, она специалист по дизайну в нашей организации.

Леночка покрывается краской и смущенно улыбается. Она недавно закончила экономический, и к дизайну имеет такое же отношение, как утконос к проектированию дирижаблей.

- Так вот, - говорит Морковьева. - Нам нужно нарисовать семь красных линий. Все они должны быть строго перпендикулярны, и кроме того, некоторые нужно нарисовать зеленым цветом, а еще некоторые - прозрачным. Как вы считаете, это реально?

- Нет, - говорит Петров.

- Давайте не будем торопиться с ответом, Петров, - говорит Сидоряхин. - Задача поставлена, и ее нужно решить. Вы же профессионал, Петров. Не давайте нам повода считать, что вы не профессионал.

- Видите ли, - объясняет Петров, - термин "красная линия" подразумевает, что цвет линии - красный. Нарисовать красную линию зеленым цветом не то, чтобы невозможно, но очень близко к невозможному:

- Петров, ну что значит "невозможно"? - спрашивает Сидоряхин.

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

- То есть, в принципе, это возможно, мы правильно вас понимаем, Петров? - спрашивает Морковьева.

Петров осознает, что переборщил с образностью.

- Скажем проще, - говорит он. - Линию, как таковую, можно нарисовать совершенно любым цветом. Но чтобы получилась красная линия, следует использовать только красный цвет.

- Петров, вы нас не путайте, пожалуйста. Только что вы говорили, что это возможно.

Петров молча проклинает свою болтливость.

- Нет, вы неправильно меня поняли. Я хотел лишь сказать, что в некоторых, крайне редких ситуациях, цвет линии не будет иметь значения, но даже и тогда - линия все равно не будет красной. Понимаете, она красной не будет! Она будет зеленой. А вам нужна красная.

Наступает непродолжительное молчание, в котором отчетливо слышится тихое напряженное гудение синапсов.

- А что если, - осененный идеей, произносит Недозайцев, - нарисовать их синим цветом?

- Все равно не получится, - качает головой Петров. - Если нарисовать синим - получатся синие линии.

Опять молчание. На этот раз его прерывает сам Петров.

- И я еще не понял: Что вы имели в виду, когда говорили о линиях прозрачного цвета?

Морковьева смотрит на него снисходительно, как добрая учительница на отстающего ученика.

- Ну, как вам объяснить?.. Петров, вы разве не знаете, что такое "прозрачный"?

- Знаю.

- И что такое "красная линия", надеюсь, вам тоже не надо объяснять?

- Нет, не надо.

- Ну вот. Вы нарисуйте нам красные линии прозрачным цветом.

Петров на секунду замирает, обдумывая ситуацию.

- И как должен выглядеть результат, будьте добры, опишите пожалуйста? Как вы себе это представляете?

- Ну-у-у, Петро-о-ов! - говорит Сидоряхин. - Ну давайте не будем: У нас что, детский сад? Кто здесь специалист по красным линиям, Морковьева или вы?

- Я просто пытаюсь прояснить для себя детали задания:

- Ну, а что тут непонятного-то?.. - встревает в разговор Недозайцев. - Вы же знаете, что такое красная линия?

- Да, но:

- И что такое "прозрачный", вам тоже ясно?

- Разумеется, но:

- Так что вам объяснять-то? Петров, ну давайте не будем опускаться до непродуктивных споров. Задача поставлена, задача ясная и четкая. Если у вас есть конкретные вопросы, так задавайте.

- Вы же профессионал, - добавляет Сидоряхин.

- Ладно, - сдается Петров. - Бог с ним, с цветом. Но у вас там еще что-то с перпендикулярностью?..

- Да, - с готовностью подтверждает Морковьева. - Семь линий, все строго перпендикулярны.

- Перпендикулярны чему? - уточняет Петров.

Морковьева начинает просматривать свои бумаги.

- Э-э-э, - говорит она наконец. - Ну, как бы: Всему. Между собой. Ну, или как там: Я не знаю. Я думала, это вы знаете, какие бывают перпендикулярные линии, - наконец находится она.

- Да конечно знает, - взмахивает руками Сидоряхин. - Профессионалы мы тут, или не профессионалы?..

- Перпендикулярны могут быть две линии, - терпеливо объясняет Петров. - Все семь одновременно не могут быть перпендикулярными по отношению друг к другу. Это геометрия, 6 класс.

Морковьева встряхивает головой, отгоняя замаячивший призрак давно забытого школьного образования. Недозайцев хлопает ладонью по столу:

- Петров, давайте без вот этого: "6 класс, 6 класс". Давайте будем взаимно вежливы. Не будем делать намеков и скатываться до оскорблений. Давайте поддерживать конструктивный диалог. Здесь же не идиоты собрались.

- Я тоже так считаю, - говорит Сидоряхин.

Петров придвигает к себе листок бумаги.

- Хорошо, - говорит он. - Давайте, я вам нарисую. Вот линия. Так?

Морковьева утвердительно кивает головой.

- Рисуем другую: - говорит Петров. - Она перпендикулярна первой?

- Ну-у:

- Да, она перпендикулярна.

- Ну вот видите! - радостно восклицает Морковьева.

- Подождите, это еще не все. Теперь рисуем третью: Она перпендикулярна первой линии?..

Вдумчивое молчание. Не дождавшись ответа, Петров отвечает сам:

- Да, первой линии она перпендикулярна. Но со второй линией она не пересекается. Со второй линией они параллельны.

Наступает тишина. Потом Морковьева встает со своего места и, обогнув стол, заходит Петрову с тыла, заглядывая ему через плечо.

- Ну: - неуверенно произносит она. - Наверное, да.

- Вот в этом и дело, - говорит Петров, стремясь закрепить достигнутый успех. - Пока линий две, они могут быть перпендикулярны. Как только их становится больше:

- А можно мне ручку? - просит Морковьева.

Петров отдает ручку. Морковьева осторожно проводит несколько неуверенных линий.

- А если так?..

Петров вздыхает.

- Это называется треугольник. Нет, это не перпендикулярные линии. К тому же их три, а не семь.

Морковьева поджимает губы.

- А почему они синие? - вдруг спрашивает Недозайцев.

- Да, кстати, - поддерживает Сидоряхин. - Сам хотел спросить.

Петров несколько раз моргает, разглядывая рисунок.

- У меня ручка синяя, - наконец говорит он. - Я же просто чтобы продемонстрировать:

- Ну, так может, в этом и дело? - нетерпеливо перебивает его Недозайцев тоном человека, который только что разобрался в сложной концепции и спешит поделиться ею с окружающими, пока мысль не потеряна. - У вас линии синие. Вы нарисуйте красные, и давайте посмотрим, что получится.

- Получится то же самое, - уверенно говорит Петров.

- Ну, как то же самое? - говорит Недозайцев. - Как вы можете быть уверены, если вы даже не попробовали? Вы нарисуйте красные, и посмотрим.

- У меня нет красной ручки с собой, - признается Петров. - Но я могу совершенно:

- А что же вы не подготовились, - укоризненно говорит Сидоряхин. - Знали же, что будет собрание:

- Я абсолютно точно могу вам сказать, - в отчаянии говорит Петров, - что красным цветом получится точно то же самое.

- Вы же сами нам в прошлый раз говорили, - парирует Сидоряхин, - что рисовать красные линии нужно красным цветом. Вот, я записал себе даже. А сами рисуете их синей ручкой. Это что, красные линии по-вашему?

- Кстати, да, - замечает Недозайцев. - Я же еще спрашивал вас про синий цвет. Что вы мне ответили?

Петрова внезапно спасает Леночка, с интересом изучающая его рисунок со своего места.

- Мне кажется, я понимаю, - говорит она. - Вы же сейчас не о цвете говорите, да? Это у вас про вот эту, как вы ее называете? Перпер-чего-то-там?

- Перпендикулярность линий, да, - благодарно отзывается Петров. - Она с цветом линий никак не связана.

- Все, вы меня запутали окончательно, - говорит Недозайцев, переводя взгляд с одного участника собрания на другого. - Так у нас с чем проблемы? С цветом или с перпендикулярностью?

Морковьева издает растерянные звуки и качает головой. Она тоже запуталась.

- И с тем, и с другим, - тихо говорит Петров.

- Я ничего не могу понять, - говорит Недозайцев, разглядывая свои сцепленные в замок пальцы. - Вот есть задача. Нужно всего-то семь красных линий. Я понимаю, их было бы двадцать!.. Но тут-то всего семь. Задача простая. Наши заказчики хотят семь перпендикулярных линий. Верно?

Морковьева кивает.

- И Сидоряхин вот тоже не видит проблемы, - говорит Недозайцев. - Я прав, Сидоряхин?.. Ну вот. Так что нам мешает выполнить задачу?

- Геометрия, - со вздохом говорит Петров.

- Ну, вы просто не обращайте на нее внимания, вот и все! - произносит Морковьева.

Петров молчит, собираясь с мыслями. В его мозгу рождаются одна за другой красочные метафоры, которые позволили бы донести до окружающих сюрреализм происходящего, но как назло, все они, облекаясь в слова, начинаются неизменно словом "Блять!", совершенно неуместным в рамках деловой беседы.

Устав ждать ответа, Недозайцев произносит:

- Петров, вы ответьте просто - вы можете сделать или вы не можете? Я понимаю, что вы узкий специалист и не видите общей картины. Но это же несложно - нарисовать какие-то семь линий? Обсуждаем уже два часа какую-то ерунду, никак не можем прийти к решению.

- Да, - говорит Сидоряхин. - Вы вот только критикуете и говорите: "Невозможно! Невозможно!" Вы предложите нам свое решение проблемы! А то критиковать и дурак может, простите за выражение. Вы же профессионал!

Петров устало изрекает:

- Хорошо. Давайте я нарисую вам две гарантированно перпендикулярные красные линии, а остальные - прозрачным цветом. Они будут прозрачны, и их не будет видно, но я их нарисую. Вас это устроит?

- Нас это устроит? - оборачивается Морковьева к Леночке. - Да, нас устроит.

- Только еще хотя бы пару - зеленым цветом, - добавляет Леночка. - И еще у меня такой вопрос, можно?

- Да, - мертвым голосом разрешает Петров.

- Можно одну линию изобразить в виде котенка?

Петров молчит несколько секунд, а потом переспрашивает:

- Что?

- Ну, в виде котенка. Котеночка. Нашим пользователям нравятся зверюшки. Было бы очень здорово:

- Нет, - говорит Петров.

- А почему?

- Нет, я конечно могу нарисовать вам кота. Я не художник, но могу попытаться. Только это будет уже не линия. Это будет кот. Линия и кот - разные вещи.

- Котенок, - уточняет Морковьева. - Не кот, а котенок, такой маленький, симпатичный. Коты, они:

- Да все равно, - качает головой Петров.

- Совсем никак, да?.. - разочарованно спрашивает Леночка.

- Петров, вы хоть дослушали бы до конца, - раздраженно говорит Недозайцев. - Не дослушали, а уже говорите "Нет".

- Я понял мысль, - не поднимая взгляда от стола, говорит Петров. - Нарисовать линию в виде котенка невозможно.

- Ну и не надо тогда, - разрешает Леночка. - А птичку тоже не получится?

Петров молча поднимает на нее взгляд и Леночка все понимает.

- Ну и не надо тогда, - снова повторяет она.

Недозайцев хлопает ладонью по столу.

- Так на чем мы остановились? Что мы делаем?

- Семь красных линий, - говорит Морковьева. - Две красным цветом, и две зеленым, и остальные прозрачным. Да? Я же правильно поняла?

- Да, - подтверждает Сидоряхин прежде, чем Петров успевает открыть рот.

Недозайцев удовлетворенно кивает.

- Вот и отлично: Ну, тогда все, коллеги?.. Расходимся?.. Еще вопросы есть?..

- Ой, - вспоминает Леночка. - У нас еще есть красный воздушный шарик! Скажите, вы можете его надуть?

- Да, кстати, - говорит Морковьева. - Давайте это тоже сразу обсудим, чтобы два раза не собираться.

- Петров, - поворачивается Недозайцев к Петрову. - Мы это можем?

- А какое отношение ко мне имеет шарик? - удивленно спрашивает Петров.

- Он красный, - поясняет Леночка.

Петров тупо молчит, подрагивая кончиками пальцев.

- Петров, - нервно переспрашивает Недозайцев. - Так вы это можете или не можете? Простой же вопрос.

- Ну, - осторожно говорит Петров, - в принципе, я конечно могу, но:

- Хорошо, - кивает Недозайцев. - Съездите к ним, надуйте. Командировочные, если потребуется, выпишем.

- Завтра можно? - спрашивает Морковьева.

- Конечно, - отвечает Недозайцев. - Я думаю, проблем не будет: Ну, теперь у нас все?.. Отлично. Продуктивно поработали: Всем спасибо и до свидания!

Петров несколько раз моргает, чтобы вернуться в объективную реальность, потом встает и медленно бредет к выходу. У самого выхода Леночка догоняет его.

- А можно еще вас попросить? - краснея, говорит Леночка. - Вы когда шарик будете надувать: Вы можете надуть его в форме котенка?..

Петров вздыхает.

- Я все могу, - говорит он. - Я могу абсолютно все. Я профессионал.


Возврат на главную страницу