• Что делать при таком разбросе знаний?

    @red-barbarian
    касаемо чтения ( не повторяя банальность про необходимость практики и что только она мерило знаний)
    читать нужно минимум два раза. Первый раз бегло. второй вникая. Поэтому пол книги можно бегло прочитать не особо тратя время. И это будет в несколько раз меньше того времени которое нужно потратить на освоение второй половины.
    Ответ написан
    Комментировать
  • Что выбрать для хранения данных JSON или sqlite?

    @red-barbarian
    про память посмотри как-нибудь в студио сколько занимает приложение памяти. объем твоих данных это мелочи.
    про то как хранить.
    делай все проще. если не стоит вопрос (насущный) по оптимизации - делай просто. Например часто достаточно несколько строк с gson что бы распарсить json в объекты. Для room строк побольше. Для чистого sqlite уже нужно потрудиться.

    Далее. Преждевременная оптимизация это зло. Сейчас ты даже не знаешь как будет меняться твое приложение и какие узкие места в нем будут. Поэтому преждевременно что-то усложнять это стрелять в слепую.

    Далее. Сто пудов, что если приложение будет полезным и будет долго жить, то будут изменения. Поэтому задача разбить приложение на более-менее независимые части. Как это сделать. Например у тебя есть часть которая отображает данные и которая предоставляет данные. И есть некое соглашение между ними. Это соглашение "оформляется" в приложении интерфейсом. Например репозиторием. Т.е. первая часть использует репозиторий (через его интерфейс) . Другая часть предоставляет реализацию репозитория. Например через парсинг текста json.
    Это дает возможность при необходимости быстро заменить реализацию репозитория, что бы он брал данные из базы. Не меняя ничего другого.
    примерно так)
    Ответ написан
    Комментировать
  • Можно ли будет создавать крутые андроид приложения если пройти курс JavaRush?

    @red-barbarian
    Нет. Курс для этого не предназначен. Ранее когда начальные уроки были бесплатные, то был совет пройти начало и заниматься по другим курсам. Сейчас лучше изучать азы Java по другим курсам. (IMHO)
    По андроиду лучше пройти курсы на Udacity. там есть очень хорошие курсы. Если проблемы с английским, то даже на субтитрах они будут полезны.
    Ответ написан
    Комментировать
  • Как продолжить выполнение операции после завершения приложения?

    @red-barbarian
    Как бы система сама решает кого убивать, а кому жить. И когда. (Обычно зависит от ресурсов)
    Дольше всех живут foreground процессы. Те которые на переднем плане. (например в этом процессе работает активити с которым взаимодействует пользователь).
    Если ресурсов не хватает, то их убивают в последнюю очередь.
    Меньше всех Empty Processes - у них нет активных компонентов. Но при этом система может их и не убивать (сохранять ради кеширования) .

    есть возможность повысить свой процесс до уровня foreground через сервис и startForegroud.
    https://medium.com/google-developers/who-lives-and...
    Ответ написан
    Комментировать
  • Знаю Kotlin, не знаю Java. Возьмут ли на работу?

    @red-barbarian
    Знание Java называют не только синтаксис, но также ее библиотеки (коллекции, многопоточность, потоки), знание виртуальной машины и проч и проч. так или иначе в kotlin с этим работаешь. В этом смысле Java нужно знать. Если не знаешь только синтаксис, то это не такой и большой пробел. Кстати его можно исправить за несколько дней.
    Ответ написан
    Комментировать
  • Как правильно распределить методы класса в модули?

    @red-barbarian
    если ты разбил на три части функции, то почему делаешь два модуля? По логике нужно три модуля статик функции , класс 1.2 и класс 1.3.

    Но не зная, что там происходит в классах, трудно разбить нормально на модули. Скорее нужно действовать так:
    1. Представить какой интерфейс должен иметь изначальный 2 класс. Т.е. какие действия он должен выполнять во внешнем миру. Это будут так сказать паблик методы. остальные приват.
    2. Представить структуру 2 класса на уровень меньше. Т.е. все методы разбиваются по темам (более менее независимые). Это будут классы следующего уровня абстракции. Класс 2 будет ответственен за создание этих классов и установки зависимостей между ними.
    3. Далее повторяем пункты 1 и 2 для каждого подкласса. и т.д.

    Но повторяю трудно говорить вообщем, не зная что там в изначальном классе.
    Ответ написан
    5 комментариев
  • «Философия» всех языков программирования. Миф или реальность?

    @red-barbarian
    отчасти)))
    с языками как с обычными языками - следующий намного легче учиться.
    Подводные камни есть и они довольно серьезны. Дело не в синтаксисе. Есть такое понятие как парадигма. Это примерно способ мышления, способ понимания задачи который можно перенести естественно на конкретный язык программирования.
    так, например, у С это императивная парадигма. У C++ это объектно ориентированная. С этой точки зрения такие языки более различны чем разные синтаксисы С и какого-либо бейсика.
    Второй момент. Можно поверхностно узнать язык за пару часов. Но изучать его всю жизнь. Язык не только синтаксис. Это также подводные камни этого языка. Особенности компиляторов и эффективных решений. Идиомы. Особенно это относиться к C++.
    Ответ написан
    Комментировать
  • Как правильно тестировать Android приложение?

    @red-barbarian
    никак. автоматические тесты могут дать прохождение 10 раз, а на 11 застопорить. Мо можно попытаться сделать архитектуру такой, что бы максимально покрыть свои классы тестами. оставив асинхронность минимально достаточное место в проекте. И постараться сделать асинхронность максимально прозрачной и понятной.
    Ответ написан
    Комментировать
  • Какие книги по SOLID принципам стоит прочитать?

    @red-barbarian
    Принципы, паттерны и методики гибкой разработки на...
    есть и не для c#
    solid это не нечто абстрактное. принципы применяются в контексте гибкой разработки для сохранения жизни проекта при изменении требований.
    невозможно их изучать отдельно.
    второе. есть две крайности теория без практики и практика без теории. эти крайности мешают развиваться.
    Ответ написан
    Комментировать
  • Как лучше реализовать иерархию классов птицы и метод летать?

    @red-barbarian
    Посмотрите в сторону шаблона Стратегия.
    Летание это довольно динамическое свойство. Даже может меняться а процессе жизни объекта. Поэтому это свойство чаще всего полезнее выносить за объект. И присваивать полю "летание" некую реализацию из вне.
    Например
    Ласточка летает одним методом. Птенцы и курицы другим. И т. д.
    Наследование довольно жесткая связь. Ее стоит избегать. Если это возможно.
    Ответ написан
    Комментировать
  • Как использовать ооп на практике?

    @red-barbarian
    Ну прежде всего понять, что есть две (точнее больше) парадигмы. ОО и процедурная.
    Это типы мышления. Первая это разбивать систему на части, как на компоненты. И описывать связи между ними. Вторая - Описать структуру данных и функции на ними. И у них есть свои плюсы и минусы. (да. ООП это не волшебная пуля.)
    Второе. Применения ООП эффективно к достаточно сложной системе. Сложная в смысле, что твой мозг определит там много частей и много связей между ними. Например вывести на экран приветствие это вряд ли сложное.
    Третье. Понять , что дублирование это зло. Это не только копипаст, но делать дважды похожие классы компонентов с начала. Применять нужно наследование. В суперклассы переносить общее.
    Четвертое. Система должна быть гибкой. Если приходят новые требования, нужно легко их реализовывать. И реализовывать локально. Т.е. по мере поступления изменений, мы находим места которые часто изменяются и стараемся вынести их в отдельные классы. В итоге получаем, при новом изменении, мы меняем только этот класс ничего более не цепляя.
    Пятое. понять что между компонентами есть некий протокол взаимодействий. И для компонент важен именно он, а не реальный объект по ту сторону. Пример: розетка . не важно какая она в стене, в удлинителе, или от большой черной коробки, но в нее можно подключить утюг, компьютер, чайник и проч. Есть протокол - две дырки, напряжение 220 и достаточная мощь и этого достаточно. Это дает возможность менять компоненты не затрагивая остальные.
    Примерно так.
    По поводу принципов. любых. (ооп или солид) Обязательно нужно знать что они решают. Какую проблему. Это позволит не усердствовать. А применять в меру. оставляя код проще.
    ну и книги по анализу.
    Ответ написан
    Комментировать
  • Как распарсить сложный json с помощью библиотеки GSON?

    @red-barbarian
    совсем не так как у тебя получается. посмотри настройки.
    по смыслу
    {
    "response": {...}
    }

    т.е. никак не Array
    скорее
    class Parrent {
    Response response;
    }
    Ответ написан
    Комментировать
  • Может ли язык быть быстрее языка на котором сам написан его компилятор?

    @red-barbarian
    собственно
    1. java выполняется на java машине (если кратко). С++ на процессоре
    2. далеко не факт что программа на c++ написанная новичком будет быстрее java написанной новичком. (дело в том, что многие вещи в библиотеках оптимизированы. ). То же относиться и к скриптовым языкам типа питона (например с библиотекой типа numpy)
    Итого:
    скорость работы зависит:
    - от типа исполняемого файла (это бинарник для конкретного процессора и системы, это файл который исполняется на виртуальной машине, это скрипт)
    - от оптимизации кода, библиотек, интерпретатора, виртуальной машины.

    Еще философия.
    Корень всех зол - ранняя оптимизация. цитата
    Т.е. оптимизоровать нужно только то, что действительно влияет на скорость. Узкие места. гнаться просто за скоростью это не правильно.
    Ответ написан
    Комментировать
  • Какой паттерн лучше использовать при необходимости реализации методов из разных классов?

    @red-barbarian
    не зная как так получилось)
    Возможно из-за перегруженного интерфейса. ( очень важно придерживаться тонких интерфейсов. например интерфейс M1 интерфейс M2)
    Но разрешить (возможно) так
    D реализует интерфейс, но делегирует выполнение M1 классу B, M2 классу C
    т.е. шаблон делегирование
    Ответ написан
    Комментировать
  • Почему текст выводится 3 раза?

    @red-barbarian
    Потому что в потоке находится например 'g' [Enter].
    Ответ написан
  • Как работать с потоками в Android?

    @red-barbarian
    Простейший случай AsyncTask
    doInBackground - выполняется на одном потоке
    onPostExecute - выполняется на потоке который запускал AsyncTask
    2) Возможно вызвать метод из другого класса после завершения потока

    Возможно, у тебя ошибочное мнение, что разные классы выполняются на разных потоках, или весь класс выполняется только на одном потоке. Это не так. Методы класса могут выполняться на разных потоках.
    Так же и изменение переменных технически не запрещено изменять из разных потоков.
    Единственная особенность Android, что вьюхи можно менять только из UI- потока. Для этого и придуман AsyncTask (в том числе).

    doInBackground - выполняется на новом потоке
    onPostExecute - выполняется на UI
    Также применяют как java - потоки (Thread, Executers, Concurrent ...), так и Handle, AsyncTask, IntentService и проч.
    Но для знакомства лучше начать с AsynkTask. Он нормально подходит для простых задач.
    Ответ написан
  • Как сформировать классы-сервисы?

    @red-barbarian
    IMHO
    2 пути
    CustomSizeCalculator формирует критерий_поиска_по_размеру, репоз по нему возвращает базовый_размер_и_цену
    CustomSizeCalculator зависит от поиска_базового_размера

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

    [критерий_поиска возможно это просто размер детали.]
    Ответ написан
    Комментировать
  • В каком момент жизненного цикла Activity становится видимой на экране?

    @red-barbarian
    onStart()
    When the activity enters the Started state, the system invokes this callback. The onStart() call makes the activity visible to the user
    RTFM - это очень интересно
    Ответ написан
    Комментировать