Я же написал -- поверхностно. То есть на первый взгляд вроде работает.
Если копнуть глубже -- уже не очень.
Спецификации НИКОГДА не бывают полными, т.к. полная спецификация -- это
уже программа. (И то не факт...) Не-тривиальный код НИКОГДА не лишён
дефектов полностью.
Т.о. "работает", как такового, практически не существует. Можно лишь a
posteriori, то есть после эксплуатации, сказать хорошо оно работало или
плохо. Разумеется, на момент закрытия тикета оно не ясно.
Разумеется, в спецификации задачи нигде не будет сказано, что код не
должен содержать SQL injection, XSS и CSRF уязвимостей, должен работать
за приемлимое время и т.д. Это подразумевается. Потому что в противном
случае приложение нафиг не нужно.
В том-то и состоит отличие хорошего программиста от плохого, что первый
сможет понять что имелось в виду и учесть все неявные требования при
написании, тогда как второй просто формально выполнит все пункты.
При этом зачастую даже не обязательно специально думать над
формулировкой задачи, достаточно просто реализовать её с соблюдением
всех рекомендаций и опыта. К примеру, простой отказ от использования
error-prone технологий в пользу профессиональных, проверенных
фреймворков и библиотек позволит исключить SQL injection, XSS и CSRF,
нормальному человку просто в голову не прийдёт сделать иначе.
А ненормальный сделает по-старинке, SQL запросы с помощью конкатенации
строк, как в древних туториалах. (Реальный случай, кстати.)
То есть, потыкать кнопки -- работает. Открываешь код -- там ппц.
А потом на рабочей базе данных начинаются тормоза. А что, никто ведь не
требовал оптимизировать, да?
Опять же, вменяемый человек напишет код так, чтобы избегать раундтрипов
по сети, O(N^2) и O(2^N) алгоритмов там где это можно избежать, а
дуболом сделает как ему удобнее.