Сегодня давайте немного поговорим о программировании, вернее о жизненных эта- пах любой программы. Любители "компьютер- ной попсы" могут смело перелистнуть эту рубрику. На этот раз мой рассказ будет не- долгим, но в следующий раз... Как я уже говорил вам при нашей первой встрече ("ОБЕРОН" No1). программистами не рождаются, это диагноз после пятилетних мучений в ВУЗе. Одним из важных моментов обучения программиста является вдалблива- ние ему тех стадий, которые ОБЯЗАТЕЛьНО должна пройти его программа. Всего таких стадий или жизненных этапов программы восемь. 1. Определение необходимых технических требований к конфигурации системы. На этой стадии определяются (обычно за- казчиком) технические требования к аппара- туре,на которой и с которой будет работать программа. Если заказчика нет, то эти тре- бования определяет сам программист. Вся дальнейшая разработка будет производиться в соответствии с ними. Для SPECTRUM вы, начиная разработку своей программы должны определить: - необходимо-ли наличие дисковода для ра- боты программы: - версию и тип ДОС (Is-DOS, TR-DOS, CP/M): - минимальный размер памяти для работы: старайтесь уложиться в 48К, если нет, то в 128К и уж в самом пре-самом крайнем случае больше 128К, при этом нужно определить тип компьютера с этими "больше 128К" (SCORPION, ATM-TURBO, PROFI, а еще лучше все сразу): - наличие музыкального сопроцессора: - вопросы совместимости: использовать ли мифический #FD порт, или нормальный #7FFD: использовать-ли порт атрибутов #FF (если можно, лучше обойтись без него): использо- вать ли для 2-го режима прерываний таблицу векторов (для работы на всех компьютерах), или задавать вектор двумя байтами (будет работать только на компьютерах со ста- бильной шиной данных). 2. Постановка задачи. По идее этим должен заниматься не прог- раммист, а постановщик задач (должность такая на ВЦ), но все чаще и чаще этим за- нимаются сами программисты. На этом этапе фраза типа: "мне нужна программа для учета заработной платы работников", переводится во фразы: "создать программу, позволяющую (а) заполнять информацию о работниках, (б) удалять информацию о работниках, (в) кор- ректировать информацию о работниках, (г) просматривать информацию, (д) производить поиск информации по заданным критериям". Одним словом - на этом этапе начинают вы- рисовываться возможности и функции будущей программы. 3. Создание концептуальной модели. Один из самых ответственных этапов. В начале вы должны ответить на один щекотли- вый, но обязательный вопрос: А НУЖНА ЛИ ПОЛьЗОВАТЕЛЯМ ваша программа, выполняющая функции,определенные на предыдущем этапе ? И если нет (не нужна), то либо от дальней- шей работы над этой программой отказывают- ся, либо заново проходят пункты 1,2. Если же программа признается необходимой, то создается концептуальная модель поведения будущей программы - что и когда она будет делать, какую информацию и когда вводить и выводить, ... Здесь же определяется струк- тура и тип управления и контроля за ее ра- ботой (клавиши управления, системы и ие- рархии меню, типы и количество вводимой и выводимой информации, одним словом - пользовательский интерфейс). Определяется критичность по времени всей программы и отдельных модулей. Для игр здесь определяются правила и за- коны игры, все персонажи, участвующие в игре, их поведение, взаимодействие друг с другом, ... Определяется и создается опи- сание каждого персонажа, для того, чтобы в дальнейшем программа по нему управляла этим персонажем. По завершению этого этапа у вас должна получиться сбалансированная модель прог- раммы, представление о ситуациях, которые могут возникнуть во время работы программы и пути выхода из них. 4. Создание алгоритма. Учитывая результаты пунктов 1 - 3, про- изводится создание алгоритма программы. Создается как общий алгоритм (что какая процедура делает и с какими связана), так и алгоритм каждой процедуры. Очень удобно и полезно нарисовать схемы алгоритмов (то, что на жаргоне называется блок-схемами). 5. Выбор языка и программирование алгорит- ма. Как вы уже наверное заметили, до сих пор не было написано ни строчки программы !! До сих пор еще даже не ясно, на каком язы- ке будет написана программа !! Теперь, имея алгоритм, вы должны решить на каком же языке писать ? И решать это надо не по принципу "какой язык знаю луч- ше. на том и пишу". а по принципу "какой язык позволит эффективно реализовать алго- ритм". Выбрав язык, можно приступать к программированию и отладке программы. Как легко видеть,это пятый,а не первый и единственный пункт !!! Кивки на опытных программистов - "они, мол, сразу начинают программировать" не соответствуют действи- тельности. Несмотря ни на что, даже быва- лый программист не может программировать, не имея алгоритма ! Другое дело, что он придумывает его на ходу и берет сразу из головы. Но ведь на то он и бывалый. Также как опытный механик по шуму дви- гателя может поставить "диагноз", так и опытный программист производит многое из выше перечисленного "в уме" (но ведь про- изводит !), лишь в самых запутанных и сложных местах прибегая к помощи листка бумаги и ручки. А когда он был малоопытным и "начинающим", он все зарисовывал и запи- сывал на бумаге. И ничего в этом нет "при- нижающего" - человек, в уме вычисляющий сложные интегралы, когда-то не знал даже простейшей таблицы умножения. И не беда, если он начал программировать не имея нарисованного алгоритма - он его нарисует позже (хотя бы для проверки пра- вильности программы и для ее отладки). 6. Доскональное тестирование программы (другое название - пробная эксплуатация). В результате которого, по возможности вы- являются и исправляются ошибки, которые неизбежно содержатся в любой программе (старая "программерская" аксиома: в любой программе. как бы она ни была хорошо про- думана. содержатся по крайней мере две серьезные ошибки. которые можно выявить только при эксплуатации). Вот именно этот этап многие очень любят либо вообще про- пускать,либо проходить поверхностно,а зря. 7. Создание сопроводительной документации. Заключительный этап, во время которого вы должны расписать то, как работает ваша программа, как работать с ней и на каких компьютерах она должна работать, может ра- ботать, ... 8. Начало распространения. Теперь, и только теперь, программа со- ответственно оформлена и оттестирована, и можно начинать ее распространение. Не побоюсь повториться и сказать, что ЛЮБАЯ программа должна пройти через эти стадии, даже если это хаккерская версия ! Если она не прошла хоть одну стадию, или эта стадия оказалась "скомканной", то это означает одно из двух: 1. Это программа для "чисто домашнего ис- пользования в кругу семьи" и выпуск ее в продажу является актом глубокого неуваже- ний к пользователям (т.е. к тем, кто ее купит). Лично у меня есть несколько таких моих программ, они не имеют хорошего ин- терфейса (а зачем мне делать их нарядыми, если кроме меня их никто не увидит ?), рассчитаны на работу в основном только на SCORPION'е с теневым сервис-монитором (вот я еще для себя не делал "глючные" алгоритмы работы с диском, когда они уже "зашиты" в ПЗУ моего SCORPION !), не имеют практически никакой документации (я и так помню, зачем я их делал и как с ними рабо- тать). А теперь представьте, что одну из этих программ я начал распространять !!! Ваши эмоции по этому поводу ? А вот "начинающие программисты", "ИНФОРКОМ" (да и "SPECTROFON" кажется тоже) считают само сабой разумеющимся распространение таких программ. 2. Это, всеж-таки, коммерческая программа, но страшно ущербная, если вообще работаю- щая. Примеры ? Да их множество. Игры VIRUS и VIRUS-2: множественные "недодумки" на этапе 3 (создание концептуальной модели). в результате чего - неправильная обработка вирусов, непонятные правила изменения по- ведения вируса при изменении его парамет- ров, этап 7 (создание сопроводительной до- кументации) - то количество информации, которое сообщает нам автор, нельзя назвать просто приемлемым, не то что достаточным. Игра "Страна Мифов": программа, которую вполне можно было реализовать на 128К (пусть и с подгрузками, не впервой) рабо- тает только на 256К (этап 1, аппаратные требования). армия все время деградирует и ни о каком поиске Рунного Посоха речи быть не может (этап 3, создание кoнцепту- альной модели). Игра "SOLDIER OF THE FUTURE": в начале битвы роботы должны располагаться друг от друга (причем, либо все снаружи здания, либо все внутри одного здания) не дальше определенного расстояния, иначе у них не хватит энергии найти друг друга (этап 3), расстановка роботов перед битвой проходит "вслепую" т.к. карта выведется на экран уже позже (тот же этап 3). Надеюсь, дальше продолжать не стоит. Так что, уважаемые разработчики прог- рамм, пожалуйста, распространяйте только те программы, которые сделаны "по-науке". Уважайте покупателя (он же пользователь). На сегодня пока все, сначала "перевари- те" эту информацию, а потом я вам "скормлю" и другую. А если серьезно, то уже совсем скоро (но не раньше чем вы пой- мете, что программирование - один из видов искусства, с добавлением математической логики) мы с вами подойдем к описанию Ассемблера и приемам программирования на нем. До новых встреч. (C) PAUL ATRIDES ══════════════════════════════════════════ * * *