Campbell Ritchie wrote:Don't know any Android, but I do know that you can confuse yourself several ways.
• One is to try too many things all at once. You will probably make better progress like the tortoise not the hare. This is one case where
Slow and steady wins the race.
is actually true.
• Another is to use automated tools. Those are designed for people who are more experienced. You need to learn the code for placement of the Component objects, but the automated tool hides that from you, and even if you read the code it won't help you. Remember that automatically generated code is exempt from all style conventions, so you get variable names like button01 button02 and button03. That hardly makes for easy code for you to read. In fact most automated tools are designed on the assumption that nobody will ever bother to look at the generated code. Also the automated tools may have a learning curve, which, when added to the learning curve of general programming, often proves too steep for anybody to climb.
• Programming in dribs and drabs is probably also a bad idea. Little and often. Don't try reading a whole chapter, but a few pages, then do some programming. You will probably remember a half‑hour's programming repeated daily than three hours once weekly.
Java® is really easy to learn. It is programming that is difficult. Take it easy and you will probably get on better.
Our senior Ritchie gotta be quoted, in Android you are going to get crazy because of the open community and business interest. In one year is changed 99%.
ONE YEAR! Now I code in Kotlin that is the new standard, but of course you have to know also Java 8 otherwise cannot deal with legacy. Kotlin has a steep learning curve.
Concurrency tools are not used anymore in the last year, everybody play with RXJava2, that has been written from scratch in comparison with RXJAVA first version, that still you have to know, and take a complete shift understanding the 100+ operators you use with this functional paradigm, outside the complex mechanism, not to mention the specifical RXAndroid that oblige you to study the not trivial Schedulers.
In one year libraries become really complex because of a guy called Jake Wharton, a genius that made our life impossible to keep up with his libraries, that solve a lot of problems but are really complex. For instance Retrofit, that make API REST calls with few commands but add a layer of complexity because manages the old OKHTTP commands in a completely different way with code generation. Then he wrote Dagger2 ( you do not need Dagger one fortunately) tool 3 months for me to be grasped, because at the time I was studying it the community had blogs that were far to be clear, It auto generates dependency injections. with underlying builders patterns. Then followers of Oncle Bob put as standard the so called clean architecture, so that you have still to learn Java concurrency to use all the complex ThreadPool commands in the so called entities.
The company that developed Android was not happy about that and propose every year a lot of new tools, but it looks like in few years android and Swift Ios will be replaced by native react, a javascript hybrid platform, so one should learn it, even JS of course. This year they proposed the so called Android Architecture Components, DB with persistency and annotations, Complex Observer data pattern, ViewModel classes to maintain the UI without business logic , so one that want to do Android have to know also Architecture, especially the transormation by MVC to MVP, but also MVVC, MVI, VIPER and also a lot of design patterns to understand how it works.
I should speak also about Butterknife and other dozens of changes, but by the end I wrote them new tools will comes down.
By the way did I mention that companies expect you know Android things? Namely how to program with Android on a raspberry PI, and you have to know how to
test, but really good because Android has a lifecycle really complex and completely unreliable because telephones did not have the CPU of desktop machines. The testing in Android is a world apart, specific so called instrumentation tests for the User Interface, Mock libraries, reflection, other 3 really complex libraries as Roboeletric, integration tests, continuos integration, you have to know Agile.
All of this in ONE YEAR!
Dear OP, the recommendation from Campbell is essential, you love coding, you do one thing per time. just one thing then you learn more and more and Android gives you a looot of nice knowledge that you can bring back in every coder career.( apart assembly and C) By the way did you know that since Videogames in Android are really popular you are supposed also to know C# and Unity 3D( a really complex software), especially how to conjugate with virtual reality, OpenGL that is almost a language apart? And what about machine learning, some tensorflow should be implemented to make your app deep learn.
Personally the only thing that saves me is the passion, but I have to recognize that in this year learning was really challenging... especially if like me you are or a student or you do it for hobby.
Coming back to your question about design I recommend you ( still another thing:) ) to do BDD that is the UX design evolution of TDD( I was forgetting also you need to know), basically is Behavioural Design Driven so that you can make test that have as priority the Design part, so
you should learn the so called Model View Model View pattern( is not a typo is called like this) that creates by mean of databing library a decopled UI making easier to unit test from one side and from another allowing to your design choices to change really fast without refactoring(other skill needed in Android) or failing the existing tests.
I suggest you androidweekly to see the latest developments. And regarding your frustration to use Android Studio, you have 2-3 new version every year and they change a lot, now is really important to study a feature quite complex added in the last still not stable version, the Android Profiler.
As you can see there is a lot to cover, but nobody can know everything so my recommendation is to do coding, and not like me and a lot of other people just study, because writing small snippets you learn a lot, even because Android studio throw a lot of stacktrace errors because linking all this different codes create a lot of problems, fortunately we have Gradle that is a more advanced
Maven( a way to manage the dependencies) that helps a lot in covering runtime errors.
book recommended : the power of now. Eckhart tolle
really one task per time.
ps udemy is okish.
start from androidweekly or even better do the official udacity course cosponsorized by google. Udemy is good if you find the instructor( the good ones) that contiuosly update the course. at this regard i suggest caster.io that for a monthly subscription cover a lot of latest tools. But the approach that win is have your project and work on that without studying for the sake of doing, otherwise you get lost like me:)