Jetpack Compose vs the Android View system: compare them.
Tier: EssentialDifficulty: Easy
The View system is imperative, you build a tree of View objects, usually from XML, then mutate them by hand as your data changes, calling things like findViewById() and setText(). Compose is declarative, you write a function that describes what the UI should look like for the current state, and Compose figures out how to update the screen when that state changes.
// View system
textView.text = "Hello, $name"
// Compose
Text(text = "Hello, $name")
With Views, keeping the UI in sync with your data is your job, you have to remember to call the right setter every time something changes, and it's easy to miss a spot or update a view that's already gone. With Compose, you never touch the UI directly at all, you just update the state, and recomposition handles the rest.
Compose also cuts out a lot of the ceremony that comes with Views, no XML layout files, no findViewById(), no view binding boilerplate, and it's all plain Kotlin, so you get real language features like loops and conditionals directly in your UI code. The two aren't mutually exclusive either, Compose has AndroidView for embedding a legacy View inside a Compose screen, and ComposeView for embedding Compose inside a View based screen, which is how most real apps migrate incrementally instead of rewriting everything at once.