Текст книги "Франчайзи на грани нервного срыва. Как небольшой фирме-партнеру 1С перестать выживать и начать зарабатывать"
Автор книги: Рустэм Валеев
Жанр: Маркетинг; PR; реклама, Бизнес-Книги
Возрастные ограничения: +16
сообщить о неприемлемом содержимом
Текущая страница: 2 (всего у книги 19 страниц)
Глава 2. Как научиться программировать за одну ночь, чтобы писать программу два года
Шел 1988 год. Мы, сотрудники института, работали на больших ЭВМ. Дорогой компьютер могли позволить себе только вычислительные центры и большие организации, которых было немного. Машинные залы занимали огромные площади, и были чем-то похожи на современные дата-центры. Машинное время было дефицитным ресурсом, распределяемым по разнарядке. И вдруг появились персональные компьютеры. Небольшие и не очень дорогие. Их могли купить даже средние организации.
Водоканал, в котором в то время работало около тысячи человек, купил несколько персоналок. Вообще, выбор у предприятия был небольшой: или расширять расчетный отдел бухгалтерии, в котором в то время работали четыре девушки, или как-то автоматизировать их работу. Расчетчицы совсем не успевали, в период начисления зарплаты они работали до поздней ночи.
Расчетный отдел бухгалтерии занимал одну большую комнату в небольшом здании еще дореволюционной постройки. Здание это, впихнутое между заводом и кинотеатром, расширить было нельзя, поэтому пятую девушку-расчетчицу просто некуда было посадить.
И тогда предприятие пошло по пути автоматизации. Директор Водоканала купил персоналки и стал ждать. Ждать, когда зарплата начнет считаться быстро и сама собой. Месяца через два, когда ничего не изменилось, он вызвал к себе заместителя по экономике, под которым была бухгалтерия. В результате бурной дискуссии выяснилось, что только компьютеров недостаточно. Нужны еще какие-то программы.
За программой решили обратиться в только что созданный кооператив «Вода»[3]3
Первые кооперативы в СССР появились в феврале 1987 года.
[Закрыть], который, между прочим, не только водосчетчики поставлял, а брался вообще за все, что сулило заработок. Просто больше некуда было обратиться: большие вычислительные центры не брались за разработки на персоналках, и программистских фирм тоже еще не было.
Договор был заключен, и исполнитель немедленно найден. Им оказался Василий Петрович, преподаватель информатики того ВУЗа, который в свое время окончил заместитель директора по экономике Водоканала. Единственный известный директору кооператива человек, который писал программы.
Василий Петрович, изучив вопрос, понял, что в одиночку ему не справиться. И привлек к работе меня, молодого инженера НИС. Мне было обещано три зарплаты за эту «небольшую шабашку», как называл создание программы расчета зарплаты Василий Петрович. Никого при этом не смущало, что я писал программы на «Фортране» для EC ЭВМ. А программу надо было написать на «ДВК-2М».
Я долго раздумывал, браться мне за эту разработку или нет, ведь я не знал ни предметной области, ни языка программирования. Но, как мне объяснил Василий Петрович, опыта программирования такого уровня задач на персоналках нет вообще ни у кого, а подводить клиента было нельзя. Кроме того, мне обещали поддержку моего бывшего преподавателя. И я решился. Если бы я тогда знал, через что мне придется пройти!
Мы пообщались немного с девочками-расчетчицами, которые показали нам ведомости для расчета зарплаты. Большие такие книги, размером примерно с бумажный лист формата А1. Страниц на 100 каждая. В эти книги они «разносили» табели и руками, с помощью счетов (те, кто постарше) или калькулятора (продвинутые пользователи), умножали оклад на время, добавляли доплаты и вычитали налоги и «исполнительные листы».
Мы с Василием Петровичем подбросили монетку и по-честному поделили работу. Мне достались начисления, ему – удержания.
Первое, что я сделал, когда добрался до компьютера, – выяснил, что на нем есть язык программирования. Бейсик. Через два дня нужно было что-то показывать заказчику, и поэтому мне пришлось изучить его очень быстро. Изучение заняло ночь. Утром я написал первую программу. Да, в этом языке было немного команд, несколько десятков, и большинство из них оказались экзотическими и совсем ненужными. Основными были Input и Print, а также арифметические команды «плюс», «минус», «умножить» и «разделить». И еще несколько команд для поиска и форматирования данных и работы с таблицами. Десятка команд было вполне достаточно для автоматизации работы расчетной группы.
На демонстрации я показал заполнение справочников цехов, работников, табелей и расчет повременного начисления для всех работников цеха. Отработанное время умножалось на оклад и заносилось в таблицу начислений. Таблицу с расчетом можно было вывести на экран или принтер.
Василий Петрович пошел несколько другим путем. В созданной им программе «Удержания» расчет происходил следующим образом. Сперва на экране появлялось сообщение:
«Введите табельный номер работника».
Расчетчица вводила:
«17».
«Введите код начисления».
«01».
«Это подоходный налог. Введите сумму, с которой надо удержать налог, руб.»
«147».
«Подоходный налог 13 % с суммы 147 руб. равняется 19 руб. 11 коп.»
Увидев такую красоту, расчетчица спросила Василия Петровича:
– И что мне с этим делать?
– Не знаю, может, в ведомость записывать после расчета по табельному номеру?
– Двести пятьдесят человек по пять – семь удержаний? Вводить данные и записывать результат? А спать когда?
Видимо, слухи о наших подходах к программированию дошли до директора кооператива, потому что через несколько дней я уже был единственным программистом на этом проекте.
Конечно же, я попытался применить научный подход. Но увы. Методическая литература по теме отсутствовала. Единственная книга, которую я нашел, рассказывала об автоматизации расчета зарплаты на ЭВМ серии EC. Описывалась следующая технология. Пользователи вручную заполняли шаблоны данных. Собирали их в пакеты и отвозили в вычислительный центр. Операторы вводили данные, и большая машина делала расчет. Информация вводилась дважды. Если программа находила расхождения, ввод пакета повторялся. Расчет начинался только после полного совпадения данных. Таким образом была реализована защита от ошибок.
Но эта технология и эти шаблоны абсолютно не подходили для работы с персональным компьютером. Пришлось все делать с нуля, подробно расспрашивая расчетчиц. Мне тогда повезло. Руководительница расчетной группы Марина, несмотря на свою горячность, была очень хорошим специалистом. Она смогла грамотно поставить задачу. Мы с ней разработали свои алгоритмы расчета начислений и удержаний, откуда мат Марины был предусмотрительно удален, и, по большому счету, ничего не упустили.
Этот подход сыграл со мной в будущем злую шутку. Когда я начал заниматься автоматизацией основных средств, я также положился на руководителя другой группы. Та поставила мне задачу: рассчитать амортизацию основных средств за месяц как итоговую амортизацию прошлого месяца минус амортизацию выбывших основных средств плюс амортизацию введенных. Но при повторении ручного алгоритма в компьютере нужные результаты не получались. Мы бились месяц, но ничего не сходилось. В отчаянии я вспомнил про научный подход и отправился в библиотеку. Нашел учебник по бухгалтерскому учету, открыл раздел по учету основных средств. И сразу же понял, что нужно сделать. В итоге мы перешли к суммированию индивидуальных амортизаций по каждой карточке основных средств. Машине ничего не стоило просуммировать 10 тысяч позиций, в отличие от людей. Так мы, наконец-то, получили корректный результат.
А я получил еще один урок научного подхода. Для правильной постановки задачи программисту недостаточно пообщаться с пользователем. Обязательно надо изучить нормативную документацию, которая регулирует бизнес-процесс: законы и постановления правительства, положения по бухгалтерскому учету (ПБУ), положения об отделах и должностные инструкции, приказы и инструкции по предприятию. В особо сложных случаях – учебники и журнальные статьи. Чем больше источников исследует разработчик, тем более качественно будет сформулирована задача. И меньше переделок будет в коде.
Но вернемся к нашему рассказу. Не прошло и полгода, как мы провели пробный расчет зарплаты. Девочки вбили все данные, я запустил программу, мы распечатали расчетные ведомости, и расчетчицы сели за сверку.
Я был так горд собой, ведь создание программы стоило мне множества бессонных ночей. Я освоил новый язык программирования и предметную область. Усмирил болгарский дисковод (об этом – подробнее в следующей истории). Написал десятки страниц кода. Поэтому, когда я увидел рыдающую Марину, подумал: «Да, понимаю ее чувства. Не будет больше задержек на работе, бессонных ночей и красных глаз». Но оказалось, что рыдает Марина совсем по другому поводу: расчеты и близко не сходились! Ошибок было очень много. И во вводе данных, и в коде программы, и даже в алгоритмах. Поэтому пришлось еще пару месяцев дорабатывать программу, в том числе написать специальный код для защиты от неверного ввода данных, так как двойной ввод позволить себе мы не могли.
Но и это еще не все. Поскольку делали мы все это на ДВК-2М, уже в ходе проекта выяснилось, что его техническое оснащение не дает возможности запустить проект в полном объеме. Болгарские дисководы и очень небольшой объем ОЗУ и дискет – такая техника не выдерживала нагрузки. Ни один расчет так и не дошел до конца. Программу пришлось сдавать на примере расчета двух цехов – и спасибо, что ее приняли и оплатили, хотя и понимали, что использовать не смогут.
Поэтому все пришлось повторить после того, как заказчик приобрел новые персональные компьютеры «Искра-1030» с винчестерами и ОЗУ в 256 килобайт! После двух лет работы и освоения нового языка FoxBase программа все-таки пошла в промышленную эксплуатацию. Я выстоял, я справился со всеми трудностями и, наконец-то, увидел счастливые глаза моих расчетчиц, с которыми сроднился за это время! Программу я назвал «Роза», хотя Розы среды расчетчиц не было, просто по заглавным буквам словосочетания «Расчет зарплаты».
Но на дорожку программа преподала мне еще один урок. Первые расчетные листки распечатали и отнесли руководству Водоканала. Через некоторое время меня вызвал главный инженер.
– Что это? – спросил он, ткнув меня в какое-то начисление в расчетном листке.
– Ммм… «Пр. за нотх. по п»… А, это же единовременная премия за новую технику по приказу!
– Да? А я думал «Праздник с нотами и попами». Вы чего там, программисты, творите?
– Да у нас всего четырнадцать символов в справочнике начислений… Это же мелочи! Главное, что программа считает!
– Мелочи, говоришь? А если у тебя завтра 700 рабочих притащатся в расчетный отдел выяснять, что там с попами и нотами? Иди и исправь!
Тогда я понял, что названия важны. Имена важны. Слова важны. «Премия нов. тех.», конечно!
Основой нашего взаимодействия является речь. Которая состоит из слов. И с ними надо быть аккуратнее. Полные и однозначные названия лучше кратких. Я помню об этом всегда, даже если дело не касается названия переменных и реквизитов в программах. Мои сотрудники не отправляют клиентам файлы с названиями «КП» или «Договор». Мы готовим и высылаем клиенту «Договор № 2257 Софт-портал – Теплосеть – 1С Управление теплосетью 2 – Внедрение». Проявляя уважение к коллегам, экономя им время поиска нужного документа.
Глава 3. Как победить болгарский дисковод
«ДВК 2М» – так назывался аппаратный комплекс, на котором создавалась программа «Расчет зарплаты». Для своего времени это был суперкомпьютер. Во-первых, он был персональным. Вполне приемлемого размера, помещался на стол. Во-вторых, у него было огромное быстродействие – целых 10 или 20 тысяч операций в секунду. Да-да, тогда быстродействие измерялось не тактовой частотой процессора, а именно операциями с двоичными числами. И в-третьих, у него было ОЗУ довольно большой емкости – целых 64 килобайта. Туда спокойно помещалась операционка, программа Бейсик, текст прикладной программы и ее данные. Чего в ДВК не было – так это винчестера. А значит, и записанной на нем операционки. К системному блоку прилагался болгарский сдвоенный дисковод размером 5,25 дюйма. В верхний слот я вставлял дискету с операционной системой и бейсиком. А в нижний – дискету с прикладной программой и данными.
Компьютер был отечественный, но сильно продвинутый. Поэтому он зависал и перегружался не чаще двух раз в день. При перезагрузке пропадали не только операционка в ОЗУ, но и, скажем, набитый за пару часов в бейсике текст новой программы. Помню, как долго я не мог прийти в себя, когда в обед компьютер завис и унес в небытие пять страниц готовой программы! Как я в ужасе бегал вокруг стола и думал, что «ну должен же где-нибудь остаться хоть какой-то след от такого серьезного труда!». Но, увы, след оставался только в моем мозгу. Именно тогда я впервые столкнулся с таким интересным феноменом: написанная повторно по памяти программа была всегда лучше прототипа! И короче, и работала быстрее.
Со спонтанными перезагрузками ничего нельзя было сделать. Более того, мы искренне радовались, что они не такие частые, как на больших машинах. Например, перезагрузки на ЕС ЭВМ случались раз в полчаса-час и считались нормой! Так вот, для того, чтобы не терять новую программу при каждой перезагрузке, нужно было ее периодически сбрасывать из ОЗУ на дискету. Но. Тут-то и начиналось самое интересное. Болгарский дисковод записывал программу на дискету. Иногда. Но не всегда. Чаще он шипел, трещал, свистел, но… не записывал! Через минуту шипения и свиста появлялось страшное сообщение «Write failure error» и можно было переходить к новой попытке. Иногда, после трех-четырех попыток, файл все-таки записывался. Однако не было никакой гарантии, что он прочитается! «Read failure error». Это было не менее ужасное и не менее редкое сообщение системы. И вот бывает, сидишь ты за компьютером, в конце рабочего дня, смотришь на листинг программы на экране и пытаешься ее хотя бы запомнить. Потому что записать ее не получается. Ну никак! Это ужасное чувство, думаю, напоминающее то, которое должен испытывать человек, бегущий за последним вагоном электрички, уже коснувшийся поручня, и вдруг осознающий, что поезд ушел.
Водоканал, для которого я писал программу, закупил сразу пять ДВК с болгарскими дисководами. Мы с девочками из бухгалтерии пытались найти среди них тот, который бы записывал и считывал файлы наилучшим образом. Дисковод, более надежный, чем другие, ценился на вес золота. Мы предпринимали различные способы улучшить работу болгарских дисководов. Особой популярностью пользовался такой способ. Покупался настольный вентилятор. Он ставился в коробку из-под бумаги. В коробке вырезались две большие дырки. Одна – для поступления воздуха. А вторая, квадратная, для болгарского дисковода. Он устанавливался в эту дырку и интенсивно охлаждался потоком воздуха. Кто-то свято верил в такие «усовершенствования», я же считал, что это все равно, что камлать на бубне – никакой гарантии. 50 на 50: или запишет, или нет. Вот тогда-то во мне и зародилось первое глубокое сомнение в братстве народов, СЭВ[4]4
СЭВ, Совет экономической взаимопомощи – межправительственная экономическая организация, действовавшая в 1949–1991 годах. Создана по решению экономического совещания представителей Албании, Болгарии, Венгрии, Польши, Румынии, СССР и Чехословакии. Одной из задач организации было развитие высших форм экономической интеграции – производственной кооперации и специализации, научно-технического сотрудничества.
[Закрыть] и целесообразности социалистического пути развития. Боже мой, как же я проклинал братьев болгар – криворуких безжалостных убийц моего времени!
Операционная система, которую мы тогда использовали, называлась RT11SJ. Загружалась она секунд десять и записывалась на диск в виде пары файлов. В отличие от MS DOS, которая появилась чуть позднее, операционка эта обладала намного большим количеством удобных команд. Например, могла выдавать список файлов с подкаталогами, а DOS не умел этого делать! «Убожество» – вот первое мое ощущение от использования DOS. Однако мы все-таки перешли на DOS окончательно и бесповоротно, когда поняли, что под ней «идут» все новые программы и игрушки, а программ для RT11 становится все меньше.
64 килобайт в ОЗУ и 250 килобайт на каждой дискете делали процесс написания большой программы весьма увлекательным. Программисту требовалась определенная сноровка, чтобы правильно разбить программу и данные на части и заставить их успешно взаимодействовать. Программа расчета зарплаты «Роза» работала так. Сперва в оперативную память загружалась система. Потом Бейсик. Потом Главная программа. Она просила вставить в нижний дисковод дискету № 1 с данными цеха 1 за январь 1989 года. Расчетчица могла отредактировать данные работников, ввести табель и посчитать зарплату за месяц. После этого, если дисковод работал, ей даже удавалось сохранить результаты расчета! Если она хотела их распечатать, Главная программа просила вставить диск с Программой для печати, потом диск с данными цеха, потом диск с Главной программой. Потом вставлялась дискета номер 2 для цеха номер 2, и так далее – до диска номер 42. 42 цеха было в Водоканале. И ни разу нам не удалось рассчитать их все. Или болгарский дисковод перегревался и останавливался (зачастую – уже навсегда). Или расчетчица что-то путала и записывала на диск номер 2 данные цеха номер 17. И неделю, матерясь, их восстанавливала. А что делать – дискет для архива просто не было! Или, если все шло хорошо, в каком-нибудь 27-м цехе обнаруживались новый вид расчета или ошибка в алгоритме, и все приходилось начинать заново! Помню, что благодаря тому ужасу, который вызывала необходимость дойти с такой технологией «до конца», все-таки было принято разумное решение принять программу у программистов по акту на примере двух цехов. После чего девочки продолжили считать зарплату в бумажных расчетных ведомостях, вплоть до того момента, пока программа не заработала надежно на «Искре-1030».
Вспоминая прошлое, я радуюсь тем грандиозным изменениям, что произошли в нашей работе. Надежные и производительные винчестеры, огромная оперативная память начисто избавили программистов от необходимости задумываться о таких вещах, как дефицит вычислительных ресурсов или аппаратные сбои. Теперь программист может сосредоточиться на главном – написании кода для решения задач пользователя.
Глава 4. Как написать программу, за которую тебя будут благодарить 15 лет
Программирование занимало в моей жизни все больше времени, и его совсем не оставалось на науку. Поэтому, когда заместитель директора по экономике Водоканала предложил мне ставку программиста в кооперативе «Вода», я не раздумывал. Подписал заявление об уходе в вузе, отработал две недели и перешел полностью на работу с Водоканалом.
Следующей задачей, которую мне предстояло решить, стал расчет начислений и печать счетов абонентам Водоканала.
Делалось все вручную. Расчеты выполнялись в больших книгах, «оборотках». Информация о показаниях счетчиков переписывалась из абонентских книжек на страницы книги и умножалась на тариф. В эти же книги разносились оплаты. По итогам месяца рассчитывалось сальдо. Сложности начинались в период выставления счетов. Счета и платежные требования печатались на печатных машинках на готовых бланках, в нужные места которых впечатывались только объемы и суммы. В дни выставления счетов в абонентский отдел было не зайти – машинки строчили, заглушая все вокруг. Готовые счета раскладывались по конвертам и отправлялись абонентам. Хорошо, что в то время еще не было счетов-фактур. Не представляю, как бы сотрудники отдела справлялись с двойной работой.
Первая программа, которую я написал, была не самой эффективной. Она копировала действия сотрудников, распечатывая данные из электронной ведомости в бланки счетов. Время, которое уходило на правильную установку бланка в принтер, было не меньшим, чем печать счета на машинке. И это не считая загубленных криво вставленных бланков!
Пришлось пойти другим путем – печатать счета полностью. Печатались они на рулонной бумаге сплошной лентой и потом разрывались с помощью линейки по местам разреза. Вообще, меня удивляли первые матричные принтеры. Бумага к ним поставлялась исключительно в рулонах, но ни один из принтеров не был оборудован устройством для подачи бумаги. Или их не выпускали производители, или их не поставляли наши поставщики! Народ делал такие устройства сам, обычно они состояли из металлической оси и подставки, на которой ось крутилась.
Но одной печати счетов было недостаточно для счастья абонентского отдела. Как говорится, вкус приходит во время еды. Запросы к программе росли, и решено было написать вторую версию программы «Абонент», уже для самых современных компьютеров IBM 286.
И тут я столкнулся с тем, что чем больше становилась программа, тем больше в ней было ошибок! Сперва я тратил на их устранение немного времени – несколько минут в день. Но, по мере роста программы, время «ремонта» увеличивалось. Через три месяца на поиск ошибок уходили часы. И, наконец, настал такой день, когда я не написал ни строчки нового кода. Весь день я чинил программу, исправлял в ней «баги». И, как вы понимаете, создавал новые.
Со мной работал старший товарищ, Наиль. Он посоветовал мне книжку про структурное программирование зарубежных авторов. Настоящий бестселлер тех времен. Смысл книги сводился к тому, что не нужно из программы делать огромное запутанное «блюдо спагетти». Большую программу следовало разбить на совсем небольшие модули, так, чтобы каждый модуль умещался в экран дисплея. Писать программу предлагалось с самого верхнего модуля, отлаживая каждую из написанных частей до того, как напишется вся программа. Отсутствующие подпрограммы заменялись «затычками» – небольшими программками, просто отвечающими на вызов: «Все в порядке, я работаю». Особое внимание авторы уделили комментариям. В каждом модуле нужно было подробно описать его назначение и прокомментировать каждый блок кода. С того момента, как я прочитал книгу, жизнь моя изменилась. Ошибки покинули мои программы, а отладка стала занимать незначительное время. Количество кода тоже сильно сократилось, так как дублирующиеся фрагменты переехали в специализированные модули.
Наиль оказал мне еще одну неоценимую помощь. Как-то он увидел структуру таблички «Лицевые счета», которую я создавал в базе данных FoxBase. Она выглядела примерно так:
● Название улицы;
● Номер дома;
● Номер квартиры;
● Номер лицевого счета;
● Фамилия квартиросъемщика;
● …
– Слушай, – спросил меня Наиль, – ты что, никогда не слышал о третьей нормальной форме?
– Что еще за форма? Почему третья, что с первой и второй? И почему ты думаешь, что у меня форма ненормальная?
– Представь, что завтра улицу переименуют. Была Абрикосовая, а станет Виноградная. А у тебя на Абрикосовой десять тысяч лицевых счетов. И в каждом нужно будет перебить руками название улицы! Ну ладно, предположим, ты программу напишешь, которая это сделает автоматически. Но ты уверен, что у тебя во всех записях Абрикосовая именно Абрикосовая? А не абриксовая или Обрикосовая? И если потом ты захочешь сделать выборку по улице, сколько лицевых счетов ты потеряешь? То-то же.
И он дал мне почитать переводную статью Уильяма Кента, в которой описывались нормальные формы реляционной базы данных – от первой до пятой. После изучения статьи табличка «Лицевые счета» превратилась в пять таблиц – «Улицы», «Дома», «Квартиры», «Жители» и «Лицевые счета», в которых полностью отсутствовало дублирование информации. Теперь улицу можно было переименовать без последствий для домов и лицевых счетов на ней.
Поэтому, когда я встретил Наиля через 20 лет, я сильно удивился. Человек, который так много знал, и сыграл в моей жизни важную роль учителя и наставника, по-прежнему писал программы на FoxBase! Я в то время уже перешел на 1С, создал свою компанию и автоматизировал множество предприятий на этой платформе.
– 1С? Прошу тебя, не рассказывай мне про 1С! Ненавижу эту систему! Она оставила меня практически без работы! Держусь только благодаря двум-трем старым заказчикам! Хочешь, я покажу тебе, какой классный универсальный документ я написал на FoxBase?
Я промолчал. Хорошо, конечно, оттачивать мастерство, создавая все более совершенные программы на старых языках. Но намного лучше идти в ногу со временем, изучая современные платформы. И я еще раз порадовался тому, что платформа 1С не стоит на месте, развивается, седьмая версия, восьмая, веб-сервисы, мобильные приложения, система взаимодействия, работа с большими данными… В каждом релизе появляется что-то новое, и таких релизов выходит несколько в год.
Но вернемся к нашей программе «Абоненты». Создавалась она очень постепенно, в течение нескольких лет. Сперва я написал совсем небольшую основу. В базовую программу можно было ввести данные об абонентах, объектах водопотребления, часовые нагрузки, данные приборов учета и произвести расчет начислений. Выставить счета. Ввести оплаты. И получить отчеты о реализации и дебиторской задолженности.
Дальше работа по развитию программы происходила таким образом. Каждый месяц, после выставления счетов абонентам, ко мне приходила начальница отдела сбыта и говорила примерно так:
– У нас никогда не было такой прекрасной программы. Она умеет все! Считает и быстро, и правильно. Правда, в ней не хватает одной небольшой штучки…
– Какой еще штучки?
– Да ерунды, мелочи. Мы забыли с тобой, что водопотребление лимитировано. Нужно следить, чтобы абоненты не потребляли ресурсы сверх установленных лимитов. А кто балуется, с тех брать за сверхлимит по пятикратному тарифу.
Я понимал, что все серьезно, и, хотя, они могли внести этот сверхлимит вручную в любой счет, садился и дописывал программу.
Так в программе постепенно появились:
● Выставление и учет начислений за превышение лимитов по загрязнению окружающей среды;
● Акты за бездоговорное потребление, объем которого рассчитан по времени нарушения и сечению трубы;
● Раздельный учет водоснабжения и водоотведения для бухгалтерии;
● Планирование по статистическим данным за прошлые периоды;
● Счета-фактуры;
● 100 500 новых отчетов…
● … и множество других улучшений, которые я сейчас уже и не припомню.
То есть программа создавалась, сама того не ведая, по модной сегодня идеологии Agile[5]5
«Эджайл» или agile-методы, гибкая разработка ПО (англ. Agile software development) – обобщающий термин для практик итерационной разработки программного обеспечения. Практики нацелены на минимизацию рисков путем сведения разработки к серии коротких циклов, называемых итерациями, и включающими все задачи, необходимые для выдачи мини-прироста по функциональности решения: планирование, анализ требований, проектирование, программирование, тестирование и документирование.
[Закрыть]. Причем, я подозреваю, начальница отдела сбыта «скармливала» мне новые пожелания очень постепенно. Так, чтобы я мог переварить их в период между выставлениями. Вела, скажем так, свой тайный бэклог (список требований). Получался такой спринт длинной в месяц, после которого выходил новый релиз. И релиз этот был вполне рабочий, и внедрялся без проблем.
Ну и, конечно, я не могу не упомянуть тут интерфейс «Абонентов». Он был сделан по образцу программы, которую в то время использовал каждый пользователь Искры-1030, а позднее IBM PC 286, 386 и 486. Это, конечно же, Нортон Коммандер! Как и в прототипе, в «Абонентах» было два экрана. На одном список абонентов, на другом список объектов выбранного абонента. Или на первом карточка абонента, на втором оборотная ведомость со счетами и платежами. И кнопки F2, F3… F10, нажимая на которые можно было открыть нужный объект абонента, счет или платежку. Подсказка по F1, конечно. И никакой мышки, только кнопка Tab для перемещения между полями ввода.
Но все хорошее, когда-нибудь, да и кончается. Через пару лет наступил такой день, когда я вынужден был уйти из Водоканала и сопровождение программы передали другому программисту. Иван много лет развивал программу. Мы с ним часто встречались по работе, и каждый раз он благодарил меня за три вещи: правильную структуру данных, продуманную модульную архитектуру кода и комментарии. За 15 лет, что прожила программа, он внес в нее множество улучшений, и ни одно из них не сломало систему.
Правообладателям!
Это произведение, предположительно, находится в статусе 'public domain'. Если это не так и размещение материала нарушает чьи-либо права, то сообщите нам об этом.