Android dev, прошу конструктивной помощи

Доброго дня, друзья. Прошу мнение со стороны. Заранее извиняюсь за этот пост — накипело.

Решил я тут давеча отойти от Android — фриланса и реализовать себя как командного игрока, тоесть найти работу в ИТ-компании на должности Android developer.
Поотсылал резюме, получил отклики. В основном просят сделать тестовое задание. Вполне логично, ничего против не имею. Делаю я тестовое, а в ответ потом ти-ши-на. 2 тестовых сделал для разных компаний — отклика нету после этого. Я не пойму, может я что-то делаю не так. Разве сложно ответить что не понравилось. Я трачу время, силы, а HR сложно написать хоть что-то? Уже злость берет.

Вот ссылка на одно из тестовых на которое я не получил ответа — bitbucket.org/...devNikolay/testapp_bigdig
Прошу посмотреть, покритиковать. Может реально что-то не так.

Также скидываю ссылку на еще одно тестовое. Тут я отклик получил (за что спасибо), цитирую — «выполнено несколько сумбурно с точки зрения как кода так и UI. Поэтому, мы вынуждены на данный момент пока отказаться от вашей кандидатуры». Понятное дело что на уточняющие вопросы — Что не так в коде, в UI, я ответа не получил. Реализовано все как просилось в задании. Никаких запросов к UI вовсе не было.
Ссылка на тестовое — bitbucket.org/...Nikolay/weatherapp_oberig
Друзья, укажите же мне где эта «сумбурность».

Вдруг если этот пост прочтут HR. Большая просьба к Вам, делайте feedback-и в любом случае. Какими бы они не были.

И вдруг, если ваша компания ищет Android-разработчика, то не проходите мимо, вот он я)).

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Друзья, укажите же мне где эта «сумбурность».
В общем оба проекта имеют практически идентичные недостатки
1. Венгерская нотация
2. Фрагменты там где они не нужны
3. VideoListAdapter потенциально может крешнуть приложение с IndexOutOfBoundsException
4. tvArtistName.setText(""); лучше брать пустую стрингу из ресурсов
5. В BaseFragment onAttach лучше убрать, от него вреда больше чем пользы
6. Из фрагментов убрать всю логику которая не UI логика, она должна быть в отдельных классах и из них ее вызывать
7. Из тоста в MapsActivity убрать захардкодженый текст
8. back_pressed бросается в глаза так нейминг нарушен
9. Весь захардкодженный текст в сорцах WeatherApp перенести в ресурсы
10. GPS Tracker разве должен знать чтото о UI ?

На глобал висилай. Там майже ніколи тестове завдання не вимагають

Разработка под Андроид — обязательно геймдев? Я вот игры не люблю, и не играю в них, так что мне изучать Андроид чтобы делать только приложения — безперспективняк?

Разработка под Андроид — обязательно геймдев?

Нет.

В основном приложения и игры

а если только приложения — не?

ну зайдите на Google play. Разве там одни игры?!

Нет конечно, просто тут по форуму в темках где начинающие просят оценить свое творчество, там в основном змейки, шарики, тетрисы, пятнашки
Вот я и подумал что в отечественных мобайл конторах обязательно умение делать игры

3 года пишу под Андроид на коммерческой основе. Ни одного игрового проекта.
В основном, всякие мобильные клиенты коммерческих веб-сервисов.

Проблема тестовых заданий, это что их скоуп неограничен. Кандидат выполняет тестовое задание за несколько часов, а его потом рассматривают под микроскопом, предьявляя требования как к своему любимому проекту с несколькими годами фуллтайм разработки.

Давайте представим, что интервьюер прийдет на работу и выделит половину рабочего дня (например, до обеда) для написания тестового задания и сравнит свое решение с присланным на проверку. Часть OCD отпадет сама собой, как вы думаете? :) Но это лирика. Понятно, что так делать никто не будет.

На месте автора я бы сконцентрировал усилия на одном проекте, вместо выполнения разных тестовых заданий. Интервьюеру важно посмотреть код, потому что это то, ради чего проводят собеседования — узнать может ли кандидат писать необходимый код (и готов ли он это делать за имеющийся бюджет). Исключая специфические вакансии (например, обработка видео) не так важно что этот код делает. Вы не можете раскрыть код предыдущих проектов, так как быть? Вам дают тестовое задание, чем ставят в невыгодную позицию (см. выше, к коду собранному на коленке предьвляются продакшн требования).

Я бы предложил взять один проект, например туже погоду, и сконцентрироваться на нем. И не прекращать обновления даже после получения офера. Андроид развивается, выходят новые версии, появляются новые «модные» библиотеки и вообще автор как программист развивается и наличие небольшого (не отягощенного поддержкой legacy кейсов) проекта как песочницы для пробы нового материала пригодится еще не однократно.

#5_копеек
Согласен практически со всеми коментариями.
На последнем моем тестовом тоже попросили запилить кусок функционала. Я сделал одно и то же тестовое тремя разными способами, описал преимущества и недостатки каждого из способов. Да времени было потрачено больше, да этого не просили но по тестовому вопросы просто отпали.
Что увидел если бегло: разные код стайлы, редандент код, абстрактный фрагмент для контекста (вообще плохо), наворотили оверхед с активити(вот вам и сумбурность), код плохо читаем(не ужасно но плохо), использование ресурсов(в том числе и код стайл).
Совет: не задирайте голову, фриланс хорошо, опыт знания есть, отлично, но в команде все устроено немного иначе. Это я к тому что вы возможно и на мидла потянете(по этому заданию крайне сложно определить уровень выше джуниора), но разве только с прошением, а не с претензиями.

Спасибо за ответ.
Я же не спорю, поэтому и вынес все на обозрение. И тем более не задираю голову. Более того скажу, прочитав комментарии, я — расстроен. Я понял сколько еще много нюансов, на которые я не обращал раньше внимание.
Думаю, не стоит объяснять принципы фриланса, где заказчику все равно на стиль кода и его оформление. Главное сроки и конечный продукт. Начинать джуном на фрилансе — это «грабли», т.к это сильно приучает делать все «тяп-ляп». Поэтому я и ищу командной работы. Ведь не даром мудрые говорят — «Одна голова — хорошо, а две — лучше».

Вы не обижайтесь, но это называется — «жертва моды». За засильем новомодных библиотек в ваших проектах не видно вас как разработчика. Там 20% вашего собственного кода, а все остальное — какая-то нарезка из туториалов. При том, не особо качественная.

Что бросается в глаза:
1. Слабое владение платформой (вы предпочли «влить» две громадные библиотеки, RxJava и Retrofit, вместо того чтобы написать в пару десятков строк кода IntentService и какую-нибудь простую иерархию в 2-3 класса для организации пары API вызовов, вобще нет кеширования, и т.п.).
2. Странная техника работы с фрагментами (скажем так, сам кейс слабой ссылки на активити мне кажется высосанным из пальца, так как если дело доходит до того, что у вас фрагмент живет своей жизнью отдельно от активити, то у вас куда больше проблем, чем мемори лик :-) , но сама тема присутствия подобных решений в совокупности с показом диалогов в onCreate как-то смущает, с BackStack вы тоже что-то не дружите)
3. Полный треш в организации кода и ООП (NetworkService — у вас вобще не сервис, абстрактный BaseFragment, который, по-сути, ничем не обоснован, и т.п.)
4. Небрежная работа с ресурсами (строки собираете прямо в коде, причем не самым оптимальным образом, много хардкода в xml слоях, и т.п.)

Работа выполнена без любви, такое впечатление что вам на хакатоне надо было за ночь что-то набросать, чтобы оно как-нибудь работало, а не продать себя как специалиста.
Слона вы так не продадите :-) Надо стараться...
Ну а конторам,конечно, минус за отсутствие фидбэка. Если кандидат тратит время на вас для написания тестового задания, то потратить 15 мин на ревью работы и еще 5 на написание фидбэка — это правило хорошего тона.

Я уже заждался вашего ответа.
На что обижаться? Вы еще не сильно меня «обмакнули в грязь лицом» по сравнению с тем что бывает иногда в других темах like this dou.ua/...orums/topic/13867/#712502
Не спорю, опыта у вас намного больше. Я проходил как-то у вас собеседование (летом помоему), возможно Вы уже не вспомните, но тогда вы искали мидла+, я не потянул. Кстати, вы тогда сказали что не юзаете либы вовсе (сейчас ничего не поменялось?)
1. Я не понимаю, если я юзаю библиотеки, почему все думают что я не владею платформой?))
2. Расскажите свое архитектурное решение работы с фрагментами? 1 дочернее активити — 1 фрагмент?
3. NetworkService это не сервис, понятное дело. Это простой интерфейс для работы с ретрофитом. Просто так его обозвал)
4. Насчет строк согласен.
Поспешил делать следующее тестовое вот такая каша и вышла

Спасибо за ответ.

(сейчас ничего не поменялось?)
Ничего, только Android Framework только хардкор :-)
возможны утечки памяти
 Не помню такого, но сам Retrofit не люблю потому что он по размеру больше средней руки приложения, да и не вижу необходимости тянуть такой «комбайн» ради реализации работы с нетворкингом. Хорошие вещи — простые вещи.
Я не понимаю, если я юзаю библиотеки, почему все думают что я не владею платформой?))
Если владеете то почему не показали? Вы же на Android разработчика пробуетесь, а не на евангелиста RxJava/Retrofit, я правильно понимаю? Ну так и покажите свои знания в этом направлении.
Расскажите свое архитектурное решение работы с фрагментами? 1 дочернее активити — 1 фрагмент?
Это зависит от конкретной ситуации. Вопрос не в том сколько дочерних или уровень их вложенности. Вопрос в простоте упраления и взаимодествия между ними и активити. Ну и BackStack, у вас работа с ним как-то сильно вымучена, в нормальном случае все намного проще. Потренеруйтесь просто на заглушках покомбинировать различные сценарии организации и пробрасования данных между активити и фрагментами, работы бэкстека и т.п. Просто, чтобы вы прочувствовали тему.
Просто так его обозвал)
Чисто для себя вы там хоть ромашкой его обозвать можете, но коль вы шарите код, то он должен быть легко читаем и интуитивно понятным. А когда смотришь на «сервис», открываешь, а там вобще что-то другое, то напрашивается аналогия с «на заборе тоже написано».
Поспешил
Не спешите, если вам дают какие-то временные рамки для выполнения задания и вы в них не вписываетесь, но надо или прямо об этом написать и обьяснить что к чему (справедливая оценка обьема работы с вашей стороны, кстати, тоже может быть часть задания), или применить «военную хитрость» (ну там, ночь не поспать) и все сделать «вовремя» но качественно, или просто выстроить общую архитектуру приложения + какая-нибудь из заданных фич — сказать что успел — то успел, но это лучше чем сделать абы как и испортить репутацию.

Илья, я, конечно, согласен, что rx — это мода, но чем вы так не любите сторонние библиотеки и особенно retrofit? 70 кб — это разве «огромная библиотека»? А вот польза огромная — абстрагирование от тонкостей сетевых запросов, если нужно только дергать какое-то api (а в большинстве случаев только это и нужно).

Считаю ли я что это модно? — нет. Это кому-то нравиться, кому-то нет.
Почему я заюзал Rx? Дабы показать что я развиваюсь и изучаю что-то новое, не стою на месте. Вы же сами прекрасно знаете с какой скоростью развивается система Android. Стоять на месте в развитии все равно что ехать на велосипеде и остановиться. Упадешь ведь.

Дабы показать что я развиваюсь и изучаю что-то новое, не стою на месте.
Ну показали, сработало? ;-)
с какой скоростью развивается система Android.
С какой? И куда? Может расскажите тенденции?
ехать на велосипеде и остановиться.
Если едешь не туда то не грех остановиться и даже развернуться... P.S.: На мои вопросы можно не отвечать — это стёб. Вам надо сначала стиль кода выровнять (я кстати об этом забыл написать, но другие уже не единожды озвучили проблему), подтянуть базовые вещи, а вы хватаетесь за «космические корабли».

Николай, ты имя для этого поста менял, что ли?) Другое же имя у автора вроде было.

Я тебе в скайп обьясню, если есть желание. Не хочу тут оффтоп разводить,к тому же я потом задолбаюсь от фанатов ретрофита отмахиваться :-)

да ладно, эта тема себя исчерпала. Я сделал выводы. А про ретрофит расскажите, интересно же)

С удовольствием услышу, можно и в скайп, но, думаю, и другим полезно будет услышать, вот и ТС интересуется :)

Просим, просим! Чем плох retrofit в частности и сторонние либы вцелом?

1) Рискну предположить, что раз вам дали такое задание (TestApp_BigDig), то хотели увидеть как вы кешируете данные с веба в базу и возможно реализацию ContentProvider или какой то ORM на крайняк.
То есть должна быть реализована такая схема- ретрофит лезет на сайт и качает данные, потом сохраняет их в базу напрямую или через Content Provider или через ORM. База/ContentProvider/ORM дергают обсервер что есть новые данные.
Ваш List Adapter, который в двух случаях из трех лучше заменить на Cursor Adapter, считывает данные из базы и вешает обсервер на случай новых данных.
2) Для обработки переворота/сворачивания/развлрачивания приложения во время считывания данных рекомендуется использовать Loader-ы.

3) Насчет фрагментов — их использование должно быть оправданным, это кстати отдельная холиварная тема, например создатели используемого вами Retrofit выступают против фрагментов: corner.squareup.com/...st-android-fragments.html

PS: Судя по коментариям вам стоит больше внимания уделять ручному тестированию тестовых заданий, например в настройках разработчика есть галочка — Dont keep activities, которая очень помагает выявить баги при пересоздании activity/fragment.
Также тестируйте разметку на больщинстве экранах, рекомендую для этого GenyMotion
Удачи вам в ваших начинаниях.

про базу ничего не было сказано. А если не сказано, то зачем усложнять.
Холиварить не будем) Но я люблю фрагменты)
За рекомендации спасибо.

А если не сказано, то зачем усложнять.
Очень ошибочный подход на мой взгляд, возможно в вас говорит фрилансер. )

public abstract class BaseFragment extends Fragment {
protected BaseActivity mActivity;
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof Activity) {
mActivity = (BaseActivity) context;
}
}
}

Так кстати ни в коем случае нельзя делать. Только за один этот класс — вас могут не пригласить на собеседование.

А что в этом коде плохого (ну, кроме проверки `instanceof Activity` и каста к BaseActivity, но это не смертельно, у него ведь любая Activity extends BaseActivity)? Всегда так делал (до 23 sdk, пока метод onAttach(Activity) не задеприкейтили).

Тут сохраняется жесткая ссылка на Activity, тем самым производя возможные memory leaks, вообще крайне не рекомендуется сохранять ссылки на Activity в классах, время жизни которых возможно больше чем Activity, как выход — сохраняйте ApplicationContext.

Во вторых во фрагменте есть метод getActivity() - который уже возвращает привязаную к нему Activity, он кстати и используется во дочернем VideoListFragment, вместо

mActivity
, которая вообще не используется.

Но ведь если в onDetach() занулять ссылку на Activity, то утечки не будет. Или я ошибаюсь?

Утечки не будет, но и смысла тоже, повторюсь во фрагменте уже есть getActivity(), которая инициалицируется FragmentManager — ом при attach и зануляется при detach

Эту технику не от хорошей жизни придумали.
getActivity() частенько рандомно возвращает null. Согласен, иногда можно заменить на ApplicationContext, но иногда нужна именно активити.

То что вы считаете, что

getActivity() частенько рандомно возвращает null
(акцент на слове «рандомно») говорит о том, что вы неверно (скорее всего не до конца) понимаете как писать приложения под Андроид с учетом особенностей жизненного цикла UI-компонентов.
(акцент на слове «рандомно») говорит о том, что вы неверно (скорее всего не до конца)
Недавно понял конкретно этот момент до конца.
В определённых версиях СДК был баг, из-за которого фрагмент отваливался от активити в некоторые моменты жизненного цикла ДО вызова onDetach(). Поэтому метод getActivity() в моменты некоторых манипуляций с фрагментами (без их уничтожения, например, при их инициализации) возвращал null.
А иногда при тех же действиях — не возвращал.
Так что, это был именно временный воркараунд существовавшего тогда бага в сдк. Сейчас, к счастью, уже этой проблемы нет. Странно, что есть девелоперы, которые в прошлом/позапрошлом году с ней не столкнулись.

Буквально вчера ломал голову над одним багом, который я случайно обнаружил и мне потом не удалось его воспроизвети как я ни пытался. Samsung 7″ 4.4.2. Фрагмент обращался к getResources() и получил ошибку о том, что фрагмент не приатачен. Хотя там была гарантия того, что это происходит между onStart() и onStop(). Поэтому да, возможно там есть какой-то редкий баг, и, возможно, я погорячился на счет акцента на рандомности.

Желательно ещё и в OnDestroy(). Бывает, что onDetach() из жизнецикла выпадает

в принципе неплохо, кошерные либы заюзаны, rxjava. я бы по коду побеседовал, но в итоге бы взял, но не надо. Удачи в поиске

нет, не запускал, код мельком посмотрел. Если бы мое задание смотрел, запустил и тесты бы посмотрел. Конечно не вылизанный код. но даю скидку, что тестовое задание. но, если чел понимает что такое хороший код, и может рассказать что там улучшить, почему заюзал те, или иные либы — мне достаточно. зависит, конечно на что человек претендует

краш убран, если что. Забыл одну зависимость добавить.

ок, якщо просиш :) Подивився лише bitbucket.org/...Nikolay/weatherapp_oberig думаю цього досить бо і цей впав майже зразу і UI розлізся на мому тестовому девайсі

словом «сумбурність» я описав би пункти 3,4 в недоліків рішеня.

Про HR які не присилають технічного фідбека — вони не винні ім його ревьювери в детальній формі не часто дають, а якщо і дають то багато писта ім лінь бо досить і простого реджекта

PROC:
1. Ніби джаву і андроід знаєш. Але тема ця в сепмлі не розкрита важко сказати про реальний рівень
2 Базове розуміння роботи з вебсервісами є. Може знаеш і більше але це тестовим завданням не розкрито бо все найцікавіще сховалося в використаних тобою лібах
3 Якесь базове розуміння лайфсайкла актівіті і аплікухи є але лише базове(альбо просто досвіду мало) більше в proc item XX

CONS:
1. communication skils — Не вмієш надавати всю потрібну інфу — результати скинув щоб ми ревьювнули а де власне текст як тобі то завдання поставили? які взагалі вимоги?

2 Коментов в коді нема, тобто кандідати не розуміє що його код хтось буде читати і мати з тим проблеми

3 для чого в коді стільки ліб використано? Про що це каже? Робота з ними не складніша за семпл з доки. Підключено:
retofit okhttp picasso gson butterknife lombok
а в другому тестовому завданні в цей зоопарк ще і ретролямбда додалася :)

4. Дізайн класів перегружений і дивний — для чого там взагалі розбиття на фрагменти і актівіті і базові класи якщо в актівіті завжди одни фрагмент та і від «базових» класів породжений клас? Фактично як візард генерить актівіті+фрагмент — так і в тебе, але то не використовується в семплі, нічого не показує і нічого про тебе як програмера не каже. Лише каже що про красоту і компакність кода його автор не думав взагалі

5. Погано написан і протестован UI — просто лишу скріншот з мого тестового девайса
i.piccy.info/...ice_2015_11_19_211316.png

6 Аплікуха падає дуже часто: Не буду коментувати це. Схоже про варяант коли крутять екран автор не задумувався

11-19 21:10:26.899 5550-5550/com.homework.weatherapp_oberig E/AndroidRuntime: FATAL EXCEPTION: main
11-19 21:10:26.899 5550-5550/com.homework.weatherapp_oberig E/AndroidRuntime: Process: com.homework.weatherapp_oberig, PID: 5550
11-19 21:10:26.899 5550-5550/com.homework.weatherapp_oberig E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method ’void android.widget.TextView.setVisibility(int)’ on a null object reference
11-19 21:10:26.899 5550-5550/com.homework.weatherapp_oberig E/AndroidRuntime: at com.homework.weatherapp_oberig.fragments.WeatherFragment.bindWeather(WeatherFragment.java:111)
11-19 21:10:26.899 5550-5550/com.homework.weatherapp_oberig E/AndroidRuntime: at com.homework.weatherapp_oberig.fragments.WeatherFragment.access$000(WeatherFragment.java:28)
11-19 21:10:26.899 5550-5550/com.homework.weatherapp_oberig E/AndroidRuntime: at com.homework.weatherapp_oberig.fragments.WeatherFragment$1.onResponse(WeatherFragment.java:85)
11-19 21:10:26.899 5550-5550/com.homework.weatherapp_oberig E/AndroidRuntime: at retrofit.ExecutorCallAdapterFactory$ExecutorCallback$1.run(ExecutorCallAdapterFactory.java:86)
11-19 21:10:26.899 5550-5550/com.homework.weatherapp_oberig E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
11-19 21:10:26.899 5550-5550/com.homework.weatherapp_oberig E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
11-19 21:10:26.899 5550-5550/com.homework.weatherapp_oberig E/AndroidRuntime: at android.os.Looper.loop(Looper.java:155)
11-19 21:10:26.899 5550-5550/com.homework.weatherapp_oberig E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5696)
11-19 21:10:26.899 5550-5550/com.homework.weatherapp_oberig E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
11-19 21:10:26.899 5550-5550/com.homework.weatherapp_oberig E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)
11-19 21:10:26.899 5550-5550/com.homework.weatherapp_oberig E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
11-19 21:10:26.899 5550-5550/com.homework.weatherapp_oberig E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

Висновок 0: чітко видно що може працювати але під пильним оком техліда. Без нагляду не буде давати якісний результат

Висновок 1: є якісь базові знання і трохи досвіду але він не любить думати що саме і для кого він пише, і він не акуратно тестує прогу перед тим як іі віддавати

Висновок 2: можно брати на джуніора і десь за рік дотягти до мідла. Але не на всіх проектах таке можливо тому брати/не брати рішення залежалоби від проекта і ступеня зайнятості техліда на ньому.

Основна проблема — якість виданого продукта низька (видно по UI і крешу)
Інша проблема — весь час пише «з лібами» тому має слабке розуміння того що відбувається

Спасибо за развернутый ответ.

PROC:
1. Редко тестовое показывает уровень знаний. Для этого нужно беседовать
2. Тут дело каждого — писать свой велосипед или юзать уже готовое. Но знаю больше. Нужны на проекте AsyncTask, не проблема. Google рекомендует использовать Loaders, если надо, будут они. RoboSpice? Нет проблем.
CONS:
1. Я не хотел кидать само задание, т.к мало ли, оно еще актуально). И,думаю, это не показательно для моих скилов
2. Код сам себя комментирует). Он довольно прост
3. Смотрите PROC 2. (ретрлямбда нужна для RXJava)
4. тут не понял. Особенно это —
в актівіті завжди одни фрагмент
5, 6. Согласен, спасибо. На моих 2 девайсах + Genymotion было все ок. Про то что крашиться при пересоздании активити (повороте) мой фейл, недосмотрел.

Ну с такими выводами я бы поспорил, особенно с этим —

Інша проблема — весь час пише “з лібами” тому має слабке розуміння того що відбувається
, но все же спс за ответ и Ваше затраченное время.
Інша проблема — весь час пише “з лібами” тому має слабке розуміння того що відбувається
Думаю это не может быть минусом, т.к. наоборот показывает что чегото таки знает. И скорее всего в задании был пункт — можно использовать любые библиотеки на выбор. Другое дело что их юзаете както “сумбурно”. И действительно очень много ненужного кода, с теми же базовыми активити и фрагентами, для такого проекта не нужными и т.д. Хотя на позицию Джуна с месяцем-двумя стажировки думаю можно было бы и взять.
Нужны на проекте AsyncTask, не проблема. Google рекомендует использовать Loaders, если надо, будут они.

А кто должен принимать решение, относительно того, что именно нужно на проекте ? Придет дядя, ткнет пальцем, я сделаю? :) ИМХО, как раз задача разработчика, решить, что именно надо, и почему именно так, а не иначе. И уметь аргументированно послать на%@й отстоять свое мнение, если надо.

мне удобно юзать либы, в которых до меня все написано. Но просто есть люди, которые думают что либы — это для лохов — новичков и что самое «ТРУ» писать все ручками...

либы — это для лохов — новичков и что самое «ТРУ» писать все ручками...
Вообще-то скорее наоборот. Чтоб лучше понимать, что же делают либы и представлять их плюсы и минусы и как применять — неплохо бы пописать их самому. А уже потом, имея опыт — использовать. И писать всё самому ручками — это правда тру (потому как что делать с багом в своей либе — ты всегда придумаешь, а в чужой — всё может быть очень плохо). Но это очень намного дольше, а время — деньги, а денег никогда не хватает.

private double mLatitude; private double mLongitude; int geocoderMaxResults = 1; protected LocationManager locationManager; private String provider_info;
Я токо издалека взглянул. При объявлении переменных в одном классе смешаны 3 (три!) разных стиля.

Понимаю вас. Мне одна контора ответила, что «оформление кода не понравилось техническому специалисту». Естественно, просьба дать более развернутый ответ была проигнорирована.
Я так и не понял, что это за «оформление кода»? Если речь о стиле, то у каждой команды свой кодстайл и, по-моему, глупо предъявлять такие претензии к тестовому заданию. Возможно, речь была об архитектуре приложения? Увы, но до сих пор это осталось загадкой.

Теоретически, можно одно и тоже тестовое задание в несколько контор отправить.

Думаете, все равно их никто не смотрит?))

Предположим что вам предстоит 10 собеседований. На каждом попросят сделать тестовое, которое придумали за 5 минут до того как его вам отправили. Задание на несколько дней, пускай неделю. Т.е. 10 умножаем на 7 дней, получается 2 месяца непрерывного, неоплачиваемого выполнения тестовых заданий.

к сожалению, таковы реалии сейчас. Пробиться сквозь толпу оч сложно.

а ви спробуйте більш-менш достойний проект в гугл плей викласти і код на гітхаб

Хай краще напише якусь корисну лібу

Да либ и так много. Меня вон ругают что я ими пользуюсь

Хороших мало, некоторые вообще ругают Dagger и связку Dagger + Mortar + Flow

есть проекты на гугл плей. Код выкладывать не смогу — NDA. Также есть pet — проекты на Amazon
www.amazon.com/...=Homework&node=2350149011

есть проекты на гугл плей. Код выкладывать не смогу — NDA. Также есть pet — проекты на Amazon
Например — www.amazon.com/...TF8&qid=1448009087&sr=1-2

так а где ваши проекты на гугл плей? все ссылки неактивны.

Підписатись на коментарі