Не так давно пробовал устраиваться на работу тестировщиком Java(мой текущий уровень - 19). Получил следующий фидбек:
К сожалению, есть ошибки в задании. Ниже фидбек от нашего специалиста:
Неявная логика в методах
Отсутствие иерархии, неумение сравнивать объекты по типу
Недостаточное знакомство с базовыми вещами в Java
Исользование громоздких конструкторов вида CLEANER (false, false, true, false, false, false, false)
Спагетти-код там, где можно было упростить логику
Соль в том, что моя программа выполняет все требования. которые были описаны в ТЗ. Для ее описания мне хватило тех знаний Java, которые на данный момент есть. Но не хватило чего-то другого. Как с этим бороться? Может, я делаю что-то не так? Мне стоит что-то перечитать или что-то сделать? Моя проблема, как и многих начинающих программистов, не в том, что я чего-то не знаю, а что не умею обращаться с тем,что знаю. Все задачи решал до этого, серьезных проблем не возникало.
Если кому-то интересен мой код - https://github.com/vozni4iy/office
Зепп Бранниган
41 уровень
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Отсюда к коду предъявляются дополнительные требования: быть читаемым и поддерживаемым. То есть таким, чтобы если ты отвлечешься от программы на другие дела и вернешься к проекту через полгода, ты смог бы быстро снова войти в курс дела и продолжить работу. Чтобы если ты забелеешь или уволишься, другой программист смог быстро понять, что происходит в твоей программе и как она устроена. Чтобы ты мог писать такие классы, которыми удобно было бы пользоваться другим программистам.
Чтобы этому научиться, нужно поработать над паттернами проектирования: рекомендую книгу из серии Head First.
А еще полезно почитать Роберта Мартина «Чистый код» («Clean Code»)
Обе книги на примере Джавы показывают, как писать программы так, чтобы они, разрастаясь, не превращались в запутанный клубок.
В частности, громоздкие конструкции вида CLEANER (false, false, true, false, false, false, false) сложны в использовании, например, потому, что программист легко забудет или запутается в том, какой порядок аргументов, какой из аргументов что означает и т.п. Нужно будет открыть определение этого метода (в этом случае, видимо, конструктор енумератора) и внимательно сверять с тем, что ты передаешь ему и все равно ошибиться =)
Если при проектировании структуры программы ограничиться, например, 3-мя аргументами (специально продумать программу так, чтобы больше не было: чаще всего 1 или 2, в крайних случаях 3), то часто не придется даже вспоминать что там нужно — все будет интуитивно.
Еще поможет дойти до 20-го уровня и попрактиковаться в «больших задачах», посмотреть, как ведется проектирование и постепенное написание приложений там.
Удачи! =)