Компактное программирование / Компактнопрограммическая сатира |
The Evolution of a Programmer
High School/Jr.High:
10 PRINT "HELLO WORLD" 20 ENDFirst 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:
#includevoid 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.outGuru Hacker:
% echo "Hello, world."New Manager:
10 PRINT "HELLO WORLD" 20 ENDMiddle Manager:
mail -s "Hello, world." bob@b12 Bob, could you please write me a program that prints "Hello, world."? I need it by tomorrow. ^DSenior 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 класс". Давайте будем взаимно вежливы. Не будем делать намеков и скатываться до оскорблений. Давайте поддерживать конструктивный диалог. Здесь же не идиоты собрались.
- Я тоже так считаю, - говорит Сидоряхин.
Петров придвигает к себе листок бумаги.
- Хорошо, - говорит он. - Давайте, я вам нарисую. Вот линия. Так?
Морковьева утвердительно кивает головой.
- Рисуем другую: - говорит Петров. - Она перпендикулярна первой?
- Ну-у:
- Да, она перпендикулярна.
- Ну вот видите! - радостно восклицает Морковьева.
- Подождите, это еще не все. Теперь рисуем третью: Она перпендикулярна первой линии?..
Вдумчивое молчание. Не дождавшись ответа, Петров отвечает сам:
- Да, первой линии она перпендикулярна. Но со второй линией она не пересекается. Со второй линией они параллельны.
Наступает тишина. Потом Морковьева встает со своего места и, обогнув стол, заходит Петрову с тыла, заглядывая ему через плечо.
- Ну: - неуверенно произносит она. - Наверное, да.
- Вот в этом и дело, - говорит Петров, стремясь закрепить достигнутый успех. - Пока линий две, они могут быть перпендикулярны. Как только их становится больше:
- А можно мне ручку? - просит Морковьева.
Петров отдает ручку. Морковьева осторожно проводит несколько неуверенных линий.
- А если так?..
Петров вздыхает.
- Это называется треугольник. Нет, это не перпендикулярные линии. К тому же их три, а не семь.
Морковьева поджимает губы.
- А почему они синие? - вдруг спрашивает Недозайцев.
- Да, кстати, - поддерживает Сидоряхин. - Сам хотел спросить.
Петров несколько раз моргает, разглядывая рисунок.
- У меня ручка синяя, - наконец говорит он. - Я же просто чтобы продемонстрировать:
- Ну, так может, в этом и дело? - нетерпеливо перебивает его Недозайцев тоном человека, который только что разобрался в сложной концепции и спешит поделиться ею с окружающими, пока мысль не потеряна. - У вас линии синие. Вы нарисуйте красные, и давайте посмотрим, что получится.
- Получится то же самое, - уверенно говорит Петров.
- Ну, как то же самое? - говорит Недозайцев. - Как вы можете быть уверены, если вы даже не попробовали? Вы нарисуйте красные, и посмотрим.
- У меня нет красной ручки с собой, - признается Петров. - Но я могу совершенно:
- А что же вы не подготовились, - укоризненно говорит Сидоряхин. - Знали же, что будет собрание:
- Я абсолютно точно могу вам сказать, - в отчаянии говорит Петров, - что красным цветом получится точно то же самое.
- Вы же сами нам в прошлый раз говорили, - парирует Сидоряхин, - что рисовать красные линии нужно красным цветом. Вот, я записал себе даже. А сами рисуете их синей ручкой. Это что, красные линии по-вашему?
- Кстати, да, - замечает Недозайцев. - Я же еще спрашивал вас про синий цвет. Что вы мне ответили?
Петрова внезапно спасает Леночка, с интересом изучающая его рисунок со своего места.
- Мне кажется, я понимаю, - говорит она. - Вы же сейчас не о цвете говорите, да? Это у вас про вот эту, как вы ее называете? Перпер-чего-то-там?
- Перпендикулярность линий, да, - благодарно отзывается Петров. - Она с цветом линий никак не связана.
- Все, вы меня запутали окончательно, - говорит Недозайцев, переводя взгляд с одного участника собрания на другого. - Так у нас с чем проблемы? С цветом или с перпендикулярностью?
Морковьева издает растерянные звуки и качает головой. Она тоже запуталась.
- И с тем, и с другим, - тихо говорит Петров.
- Я ничего не могу понять, - говорит Недозайцев, разглядывая свои сцепленные в замок пальцы. - Вот есть задача. Нужно всего-то семь красных линий. Я понимаю, их было бы двадцать!.. Но тут-то всего семь. Задача простая. Наши заказчики хотят семь перпендикулярных линий. Верно?
Морковьева кивает.
- И Сидоряхин вот тоже не видит проблемы, - говорит Недозайцев. - Я прав, Сидоряхин?.. Ну вот. Так что нам мешает выполнить задачу?
- Геометрия, - со вздохом говорит Петров.
- Ну, вы просто не обращайте на нее внимания, вот и все! - произносит Морковьева.
Петров молчит, собираясь с мыслями. В его мозгу рождаются одна за другой красочные метафоры, которые позволили бы донести до окружающих сюрреализм происходящего, но как назло, все они, облекаясь в слова, начинаются неизменно словом "Блять!", совершенно неуместным в рамках деловой беседы.
Устав ждать ответа, Недозайцев произносит:
- Петров, вы ответьте просто - вы можете сделать или вы не можете? Я понимаю, что вы узкий специалист и не видите общей картины. Но это же несложно - нарисовать какие-то семь линий? Обсуждаем уже два часа какую-то ерунду, никак не можем прийти к решению.
- Да, - говорит Сидоряхин. - Вы вот только критикуете и говорите: "Невозможно! Невозможно!" Вы предложите нам свое решение проблемы! А то критиковать и дурак может, простите за выражение. Вы же профессионал!
Петров устало изрекает:
- Хорошо. Давайте я нарисую вам две гарантированно перпендикулярные красные линии, а остальные - прозрачным цветом. Они будут прозрачны, и их не будет видно, но я их нарисую. Вас это устроит?
- Нас это устроит? - оборачивается Морковьева к Леночке. - Да, нас устроит.
- Только еще хотя бы пару - зеленым цветом, - добавляет Леночка. - И еще у меня такой вопрос, можно?
- Да, - мертвым голосом разрешает Петров.
- Можно одну линию изобразить в виде котенка?
Петров молчит несколько секунд, а потом переспрашивает:
- Что?
- Ну, в виде котенка. Котеночка. Нашим пользователям нравятся зверюшки. Было бы очень здорово:
- Нет, - говорит Петров.
- А почему?
- Нет, я конечно могу нарисовать вам кота. Я не художник, но могу попытаться. Только это будет уже не линия. Это будет кот. Линия и кот - разные вещи.
- Котенок, - уточняет Морковьева. - Не кот, а котенок, такой маленький, симпатичный. Коты, они:
- Да все равно, - качает головой Петров.
- Совсем никак, да?.. - разочарованно спрашивает Леночка.
- Петров, вы хоть дослушали бы до конца, - раздраженно говорит Недозайцев. - Не дослушали, а уже говорите "Нет".
- Я понял мысль, - не поднимая взгляда от стола, говорит Петров. - Нарисовать линию в виде котенка невозможно.
- Ну и не надо тогда, - разрешает Леночка. - А птичку тоже не получится?
Петров молча поднимает на нее взгляд и Леночка все понимает.
- Ну и не надо тогда, - снова повторяет она.
Недозайцев хлопает ладонью по столу.
- Так на чем мы остановились? Что мы делаем?
- Семь красных линий, - говорит Морковьева. - Две красным цветом, и две зеленым, и остальные прозрачным. Да? Я же правильно поняла?
- Да, - подтверждает Сидоряхин прежде, чем Петров успевает открыть рот.
Недозайцев удовлетворенно кивает.
- Вот и отлично: Ну, тогда все, коллеги?.. Расходимся?.. Еще вопросы есть?..
- Ой, - вспоминает Леночка. - У нас еще есть красный воздушный шарик! Скажите, вы можете его надуть?
- Да, кстати, - говорит Морковьева. - Давайте это тоже сразу обсудим, чтобы два раза не собираться.
- Петров, - поворачивается Недозайцев к Петрову. - Мы это можем?
- А какое отношение ко мне имеет шарик? - удивленно спрашивает Петров.
- Он красный, - поясняет Леночка.
Петров тупо молчит, подрагивая кончиками пальцев.
- Петров, - нервно переспрашивает Недозайцев. - Так вы это можете или не можете? Простой же вопрос.
- Ну, - осторожно говорит Петров, - в принципе, я конечно могу, но:
- Хорошо, - кивает Недозайцев. - Съездите к ним, надуйте. Командировочные, если потребуется, выпишем.
- Завтра можно? - спрашивает Морковьева.
- Конечно, - отвечает Недозайцев. - Я думаю, проблем не будет: Ну, теперь у нас все?.. Отлично. Продуктивно поработали: Всем спасибо и до свидания!
Петров несколько раз моргает, чтобы вернуться в объективную реальность, потом встает и медленно бредет к выходу. У самого выхода Леночка догоняет его.
- А можно еще вас попросить? - краснея, говорит Леночка. - Вы когда шарик будете надувать: Вы можете надуть его в форме котенка?..
Петров вздыхает.
- Я все могу, - говорит он. - Я могу абсолютно все. Я профессионал.