• Неужели порог вхождения в андроид разработку настолько высокий?

    Программирую на всяком-разном 30 с лишним лет, пишу под Андроид с самого его начала - начал незадолго до того, как приобрёл HTC A3288 Tattoo, почти 10 лет уже как.

    Не имею опыта работы, но понимаю как работает: Dagger, RxJava2, Moxy, разнообразное юнит-тестирование и всякие либы поменьше. Ничего не помню наизусть, даже методы класса Object. Имею смутное представление о том, как работает многопоточность, какие там есть виды списков и в душе не понимаю, как устроено хэширование объектов. Без IDE с подсказками и онлайновой помощи глух и слеп как котёнок.

    Без работы не сижу. Считаю себя успешным.

    Постараюсь сообщить минимальный набор, который помогает мне и, надеюсь, поможет вам найти себя, работу и всё, что пожелаете. Это всё - очевидные вещи, но, возможно, вы увидите что-то новое.

    * В первую очередь, необходимо иметь и культивировать четыре вещи: здравый смысл, уверенность в себе, внутреннюю свободу и аккуратность. Даже если вы ничего не знаете сейчас, вы должны осознавать, что узнаете это всё потом. И то, лишь в случае, если считаете необходимым. А благодаря аккуратности вы будете понятны большему числу коллег.

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

    * Вы должны понимать, что все эти Dagger, RxJava и прочие Moxy - тупо библиотеки тупо пацанов, которые сидят в трусах перед компами и всё такое. То есть, изначально это всё - нонконформистская прогрессивная адова самописуха с присущими ей концептуальными и арфогрофичесскими ошибками, которая в нечастых случаях превращается в продукт примерно корпоративного масштаба. Потому, надо стараться не переоценивать их значимость на вегетативном уровне.

    * Держитесь корней. То есть, за корни. Ну, в общем, за JetPack, AndroidX и всё, что выдумал Google. Это основное и самое важное.

    * Старайтесь обходиться минимумом зависимостей.

    * Кроссплатформа - это совсем другая индустрия. Надо определиться, нативщик вы или кроссплатформа.

    * Обычное трудоустройство напоминает обучение вождению в автошколе: вы учите кучу всего, что требуется, потом сдаёте экзамен, получаете водительское удостоверение и через год помните только правило правой руки и полдюжины дорожных знаков. Ездите по городу по привычке, страдаете от того, что где-то повесили новый или убрали старый знак.

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

    * Иногда важнее знать русский язык, нежели Java или Kotlin. Впрочем, иногда технический английский ещё важнее.

    * Даже если днище, безнадёга и фриланс, надо понимать, что есть два типа клиентов: те, которым надо красивый код в стартап и те, которым код не надо.
    Ответ написан
    2 комментария
  • Adnroid, MVP. Как определять, включать метод в интерфейс или нет?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Имхо, всё это жуткий отстой.
    View должно иметь методы только по показу данных. navigateToHome к ним не относится, это должен быть отдельный объект Router, которого нет в MVP.
    View не должно иметь ссылку на Presenter и дергать из него какие-то методы.
    Во View не должно быть бизнес-логики.
    Presenter должен иметь ссылку на View.
    Из View должны торчать наружу события(rx observable или коллбеки, например), на которые подписывается Presenter.
    У Presenter'a должно быть два метода для связывания его с View: bind(View), unbind(View).
    Fragment или Activity не должны быть ни View, ни Presenter'ом, ни Model. Они - клей, системные механизмы для связывания и поддержания стека экранов. Они каким-либо создают или получают через DI инстансы View и Presenter, и cвязывают их при помощи bind/unbind.

    Таким образом, методов validate не будет ни в одном интерфейсе, и ни в одной реализации(если только это не приватные методы реализации, конечно).

    Упрощенно как-то так
    interface LoginView {
        @NonNull Observable<String> names();
        @NonNull Observable<String> passwords();
    
        void showError(@NonNull String error);
    }
    
    interface LoginPresenter {
        void bind(@NonNull LoginView view);
        void unbind(@NonNull LoginView view);
    }
    
    interface Router {
         void navigateToHome();
    }
    
    class LoginPresenterImpl implements LoginPresenter {
    
         @Inject
         LoginPresenterImpl(router: Router){...}
    
        private CompositeDisposable disposables = new CompositeDisposable();
        @Override
        void bind(@NonNull LoginView view) {
            disposable.add(
                Observable.combineLatest(view.names(), view.passwords(), (name, password) -> validate(name, password))
                      .doOnNext(validated -> {if(!validated) view.showError("invalid login")}
                      .filter(it -> it)
                      .subscribe(it -> router.navigateToHome())
            );
        }
    
        @Override
        void unbind(@NonNull LoginView view) {
            disposables.clear();
        }
    }
    
    class Fragment {
        @Injecte
        LoginPresenter presenter;
        @Inject 
        LoginView view;
        
         onViewCreated() {
           presenter.bind(view) 
        }
    
       onDestroyView() {
           presenter.unbind(view);
        }
    }
    Ответ написан
    9 комментариев
  • Как устроен Flavor Dimensions в Android?

    AWE64
    @AWE64
    Каким образом получилось 12?

    Грубо говоря, при сборке приложения вам необходимо выбрать один flavor из каждого dimension.
    Перебираем все варианты, получаем 12

    tv free google
    tv free amazon
    tv premium google
    tv premium amazon

    tablet free google
    tablet free amazon
    tablet premium google
    tablet premium amazon

    phone free google
    phone free amazon
    phone premium google
    phone premium amazon

    но я не могу понять смысл

    Смысл в том, что в разных dimensions можно настраивать параметры, относящиеся к логически разным аспектам приложения. Например, в tv-tablet-phone что-то про размеры, навигацию, в free-premium что-то про бизнес-логику, в google-amazon что-то про используемые библиотеки, куда должны вести сслыки на маркет и т.п.
    Ответ написан
    1 комментарий
  • Неужели порог вхождения в андроид разработку настолько высокий?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    У тебя просто планка завышена. Проси меньше денег, и спрашивать будут меньше.
    Перечисленные тобой вопросы - на Senior
    Ответ написан
    3 комментария
  • Неужели порог вхождения в андроид разработку настолько высокий?

    @tiroman
    Кратко о себе: стаж андроид разработки 5 лет, за спиной 10 лет десктоп разработки (оракл и все такое), на данный момент работаем с апворком и есть свой проект в маркете, который приносит неплохой доход, сейчас имеем разработчика на зарплате с доходов

    1. говнокод кругом, я практически ни разу не видел прям каноничного подхода, возможно в каких то крупных компаниях на больших проектах и придерживаются методологий, без этого на больших проектах никак, но в обычной жизния такого не видел, я работал и набольшом проекте в небольшой компании с наследием в 10 лет и на разного размера проектах с апворка, еще раз говорю говнокод кругом, все этим паттерны и шаблоны такое ощущение что авторы пишут только для себя, но это не отменяет того что их нужно изучать и стараться делать все правильно

    2. как и сказали выше опыт сильно решает, подводных камней на андроиде очень много, технологии в данной сфере быстро развиваются, один фреймворк сменяет другой, нужно постоянно что то изучать, гугл тоже как паровоз постоянно мчится вперед, поэтому 1-3-6 месяцев это ни о чем, но это не значит что ничего делать не надо, если программировать нравится и решил связать свое будущее с ним, то клаву в зубы и вперед ))

    3. если бы я сейчас мог начать все с начала и у меня было бы время я бы начал делать свое приложение, идеальный способ научиться чему то практически, а если еще и голова правильно работает то и заработать на нем, чтение книг без практики ничего не даст, проверено на собственном опыте, через два дня забудешь что там читал, поэтому только практика и только реальные задачи, придумывай прогу и вперед, понимание паттернов приходит с опытом, почитать конечно нужно, но как и где грамотно это применять это только опыт позволяет понять, поэтому только практика!

    4. советую начинать изучать гугловский jetpack, они пытаются навести порядок с архитектурой приложения, привнести как раз какую то методологию, mvvm в данном случае, начал писать сейчас свой небольшой проект на нем, рекомендую, ставит мозг на место, если не очень понимаешь какой паттерн применить, как правильно проектировать архитектуру, ну и еще рекомендую https://startandroid.ru/ru/ очень сильно помогал на старте, ну и по jetpack там уже есть статьи, желаю удачи! ))
    Ответ написан
    1 комментарий
  • Неужели порог вхождения в андроид разработку настолько высокий?

    @Exolonpro
    Являюсь Senior Android разработчиком. Java/kotlin, dagger, mvp... Как не прискорбно вам это сообшать, но все это надо знать. Много ребят присылают резюме посмотрев курсы непочатова и что-то там ещё, но их даже не рассматривают. Юниоры требуются редко, нужны мидлы и выше, т.к. есть заказ и жосткие сроки. Все понимают что вы научитесь, но заказчик хочет получить стабильнок приложение чз 3 месяца, а не через год. Dagger mvp и тд нужны чтобы ваш код не превратиося в кашу. Реально все оч сложно, я вам не завидую тк сам прошел долгий путь.
    Желаю удачи, главное не сдаваться!!!
    Ответ написан
    5 комментариев