Еще раз о настоящих программистах
Каким надо быть высокомерным идиотом для того, чтобы изобрести обучающий язык таким, как Паскаль.
Все ученики и последователи Никлауса Вирта будут великолепно читать комментарии и понимать, что BEGIN значит НАЧАЛО, а END - КОНЕЦ. На большее потянуть они не смогут.
Если уж кому-то в голову пришло, что программированию надо учить на языках высокого уровня, то для этой цели можно использовать ФОРТ, в крайнем случае СИ (если не выделять в нем приемы структурного программирования). В этом случае, по крайней мере, придется приложить мозговые усилия для решения той или иной задачи. Язык программирования, который своими средствами не способен вывести из строя систему, не может считаться гибким и не должен считаться языком программирования вообще.
На самом деле для воспитания хороших программистов необходимо преподавать в качестве обучающего языка Ассемблер, причем не один, а несколько (естественно, с возможностью свободного творчества на данном Ассемблере). Тогда будущий программист столкнется с реальными условиями.
Для того, чтобы отделить потенциальных программистов от сосунков, нужно на самой ранней стадии обучения посадить группу за терминалы и посмотреть, чем каждый из них будет заниматься. Сосунок будет исправно решать поставленную преподавателем задачу, а потенциальный настоящий программист залезет в машину учителя, вытащит оттуда ТЕТРИС, за 3 минуты до конца занятия сворует программу у соседа и исправит в соответствии со своим заданием.
Второго смело можно подпускать к программированию. Первого лучше отправить изучать Паскаль, и так, чтобы он занимался этим как можно дольше. Лучше всего - всю жизнь.
Выделив будущих программистов, обучать их можно по разному. Наиболее эффективен следующий способ.
Ученику выдается компьютер и некоторое количество программных средств, с которыми ему в дальнейшем придется работать. Описаний к этим программам либо не выдается совсем, либо выдается минимальный набор. Если происходит обучение какому-либо языку программирования, в качестве руководства желательно использовать литературу на языке, заведомо незнакомом обучающемуся, либо произведения советских авторов.
Когда будет замечено, что ученик работает с программой (языком программирования) довольно сносно, можно предложить ему для изучения исчерпывающие руководства. Они будут прочитаны как захватывающий детектив. Затем, после небольшого периода переваривания полученных знаний, программист готов к активной деятельности.
Специалист, прошедший обучение подобным образом, как правило, удивляет других "программистов" приемами программирования. Не исключено, что вместо шестнадцатиричной системы счисления он будет использовать десятичную (если ему до прохождения курса никто не объяснял, что программировать нужно в шестнадцатиричной системе). Программы, написанные таким специалистом, будут совершенны в работе, но перед желающим их улучшить или узменить встанет практически неразрешимая задача (за исключением случаев, когда с этой задачей сталкивается такой же специалист), так как прочитать эти программы и понять их суть крайне тяжело, например, нелегко обычному программисту прочитать программу на Ассемблере, в которой все числа - десятичные.
Программист, изучавший таким способом Ассемблер, наверняка знает коды всех мнемоник в восьмеричной, десятичной и шестнадцатиричной системе счисления и может писать программы емкостью до нескольких килобайт непосредственно в машинном коде, вводя программу десятичными или шестнадцатиричными числами.
Вообще говоря, программистов, подготовленных таким образом, можно и должно называть хакерами.
В слово хакер вложен отрицательный смысл (почему - объясню ниже), но каждый из них гордо носит свое имя.
Хакера не волнует сложность поставленной задачи, но заниматься ею он будет только в том случае, если она ему интересна. Заставить хакера работать вне его интересов доступно лишь исключительно талантливым организаторам.
Наиболее интересная область для хакера - это программы с защитами. Снятие защит - это одна из сложнейших задач, с которой может столкнуться программист. Любому понятно, что ни одному сосунку, ратующему за структурное программирование, эта проблема не по силам, для этого необходим талант.
В советских условиях хакер необходим по той простой причине, что пойти в магазин и купить дискету с пакетом P-CAD для IBM PC весьма затруднительно, поэтому приходится его воровать. Своровать программу без хакера невозможно, так как практически любая фирменная дискета или кассета защищена от копирования.
Загнивающих предпринимателей слово хакер приводит в ужас, но я делаю различие между хакером и компьютерным пиратом (термин SOFTWARE PIRACY вполне официален и является предметом пристального внимания ИНТЕРПОЛА). Не исключено, что хакер может заниматься распространением программ, с которых снял защиты, но это характеризует его как человека, но не как программиста. Еще больше отрицательных эмоций (в основном у тех, кто пользуется ворованными программами, т.е. у советских программистов) вызывают хакеры, занимающиеся изготовлением разного рода вирусов.
Надо заметить, что для хакера не менее интересны и задачи, обратные предыдущим, а именно, изобретение защит и написание антивирусов (то-есть программ, выслеживающих и уничтожающих вирусы), посему фирмы, производящие программный продукт, не гнушаются ничем, чтобы получить хакера себе в сотрудники. Вообще говоря, любая фирма, занимающаяся программными разработками, развалится, если на нее не будет работать несколько хакеров.
Теперь ряд штрихов, характеризующих хакера:
как уже говорилось, хакера трудно заставить работать, но если его заинтересовать, то результат почти всегда - шедевр;
хакеру тяжело что-либо начать, но уйдя в работу, он потерян для общества вплоть до завершения той или иной стадии;
при выборе программных средств для своей деятельности хакер часто удивляет других программистов. Как правило, это определяется не тем, что программа умеет, а тем, как она написана (этот текст, например, набирается в текстовом редакторе, никоим образом не связанным с русским языком, но уж очень редактор хорош);
все, что хакер делает, он не считает работой, и если фирма платит ему деньги, то, вероятно, только для того, чтобы он иногда произносил фразу: "Я работаю на фирме ...";
хакер часто смеется, когда читает литературу по программированию (особенно советскую);
лучшая литература для хакера - распечатка программы;
хакер не всегда знает язык программирования, с которым он в данный момент работает;
хакер способен объяснять по телефону способ, которым можно найти ячейку памяти, определяющую количество жизней в игре SABOTEUR, одновременно восстанавливая содержимое диска с полностью испорченной директорией, используя DISC DOCTOR фирмы Technology Research (программу, написанную либо пьяным, либо сумасшедшим);
хакер предпочитает работать ночью, так как в это время суток закрыты пивные заведения, а телефон почти не звонит. Если он зазвонил, то это звонок другого хакера;
музыка может быть помехой во время чтения художественной литературы, но не во время работы (работы?!);
как правило, критику хакер воспринимает без мордобития, всегда находит оправдание, но указанную ошибку исправляет (если ее не исправил другой хакер);
хакер может страдать тяжелой формой мании величия, но всегда об этом предупреждает;
мыслительный процесс идет у хакера подсознательно. Это иногда приводит к тому, что ложась с женщиной в постель, хакер вскакивает, осознав, что в пятисотой строке его программы стоит неправильное условие перехода на метку QWERTASDF (такая метка также в порядке вещей, так как хакеру не хватает энергии не только на написание комментариев, но и на придумывание удобочитаемых меток - гораздо проще провести кулаком по клавиатуре).
Внешний вид хакера может шокировать непривычного человека. Советский программист обычно представляется слегка лысоватым, с 8-килограммовой фортрановской распечаткой в коричневом портфеле и колодой перфокарт под мышкой. Хакер же может отпустить волосы до пояса, слушать тяжелый рок и носить в портфеле школьные учебники.
Интереснее всего хакерам живется в Советском Союзе. Во-первых, они вольны в своих действиях, так как здесь хакеров в тюрьму не сажают и штрафам не подвергают; во-вторых, документация на программу или язык программирования появляется у хакера уже после того, как он окончательно разобрался с интересующим его вопросом (я, например, получил описание процессора Z80 сразу, как только понял использование регистра I, то есть самое сложное, что в этом процессоре есть). Если же хакер решил изучить язык программирования и купил о нем книжку в киоске Союзпечать, это еще больше активизирует процесс интеллектуальной деятельности. Я готов пожать руку даже программисту на Паскале, если он смог разобраться в книге "Начала программирования на языке Паскаль" (С.А. Абрамов, Е.В. Зима, Москва <<Наука>>, 1987) до того, как научился писать комментарии и выделять двумя пробелами конструкцию REPEAT ... UNTIL. Он скорее всего хакер и Паскаль забросит довольно скоро.
Поскольку сейчас в советских магазинах нельзя купить не только пакет P-CAD для IBM PC, но и колбасу, хакер часто начинает с того, что собственными силами собирает компьютер. Естественно, что это игрушка для дома и семьи с восьмиразрядным процессором и памятью в пределах 64К, но именно на таком аппарате хакер начинает воистину вытворять чудеса. Описать ощущения, вызываемые сообщением языка Си "Числа с плавающей запятой не поддерживаются" после 3-х минутной подгрузки библиотеки stdio.h с магнитофона, невозможно, это надо прочуствовать. Тем не менее, даже в таких условиях хакеру удается написать самообучающуюся программу игры в дурака, не используя библиотеки вообще.
Интересные ситуации возникают при встрече двух или более хакеров. Ни один структурный программист не поймет сути вопроса, обсуждаемого хакерами, так как один хакер может изъясняться в шестнадцатиричной системе, другой - в десятичной, третий не изъясняться вообще, и все будут прекрасно понимать друг друга.
Первый раз в своей жизни встретив другого хакера, я был немало удивлен тем, что меня понимали с полуслова и мне не приходилось все разжевывать и повторять по пять-шесть раз в размеренном темпе. Меня не переспрашивали, какую систему счисления я употребил в данный момент времени и задавали вопросы, на которые можно было дать ответ. Судя по удивлению в глазах моего коллеги, он, как и я, никогда прежде не сталкивался с другими хакерами.
Беседы между хакерами приносят весьма ощутимую пользу, однако подпускать к одной ЭВМ двух хакеров одновременно недопустимо. К положительным результатам это не приведет, более того, может закончиться кровопролитием. При всем том, не исключается, что разняв двух дерущихся хакеров и посадив их в разные комнаты, можно получить абсолютно идентичные программы.
Хакер - человек спокойный, но и его можно вывести из себя вопросом "Какой командой процессора колобок ест черта?" или "Каким образом снять защиту от копирования с программы Infiltrator?".
Работа хакера напоминает работу столяра, забивающего гвоздь одним ударом молотка. Хакер некоторое время ходит вокруг машины (радиус хождения может составлять до нескольких тысяч километров), затем садится за клавиатуру и делает за один вечер то, на что было выделено 15 дней. Не надо думать, что четырнадцать дней, которые хакер потратил на хождение вокруг машины пропали даром: все это время хакер подсознательно обдумывал поставленную задачу. Другое дело, была ли необходимость в этих раздумьях.
Когда хакер заканчивает какую-либо работу, он твердо уверен: все, что он сделал - хлам, однако вслух это мнение не высказывает, так как заказчик всегда остается доволен. Хакер, конечно, расстроится, если случайно уничтожит шестимесячную работу, но глубоко в душе он будет рад тому, что, расставшись с хламом, он сможет решить задачу гораздо красивее. Однако... смотри начало абзаца.
Н. Родионов 07.90
P.S. Написать этот опус меня побудила статья "Настоящие программисты не используют Паскаль" в журнале "Datamation". Автор этой статьи - настоящий хакер, и мне не хотелось бы, чтобы "мое" сравнивали с "его", поскольку его уровень на несколько порядков выше.
http://androidroom.narod.ru/