Программирование без знания исходного кода. Вскрытие ESoWC

Большинство из нас помнят старые добрые времена из начальной школы, когда мы впервые научились писать на клавиатуре. Учитель придет в нашу кабинку, чтобы посмотреть, как мы изо всех сил пытались писать на клавиатуре, и, чтобы усложнить задачу, они надели на клавиши чехол (накладки для клавиатуры), чтобы у нас больше не было соблазна смотреть вниз. . У меня было то же самое чувство с проектом, который я сделал этим летом.

С чего все началось?

Этим летом я участвовал в ESoWC (European Summer of Weather Code), замечательном проекте, организованном ECMWF (Европейский центр среднесрочных прогнозов погоды). Мой проект назывался «Интерфейс на основе Python для интегрированного Колонка с одной моделью системы прогнозирования», и это был единственный в своем роде опыт.

Я узнал об этом проекте от одного из моих друзей и подал заявку на него без каких-либо ожиданий, я просто подумал, что проект звучит круто и что я, возможно, помогу кому-то, написав его, я получил электронное письмо о том, что меня приняли, а затем я У меня был мой первый видеозвонок с двумя моими замечательными наставниками, Майклом Ланге и Оливье Марсденом. Встреча прошла хорошо, пока мне не сказали, что у меня не будет доступа ко всему коду, потому что код OpenIfs лицензирован, и мне нужно будет заставить мой университет подписать лицензионный договор, если я хочу иметь доступ ко всему коду. код… Думаю, выяснил, что такое настоящий страх. Поэтому, чтобы уточнить, мне нужно было бы понять очень большую кодовую базу (отредактированная версия, к которой у меня есть доступ, имеет более 56700 строк), написанной на Фортране более 40 лет, и мне пришлось обернуть этот код в Python и запустить его в Jupyter. среда ноутбука.

Осознание

Задача была тяжелой. Первые 3 недели я изо всех сил пытался компилировать код, ища символы в двоичных файлах и создавая построчно Makefile, который будет компилировать код для моей установки. Затем следующие 2 недели я потратил некоторое время, чтобы изучить код, к которому у меня был доступ, и получить общее представление о том, что происходит. Могу сказать, что эти две недели должны были быть самыми напряженными для моих наставников, я думаю, что я не пропускал дня, чтобы не отправить более 15 вопросов в slack-канал («Что это за тип данных? откуда? и так далее»). Спустя больше месяца у меня было общее представление о коде, и теперь я действительно понял, почему я должен был испугаться во время первой встречи :)). Код массивный.

На следующей неделе я начал оборачивать код и компилировать его с помощью замечательного проекта f90wrap. Это время, когда я стал чаще ходить на хакатоны, о чем вы можете прочитать здесь.

Как мне это удалось?

Простым ответом было бы: «нашел ответ в своих размышлениях».

Я думаю, что успех этого проекта — это сочетание замечательных наставников, опыта, который у меня есть в Python и Fortran, моего непреодолимого оптимизма, моей готовности адаптироваться к новым вызовам и опыта, который я почерпнул из хакатонов и работы в отрасли. одинаковый

Чему я научился на своих ошибках?

  • Переменные SAVE из Fortran остаются активными, если общий объект все еще активен, и если вы попытаетесь перезапустить программу, произойдет ошибка сегментации. По этой причине окончательное ядро ​​перезагружает ноутбук после каждого запуска OpenIFS.
  • Структуры данных Fortran сложнее, чем кажется на первый взгляд.
  • Документация не так хороша для некоторых старых подпрограмм.
  • Когда f90wrap компилирует файл, содержащий некоторые структуры данных, вы должны передать ему все файлы, в которых объявлены эти структуры данных.
  • Вы должны быть осторожны с тем, как вы объявляете добрую карту для f90wrap.
  • Это нормально, что файл-оболочка получается массивным (был один длиной более 13000 строк).
  • Структура кода немного странная. Иногда структуры данных объявляются в том же файле, что и методы для этого типа данных, иногда нет. Поэтому вы должны быть осторожны с тем, какие файлы вы включаете в оболочку.
  • Когда вы не можете найти файл, вы не останетесь на одну ночь, ища его, возможно, у вас его нет в сжатой версии проекта.

В целом, я думаю, что я многому научился из этого проекта и что конечный результат — это то, чего хотели от проекта организаторы.

Как молодой падаван, мое обучение продолжается написанием кода с завязанными глазами. Как сказал мастер Йода: «Делай или не делай. Нет попытки!».