JavaRush /Java блог /Random UA /Один день із життя Java-розробника. Частина 1
alex8894
34 рівень
Санкт-Петербург

Один день із життя Java-розробника. Частина 1

Стаття з групи Random UA
Вітаю, шановні колеги! Після публікації « 20+ років по тому », деякі читачі попросабо написати продовження історії. Про що ще я міг би розповісти? Начебто, тему про перетворення «бородатого енікея» на Java-розробника я розкрив повністю. Підбити якісь підсумки можна буде не раніше, ніж після року роботи. І тоді я вирішив просто описати, як минає мій звичайний робочий день. Під катом «Один день із життя Java-розробника». В молодості я любив поспати. Під час перебування енікеєм, траплялося, спав до полудня і приходив на роботу о третій, а то й пів-четвертої. На періодичні вимоги керівництва «приходити як усі», тобто до 9-ї ранку, реагував щоразу однаково — мовляв, мені треба займатися комп'ютерами тоді, коли я нікому не заважаю. Прокочувало. Але з віком, мабуть, в організмі щось змінилося, і зараз я скоріше «жайворонок», ніж «сова». Тому зараз я приходжу на роботу першим (ну чи одним із перших). Сьогодні я перший, і я маю півгодини-годину тиші до моменту, коли підтягнуться інші, менш «ранні пташки». Саме час для того, щоби спланувати сьогоднішній день. Розробку я веду під Linux Mint. Ось подобається мені кнопка «Пуск», скромно та витончено, не те що ці плитки. Десктопний менеджер Cinnamon не перевантажений візуальними ефектами, але за ступенем «вилізаності» трохи поступається MacOS, яка, безумовно, еталон у даному питанні. Порівняти нескладно, он Mac на сусідньому столі, за ним UX-дизайнер працює. До самої ОС у мене теж майже немає претензій: працює швидко і дуже стабільно, перезавантажував я її всього три рази за цей час — коли вимикав комп'ютер під час довгих свят. Власне, вантажиться вона теж майже миттєво, навіть заставка з'явитися не встигає, тому що всі комп'ютери розробників мають SSD-диски. Насамперед, відкриваю поштовий клієнт Thunderbird, туди приходять листи з інформацією про зміни сторінок, що цікавлять мене у wiki (там постановки та специфікації), але головне — оповіщення від трекера. Що у нас цікавого трапилося? О, повернули з тестування фічу, яку закінчив учора, схоже, багу знайшли. Так, так і є. Треба її якнайшвидше поправити, може, встигну до приходу тестувальника і він, поки ще не вліз у якийсь «довгобуд», одразу ж подивиться виправлення. Ось і перша справа на сьогодні є. Так, а це вже про мій "довгобуд", який я писав весь минулий спринт. Здається, цього разу він успішно витримав усі кола пеклаетапи тестування і сьогодні, ймовірно, його треба буде мержити в основну гілку проекту. Але це пізніше, після обіду. Ще сьогодні доведеться попрацювати девопсом і оновити стенд із гілки, в якій поки що ведеться розробка, потрібно показати новий функціонал. «З великою енергією great responsibility», виводить попередження команда sudo перед тим, як надати права root. У моєму, дещо вільному перекладі ця фраза звучить як «що більше ти вмієш, тим більше тобі доведеться робити». Тож не дивно, що мені, відзначеному «печаткою адміна», нерідко прилітають подібні «прикордонні» завдання. Ну, приступимо. Вчора я працював над іншою фічою, а зараз мені треба повернутись на гілку, де бага. «Віндузятники» зазвичай люблять всякі графічні оболонки і користуються Черепахою (TortoiseGit), але мені простіше і звичніше через командний рядок. Взагалі, командний рядок у Linux - маленький шедевр, неймовірно продуманий і потужний, особливо у поєднанні з Midnight Commander. Переключабо, тепер треба перезбирати проект. Набираю команду gradle clean ass. Не знаю, була ця команда так спочатку задумана авторами gradle або випадково вийшла, але вона просто очищає і перезбирає проект (ass — скорочення від assemble, а зовсім не те, що першим спадає на думку). На javarush gradle згадано лише мигцем, як «та інші системи складання». Так, для складання навчальних проектів жодних переваг у gradle перед maven немає. Більшість посібників та how-to в Інтернеті також використовують maven. Поява і зростаюча популярність gradle, мабуть, викликані стрімким зростанням складності складання сучасних проектів. Проект, у якому я беру участь, складається з декількох десятків компонентів, де бекенд написаний на Java, фронтенд — на Javascript, а тести — на Python. До речі, в наш час складання Javascript-проекту - окремий і зовсім непростий процес, який навіть назву має - Web Workflow, і дерево залежностей там майже таке ж розлоге, як у Java. Добре, хоч Python-компоненти збирати не потрібно, ну, майже не потрібно... Після складання та запуску (який теж нетривіальний) необхідно підняти та проініціалізувати тестовими даними ціле оточення з реляційною та NoSql-базою даних, чергою повідомлень та in-memory кешем . Потім все це треба знову зібрати і запустити вже на сервері CI, а потім деплоїти за допомогою ansible. При цьому розробка переважно йде під Windows, а «бойові», демо, тестові та інші пре-prod сервери, природно, під Linux. Я не дуже уявляю, як взагалі можна реалізувати подібні речі на maven, а на gradle — цілком. Справа в тому, що білд-файл gradle пишеться мовою Groovy. Дуже до речі забавна мова, кажуть, що суміш Java і Ruby, але я не знаю Ruby, зате трохи знаю Javascript, і багато конструкцій з нього теж працюють. Творці gradle реалізували такий API, що у простих випадках білд-файл виглядає цілком декларативно (і, до речі, на мій погляд, читається навіть легше, ніж maven-івський pom.xml), але якщо потрібно щось складніше, вся ця декларативність відкидається, з'являються змінні, функції, класи - словом, усі можливості Groovy, який, до речі, може компілюватися та виконується на тій же JVM, що й код Java. Сама збірка, як я вже згадав, кросплатформова, але вона взаємодіє з оточенням, тому її потрібно перевіряти і під Windows теж. Для цього у мене встановлена ​​Windows на віртуальній машині. KVM йде вперед семимильними кроками, і при правильному настроюванні гостьової системи віртуалізація майже непомітна. Так, spice тепер підтримує два монітори, роздільна здатність екранів підлаштовується автоматично, паравіртуалізовані драйвери пристроїв майже не дають втрати у продуктивності. Я часом ловлю себе на думці, що не відчуваю особливої ​​різниці між двома платформами. Все-таки Java - дивовижний інструмент, що настільки зблизив два абсолютно різних і, часом, навіть ворожих один одному світу - світ проперитарного ПЗ, креків, кейгенів та серійників,уособленням якого є Windows і світ відкритих систем Linux. Так, проект зібрався, запускаємо (звісно, ​​теж через gradle) і дивимося. Ну так, ганьба на мою сиву бороду, не реалізувала жодну з вимог постановки, ось воно, чорним по білому у wiki написано. На минулій роботі я регулярно стикався з подібною ситуацією і завжди дивувався, як розробник міг пропустити абзац зі специфікації. Так, просто! Задумався, зосередився на іншій проблемі – і бага. Тільки тут, завдяки кільком стадіям тестування, її відловлять, а на минулому місці — ну, по всякому. На щастя, тут роботи не довго. Запускаю Idea Ultimate, це до речі один із небагатьох платних продуктів, що використовуються в розробці. В принципі, можна обійтися і Community Edition, але до хорошого, наприклад, інтеграції зі Spring, швидко звикаєш. Ще потрібна пара терміналів для логів, браузер для фронтенду та wiki, ще один термінал з командним рядком, все рухається, блимає... Загалом, картинка на екранах двох моніторів починає набувати жахливого вигляду, типу того, що показують у малобюджетних фільмах, зображуючи напружену роботу хакера Але це ще дрібниці, а ось, пам'ятаю, коли довелося піднімати та налаштовувати відмовостійкий кластер – сім термінальних вікон, ще щось у кутку екрану, у всіх вікнах – якісь цифри та картинки з ascii-графіки… Але я трохи відволікся від роботи, а час іде. ... Уф, ну начебто зробив все що потрібно і, здається, нічого зі зробленого раніше при цьому не зламав. Дописую коментар до фічі та відправляю гілку на тестування. Я намагаюся докладніше написати, що саме зробив чи змінив, щоб спростити роботу тестувальника. На минулій роботі мені не вистачало подібних пояснень, коли доводилося перевіряти доробки, отримані від розробників. Тим часом ранок плавно перетік на день, народ поступово підтягнувся. Незабаром stand up meeting, а якщо по-нашому, то стендап. Взагалі-то з нього робочий день має починатися, і для більшості «сов» так воно і є. Стендап виступає як межа максимально пізнього приходу на роботу, запізнюватися на нього не рекомендується. Ну а для мене це як перерва виходить. Отже, все встаємо. На стендапі, як водиться, розробники розповідають, що вони робабо вчора і що планують робити сьогодні, тестувальники — що тестували і з яким результатом, а начальники, зрозуміло — що планується робити далі, які проблеми виникли і на що треба звернути особливу увагу. Команда у нас територіально розподілена, і в повному складі її можна побачити тільки на стендапі (по телевізору, звичайно), та й ще, мабуть - на загальному корпоративі кілька разів на рік. У мене під час стендапу часто виникає думка, що насправді він вигаданий для того, щоб розробники не розслаблялися. Коли кожен день тобі потрібно показувати просування у своїй роботі, і не в паперовому звіті, який прочитає хіба що начальник, а перед своїми колегами, хоч-не-хоч намагатимешся зробити побільше, щоб було про що розповісти. Бувають, звичайно, «довгобуди», про які кілька днів поспіль повторюєш «вчора робив те, і сьогодні його ж робитиму далі», але навіть у них постійно вклинюються якісь дрібні термінові завдання. Коротше кажучи, справжньому Ковбою розробнику завжди є що сказати своїм колегам. На стендапі мене попросабо якнайшвидше оновити стенд, зараз я цим і займуся. Коли викладається основна гілка проекту, оновлення роблять адміни, але зараз потрібно викласти ще не закінчену фічу, а при цьому обов'язково вилізуть якісь проблеми, які адмінам не вирішити. Стенд знаходиться в датацентрі, доступ до нього можливий лише по ssh, ніякої графічної оболонки там, зрозуміло, немає - так що тільки командний рядок, тільки хардкор! Саме оновлення автоматизовано та пройшло штатно, але після оновлення один із компонентів не стартує. Дивлюся логи командою less, у неї, до речі, є дуже зручна функція: якщо натиснути Shift-F, вона постійно відображатиме актуальний вміст файлу, для логів саме він. А це ще що за… дивна річ? Повний екран знаки питання через кому. Другий екран, третій, десятий... Та скільки їх там? О, скінчабося, неслабкий такий стектрейс вийшов. Хтось написав SQL запит з оператором IN для відбору потрібних записів за списком, і для кожного елемента списку створив параметр. Все працювало, поки список не став містити більше 32767 елементів, після чого терпіння SQL-сервера, нарешті, урвався. Про це треба буде багрепорт написати, але до проблеми з непрацюючою компонентою це не стосується. Дивимося далі. Тепер зрозуміло, чи не пройшла міграція структури бази даних на нову версію, схоже, автор фічі щось змінив у міграції, а тут, на стенді, був її попередній варіант. Прийде відкочувати зміни структури вручну, через консольну утиліту SQL-сервера. Як це на DML написати команду на видалення поля? індексу? таблиці? Наче все. Перезапускаю компонент, міграція пройшла нормально... порядок. Час піти пообідати, погода сьогодні чудова, до речі. «Яскраво-жовта куля, що нерухомо висить у небі і так налякала городян, виявився Сонцем». Чи не перший сонячний день на рік. Навіть із вулиці йти не хочеться, але треба – наближається час мержа. Далі буде
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ