Python

Озадачили претензией на собеседовании

Собеседовался на вакансию разработчика бэкэнда, при просмотре примера моего кода сказали что "код очень императивный, слишком много состояний", я облазил гугл, и все еще не могу понять почему это плохо
Чем больше состояний, тем больше операций требуется для их "разруливания", что снижает эффективность кода и его читаемость. Также, выше вероятность ошибок при выполнении.

Слишком императивный - это так мягко намекнули на линейный (либо раздутый) спагетти-код. Для решения этой проблемы обычно используют организацию кода (импорты), а также те возможности функционального и объектного программирования, которые предоставляет язык.
Объектный подход удобен прежде всего инкапсуляцией и наследованием, а функциональный - гибкостью, и чистотой (отсутствием побочных эффектов) когда она возможна. Каждый подход хорош для своей категории задач, и программист должен уметь выбирать из них: в первую очередь ориентируясь на ТЗ (джуниору достаточно учитывать только текущее задание, прогнозирования от него не требуют).

Рекомендую почитать о принципах эффективной разработки (технологиях программирования), и о принципах проектирования логики (SOLID). Это общая инфа, она очень полезна при любом уровне навыка - и к ней еще не раз вернешься, заново переосмыслив после очередного шага в проф. развитии.
ОБ
Олег Бурдо
52 676
Лучший ответ
Твой main должен был состоять из создания экземпляра некоторого класса и далее из работы с этим классом. Вся императивная фигня должна была быть спрятана в этом классе, он же должен был заниматься ее разруливанием, ибо инкапсуляция. А у тебя идет голый код прямо в main'е.
если хочешь код ревью, то выкладывай код, а так гадать на гуще почему он так сказал можно, но не слишком полезно
Михайло Пдлсцкий ну вот часть на которой это сказали

def main():
file_worker = FileWorker()
painter = Painter()
file_worker.read(PATH_TO_INPUT)
query = file_worker.get_query()
for element in query:
painter.draw(element)
file_worker.write(painter.return_state())