Написал и забыл: или как пишут код аутсорсеры
Недавно инспектировал код одного приложения и выписал список вопросов разработчикам с ответами.Приложение основано на клиент серверном взаимодействии, с регистрацией и обновлением некоторых данных.У нас же API 14 и выше? Ну и что, я знаю и использую support-library, где только могу. В support-library есть ActionBar (молчим уже про API 14)? Ну и что, я знаю ActionBarSherlock. Взаимодействие с web-командой по поводу улучшения API? Только время тратить, сделаем на том, что есть. Проверить работу API использую RestClient или сниффер? Зачем, я в дебаггере посмотрю. Взаимодействие с дизайнерами для соблюдения гайдов и улучшения UX? Они же 1 час в день доступны, мы не сможем общаться. Типизация? Не слышал. Храним все в строках, когда надо преобразуем в нужные типы используя *.parse*. База данных? Зачем? Сохраним все в SharedPrefs в JSON. Повторное использование кода? Нафиг. Быстро копипастим и дальше кодить. Кеширование данных? В топку, у нас же всегда есть подключенный интернет. Отображение прогресса загрузки? В макетах нет. Отображение ошибок загрузки? Да откуда там ошибки? В API не выводятся ошибки? Так мы их и не отображаем. Отключение интернета? Так не бывает. Сервис для обновления данных пользователя? Так они и так в фоне обновляются AsyncTask-ами. Зачем нужны AndroidAnnotations? Отличная тема! Надо использовать везде, где только можно! Все в Background, что бы ANR не было. Очистка пользовательских данных при выходе из учетной записи? А что, кто-то выходить будет? Проверять, что поля нет в JSON, не учитывать новые поля? Зачем, API же не меняется. ShapeDrawable? Так фоны же дизайнер нарезал? Ну и что, что там белый прямоугольник. А как же размер приложения? В 10Мб уложимся. Fragments? Зачем? У нас же только телефоны. Локализация? Да, вроде как приложение на испанском, но они же знают английский? Захардкодим сообщения, все и так поймут. Форматирование строк? Это еще зачем? Умножим на 10, приведем к int-у и поделим на 10. Все будет ок! А если нужен будет другой формат? Умножим на 100. Формат дат? Захардкодим. Испанский же! Повторное использование layout-ов, include? Долго! Лучше CTRL+c, CTRL+v Тесты на разных разрешениях? У меня нет столько устройств. Эмулятор? Эмулятор тормозит. x86? Ну… это же надо разбираться, а времени-то нет. ExpandableListView? Сложно и долго! Заинфлянчу ручками. ProgressBar? Так по макетам он зеленый! Сделаем layout и ручками ширину выставим. Что-то где-то крешится? Ок, try-catch поставим, зачем нам об этом знать. А как тут понять, что можно свайпить? Так в макетах было. MagicNumbers? ??? Вынести константы в одно место? Нет смысла, они же только один раз используются. А вот эта константа в двух местах же есть? Это исключение, она не будет меняться. Тут может быть много элементов. ArrayAdapter не сожрет всю память? Если сожрет, увеличим кучу. Как насчет аналитики? Чего? Как насчет сбора информации о крешах? Они будет видны в Google Play. Как насчет сбора информации о крешах на этапе тестирования? Научитесь пользоваться adb logcat. А если мы привлечем к тестированию еще каких-то людей? Научите и их. Не экономьте, ищите нормальных людей, но и не забывайте о правильной постановке задачи (DoD наше все).Иногда лучше немного переплатить и потратить чуть больше времени, но спать по ночам спокойно, зная, что за работой профессионалы.
Всем желаю быстро, хорошо и дешево!