четверг, 16 февраля 2017 г.

Ретроспектива - Часть 3 - Первая работа

У всех бывают в жизни некоторые периоды неопределённости, когда перед тобой неизвестность и нужно выбрать куда двигаться дальше или когда понимаешь, что то чем ты по жизни занимаешься тебя не устраивает.
В один из таких периодов в преддверии окончания университета, в абсолютном непонимании чем же мне дальше заниматься, кем работать и вообще -  я решил что буду заканчивать учёбу и искать работу по специальности.
Решив подтянуть один предмет и стал ходить на лекции, которых не было у меня в расписании. В конце концов почему бы не воспользоваться этой чудесной возможностью бесплатно получать знания.
Через несколько занятий преподаватель заметил, что к нему ходит незнакомый студент. Подозвал к себе и после недолгого разговора, видимо убедившись в моих стремлениях, предложил мне работу.
Первое что нужно было сделать - это смоделировать в матлабе данные которые отдаёт радар гражданской авиации. Так я начал писать код не только для себя.
На вход подавалась исходная траектория самолёта, а далее зашумлялась в зависимости от точности радара. Сложности были в том что земля у нас ни разу не круглая, и в минимальном и достаточном для нас приближении имеет форму эллипсоида (Как будто сесть на мячик). А радар отдаёт дальность и углы под которыми относительно него летит самолёт. Так что чтобы получить адекватную математическую модель приходилось шаманить с системами координат.
Вообще всё это нужно для того чтобы повысить точность и надёжность отображения позиций самолётов в диспетчерской. Точно показать куда и где летит самолёт, а также не пугать диспетчера если данные о его положении вдруг не придут пару раз от радара.
Ближе к реальности всё оказалось несколько сложней, т.к. ошибки радаров не единственный “шум” который мы получали на вход нашей системы.
  • Радары бывают с разной частотой ответа (данные приходят в разное время)
  • Радары бывают с разной степенью точности
  • могут передавать высоту самолёта, а могут и нет
  • данные приходят с задержкой
  • сами радары находятся на разной высоте
  • некоторые особи радаров вообще не отдают угол места
  • и не забываем что всё дело происходит на эллипсоиде
В процессе работы гонять данные из одной системы координат в другую приходилось далеко не один раз.

Общий план был такой:
  1. Написать симулятор данных которые отдают радары
  2. Написать различные алгоритмы обработки данных
  3. Подать трек самолёта на вход симулятора радаров и получить зашумлённый ошибками трек
  4. Обработать разными алгоритмами зашумлённый трек и сравнить его с исходным
  5. Выбрать из написанных алгоритмов лучший
  6. ???
  7. PROFIT!!!

В первой итерации всё было написано в матлабе, работало страшно медленно. 300 секунд работы нескольких радаров могло эмулироваться несколько минут. Но результат был и какие-то выводы уже можно было сделать.
Далее необходимо было написать standalone симулятор, и чтобы работал быстро. Дети, что у нас работает быстро? Си плюс плюс! Ну это в умелых руках, и при наличии опыта, конечно.
Ну что плюсы так плюсы. Берём в руки книжку и вперёд. “C/C++ Программирование на языке высокого уровня” автор: Т.А. Павловская. Не скажу, что она представляет значительный интерес, но необходимые начальные знания она мне дала. В книжке был раздел про структуры данных и их теоретическую реализацию, но к сожалению раздел про STL упомянули недостаточно жирным шрифтом. Поэтому когда понадобился LinkedList был написан свой велосипед, сейчас уже смешно, но как первый раз осознал - было, конечно, стыдно.
Дальше нужно было переходить к делу. Нужен был UI. Дети, на чём пишут UI под windows? Правильно MFC(Microsoft Foundation Classes). Ныне, как я думал, мёртвый и забытый. Но на сайте последнее обновление датируется 2016 годом, так что кто-то что-то на нём ещё пишет.
Ну что ж берём следующую книжку “Программирование на Visual C++ 6.0 для профессионалов“ Круглински Д., Уингоу С., Шеферд Дж.. Читать её было настоящим кошмаром, т.к. одно из трёх слов на каждой следующей странице было не известным мне. Но сотней другой попыток и копирований примеров, отдалённо удалось понять как это должно работать.
Так, без системы контроля версий, каких либо соглашений о наименовании, архитектуры и прочих глупостей; по большей части велосипедами удалось написать рабочий симулятор треков самолётов.
Далее нужно было писать сам обработчик радиолокационной информации. Договорились о том что это будет отдельный модуль, без собственного UI только принимающий данные от радаров и передающий по TCP/IP дальше на отображение.
Жаждя повышения своих знаний о мире программирования на глаза попалась книга “Совершенный код” Стива Макконнелла. Она открыла на многое мне глаза, и стала некой основой того как должен выглядеть код. Сейчас понимаю, что я вообще не помню ничего конкретного из этой книжки, хотя думаю многим пользуюсь. Видимо настало время пробежаться по ней ещё раз. Свой экземпляр, ещё давно, я дал кому-то почитать, но к счастью коллега на работе поделился своим.

К этому времени мне нашли помощника.
Соответственно нужно как-то было организовывать общую разработку. Тут - то я и познакомился с SVN. Но уже тогда наши дела почему-то не заладились, и чуть позже перешёл на GIT. До сих пор не люблю и всячески избегаю SVN. Но сталкиваться приходилось не раз и каждый раз с ним всплывают какие-то неочевидные проблемы.
В пользу потенциальной кроссплатформенности и снижении затрат на продукт выбор был сделан в сторону Qt. Набравшись опыта при написании симулятора, понимая где можно не городить собственные велосипеды и уверенностью как должен выглядеть хороший код был разработан модуль обработки радиолокационной информации.

К сожалению релиза я не дождался, во мне горело желание писать игры - и такая возможность представилась. И где-то тут я осознал что программирование - большая и очень важная часть моей жизни. Я почувствовал себя программистом.

Комментариев нет:

Отправить комментарий