how would you describe the difference between deve...
# android
t
how would you describe the difference between developing android apps and "regular" programming such as full-stack development or even just backend?
a
interesting; I always thought of android as being far closer to "regular" programming than web or backend/server 🙂
far different performance and power usage constraints
t
i guess to clarify i meant "regular" as in what seems to be the most common type of programming job (or at least what it seems like to me)
a
process lifecycle is quite a bit different but not hugely dissimilar from that of a browser tab in that it can get closed at any time and you're responsible for providing a good UX when it reopens again
eh, I suppose I got started primarily with rich client desktop software and that colored my perceptions 🙂
the way that android will launch different components into the same process container when needed parallels the way that a lot of long-lived backend application servers work; handling isolated requests but with some sort of access to shared memory
mostly used for caching of some other source of truth since again, you can't rely on the process container sticking around indefinitely
android UI has a lot of parallels to browser UI again; single-threaded, highly async/event driven
w
To me difference between Android and backend development is mostly that when writing Android apps you only deal with Android framework, while on the backend you have much more flexibility in choosing the framework and infrastructure to achieve what you need. Seems like backend has tons of solutions for things like caching of some other source of truth, while on Android we’re pretty limited in terms of what framework lets us do
a
how so?
w
😄 It’s tough to explain what I mean, maybe because I haven’t done any serious backend development, so I might not have it right. My point is that Android is a framework, while on backend you get to choose the framework + there’s a ton more problems to solve like scaling, data consistency across nodes, scaling some more, communication between many services and so on. On Android there seems to be less choice
a
eh, Android doesn't really use the word, "framework" the way anyone else does 😄 what Android calls its framework is more like a runtime library; it imposes some physics of the universe more than it does architectural choices
see also: Dianne's famous google+ post that is now lost to the ages that led to the architecture components libraries
w
Sure, but in that case just replace ‘framework’ with ‘runtime’ in what I wrote, and I still mean it 😄 On backend you can choose the architecture and the runtime (not to mention programming language). When writing the same app, backend + Android frontend, I believe backend will have a lot more decisions to make.
Although if someone says I’m definitely wrong then I’ll believe them and revisit this in couple of years, when I have a chance to actually work on some serious backend system 😉
a
kind of an apples to oranges definition there though; if you're writing backend code you probably have some sort of environment in mind; linux, docker, k8s, jvm, aws, etc etc and those choices affect your deployment options. Similarly you can talk about, "mobile development" at which point Android or iOS is kind of analogous
the goalposts are significantly different if you define, "backend" to mean, "anything that can bind a listening socket" 😄
you can host a "backend" on android if that's where you're starting from!
which is to say, android isn't restricting your choices here when compared to picking your environment for backend development, android is your choice of environment
w
That’s all true and nicely put. In the end I suppose that’s the difference I meant, once you’re writing an Android app, these environment, framework etc. choices have been already made for you