From sergefad@glas.apc.org Sun Feb 12 18:52:55 EST 1995 Некоторые важные правила для настоящих программистов. Настоящие программисты не пишут спецификаций - пользователи должны считать се- бя счастливыми, получая любую программу и принимать ее такой, какая она есть. Настоящие программисты не комментируют свои программы. Это затрудняет написа- ние, и это затруднит чтение. Настоящие программисты не пишут прикладные программы, они программируют не ра- ди презренного металла. Прикладное программирование есть кусок хлеба для тех, кто не может заниматься системным программированием. Настоящие программисты не готовят сами. Они питаются в закусочных и забегалов- ках. Настоящие программисты не пишут на КОБОЛЕ. КОБОЛ - это для простоватых при- кладных программистов. Настоящие программисты никогда не сдают свою работу с первого раза. Но если отдать им машину, они могут залатать все прорехи в своей программе за один или несколько 30-часовых отладочных сеанса. Настоящие программисты не пишут на ФОРТРАНЕ. ФОРТРАН - это для расчетов труб под давлением и кристаллографических игрушек. Настоящие программисты никогда не работают с 9 до 5. Если какой-нибудь настоя- щий программист в девять часов утра на работе, это значит, что он провел на работе всю ночь. Настоящие программисты не пишут на Бэйсике. Обычно программист не пишет на Бэйсике, если он старше 12 лет. Настоящие программисты не пишут на PL/I. PL/I - это для программистов, которые не могут решится писать на КОБОЛЕ или ФОРТРАНЕ. Настоящие программисты не пишут на АПЛ. Любой дурак может быть непонятным, ес- ли пишет на АПЛ. Настоящие программисты не играют в теннис или любую другую спортивную игру, поскольку для этого надо сменить одежду. Однако альпинизм вполне подходит, и настоящие программисты могут надеть свои бахилы в случае, если в результате подъёма они вдруг окажутся посередине машинного зала. Настоящие программисты не готовят документацию. Документация - это для тех простаков, кто не может читать листинги или объектный код. Настоящие программисты не пишут на Паскале или на АДЕ, или на любом другом изобретенном учеными языке. Строгие правила написания программ - это для людей со слабой памятью. Настоящие программисты знают лучше пользователя, что ему нужно. Настоящие программисты считают структурное программирование частью коммунисти- ческого заговора. Настоящие программисты не работают по расписанию. Расписание - это для лизо- блюдов. Настоящим программистам нравится держать своих начальников в полной неизвестности. Настоящие программисты думают лучше, когда играют в "Приключения". Настоящие программисты наслаждаются, установив CP/M для работы на машинaх IBM/370 и MVS на Спектруме. Настоящим программистам никогда не досаждают системы безопасности, они сбрасы- вают биты где нужно и вставляют непонятные сообщения в данные системы безопас- ности. Настоящие программисты никогда на исправляют исходный код после работы с прог- раммой ZAP, кроме всего прочего, завтра может потребоваться исправления вно- сить снова. Настоящие программисты не тестируют программы. Тестирование - это для людей со слабыми нервами и к тому же не уверенных в себе. Настоящие программисты всегда программируют рекурсивно и запускают программы только в режиме супервизора, иначе программирование нельзя считать настоящим развлечением. Настоящие программисты никогда не занимаются архивированием. Теория ошибок. Ошибки так же неисчерпаемы, как и атом. Аксиома: В любой программе есть ошибки. Закон пропорциональности: Чем более программа необходима, тем больше в ней ошибок. Следствие: Ошибок не содержит лишь совершенно ненужная программа. Фундаментальный закон теории ошибок: На ошибках учатся. Следствие 1: Программист, написавший программу, становится ученым. Следствие 2: Чем больше программист делает ошибок, тем быстрее он становит- ся ученым. Следствие 3: Крупный ученый-программист никогда не пишет правильные програм- мы. Замечание: На то он и ученый. Указание начинающему программисту: Если вы с первого раза сумели написать программу, в которой транслятор не обнаружил ни одной ошибки, сообщите об этом системному программисту. Он исправит ошибки в трансляторе. Закон находимости ошибок: Программист может обнаружить ошибку только в чужой программе. Следствие: Ошибке не все равно, кто ее обнаружит. Совет начинающему программисту: Никогда не исправляйте найденные ошибки, ибо это повлечет за собой появление неизвестного числа ненайденных. Лучше опишите их в сопроводительной документации как особенность программы. Определение: Будем называть языком ошибок правила, в обход которых пишутся программы. Язык ошибок. Ошибки могут следовать друг за другом. От перестановки двух эквивалентных ошибок результат не меняется (коммута- тивность эквивалентных ошибок). Две последовательные ошибки можно объединить в одну, более сильную. Одинаковые ошибки необязательно делать каждый раз, достаточно сделать од- ну, а затем обращатся к ней по мере необходимости из любого места программы. Ошибки могут образовывать циклы. Наиболее устойчивый из них - бесконечный. Ошибки могут вызывать друг друга и сами себя (рекурсивность ошибок). Ошибки допускают многократное вложение друг в друга. Две одинаковые вло- женные ошибки называются четной ошибкой и ошибкой не являются. Свойство четности ошибок: Если написанная программа сработала правильно, то это значит, что во время ее работы выполнилось четное число ошибок или программист не понял задание. Формулировка вышеприведенного свойства, предназначенная для политиков: Ошибка, повторенная дважы, перестает быть ошибкой. Взаимодействие ошибок с базовой операционной системой. Во время исполнения ошибки имеют наивысший приоритет. Прервать исполнение ошибки может только другая, более активная ошибка. Запросы операционной системы к ошибкам ошибками могут игнорироваться. Запросы ошибок к операционной системе игнорироваться не могут. При работе с файлами ошибки могут пользоваться файловой системой базовой ОС и ее ошибками. На ЭВМ с параллельной архитектурой может выполнятся несколько ошибок одно- временно. Системные программы. Системные программы облегчают процесс написания прикладных программ и их ошибок. Определение: Тестирование - это процесс нахожения ошибок в тесте. Хороший тест должен содержать ошибки, компенсирующие их нехватку в тестиру- емой программе. Языковый редактор, призванный уберечь программиста от синтаксических оши- бок, позволяет вносить в программу весьма хитроумные ошибки, которые не удаёт- ся обнаружить ни транслятором, ни отладчиком. Обычный текстовый редактор таких возможностей не предоставляет. Программа-транслятор, предназначенная для перевода программ с языка высоко- го уровня на машинный язык, при переводе порождает ошибки. Ошибки, которые со- держались в исходном описании, переводятся безошибочно. Заключительный совет тем, кто до него добрался: До начала работы над проек- том следует тщательно продумать все необходимые ошибки и связи между ними. Это значительно упростит работу над ошибками в самом проекте. КТО ИЗ НАС ХАКЕР - Версия 1.0 Здесь содержатся факты и вевозможный фольклор о мире хакеров, ловко оформленные под тест. Как вести подсчет - добавляйте 1 каждый раз, когда можете сделать описанное действие или знаете ответ на поставленный вопрос. Если Ваша сумма лежит между: Тогда Вы 0x000 и 0x010 -> компьютерно неграмотный 0x011 и 0x040 -> пользователь 0x041 и 0x080 -> оператор 0x081 и 0x0C0 -> нерд 0x0C1 и 0x100 -> хакер 0x101 и 0x180 -> учитель (гуру) 0x181 и 0x200 -> колдун Кстати: если Вам непонятна система счисления, тест для Вас окончен. Ну а теперь отвечайте... 0001 Вы когда-нибудь использовали компьютер? 0002 ... больше чем 4 часа непрерывно? 0003 ... больше чем 8 часов? 0004 ... больше чем 16 часов? 0005 ... больше чем 32 часа? 0006 Вы когда-либо латали бумажную ленту? 0007 Вы когда-либо забывали за программированием отправиться на занятия? 0008 ... на экзамен? 0009 ... на свадьбу? 0010 ... на свою собственную свадьбу? 0011 Вы когда-нибудь программировали по пьяне? 0012 ... И продолжали это делать с похмелья? 0013 Вы когда-нибудь писали летный тренажер? 0014 У Вас когда-либо отсутствовала гарантия на Ваше оборудование? 0015 Меняли ли значение 4? 0016 ... Неумышленно? 0017 ... В языке отличном от Фортрана? 0018 Вы используете DWIM чтобы сделать жизнь интереснее? 0019 У Вашего компьютера есть имя? 0020 Вы недовольны когда некая особенность приписывается Вам постоянно ? 0021 Вы употребляете в пищу slime-molds? 0022 Вы знаете свой возраст в днях? 0023 Вы когда-либо хотели вчерашней пиццы? 0024 Вы когда-нибудь придумывали компьютерные шутки? 0025 ... Кто-нибудь не понял их? 0026 Вы можете прочитать наизусть лимерик? 0027 ... Задом наперед? 0028 Вы видели "Дональд Дак в стране Математики"? 0029 Вы видели "Трон"? 0030 Вы видели "Военные игры"? 0031 Вы знаете что означает ASCII? 0032 ... EBCDIC? 0033 Вы можете прочитать и написать таблицу ASCII в шестнадцати- или восьмеричном виде? 0034 Вы знаете как именуются все управляющие коды таблицы ASCII ? 0035 Вы можете прочитать и написать таблицу EBCDIC в шестнадцатиричном виде? 0036 Вы можете преобразовать EBCDIC в ASCII и наоборот? 0037 Вы знаете какие символы одинаковы в таблицах ASCII и EBCDIC? 0038 Вы знаете значение maxint в вашей системе? 0039 Когда-нибудь определяли свой собственный тип числовых данных ради увеличения точности? 0040 Вы можете назвать степени двойки вплоть до 2**16 в произвольном порядке? 0041 ... вплоть до 2**32? 0042 ... вплоть до 2**64? 0043 Вы можете читать перфокарту глядя на отверстия? 0044 ... на ощупь? 0045 Вы когда-нибудь исправляли прямо в двоичном коде? 0046 ... Пока программа работает? 0047 Вы когда-либо использовали программные оверлеи? 0048 Вы когда-либо встречались с кем-то из вице-президентов IBM? 0049 Вы знаете Денниса, Билла или Кена? 0050 Вы когда-нибудь выводили фотографии на дисплей? 0051 Вы когда-нибудь прокручивали видеокассету на Вашем дисплее? 0052 Переводили ли Вы когда-нибудь фотоснимки в цифровой код? 0053 Вы когда-либо забывали ответить жестоко досавдавшему Вам шутнику? 0054 Вы когда-либо оптимизировали неработающий цикл? 0055 Вы когда-либо оптимизировали двоичную сортировку? 0056 Вы придумывали диалог с компьютером для себя? 0057 Вы когда-нибудь разговаривали с акустическим модемом? 0058 ... И Вам отвечали? 0059 Вы можете свистеть на 300 бод? 0060 ... 1200 бод? 0061 Вы можете свистеть как при наборе телефонного номера? 0062 Вы наблюдали крах диска? 0063 Вам приходилось ползать по диску? 0064 Вы можете построить puffer train? 0065 ... Вы знаете что это такое? 0066 Вы можете играть музыку на своем принтере? 0067 ... На своем дисководе? 0068 ... На своей лентопротяжке? 0069 У Вас есть Снупи-календарь? 0070 ... Он устарел? 0071 У Вас есть снимки, отпечатанные на принтере? 0072 ... Мона Лиза? 0073 ... Энтерпрайз? 0074 ... Эйнштейн? 0075 ... Оливер? 0076 Вы можете печатать снимки на принтере? 0077 Вы знаете, что означает нижеследующее? 0078 ... DASD 0079 ... Emacs 0080 ... ITS 0081 ... RSTS/E 0082 ... SNA 0083 ... Spool 0084 ... TCP/IP Вы когда-нибудь использовали 0085 ... TPU? 0086 ... TECO? 0087 ... Emacs? 0088 ... ed? 0089 ... vi? 0090 ... Xedit (in VM/CMS)? 0091 ... SOS? 0092 ... EDT? 0093 ... Wordstar? 0094 Вы когда-нибудь писали CLIST? Вы когда-нибудь программировали в 0095 ... оконной системе X? 0096 ... CICS? 0097 Вы когда-нибудь принимали по факсу фотокопию флоппи? 0098 Вы когда-нибудь показывали новичку "любую" клавишу? 0099 ... Это был тумблер питания? Вы когда-нибудь занимались 0100 ... Usenix? 0101 ... DECUS? 0102 ... SHARE? 0103 ... SIGGRAPH? 0104 ... NetCon? 0105 Вы когда-либо принимали участие в стандартных группах? 0106 Вы когда-либо отлаживали в машинных кодах по телефону? 0107 Вы когда-нибудь видели звуковую почту? 0108 ... Вы могли слышать ее? 0109 Вы решаете кроссворды с помощью диалогового словаря? 0110 Вы делали тест Тьюринга? 0111 ... Вы ошиблись? 0112 Вы роняли перфокарточное устройство? 0113 ... Вы удачно ставили его обратно? 0114 ... Не глядя? 0115 Вы когда-нибудь использовали IPCS? 0116 Вам приходилось снимать ящик с пивом с Вашего компьютера? (другой перевод: Вы когда-либо выбирали пиво с помощью Вашего компьютера?) 0117 Вы занимались переделкой цветов на своем компьютере? 0118 Когда-либо прерывали UPS? 0119 Когда-либо маскировали NMI? 0120 Вы когда-либо отключали Halon system? 0121 ... Умышленно? 0122 ... Вы до сих пор работаете там же? 0123 Вы когда-нибудь трогали основной силовой выключатель? 0124 ... Умышленно? 0125 Вы имеете всякую ненужную документацию? 0126 ... Вы до сих пор ее читаете? 0127 Когда-либо дизассемблировали программу? 0128 ... Нашли в ней ошибки? 0129 Когда-либо помогали работающему за компьютером человеку расположившись позади него? 0130 Когда-нибудь пробовали устанавливать подставку под свой телефон? 0131 Когда-нибудь бросали компьютер выше чем со второго этажа? 0132 Когда-либо меняли маршрут разносчику не признаваясь в этом? 0133 Когда-либо решали проблемы "железа" программно? 0134 ... И наоборот? 0135 Когда-либо имели дело с группами поддержки пользователей? 0136 Когда-либо упоминались в "Компьютерных развлечениях"? 0137 Ваша деятельность упоминалась в газетах? 0138 ... И Вам пришлось после этого убираться подальше? 0139 Вам приходилось привлекать внимание, производя шум в кустах? 0140 Вам приходилось писать комментарии на неродном языке? 0141 Физически ломать "железо" из программ? 0142 Когда-либо пробовали улучшить Ваши баллы в тесте на хакера? 0143 Вы завтракаете с листингом? 0144 ... Спите с ним? 0145 Когда-либо исправляли ошибку в микрокоде? 0146 ... И пососедству с ней? 0147 Вы можете программировать на машине Тьюринга? 0148 Вы можете преобразовывать постфикс в префикс в уме? 0149 Вы можете преобразовывать шестнадцатиричное число в восьмеричное в уме? 0150 Вы знаете как использовать Kleene star? 0151 Вы когда-нибудь оставались голодным после обеда с философом? 0152 Вы решали очень трудные (дословно: останавливающие) проблемы? 0153 ... И правильно? 0154 Когда-либо оказывались в тупике, употребляя спагетти? 0155 Когда-нибудь писали самовоспроизводящиеся программы? 0156 Когда-либо делали выгрузку в своей программе? 0157 Вы можете читать государственные диаграммы? 0158 ... Вам они нужны? 0159 Когда-либо создавали неудаляемую программу? 0160 ... Намеренно? 0161 Когда-либо спрашивали печенье? 0162 Когда-либо повышали скорость в системе, удаляя JMPы? * Вы знаете... 0163 Вы знаете кто написал Рогу? 0164 ... Рогоматик? 0165 Вы знаете, что такое серый код? 0166 Вы знаете, что означает HCF? 0167 ... Когда-либо использовали это? 0168 ... Умышленно? 0169 Вы знаете, что такое кружевная перфокарта? 0170 ... Как ее сделать? 0171 Вам известен конец света? 0172 ... Вам приходилось его встречать? 0173 ... И Вы при этом переписывали код? 0174 Вам известна разница между DTE и DCE? 0175 Вам извесно расположение штырей RS-232C? 0176 ... Вы можете соединять контакты не глядя? * Вы имеете... 0177 Вы имеете копию Dec Wars? 0178 Вы имеете каноническую коллекцию шуток в стиле "лампочки"? 0179 Вы имеете копию хакерского словаря? 0180 ... Вы распостраняете его? 0181 Вы имеете цветовой шаблон? 0182 ... И его не используете? 0183 Вы имеете свой собственный файл удачных кондитерских рецептов? 0184 Вы имеете собственную спонтанную кулинарную книгу? 0185 ... Иногда что-нибудь из нее делаете? 0186 Вы владелец модема? 0187 ... терминала? 0188 ... игрушечного компьютера? 0189 ... персонального компьютера? 0190 ... миникомпьютера? 0191 ... большого компьютера? 0192 ... суперкомпьютера? 0193 ... гиперкуба? 0194 ... принтера? 0195 ... лазерного принтера? 0196 ... ленточного накопителя? 0197 ... другого периферийного устройства? 0198 Вы имеете программируемый калькулятор? 0199 ... Это RPN? 0200 Вы когда-либо владели больше чем 1 компьтером? 0201 ... 4 компьютерами? 0202 ... 16 компьтерами? 0203 Вы имеете SLIP-линию? 0204 ... T1-линию? 0205 Вы имеете отдельный телефон для своего компьютера? 0206 ... Он законный? 0207 Вы имеете оперативную память? 0208 ... барабанную память? 0209 ... пузырьковую память? 0210 Вы используете больше чем 16 мегабайт дискового пространства? 0211 ... 256 мегабайт? 0212 ... 1 гигабайта? 0213 ... 16 гигабайт? 0214 ... 256 гигабайт? 0215 ... 1 терабайт? 0216 Вы имеете оптический дисковод? 0217 Вы имеете персональную библиотеку на магнитной ленте? 0218 ... Она не помечена? 0219 Вы имеете больше 16 дискетт? 0220 ... 64 дискетт? 0221 ... 256 дискетт? 0222 ... 1024 дискетт? 0223 Вы имеете сколько-нибудь 8-дюймовых дисков? 0224 Вы имеете внутренний стек? 0225 Вы имеете прерывания по таймеру? 0226 У Вас есть три тома "Искусства программирования"? 0227 ... Вы сделали все упражнения? 0228 ... Вы имеете MIX-эмулятор? 0229 ... Вы знаете, как называются ненаписанные тома? 0230 Вы можете процитировать "Мифический человеко-месяц"? 0231 ... И Вы участвовали в проекте OS/360? 0232 Вы имеете руководство по TTL? 0233 Вы имеете распечатки более чем трехлетней давности? * Профессия 0234 У Вас есть работа? 0235 ... Вы когда-нибудь имели работу? 0236 ... Это было связано с компьютерами? 0237 У Вас ненормированный рабочий день? 0238 Вы когда-нибудь были системным администратором? 0239 Вы имеете больше мегабайт чем мегабаков? 0240 Вы когда-нибудь снижали уровень Вашей работы, чтобы повысить свою производительную мощь? 0241 Ваша работа засекречена? 0242 ... У Вас есть код, чтобы подтвердить это? 0243 Вы когда-либо имели безопасную очистку? * Игры 0244 Вы когда-нибудь играли в Понг? Вы когда-нибудь играли в 0246 ... Spacewar? 0247 ... Star Trek? 0248 ... Wumpus? 0249 ... Lunar Lander? 0250 ... Empire? Вам когда-нибудь удалось побить 0251 ... Мориа 4.8? 0252 ... Рогу 3.6? 0253 ... Рогу 5.3? 0254 ... Ларн? 0255 ... Хак 1.0.3? 0256 ... Нетхак 2.4? 0257 Вы можете набрать больше очков в Рогу, чем Рогоматик? 0258 Вы когда-нибудь играли в Приключения? 0259 ... Зорк? 0260 Вы когда-нибудь писали какой-нибудь "красный" код? 0261 Вы когда-нибудь писали игровую программу? 0262 ... работающую в реальном масштабе времени? 0263 ... для нескольких игроков? 0264 ... для игры в сети? 0265 Вы можете обойтись без доктора Элизы? * "Железо" 0266 Вы когда-нибудь использовали световое перо? 0267 ... Вы делали его? Вы когда-нибудь использовали 0268 ... телетайп? 0269 ... бумажную ленту? 0270 ... декрайтер? 0271 ... перфокарточное устройство? 0272 ... SOL? Вы когда-нибудь делали 0273 ... Альтаир? 0274 ... компьютер Хет/Зенит? Вы знаете как использовать 0275 ... осциллоскоп? 0276 ... вольтметр? 0277 ... измеритель частоты? 0278 ... логический пробник? 0279 ... инструменты электрика? 0280 ... припойное железо? 0281 ... логический анализатор? 0282 Вы когда-нибудь конструировали LSI чип? 0283 ... и его изготавливали? 0284 Вы когда-нибудь протравливали печатную плату? * История 0285 Вы когда-нибудь исправляли загрузочный код с передней панели? 0286 ... из памяти? 0287 Вы можете программировать для машины ЭНИАК? 0288 Когда-нибудь видели перфокарту в 90 позиций? * IBM 0289 Вам приходилось во сне перечислять номера устройств IBM? 0290 Вы знаете что означает в машине IBM номер 7320154? 0291 Вы понимаете потоки данных устройства 3270? 0292 Вы знаете что такое права доступа VM? 0293 Вы загружали IBM с магнитной ленты? 0294 ... с карточного ввода? 0295 Вы можете спеть что-нибудь из песенника IBM? * Языки 0296 Вы знаете больше чем 4 языка программирования? 0297 ... 8 языков? 0298 ... 16 языков? 0299 ... 32 языков? 0300 Вы создавали когда-нибудь язык программирования? 0301 Вы знаете что означает Basic? 0302 ... Pascal? 0303 Вы можете программировать на Бейсике? 0304 ... И Вы признаете его? 0305 Вы можете программировать на Коболе? 0306 ... Вы отрицаете его? 0307 Вы знаете Паскаль? 0308 ... Модулу-2? 0309 ... Оберон? 0310 ... Больше чем два языка Николауса Вирта? 0311 ... Вы можете прочитать наизусть шутки Николауса Вирта? 0312 Вы знаете Алгол-60? 0313 ... Алгол-W? 0314 ... Алгол-68? 0315 ... Вы понимаете сообщения Алгола-68? 0316 ... Вам нравится двухуровневая грамматика? 0317 Вы можете программировать на ассемблере на двух разных машинах? 0318 ... на 4 разных машинах? 0319 ... на 8 разных машинах? Вы знаете 0320 ... APL? 0321 ... Ada? 0322 ... BCPL? 0323 ... C++? 0324 ... C? 0325 ... Comal? 0326 ... Eiffel? 0327 ... Forth? 0328 ... Fortran? 0329 ... Hypertalk? 0330 ... Icon? 0331 ... Lisp? 0332 ... Logo? 0333 ... MIIS? 0334 ... MUMPS? 0335 ... PL/I? 0336 ... Pilot? 0337 ... Plato? 0338 ... Prolog? 0339 ... RPG? 0340 ... Rexx (or ARexx)? 0341 ... SETL? 0342 ... Smalltalk? 0343 ... Snobol? 0344 ... VHDL? 0345 ... какой-нибудь ассемблер? 0346 Вы изьясняетесь на VT-100? 0347 ... Postscript? 0348 ... SMTP? 0349 ... UUCP? 0350 ... английском? * Микро 0351 Когда-нибудь копировали защищенный от копирования диск? 0352 Когда-нибудь создавали систему защиты от копирования? 0353 Вы когда-нибудь делали флиппи диск? (Примечание переводчика: у нас этим занимаются на заводском уровне (вспомним Искру)) 0354 Вы когда-нибудь восстанавливали данные с разрушенного диска? 0355 Когда-нибудь грузились с "раздетого" флоппи? * Работа в сети 0356 Вы когда-нибудь регистрировались в двух различных временных поясах одновременно? 0357 Вы помните карту UUCP для вашей страны? 0358 ... Для любой страны? 0359 Вы когда-нибудь находили ошибки в электронной почте? 0360 ... Это была дыра безопасности? 0361 Вы помните таблицу из HOSTS.TXT? 0362 ... Вы ее изменяли? 0363 Вы можете назвать имена всех серверов верхнего уровня и их адреса? 0364 Вы знаете RFC-822 наизусть? 0365 ... Вы можете перечислить все ошибки в нем? 0366 Вы писали файл конфигурации для электронной почты? 0367 ... Он работал? 0368 ... Вам приходилось бормотать во сне "defocus"? 0369 Вы знаете время существования максимального пакета? * Операционные системы Вы можете использовать 0370 ... BSD Unix? 0371 ... non-BSD Unix? 0372 ... AIX 0373 ... VM/CMS? 0374 ... VMS? 0375 ... MVS? 0376 ... VSE? 0377 ... RSTS/E? 0378 ... CP/M? 0379 ... COS? 0380 ... NOS? 0381 ... CP-67? 0382 ... RT-11? 0383 ... MS-DOS? 0384 ... Finder? 0385 ... PRODOS? 0386 ... больше чем одну ОС для TRS-80? 0387 ... Tops-10? 0388 ... Tops-20? 0389 ... OS-9? 0390 ... OS/2? 0391 ... AOS/VS? 0392 ... Multics? 0393 ... ITS? 0394 ... Vulcan? 0395 Вам когда нибудь приходилось делать выгрузку на магнитную ленту? 0396 ... на перфоратор? 0397 ... на телетайп? 0398 ... на сетевой (распределенный) диск? 0399 Вы когда-нибудь находили ошибки в операционной системе? 0400 ... Вы использовали их? 0401 ... Вы о них сообщали? 0402 ... И Ваши сообщения игнорировали? 0403 Вы когда-нибудь приводили машину к краху? 0404 ... Умышленно? * Люди 0405 Вы знаете какого-нибудь человека? 0406 ... больше чем одного? 0407 ... больше чем двух? * Лично Вы 0408 Ваши шнурки развязываются? 0409 Вы хорошо знакомы с иностранцами? 0410 Вы можете перечислить с полдюжины телефонных номеров компьютерных систем, но не можете назвать свои собственные? 0411 Вы начинаете работать до завтрака? 0412 Вы пожираете больше чем забегаловка типа LD-50 за день? 0413 Вы отвечаете на два противоположных вопроса "да"? 0414 У Вас есть копии последних руководств по какой-нибудь операционной системе? 0415 ... *каждого* руководства по операционной системе? 0416 Другие люди испытывают трудности в привычной Вам обстановке? 0417 Вы мечтаете на каком-то из языков программирования? 0418 Вам трудно сосредоточится на трехмерных обьектах? 0419 Вы игнорируете мышей? 0420 Вы презираете клавишу CAPS LOCK? 0421 Вы полагаете что понятие "меню" относится к ресторанам? 0422 У Вас на стене висит Mandelbrot? 0423 Вы украшаете бобины с магнитной лентой или перфокарты? 0424 В Вашем доме развешаны пластины от дисков или "раздетые" флоппи? 0425 Вы когда-нибудь встречали рассвет за pаботой? 0426 ... Два дня подряд? К0427 Вы используете "foobar" каждый день в разговорах? 0428 ... "bletch"? 0429 Вы используете "P-конвенцию"? 0430 Вы автоматически отвечаете на любой пользовательский вопрос с RTFM? 0431 ... Вы знаете что это за способ? 0432 Вы придумывате способ собирать мусор в памяти? 0433 У Вас есть проблемы с распределением горизонтального пространства в Вашей комнате или конторе? 0434 Вы натыкаетесь на женщин читая Scientific American? 0435 Ваша лицензионная карточка связана с компьютером? 0436 Вы когда-нибудь проходили тест на непорочность? 0437 Когда-нибудь экспериментировали с выключенным процессором? 0438 Вы когда-нибудь устанавливали на компьютере переключатели в заведомо неверное положение? 0439 Вы беседовали с другим человеком через компьютер? * Прoграммирование 0440 Вы можете написать компилятор Фортрана? 0441 ... Причем в TECO? 0442 Вы можете читать машинный дамп? 0443 Вы умеете дизассемблировать в уме? Вы когда-нибудь писали 0444 ... компилятор? 0445 ... операционную систему? 0446 ... драйвер? 0447 ... текстовый редактор? 0448 ... вывод изображений? 0449 ... СУБД? 0450 ... экспертную систему? 0451 ... детектор границ? 0452 ... систему управления реального времени? 0453 ... пакет учета? 0454 ... вирус? 0455 ... антивирус? 0456 Вы когда-нибудь писали программу для расчета биоритмов? 0457 ... Вы ее продавали? 0458 ... Идея этой программы была Ваша? 0459 Вы когда-нибудь вычисляли число "пи" с точностью больше чем тысяча знаков? 0460 ... число e? 0461 Когда-либо находили простое число больше чем в сто знаков? 0462 Вы когда-нибудь писали самомодифицирующийся код? 0463 ... И были горды этим? 0464 Вам когда-нибудь удавалось написать программу, верно работающую с первого запуска? 0465 ... Она была длиннее 20 строк? 0466 ... 100 строк? 0467 ... Была написана на ассемблере? 0468 ... Верно работала и при втором запуске? 0469 Вы можете решить задачу "Ханойская башня" при помощи рекурсии? 0470 ... Без рекурсии? 0471 ... Используя текстовый форматер Troff? 0472 Вы когда-либо подчинялись кодоконтекстному вводу в Obfuscated C? 0473 ... И от этого выигрывали? 0474 ... Ваш ввод вдохновлялся новыми правилами? 0475 Вы знаете устойство Duff'а? 0476 Вы знаете устройство Jensen'а? 0477 Когда-нибудь тратили десять минут, чтобы найти ошибку из одного символа? 0478 ... Больше часа? 0479 ... Больше суток? 0480 ... Больше недели? 0481 ... И первый же человек сразу ее обнаруживал? * Unix 0482 Вы можете пользоваться Berkeley Unix? 0483 .. Не Berkeley Unix? 0484 Вы можете указать различия между секциями 4 и 5 руководства по Unix? 0485 Вы можете найти документацию по TERMIO System V release 2? 0486 Вы когда-нибудь устанавливали на ленту файловую систему Юникса? 0487 Вы когда-нибудь создавали Minix? 0488 Вы можете правильно ответить на вопросы "quiz function ed-command"? 0489 ... О самой "quiz ed-command function"? * Пользовательские сети 0490 Вы читаете новости? 0491 ... Больше 32-х разделов новостей? 0492 ... Больше чем 256 разделов новостей? 0493 ... Все разделы новостей? 0494 Вы когда-нибудь посылали статьи? 0495 ... Вы посылаете их регулярно? 0496 Вы когда-нибудь посылали что-нибудь загоревшись чем-то? 0497 ... Посылали по самым разным адресам? 0498 ... Горя при этом голубым огнем? 0499 ... Вы загораетесь регулярно? 0500 Вы когда-нибудь посылали свою программу в раздел новостей? 0501 Когда-нибудь забывали что-нибудь отправить? 0502 Когда-либо образовывали новый раздел новостей? 0503 ... И он до сих пор существует? 0504 Вы помните 0505 ... mod.ber? 0506 ... the Stupid People's Court? 0507 ... Bandy-grams? * Причуды 0508 Вы когда-нибудь делали черный ящик? 0509 Вы можете назвать все "цветные" ящики? 0510 ... и описать их функции? 0511 Ваш контактный телефон имеет 16 DTMF кнопок? 0512 Роспуск MaBell предоставил бы Вам весьма удобный случай? Светлой памяти EC1022 посвящается ПРОГРАММИРОВАНИЕ СНИЗУ ВВЕРХ НАИСКОСОК. "МОЖЕТ ЛИ ГОСПОДЬ БОГ НАПИСАТЬ ПРО- ГРАММУ, КОТОРУЮ ОН НЕ СМОЖЕТ ОТЛА- ДИТЬ? " БЕЗОШИБОЧНЫЙ КОДИРОВЩИК, ВZYСК SYSТЕМ LАВ.МЕМВЕR,МIСН. В ПОСЛЕДНИЕ ГОДЫ НА КАПИТАЛИСТИЧЕСКОМ ЗАПАДЕ КАК ГРИБЫ ПОСЛЕ ДОЖДЯ РАЗРАБАТЫВАЮТСЯ ВСЯЧЕСКИЕ "ТЕОРИИ" ПРОГРАММИРОВАНИЯ, ПРИЗВАННЫЕ, ЯКОБЫ, ОБЛЕГЧИТЬ НАПИСАНИЕ, ОТЛАДКУ И СОПРОВОЖДЕНИЕ БОЛЬШИХ ПРОГРАММНЫХ КОМПЛЕКСОВ. ОЧЕВИДНО, ЧТО БУДУЧИ ПРОДУКТОМ БУРЖУАЗНОЙ ИДЕОЛОГИИ И ВЫРАЖАЯ ИНТЕРЕСЫ ПРАВЯЩЕГО КЛАССА, ЭТИ ТЕОРИИ ПРИЗВАНЫ ОТВЛЕЧЬ ШИРОКИЕ МАССЫ ПРОГРАММИСТОВ ОТ ИХ ИСТИННЫХ ИНТЕРЕСОВ. К СОЖАЛЕНИЮ, И У НАС ОТДЕЛЬНЫЕ ТОВАРИЩИ ПОПАЛИ ПОД ТЛЕТВОРНОЕ ВЛИЯНИЕ ТЕОРИЙ "СТРУКТУРНОГО", "МОДУЛЬНОГО", "НИСХОДЯЩЕГО ИЛИ ВОСХОДЯЩЕГО" ПРОГРАММИРОВАНИЯ, ЗАБЫВАЯ, ЧТО ЧЕМ ДОЛЬШЕ ПРОГРАММИСТ ОТЛАЖИВАЕТ ПРОГРАММУ, ТЕМ БЕЗОШИБОЧНЕЕ И ЭФФЕКТИВНЕЕ ОНА КОГДА-НИБУДЬ БУДЕТ РАБОТАТЬ. ПОЭТОМУ ДАВНО НАЗРЕЛА НЕОБХОДИМОСТЬ ПРОТИВОПОСТАВИТЬ ЭТИМ ЛЖЕТЕОРИЯМ НАШУ ДОМАШНЮЮ, САМОДЕЛЬНУЮ, ВЫСТРАДАННУЮ И ВЫМУЧЕННУЮ МЕТОДИКУ ПРОГРАММИРОВАНИЯ. ОПЫТ ТАКОЙ МЕТОДИКИ И ПРЕДЛАГАЕТСЯ ЧИТАТЕЛЮ. МЫ НАЗВАЛИ НАШ МЕТОД "GLОРING РRОGRАММING" ИЛИ "СНИЗУ ВВЕРХ НАИСКОСОК" (СВН). ОСНОВНУЮ ИДЕЮ МЕТОДА СВН ЛУЧШЕ ВСЕГО ПЕРЕДАЕТ ДРЕВНЯЯ ВОСТОЧНАЯ МУДРОСТЬ: "ЕСЛИ ЧТО-НИБУДЬ МОЖНО СДЕЛАТЬ ДВУМЯ СПОСОБАМИ, НЕ ПОЖАЛЕЙТЕ УСИЛИЙ И ПРИДУМАЙТЕ ТРЕТИЙ". I. С ЧЕГО НАЧАТЬ МНОГИЕ ЗАПАДНЫЕ ПРОГРАММИСТЫ УТВЕРЖДАЮТ, ЧТО ПРЕЖДЕ ЧЕМ НАЧИНАТЬ ПИСАТЬ ПРОГРАММУ, НЕОБХОДИМО ВРЕМЯ НА ОБДУМЫВАНИЕ АЛГОРИТМА, А НЕКОТОРЫЕ ДАЖЕ ПРИЗЫВАЮТ ВНИКНУТЬ В СУТЬ ЗАДАЧИ, КОТОРУЮ ПРЕДСТОИТ РЕШАТЬ. КАТЕГОРИЧЕСКИ НЕ СЛЕДУЕТ ИНТЕРЕСОВАТЬСЯ ПОСТАНОВКОЙ ЗАДАЧИ ДО МОМЕНТА ПОЛУЧЕНИЯ ОБЬЕКТНОГО МОДУЛЯ ПРОГРАММЫ. ПОМНИТЕ, ЧТО ПРОГРАММИРОВАНИЕ - ЭТО ИСКУССТВО, ПОЭТОМУ ЛЮБЫЕ ЛИШНИЕ ЗНАНИЯ ТОЛЬКО ОГРАНИЧИВАЮТ ВАШУ ФАНТАЗИЮ. НАЧИНАЙТЕ ПИСАТЬ ТЕКСТ ПРОГРАММЫ ЗАДОЛГО ДО ТОГО, КАК ВАМ СФОРМУЛИРУЮТ ТЕХНИЧЕСКОЕ ЗАДАНИЕ, И ВЫ ПОЛУЧИТЕ ПРЕКРАСНУЮ ВОЗМОЖНОСТЬ СДЕЛАТЬ ЖИЗНЬ ВАШЕГО РУКОВОДИТЕЛЯ (И СВОЮ) ГОРАЗДО РАЗНООБРАЗНЕЕ И ИНТЕРЕСНЕЕ (НАПРИМЕР, В МОМЕНТ ПОЛУЧЕНИЯ ТЗ ВЫ МОЖЕТЕ ВОЗМУТИТЬСЯ: "ПРЕДСТАВЛЯЕТЕ, СКОЛЬКО ТЕПЕРЬ ПРИДЕТСЯ ПЕРЕДЕЛЫВАТЬ?!"). НИКОГДА НЕ СОСТАВЛЯЙТЕ ЗАРАНЕЕ БЛОК-СХЕМУ ПРОГРАММЫ ВО-ПЕРВЫХ, ЭТО ПРОЩЕ И БЫСТРЕЕ СДЕЛАТЬ, КОГДА ПРОГРАММА УЖЕ НАПИСАНА, ВО-ВТОРЫХ, НЕОСТОРОЖНО ОСТАВЛЕННАЯ НА СТОЛЕ БЛОК-СХЕМА ДАСТ ВАШИМ ВРАГАМ И ЗАВИСТНИКАМ ВОЗМОЖНОСТЬ ПОНЯТЬ, ЧТО ВЫ СОБИРАЕТЕСЬ ДЕЛАТЬ. ПОМНИТЕ, ЧТО НИКТО КРОМЕ ВАС НЕ ДОЛЖЕН РАЗБИРАТЬСЯ В ВАШЕЙ ПРОГРАММЕ. И ЕСЛИ ВЫ НИКАК НЕ МОЖЕТЕ ИЗБАВИТЬСЯ ОТ ДУРНОЙ ПРИВЫЧКИ РИСОВАТЬ БЛОК-СХЕМЫ, ТО ЗАРУБИТЕ СЕБЕ НА НОСУ: ЧЕМ БОЛЬШЕ СТРУКТУРА ПРОГРАММЫ СООТВЕТСТВУЕТ ЕЕ ЛОГИКЕ, ТЕМ МЕНЬШЕ ВЫ СТОИТЕ КАК ПРОГРАММИСТ. II. СТИЛЬ ЭТОМУ МОДНОМУ СЛОВЕЧКУ МНОГИЕ ЗАПАДНЫЕ АДЕПТЫ И АПОЛОГЕТЫ ПРИДАЮТ ОСОБЫЙ, ЧУТЬ ЛИ НЕ МИСТИЧЕСКИЙ СМЫСЛ. БЕЗУСЛОВНО, КАЖДЫЙ ПРОГРАММИСТ ИЛИ, ТАМ, КОМПОЗИТОР ИМЕЕТ ПРАВО ПИСАТЬ В СВОЕЙ МАНЕРЕ, ОДНАКО, УЧИТЫВАЯ ОБЬЕМЫ ПРОГРАМНЫХ РАЗРАБОТОК, НЕОБХОДИМО СЧИТАТЬСЯ С РЕАЛЬНОСТЬЮ. КАК И ВСЕ ОСТАЛЬНЫЕ, ПРОГРАММИРОВАНИЕ ДОЛЖНО БЫТЬ ЭКОНОМНЫМ! ТРАТИТЬ ДО 50% ПЕРФОКАРТ И ОБЬЕМА ЛИСТИНГА (СЛОВО-ТО КАКОЕ!) НА КОММЕНТАРИИ, ПРОБЕЛЫ, ПУСТЫЕ ОПЕРАТОРЫ, ЗВЕЗДОЧКИ И ДРУГИЕ УКРАШАТЕЛЬСТВА - СОВЕРШЕННО НЕДОПУСТИМАЯ РАСТОЧИТЕЛЬНОСТЬ. ПИШИТЕ СО 2-ОЙ ПО 71-УЮ ПОЗИЦИИ, ВСЕМЕРНО ИЗБЕГАЯ ПРОБЕЛОВ. ЕСЛИ КОММЕНТАРИЯ НИКАК НЕ ИЗБЕЖАТЬ, СТРЕМИТЕСЬ ПИСАТЬ ИХ КАК МОЖНО КОНКРЕТНЕЕ. НАПРИМЕР: DО J=1 ТО N; /* СYСL РО N*/ IF J>0 ТНЕN GОТО М; /*РЕRЕХОD ТО М*/ ЕLSЕ GОТО L; /*РЕRЕХОD К L*/ Х=Х+1; /* РRIВАWIТХ 1 К Х/* ЕND; М: Х=Х-1; /* ТАК НАДО ФЕДЯ! */ IF А ТНЕN GОТО L; L: /* ВОЗVЕSТY Х SТЕР. ДВА*/ Х=Х**2; ... И Т. Д. ВСЕМ ПЕРЕМЕННЫМ ДАВАЙТЕ ИМЕНА ВАШИХ ЗНАКОМЫХ, ЛЮБИМЫХ БЛЮД, ЭСТРАДНЫХ АНСАМБЛЕЙ, СИГАРЕТ, НАПИТКОВ И Т. Д. ЛЕГКО ВИДЕТЬ, ЧТО ФРАГМЕНТЫ ТИПА: IF КАТJА >= 18 ТНЕN DО; САLL GАSТRОNОМ; САLL ТАХI; GОТО ХАТА; ЕND; ЕLSЕ GОТО VЕRА; /* РL/1 */ GLОРING СSЕСТ ... МАRINА ЕQU DURА ... L АН,МАRUSJА SТ UН,АNJUТА ВХLЕ LЕТS,IRINА,DRINК(АGDАМ) /* АSSЕМВLЕR */ ПОРАЖАЮТ ИЗЯЩЕСТВОМ, ОСТРОУМИЕМ И ТОНКИМ ВКУСОМ. ПРИ ВНИМАТЕЛЬНОМ РАССМОТРЕНИИ ЛЕГКО ОБНАРУЖИВАЕТСЯ, ЧТО БУРЖУАЗНЫЕ АВТОРЫ КНИГ РАССУЖДАЯ О ПРЕДМЕТЕ, КОТОРЫЙ ОНИ НАЗЫВАЮТ "СТРУКТУРНЫМ ПРОГРАММИРОВАНИЕМ", ТОНУТ В СОБСТВЕННЫХ ПРОТИВОРЕЧИЯХ. НАПРИМЕР, [Д. МАЙЕРС], СТР. 63: "СКРОМНЫЕ ПО ЦЕЛЯМ РАБОТАЮЩИЕ ПРОГРАММЫ ЛУЧШЕ НЕОТЛАЖЕННЫХ ГРАНДИОЗНЫХ ПРОЕКТОВ", А НА СТР. 58: "ЕСЛИ НЕЗНАЧИТЕЛЬНОЕ ДОБАВЛЕНИЕ СДЕЛАЕТ ВАШУ ПРОГРАММУ ПРИГОДНОЙ ДЛЯ ДРУГОГО СЛУЧАЯ, НИКОГДА НЕ ПРЕНЕБРЕГАЙТЕ ЭТИМ". МЫ ГОТОВЫ СОГЛАСИТЬСЯ С ПОСЛЕДНИМ УТВЕРЖДЕНИЕМ, ПОСКОЛЬКУ УМЕЛОЕ ЕГО -ПРИМЕНЕНИЕ ПОЗВОЛИТ ВАМ ЗАТЯНУТЬ РАЗРАБОТКУ ПРОГРАММЫ НА ЛЮБОЙ МЫСЛИМЫЙ СРОК. БОЛЕЕ ТОГО, ТОТ ЖЕ АВТОР ЧЕРЕЗ НЕСКОЛЬКО СТРАНИЦ, ВСПОМИНАЕТ ПРЕСЛОВУТЫЙ ПРИНЦИП К I S S (КЕЕР IТ SIМРLЕ, SТUРID - БУДЬ ПРОЩЕ, ДУРАЧОК!). ПРЕДСТАВЛЯЕТЕ, В ОДИН ПРЕКРАСНЫЙ ДЕНЬ РУКОВОДИТЕЛЬ ЗАЯВЛЯЕТ ВАМ: "ЧТО-ТО У ВАС ОЧЕНЬ УЖ ПРОСТО ВСЕ ПОЛУЧАЕТСЯ! " ЭТИ СТРУКТУРНО-ЭКСТРЕМИСТСКИЕ ТЕНДЕНЦИИ, В КОНЦЕ КОНЦОВ, ПРИВОДЯТ К ПОЛНОМУ ВЫРОЖДЕНИЮ ПРОГРАММИРОВАНИЯ КАК ТВОРЧЕСКОЙ ДЕЯТЕЛЬНОСТИ. ПРЕДЕЛЬНАЯ СТЕПЕНЬ ДЕГРАДАЦИИ ПОРОЖДАЕТ МЕТОДЫ ТИПА АШКРОФТА-МАННЫ [Э. ЙОДАН], СВОДЯЩИЕ ДЕЯТЕЛЬНОСТЬ ПРОГРАММИСТА К РАБОТЕ Ч. ЧАПЛИНА НА КОНВЕЙЕРЕ В К/Ф "НОВЫЕ ВРЕМЕНА". III. GО ТО ПРОБЛЕМА БЕЗУСЛОВНЫХ ПЕРЕХОДОВ, К СЧАСТЬЮ, ЕЩЕ НЕ НАШЛА ОКОНЧАТЕЛЬНОГО РЕШЕНИЯ. СРЕДИ ПРОГРАММИРУЮЩЕЙ ЗАПАДНОЙ МОЛОДЕЖИ РАСПРОСТРАНЕНО ЗАБЛУЖДЕНИЕ, ЧТО ИСПОЛЬЗОВАНИЕ ОПЕРАТОРА GОТО КРАЙНЕ НЕЖЕЛАТЕЛЬНО. ПРАКТИКА ВЕДУЩИХ ПРОГРАММИСТОВ НАШЕЙ ЛАБОРАТОРИИ ПОКАЗЫВАЕТ, ЧТО ИСПОЛЬЗОВАНИЕ ОПЕРАТОРА БЕЗУСЛОВНОГО ПЕРЕХОДА В СОЧЕТАНИИ С МАССИВАМИ МЕТОК ПОВЫШАЕТ ЭФФЕКТИВНОСТЬ ПРОГРАММ В СРЕДНЕМ НА 4.2% ПРИ УВЕЛИЧЕНИИ ВРЕМЕНИ ОТЛАДКИ НА 350-400%. ЕСЛИ НУЖНО ПЕРЕЙТИ ИЗ ДАННОЙ ТОЧКИ ПРОГРАММЫ, СЛЕДУЕТ ПЕРЕЙТИ КАК МОЖНО ДАЛЬШЕ. ЕСЛИ ПЕРЕЙТИ НЕКУДА, СЛЕДУЕТ ПЕРЕСМОТРЕТЬ ПРОГРАММУ ОЧЕНЬ УДАЧНЫ БЫВАЮТ ПЕРЕХОДЫ В ТЕЛО ЦИКЛА DО, ОСОБЕННО ИЗ ДРУГИХ МОДУЛЕЙ. ХОТЯ ТРАНСЛЯТОРЫ, КАК ПРАВИЛО, ЭТО ЗАПРЕЩАЮТ, ИХ ЛЕГКО МОЖНО ОБВЕСТИ ВОКРУГ ПАЛЬЦА, ПОЛЬЗУЯСЬ ПЕРЕМЕННЫМИ ТИПА МЕТКИ. ПЕРЕДАЧА УПРАВЛЕНИЯ В ВЫЗЫВАЕМУЮ ПРОЦЕДУРУ В ОБХОД ЗАГОЛОВКА ПРИНЕСЕТ ВАМ ДОЛГИЕ ЧАСЫ СЧАСТЛИВЫХ РАЗДУМИЙ НАД КОДОМ ЗАВЕРШЕНИЯ 0С5. ВСЕ ВСТАВКИ В ПРОГРАММУ СЛЕДУЕТ ДЕЛАТЬ ТАК: ПОСЛЕ ПОСЛЕДНЕГО ОПЕРАТОРА СТАВЬТЕ НОВУЮ МЕТКУ, НАПИШИТЕ ТЕКСТ ВСТАВКИ, УВЕЛИЧЬТЕ РАЗМЕРНОСТЬ МАССИВА МЕТОК НА 2, ПЕРЕДАЙТЕ УПРАВЛЕНИЕ НА ЭТУ МЕТКУ ИЗ НУЖНОЙ ТОЧКИ (ИЛИ ОТКУДА-НИБУДЬ ЕЩЕ), ПОМЕТЬТЕ ОПЕРАТОР, СЛЕДУЮЩИЙ ЗА GОТО, НОВОЙ МЕТКОЙ, СМЕЛО ИЗМЕНИТЕ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ МЕТКИ И ВЕРНИТЕСЬ. ВООБЩЕ ГОВОРЯ, НА КАКОМ ЯЗЫКЕ ВЫ БЫ НИ ПИСАЛИ ПРОГРАММЫ, ЛУЧШЕ, ЕСЛИ КАЖДЫЙ ОПЕРАТОР БУДЕТ ИМЕТЬ СВОЮ МЕТКУ (КАК ЭТО ПРЕДУСМОТРЕНО В ФОРТРАНЕ). СТЕПЕНЬ ВАШЕЙ КВАЛИФИКАЦИИ, КАК ПРОГРАММИСТА В СТИЛЕ СВН, ОПРЕДЕЛЯЕТСЯ СООТНОШЕНИЕМ: N SIGМА ( V(I)+W(I) ) I=1 К = ------------------- , ГДЕ ( 1 ) N N - ЧИСЛО ОПЕРАТОРОВ, V(I) - ЧИСЛО ПЕРЕДАЧ УПРАВЛЕНИЯ НА I-ТЫЙ ОПЕРАТОР, W(I) - ЧИСЛО ВОЗМОЖНЫХ ПЕРЕХОДОВ ОТ I-ГО ОПЕРАТОРА. ПРИ К < 0.5 ВЫ, КАК ПРОГРАММИСТ, НИКУДА НЕ ГОДИТЕСЬ. ПРИЕМЛИМЫЙ КОЭФФИЦИЕНТ 3 - 4, А НЕКОТОРЫЕ СУПЕРПРОГРАММИСТЫ ИМЕЮТ К НЕ НИЖЕ 12. IV. МОДУЛЬНОСТЬ. Н И К А К О Й М О Д У Л Ь Н О С Т И! ВООБЩЕ... V. ЭФФЕКТИВНОСТЬ. СПОРЫ ПО ПОВОДУ ТОГО, ЧТО СЧИТАТЬ ЭФФЕКТИВНОЙ ПРОГРАММОЙ, НЕ УТИХАЮТ С ТЕХ ПОР, КОГДА В СПОРТЗАЛЕ ЗАРАБОТАЛА ЭВМ М-20. В НАШИ ДНИ ДЕЛО ДОШЛО ДО ПОЯВЛЕНИЯ КАЗУИСТИЧЕСКИХ УТВЕРЖДЕНИЙ ВРОДЕ: "УДОБОЧИТАЕМОСТЬ ПРОГРАММЫ СУЩЕСТВЕННЕЕ ЕЕ ЭФФЕКТИВНОСТИ" [Д. МАЙЕРС]. МЫ СЧИТАЕМ, ЧТО ЭФФЕКТИВНОСТЬ ПРОГРАММЫ ЯВЛЯЕТСЯ СОВЕРШЕННО ОБЬЕКТИВНОЙ И КОЛИЧЕСТВЕННО ОЦЕНИВАЕМОЙ ВЕЛИЧИНОЙ. НЕ НАДО ЖАЛЕТЬ НИ ВРЕМЕНИ, НИ УСИЛИЙ В БОРЬБЕ ЗА ЭФФЕКТИВНОСТЬ - КОГДА ВАША ПРОГРАММА В КОНЦЕ КОНЦОВ ЗАРАБОТАЕТ, ВСЕ ВАШИ ЗАТРАТЫ ОКУПЯТСЯ ЭКОНОМИЕЙ 15 МКСЕК И О.073 КБ. ЧТОБЫ ПРОГРАММИСТ МОГ ЗАРАНЕЕ ОЦЕНИТЬ ЭФФЕКТИВНОСТЬ СВОЕГО ПРОДУКТА, ПРЕДЛАГАЕТСЯ ПРОСТАЯ ФОРМУЛА: Э = Т/Т1 + I*Т/Т2, ГДЕ (2) Т1 - ВРЕМЯ, ТРЕБУЕМОЕ СРU ДЛЯ ВЫПОЛНЕНИЯ ВАШЕЙ ПРОГРАММЫ, (ЕСЛИ ПРОГРАММА ЕЩЕ НЕ ВЫХОДИТ НА GО, Т1 = Т); Т - ВРЕМЯ, НЕОБХОДИМОЕ ДЛЯ ВЫВОДА НА АЦПУ ЗАРАНЕЕ ЗАГОТОВЛЕННОГО ТЕКСТА, ИДЕНТИЧНОГО ТОМУ, КОТОРЫЙ БУДЕТ ПЕЧАТАТЬ ВАША ПРОГРАММА, КОГДА ВЫЙДЕТ НА GО; Т2 - ВРЕМЯ, КОТОРОЕ ВАША ПРОГРАММА БУДЕТ ВЫПОЛНЯТЬСЯ, КОГДА ВЫ ЕЕ ПОЛНОСТЬЮ ОТЛАДИТЕ. I = SQRТ (-1) ЭФФЕКТИВНОСТЬ ПРОГРАММЫ, КАК ВИДНО, ВЕЛИЧИНА КОМПЛЕКСНАЯ, ЧТО ОТРАЖАЕТ СИСТЕМНЫЙ ПОДХОД К ПРОГРАММИРОВАНИЮ, ХАРАКТЕРНЫЙ ДЛЯ МЕТОДА СВН. ТАКИМ ОБРАЗОМ, КАК СЛЕДУЕТ ИЗ ВЫРАЖЕНИЯ (2), СРОКИ НАПИСАНИЯ И ОТЛАДКИ ПРОГРАММЫ НИКОИМ ОБРАЗОМ НЕ ВЛИЯЮТ НА ЕЕ ЭФФЕКТИВНОСТЬ. МНОГИЕ ПРОГРАММИСТЫ, ПО-ВИДИМОМУ, ИНТУИТИВНО ПРИШЛИ К ПОНИМАНИЮ ЭТОГО ФАКТА И ГОДАМИ УЛУЧШАЮТ СВОЮ ПРОГРАММУ, ДЕЛАЯ ЕЕ ВСЕ БОЛЕЕ ЭФФЕКТИВНОЙ ЗА СЧЕТ УМЕНЬШЕНИЯ ПАРАМЕТРА Т2. КСТАТИ, ОДИН ИЗ АПОЛОГЕТОВ "СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ" [Д. МАЙЕРС], ПОЗВОЛИЛ СЕБЕ СЛЕДУЮЩЕЕ: "НИКТО, БУДУЧИ В ЗДРАВОМ УМЕ И ТВЕРДОЙ ПАМЯТИ, НЕ СТАНЕТ ПРОГРАММИРОВАТЬ НА АССЕМБЛЕРЕ." И ЭТО ПО ПОВОДУ ЛЮБИМОГО ЯЗЫКА СТОРОННИКОВ СВН! НАПРОТИВ! ИЗУЧЕНИЕ АССЕМБЛЕРА - ЭТО ПРЕКРАСНЫЙ ПУТЬ К ВЕРШИНАМ ПОЗНАНИЯ ОС ЕС ЭВМ. СЛЕДУЯ ЭТИМ ПУТЕМ, ВЫ ПОЛУЧИТЕ МАССУ ПОЛЕЗНЫХ ЗНАНИЙ, КОТОРЫЕ ПОМОГУТ ВАМ РЕШИТЬ РЯД ВАЖНЕЙШИХ ПРОБЛЕМ: 1). КАК, ПОЛУЧИВ ТАЛОНЧИК НА ОДНУ МИНУТКУ В ПАКЕТЕ, ЗАХВАТИТЬ В БЕЗРАЗДЕЛЬНОЕ ПОЛЬЗОВАНИЕ СРU ПО КРАЙНЕЙ МЕРЕ НА 1.5 ЧАСА, УСТРАНИТЬ ЗАДАЧИ ВСЕХ ДРУГИХ ПОЛЬЗОВАТЕЛЕЙ (НАПРИМЕР, С КОДОМ S422), ЗАСТОПОРИТЬ ОЧЕРЕДЬ ЗАДАНИЙ, ЛИШИТЬ ОПЕРАТОРА ВОЗМОЖНОСТИ СНЯТЬ ВАШЕ ЗАДАНИЕ, БЕСПРЕПЯТСТВЕННО ПОЛУЧИТЬ РЕЗУЛЬТАТЫ (НЕ ВЗИРАЯ НА УСТАНОВЛЕННЫЙ ЛИМИТ РАСХОДА БУМАГИ), И ПРИ ЭТОМ - ВСЕ ПРЕТЕНЗИИ ОПЕРАТОРСКОЙ СЛУЖБЫ ОВТ НАПРАВИТЬ В СТОРОНУ КАКОЙ-НИБУДЬ КАФЕДРЫ ФАКУЛЬТЕТА "Ф"? 2). КАК ИСПОРТИТЬ (НЕ СТИРАЯ) ВСЕ ЧУЖИЕ НД НА ВАШЕМ ПАКЕТЕ 5050/5061, НЕ ОСТАВЛЯЯ СЛЕДОВ В РRINТLОG? 3). КАК СТЕРЕТЬ ЯДРО? (ИЛИ IРL?) ВООБЩЕ, СУЩЕСТВУЕТ БОГАТЕЙШИЙ СПЕКТР СПОСОБОВ ПОВЫШЕНИЯ ЭФФЕКТИВНОСТИ ПРОГРАММ. АВТОРЫ ХОРОШО И ДАВНО ЗНАКОМЫ С ОДНИМ ПРОГРАММИСТОМ, КОТОРЫЙ НЕ ТАК ДАВНО ВЫИГРАЛ НА ПАРИ ЯЩИК ПИВА, ПОВЫСИВ, ЗА 40 МИНУТ ПОВЕРХНОСТНОГО АНАЛИЗА, МИНИМУМ В ДВА РАЗА БЫСТРОДЕЙСТВИЕ ТРЕХ ПРОГРАММ НА ФОРТРАНЕ, ВЗЯТЫХ НАУГАД ИЗ МУСОРНОЙ КОРЗИНЫ НА ОДНОЙ ИЗ КАФЕДР Ф-ТА "Т". ПОСКОЛЬКУ ЭТОТ ФАКТ АБСОЛЮТНО НЕ ИЗВЕСТЕН РУКОВОДСТВУ, ПРОГРАММИСТАМ В СТИЛЕ СВН ПРЕДСТОЯТ ДОЛГИЕ ГОДЫ БЕЗОБЛАЧНОГО СУЩЕСТВОВАНИЯ И СЧАСТЛИВОГО ПРОГРАММИРОВАНИЯ. VI. СНОВА МОДУЛЬНОСТЬ ПО ПРЕЖНЕМУ, НИКАКОЙ МОДУЛЬНОСТИ! (ПОСКОЛЬКУ МОДУЛЬНОСТЬ НЕЛЬЗЯ ПОНИМАТЬ ИНАЧЕ, КАК НАЛИЧИЕ ИЗВЕСТНОЙ ВСТРОЕННОЙ ФУНКЦИИ. ВСЕ ОСТАЛЬНОЕ - ОТ ЛУКАВОГО.) СЧИТАЙТЕ СЕБЯ ХУЖЕ ДРУГИХ, ЕСЛИ ВЫ НЕ В СОСТОЯНИИ НАПИСАТЬ ПРОГРАММУ (ЕСЛИ ХОТИТЕ, НАЗОВИТЕ ЕЕ МОДУЛЕМ) ДЛИНОЙ БОЛЕЕ 1000 ОПЕРАТОРОВ. ЕСЛИ ПО РЯДУ ОБЬЕКТИВНЫХ ПРИЧИН (ОНИ ЕСТЬ ВСЕГДА) ВАМ ВСЕ- ТАКИ ПРИХОДИТСЯ СТАЛКИВАТЬСЯ С ПРОБЛЕМОЙ СТЫКОВКИ, ТО ПОМНИТЕ ОБ ОДНОМ- ЕДИНСТВЕННОМ ПРАВИЛЕ МЕТОДА СВН: НИКАКИХ СОГЛАШЕНИЙ О СВЯЗЯХ! В ОСОБЕННОСТИ, ЕСЛИ ПРИХОДИТСЯ ИМЕТЬ ДЕЛО С ПРОГРАММИСТАМИ ПРОТИВОПОЛОЖНОГО ПОЛА. СОГЛАСНО СТАТЬЕ 94 ПРОЦЕССУАЛЬНОГО КОДЕКСА, ПРИ РАЗБОРЕ ДЕЛ ОБ УСТАНОВЛЕНИИ ОТЦОВСТВА ПРОТОКОЛ СОГЛАШЕНИЯ О СВЯЗЯХ УЧИТЫВАЕТСЯ НАРАВНЕ С ДОКАЗАТЕЛЬСТВАМИ СОВМЕСТНОГО ВЕДЕНИЯ ХОЗЯЙСТВА. КРОМЕ ТОГО, КАК УЖЕ ПОДЧЕРКИВАЛОСЬ, ЛЮБЫЕ ОГРАНИЧЕНИЯ ВАШЕЙ ФАНТАЗИИ, КАК ПРОГРАММИСТА, НЕ ПРИНЕСУТ НИЧЕГО, КРОМЕ СНИЖЕНИЯ СРОКОВ РАЗРАБОТКИ ПРОЕКТА И, ТЕМ САМЫМ, УМЕНЬШЕНИЯ ЭФФЕКТИВНОСТИ КОНЕЧНОГО ПРОДУКТА. ПОРАДУЙТЕ СВОЕГО РУКОВОДИТЕЛЯ, ПОВЕСИВ НАД РАБОЧИМ СТОЛОМ ПЛАКАТ: "ПРОГРАММИРОВАНИЕ - СЛИШКОМ СЛОЖНАЯ ИНТЕЛЛЕКТУАЛЬНАЯ ДЕЯТЕЛЬНОСТЬ, ЧТОБЫ МОЖНО БЫЛО НАДЕЯТЬСЯ НАВЯЗАТЬ ЕЙ УЗЫ АДМИНИСТРАТИВНОЙ СИСТЕМЫ, КОТОРАЯ ДУШИТ ВСЯКУЮ ИНИЦИАТИВУ." [ВАН ТАССЕЛ]. ЕСЛИ РЕАКЦИЯ РУКОВОДСТВА ОКАЖЕТСЯ БОЛЕЕ СДЕРЖАННОЙ, ЧЕМ ВЫ ОЖИДАЛИ, ПЕРЕКРАСЬТЕ ДВЕРЬ ВАШЕЙ ЛАБОРАТОРИИ ЗЕЛЕНОЙ КРАСКОЙ САМОГО ЯДОВИТОГО ЦВЕТА И ИСЧЕЗНИТЕ НА ТРИ ДНЯ, ПРЕДВАРИТЕЛЬНО ОТКЛЮЧИВ ДОМАШНИЙ ТЕЛЕФОН [Б. МЕЙЕР, БОДУЕН]. VII. ОТЛАДКА ПЕРВАЯ ЗАПОВЕДЬ ПРОГРАММИСТА, УСПЕШНО ПРЕОДОЛЕВШЕГО БАРЬЕР СИНТАКСИЧЕСКОГО КОНТРОЛЯ - НЕ ТОРОПИТЬСЯ. ПОМНИТЕ, ЧТО ПЛОХО ОТЛАЖЕННАЯ ПРОГРАММА ВСЕГДА МЕНЕЕ ЭФФЕКТИВНА, ЧЕМ СОВСЕМ НЕ ОТЛАЖЕННАЯ. НЕ ВЫВОДИТЕ НА ПЕЧАТЬ БОЛЕЕ ОДНОЙ ПЕРЕМЕННОЙ ЗА ОДИН ПРОГОН. ПОЛУЧЕННЫЕ ЛИСТИНГИ (РАСПЕЧАТКИ) НЕМЕДЛЕННО УНИЧТОЖАЙТЕ (ВО ИЗБЕЖАНИЕ!.. СМ. V). С ДРУГОЙ СТОРОНЫ, ПОЛЕЗНО ХРАНИТЬ, В ЕДИНСТВЕННОМ ЭКЗЕМПЛЯРЕ, ПРОТОКОЛ КОМПИЛЯТОРА С НАИХУДШИМ (ЭТО НЕ СЛОЖНО) КАЧЕСТВОМ ПЕЧАТИ С ТЕМ, ЧТОБЫ ПРИ НЕЗАПЛАНИРОВАННОМ ПОЯВЛЕНИИ РУКОВОДИТЕЛЯ МОЖНО БЫЛО БЫ СКАЗАТЬ: "ВОТ ВИДИТЕ, В КАКИХ УСЛОВИЯХ ПРИХОДИТСЯ РАБОТАТЬ!" РАЗУМЕЕТСЯ, ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ СЛЕДУЕТ ОТРЕЗАТЬ, А ЛУЧШЕ - НЕАККУРАТНО ОБОРВАТЬ. (ДЛЯ ТЕХ, КТО ПРОГРАММИРУЕТ НА ФОРТРАНЕ ИЛИ АССЕМБЛЕРЕ, РЕКОМЕНДУЕМ ПРИОБРЕСТИ НЕКОТОРЫЕ НАВЫКИ РАБОТЫ С НОЖНИЦАМИ И КЛЕЕМ). ЕСЛИ ВЫ ХРАНИТЕ ИСХОДНЫЙ ТЕКСТ НА НМД, НИКОГДА НЕ ПРОВЕРЯЙТЕ КАРТ IЕВUРDТЕ, И ЧТОБЫ НЕ ЛИШАТЬ СЕБЯ ПРИЯТНЫХ НЕОЖИДАННОСТЕЙ! БОЛЕЕ ТОГО, ПРОВЕРЯТЬ ПРОБИВКУ - ДУРНОЙ ТОН И ПРИЗНАК ГНУСНОГО НЕУВАЖЕНИЯ К МИЛЫМ И ОЧАРОВАТЕЛЬНЫМ ДЕВУШКАМ, ТРАТЯЩИМ ЛУЧШИЕ ГОДЫ ЮНОСТИ НА ПРОБИВАНИЕ ДЫРОК В ВАШИХ ПЕРФОКАРТАХ. КОГДА ЗАКАНЧИВАЕТСЯ ОТЛАДКА, НАЧИНАЕТСЯ ЭКСПЛУАТАЦИЯ! НИ ОДИН УВАЖАЮЩИЙ СЕБЯ ПРОГРАММИСТ НЕ ДОПУСТИТ, ЧТОБЫ ЕГО ЛЮБИМОЕ ЧАДО, ПЛОД ЕГО МНОГОЛЕТНИХ ТРУДОВ И СТРАДАНИЙ ЭКСПЛУАТИРОВАЛИ КАКИЕ-ТО ПОСТОРОННИЕ ЛЮДИ. НЕСКОЛЬКО СЛОВ О ТЕСТИРОВАНИИ. НИКТО НЕ ЗНАЕТ, В ЧЕМ ИМЕННО ЗАКЛЮЧАЕТСЯ ТЕСТИРОВАНИЕ, ЧТО ЯВЛЯЕТСЯ КОНЕЧНОЙ ЦЕЛЬЮ И КАКИЕ РЕЗУЛЬТАТЫ СЛЕДУЕТ ПОЛУЧИТЬ. В МЕТОДЕ СВН ПРИНЯТО СЧИТАТЬ ТЕСТИРОВАНИЕ ЗАКОНЧЕННЫМ, ЕСЛИ ВЫПОЛНЕНИЕ ЗАВЕРШАЕТСЯ С КОДОМ ВОЗВРАТА 0000, ДАЖЕ ЕСЛИ ИСХОДНЫЕ ДАННЫЕ РАЗЛИЧАЮТСЯ ХОТЯ БЫ ОДНИМ ЧИСЛОМ (ИЛИ ВСЕМИ - ЕСЛИ ВЫ МАКСИМАЛИСТ). ПОСЛЕ ОКОНЧАНИЯ ЭТАПА ТЕСТИРОВАНИЯ УНИЧТОЖЬТЕ ИСХОДНЫЙ ТЕКСТ. ТОЛЬКО В ЭТОМ СЛУЧАЕ ВЫ МОЖЕТЕ БЫТЬ АБСОЛЮТНО УВЕРЕНЫ, ЧТО ВАШЕЙ ПРОГРАММЕ НИКТО НЕ ПРИЧИНИТ НИКАКОГО ВРЕДА И ОНА ОСТАНЕТСЯ ТАКОЙ ЖЕ ЭФФЕКТИВНОЙ, КАКОЙ БЫЛА ВСЕГДА.