Как мой ведущий программист погорел на простой задаче
Я вижу, что вам интересны мои рассказы о том времени, когда у меня был свой небольшой IT отдел в офисе. Дело было в 2015 году" Работало до 10 человек, из них 6-7 — программисты.
Мы не создавали сайты с нуля, мы поддерживали несколько крупных проектов — интернет-магазинов. Писали модули, разрабатывали новый функционал, перетаскивали с самописной системы на фреймворк и т.п.
Стек технологий: PHP / MySQL / PostgreSQL / JavaScript / Yii 1/2 / Symfony.
Сам я тоже программист и много лет еще и выполнял роль руководителя разработки. Но мне это уже надоедало, так как еще было много бумажной и организаторской работы и я решил поискать ведущего программиста.
С поиском были проблемы: в Новосибирске их почти нет. Они или в Москве или фрилансят на зарубежных заказчиков. Но мне удалось договориться с одним парнем, который фрилансить не любил, переехать не мог. Стоил он 100 тысяч рублей в месяц (со второго 120, это были его условия и мне пришлось их принять).
Программист оказался настоящим асом: быстро решал задачи широкого спектра, знал еще Питон и Go и даже написал сокет сервер на Питоне для быстрой обработки заказов в ИМ (раньше обновлялось раз в 5 секунд и 50 менеджеров создавали нехилую нагрузку старому движку).
И тут появляется новый заказчик со срочной задачей: есть старый сайт - интернет-магазин, который «упал и не работает». Программист, который его обслуживал потерялся и у заказчика пока нет ничего, кроме ФТП доступа (все ключи были у того программиста).
Была задача:
— Поднять в короткие сроки Интернет-магазин написанный на каком-то самописном движке.
Конечно я делегировал эту задачу ведущему программисту. Но спустя полчаса получил от него ответ:
— Не смогу.
— Почему?
— Мне нужен полноценный доступ к серверу (ssh), мне нужно поднять копию проекта у себя, выкачать базу, я не могу даже ошибки посмотреть — они заглушены. Но я поставил проект выкачиваться по ФТП и думаю дня за 3 разберусь.
3 дня! Столько времени у меня не было — я не хотел терять этого заказчика. Естественно полез сам.
Починка проекта у меня заняла 15 минут.
На всех страницах сайта была просто белая страница. Никаких доступов к логам не было, по ФТП можно было только установить какой-нибудь phpmyadmin (но файлы не создавались по ФТП, можно было редактировать только), стянуть базу и скачать проект. Проверил работает ли запись в файлы — нет. Заблокировано, ибо PHP работал в safe mode.
Что я сделал?... Нашел подключение других файлов в index.php и пошел по цепочке выводя echo '1'; (предварительно написав функцию, которая показывала этот флажок только мне по ip). Спустя минут 15 я дошел до нужного места, где единичка не вывелась на экране. До этого места, как вы уже догадались был SQL запрос к базе данных, который вызывал ошибку (это я уже потом узнал какую):
Duplicate entry '13243' for key 'PRIMARY
В общем, каким то образом в БД пыталось записаться уже существующее значение. В этом огромном проекте писались какие-то служебные логи какого-то гуру, которые потом нами были выпилены (всего в проекте было 150 таблиц + только с названием log_ штук 20). Что-то типа примитивной защиты от ДДОС. Убрав этот SQL запрос — проект поднялся и был передан ведущему для дальнейших манипуляций.
---
Ну и пару слов про ведущего. Он был ас, если у него были нужные инструменты: IDE для разработки, всякие дебаггеры. Без них он был как без рук — честно потом признался что даже не знает как выглядят нативные SQL запросы, ибо все всегда делал через конструктор. А уж про отладку я вообще молчу — использовал кучу разных фишек.
Была задача вывести результаты поиска в по заданным id товаров. Я накидал SQL запрос с FIND_IN_SET ему, он час искал как это прикрутить к фреймворку, ибо последний никак не мог распознать такую конструкцию, а он не знал как правильно написать такой запрос.
А ушел он с этой работы хлопнув дверью: два месяца перетягивал самопись на фреймворк...
Когда я посмотрел, что у нас страница открывается за 2 секунды и нашел причину, то выговорил ему...
У него на 1 странице было 10 товаров. Но если делать var_dump модели, которая идет в шаблон, то в ней были все 3500 товаров, у каждого по 200 параметров + еще всякие смешанные портянки с описаниями категорий, подкатегорий, доставок. А достаточно было вывести: вендор, модель, фотку, краткое, цену и кнопку купить. Ну а он показывал себя хорошо в задачах по доработке, а вот с планированием алгоритмов у него были явные проблемы...
Все это настолько кушало память, что даже прогрев кэша занимал длительное время... Но он пошел дальше и написал прогреватель кэша!... Но такие велосипеды меня не устраивали. И он уволился. На его место я нашел другого, к которому не было никаких претензий, да и рассказать уже не о чем.. А все модели пришлось потом еще неделю переписывать, ибо он реально не понимал, как нужно отсекать ненужные данные и пользовался фреймворком как конструктором.
Источник: Записки Айтишника (Это мой проект, ссылку даю чтобы Дзен не счет заимствование отсюда, трафик с пикабу мне не нужен, ибо хватает итак).
P.S. Заказы не принимаю, это все было в прошлом, сейчас не программирую и никем не руковожу. И никого не ищу. Пишу мемуары.