[КАК Я УЧИЛСЯ ПРОГРАММИРОВАТЬ] - Ура! Я программист! Или история первого успеха | часть 2
Это третий пост из серии о моей работе в ИТ.
Предыдущие посты:
моя старая библиотека до сих пор хранится дома у родителей
Итак, наш первый экскурсионный сезон наконец закончился. У меня появилось больше времени, а проблема с регистрацией продаж, о которой я рассказывал в конце предыдущей части, так и осталась не решенной, очевидно было только то, что этот процесс требовал автоматизации. Необходимо было организовать работу так, чтобы диспетчер по продажам мог сконцентрироваться на общении с реализаторами билетов по телефону, а хранение данных и рутинные вычисления лучше всего было возложить на компьютер.
Осенью, после многих часов обсуждений, мне удалось убедить директора, что стоит попытаться разработать программу для регистрации продаж собственными силами. Главным образом помогло то, что, с одной стороны, у нас тогда не было средств для заказа разработки на стороне, а с другой, у меня в межсезонье было достаточно свободного времени для этого занятия.
Основная трудность заключалось в том, что несмотря на базовые знания языка C, у меня совершенно не было опыта разработки графического интерфейса пользователя (GUI). Также для работы программы необходимо было спроектировать базу данных и реализовать на языке SQL все запросы, необходимые для функционирования пользовательского интерфейса. В общем, я отправился в магазин за книгами и начал собирать небольшую домашнюю библиотеку, часть которой вы можете видеть на фото выше.
Этой осенью я за пятьдесят долларов купил у своего друга старый компьютер, который у него остался после апгрейда. Эта была машина с 486-м процессором, 32 мегабайтами оперативной памяти, двумя жесткими дисками общим объемом чуть больше гигабайта и стареньки CD-ROM. В комплекте со старичком мне достался такой же древний четырнадцатидюймовый монохромный монитор. Докупив модную по тем временам клавиатуру Mitsumi и мышку с шариком, я запустил комп и установил на него Windows NT 4, которую использовал на работе. Теперь я мог тратить на изучения программирования не только рабочее, но и большую часть свободного времени.
Для создания программы я выбрал среду разработки Delphi 5 и базу данных InterBase. Все это хоть как-то шевелилось и на рабочем, и на домашнем компьютерах, которые к тому времени уже прилично устарели. В среде Delphi программы разрабатываются на языке Object Pascal, основы которого я освоил довольно быстро. Первые сложности возникли у меня при работе с компонентами пользовательского интерфейса (UI), ведь разработка UI в Delphi была полностью основана на объектно ориентированном программировании (ООП), которого я на тот момент толком не понимал.
Вторая проблема состояла в том, что мне необходимо было спроектировать схему базы данных (БД) для хранения всей информации по продажам. При проектировании БД требуется разобраться с предметной областью, выделить в ней необходимые сущности и установить связи между ними. К счастью, у меня не было проблем с пониманием процесса продаж, так как я сам являлся его участником и видел все изнутри. Но с проектированием у меня все равно были значительные трудности, сказывалось отсутствие опыта. В результате этот процесс растянулся на несколько месяцев и закончил я его уже ближе к концу зимы в процессе сдачи зимней сессии в институте.
Когда у меня на руках была схема БД, разработка пошла вперед намного быстрее. Я по-быстрому наштамповал форм для справочников и в моей базе стали появляться первые тестовые данные. В процессе работы я освоился с SQL — это язык, на котором пишутся запросы на выборку, добавление, удаление и модификацию данных при работе с БД. Немного разобрался и с библиотекой компонентов, которая шла в комплекте с Delphi. Эта библиотека используется для вывода на экран окон программы вместе с их содержимым и организации взаимодействия с пользователем.
Моя жизнь в то тогда выглядела так — после восьми часов в офисе, я копировал исходный код на дискету, шел домой, ужинал и продолжал работу до самого позднего вечера. Утром я приносил на работу доработанную вчера версию кода и цикл повторялся. Таким образом, несмотря на недостаток знаний и опыта, разработка продвигалась достаточно быстро и к весне у меня уже имелся работающий прототип программы, который можно было показать директору. Этот прототип был принят достаточно позитивно и работа была продолжена.
Программа потихоньку стала обзаводиться дополнительными функциями. Первым делом, я добавил печать различных отчетов. С этим пришлось изрядно повозиться, так как тогда я не подозревал о существовании специальных компонентов, предназначенных для этой цели и мне пришлось изобрести собственный велосипед. После печати отчетов программа научилась оптимизировать маршрут автобуса по городу при утреннем сборе туристов с двух десятков доступных точек посадки. Чуть позже она стала подсказывать диспетчеру, когда необходимо предупредить реализатора о том, что продажа билетов на определенные маршруты уже закрыта.
Разработка новых фич велась практически до начала сезона и ближе к маю я уже стал бояться, что программа не будет нормально работать из-за каких-нибудь ошибок. Стал уделять все больше времени тестированию, вручную прогонял набор тестов практически после каждого изменения кода.
В конце мая, когда начали открываться первые точки продаж экскурсионных билетов, программа была уже практически готова и все продажи этого сезона заносились в базу данных. Пока сезон не набрал обороты, я обучил других сотрудников, в том числе и директора, работать с программой. Теперь, по крайней мере, можно было сходить на обед без опасения, что это приведет к очередному скандалу с туристами. Как это ни странно, но критических ошибок в программе не было, вся функциональность работала и за весь сезон я внес в код всего несколько незначительных изменений.
К концу июня уже стало понятно, что автоматизация процесса регистрации продаж работает, как и ожидалось — количество скандалов на посадках сократилось в несколько раз, как и число не допроданных по ошибке билетов. Полагаю, что деньги, выплаченные мне в виде зарплаты за время разработки, отбились еще до конца сезона. Нельзя сказать, что все работало как часики, ошибки иногда встречались, ведь влияние человеческого фактора в процессе все еще было велико. Но теперь мы, по крайней мере, имели доступ ко всем необходимым данным, чтобы можно было понять, почему случилась ошибка и как избежать подобных ситуаций в будущем.
По итогам сезона того года можно сказать, что внедрение программы прошло успешно. Требовалось несколько незначительных доработок, но в целом она выполняла свои функции и делала это хорошо. Добавлю, что эта программа продолжала приносить пользу еще несколько лет после моего ухода из турфирмы не требуя никаких вложений.
Во всем этом, несомненно, была значительная доля удачи, а также очень выручило то, что писал я эту программу фактически под себя, мне не приходилось задумываться над тем, как работает пользователь, что для него важно, а что нет. Оставалось только разобраться с проектированием и реализацией, а это, как стало понятно уже через год, хорошо если половина обычной работы разработчика ПО. Но в любом случае это был успех и теперь я хоть и с натяжкой соответствовал занимаемой должности «инженер-программист».
На этом, пожалуй, я на сегодня закончу. Если вам интересно, как развивалась моя карьера дальше, читайте об этом в следующем посте.
Спасибо за внимание.
Если вам понравился этот текст, не забудьте проголосовать и обязательно подпишитесь на мой блог — впереди будет много интересного. Заранее благодарен за поддержку.