Вот поэтому мы все в айти такие злые

· 2 мин

Тем, кто сам не пишет код, бывает сложно понять разработчиков… Чтобы вы понимали, с чем приходится сталкиваться программистам, приведу простым языком пример сложностей, от которых я недавно впал в отчаяние.

Чтобы лучше изучить продукт, с которым работаю, я написал простое приложение и попытался запустить его в облаке. Это была простая веб-страница, которые отображала содержимое из базы данных. Несколько строчек кода…

Сложность была в том, что пароль для базы данных хранится в одном месте, а используется в другом. Хранится он в закодированном виде (base64), а используется в раскодированном. Для кодировки я использовал стандартную утилиту на маке (openssl) как рекомендовали на форумах. Всё сделал по инструкции.

Пробую запустить программу — пароль неправильный. Смотрю на него, он, блин, правильный. После часа экспериментов, смены паролей и мата себе под нос выяснилось, что утилитка для кодирования добавляет в конец пароля символ новой строки. Символ новой строки невидимый — это как пробел, глазами не видно, поэтому очень сложно отловить, что там есть что-то лишнее. Это как искать глазами стеклянную пылинку на стеклянном витраже.

Зачем openssl добавляет новую строку? ХЗ, но “оно так работает”, поэтому нужно учитывать это в процессе разработки. Проблема в том, что многие компоненты современного ПО работают как «чёрные ящики» и узнать их истинное поведение можно только эмпирическим путём через многочасовую отладку кода, когда бьёшься головой об стенку.

Процесс поиска таких багов требует креативности, терпения и глубоких знаний. А ещё он требует концентрации и, когда программиста, занятого преследованием бага, отвлекают «ща, только на минутку», не удивляйтесь, если вам в лицо выплеснут ушат агрессии вперемешку с матом. Ибо вы только что разрушили модель мира, которую он собирал часами по кирпичикам.

Таких историй, думаю, хватает у каждого программиста.

P.S. Немного технических деталей о том как я всё-таки отловил этот баг… от отчаяния я пустился во все тяжкие и вывел декодированный пароль в логи. В логах откуда-то была лишняя пустая строчка. Из этой зацепки я нашёл инфу про то, что openssl добавляет новую строку. С%ка.