Студентите на НБУ

Моят стаж в ЦЕРН

Университетски дневник бр.23 (2018)

Здравко Донев,
IV курс „Мрежови технологии“, Нов български университет

CERN е съкращение от Conseil Européen pour la Recherche Nucléaire (Европейски съвет за ядрени изследвания). Организацията е разположена на границата на Швейцария с Франция, северозападно от Женева, и е най-голямата в света лаборатория по физика на елементарните частици.

CERN е европейска изследователска организация, която управлява най-голямата лаборатория по физика на частиците в света. Оценява взаимодействието си с учениците и преподавателите. За ученици и учители са на разположение образователни програми, екскурзии и летни училища, за да помогнат на двете групи да научат повече за CERN, физика на частиците и нашето място като хора във вселената. За мен беше чест да участвам в една такава образователна програма на CERN.

Всичко започна на 15.06.2017г., когато получих имейл с предложение за възможност за участие в проект в CERN за 3 месеца от доц. д-р Петя Асенова. Целта на проекта бе да приложи допълнителни правила или инструменти за анализ на кода и да подобри рамката за проверка на кода като цяло. Тази задача е с изключителна важност за постигането на качествен код в проекта. Предложението към студентите за участие в проекта бе по инициатива на д-р Стоян Мишев, теоретичен физик с подготовка по информатика. Процедурата по наемане на студент от Нов български университет бе подпомогната от Петър Христов, физик в CERN.

Организацията по пътуването и престоя ми по време на образователната програма беше изцяло моя отговорност. Получих допълнителна информация в имейл от Петър Христов – за възможните директни полети София – Женева и за стаи и общежития под наем. Първата стъпка беше по запазването на квартира в частния сектор посредством онлайн услугата Airbnb, на около 50 минути път с градски транспорт, която се намираше във френската област Prévessin-Moëns. Втората стъпка бе по запазването на полет, съобразен с датата на първата уговорена среща в CERN. Всички задачи по пътуването и престоя ми по време на проекта минаха по план.

Първата среща в CERN с Петър Христов се състоеше в подробна разходка из работните сгради, местата за отдих, за хранене, както и регистрирането ми в системата за достъп с цел получаване статут на летен студент-стажант. В същия ден организирахме издаването на карта за чекиране и ключ от кабинета, в който бях настанен.

Първата седмица от стажа премина в обяснения за проекта, който те разработват (а именно AliceO2[1]), големината и разделението на техния екип, както и технологиите, които използват. Технологиите или поне тези, с които ме бяха запознали, бяха C++, CMake, Clang-Tidy и разработваха продуктите под Ubuntu през Command Line Interface (през „командния ред“). Допреди да се запозная с техния начин на работа, мислех, че използването на CLI за големи проекти е отживелица и никой не го прилага. Точно този метод за разработване на софтуер ми беше леко чужд, тъй като съм го използвал за създаване на софтуер само в университета, и то само за някакви малки проекти. Забелязал съм, че в повечето фирми е прието да се ползва някаква графична среда за тази цел, която представлява среда с бутони, текстови полета, падащи менюта и т. н. За мое учудване обаче, се оказа, че бързо свикнах с този начин на работа, а дори започна да ми харесва в някои моменти.

Моята задача като стажант в техния екип беше свързана индиректно с основния им проект – AliceO2. Трябваше да разработя продукт, който да проверява качеството на кода, да показва къде точно има грешка, каква точно е тя, как може да се поправи, и в идеалния случай, при достатъчно налична информация от контекста на кода, програмата трябваше да може автоматично да заменя грешния код с правилен такъв[2]. А в контекста на тази програма, която трябваше да направя, грешка в кода означава отклонение от правилата и конвенциите за писане и форматиране на код, които екипът е описал в два документа[3][4]. Разработването на продукта вече беше започнато от супервайзъра ми, Сандро Венцел, няколко месеца преди аз да започна работа по него. Имаше имплементирани една-две прости проверки на кода, чрез които се виждаше, че този подход за проверка на качеството му би работил добре. От мен оставаше да разработя начин за тестване на тези проверки (така наречените Unit Tests), разработване на допълнителни проверки (започвайки от най-лесните за имплементация правила) и автоматизация на създаването на нови проверки, тъй като за създаването и интегрирането на нови такива към проекта трябваше да се спазят шест-седем стъпки, а би било добре да се намалят до една-две, а останалите да стават автоматично.

След като изградих основите, върху които можех да градя по-напред, супервайзърът ми предложи да насочим вниманието си към един друг проблем в софтуера – предполагат, че голяма част от техните “#include” директиви са ненужни в C++ кода. На по-нетехнически език това означава, че в „мрежата“ от файлове, която се е получила в проекта, има голяма част връзки (един файл да използва друг файл) между файлове, които са ненужни и е редно да бъдат премахнати. За жалост, използвайки два различни open source проекта, не успяхме да се справим с този проблем на 100% и след известно време се върнахме към основния проект, който трябваше да разработвам.

В крайна сметка мислех, че тази задача няма да се окаже толкова времеемка и времето от почти три месеца трябваше да стигне. Оказа се обаче, че за много неща по пътя трябва да се отделя време и внимание, за да може човек да бъде сигурен, че продуктът накрая ще върши това, което е зададено да върши. Понеже този продукт накрая ще променя техния основен код, който използват за експериментите си, няма място за грешки.

Сандро Венцел ме научи да гледам на нещата първо на по-високо ниво и след това постепенно да слизам надолу, също да не прибързвам с взимането на решения. Успях да упражня и уменията си с Git системата за контролиране на софтуерни версии. Мога да заявя, че стажът ме накара да се чувствам по-уверен в себе си и, както всяко ново и различно нещо, ме накара да погледна на нещата под друг ъгъл и да се замисля за знанията си до момента.

Източници

1. AliceO2 проект – https://github.com/AliceO2Group/AliceO2

2. O2CodeChecker – https://github.com/AliceO2Group/O2CodeChecker

3. Coding Guidelines – http://htmlpreview.github.io/?https://github.com/AliceO2Group/CodingGuidelines/blob/master/coding_guidelines.html

4. Naming & Formatting rules – http://htmlpreview.github.io/?https://github.com/AliceO2Group/CodingGuidelines/blob/master/naming_formatting.html

Вашият коментар