I worked on Android development and Web development these past three years. Here’s my attempt to compare and contrast the two. == Web

I was a "full-stack web" software engineer from 2018 to 2019. My team used Ruby on Rails for backend and ReactJS with a bit of AngularJS for frontend. I came into the team knowing nothing about web development, except for maybe writing tiny APIs in my previous job.

There are four major browsers you must support: IE (or/and Edge), Safari, Chrome, and Firefox. Some CSS or Javascript won’t work for every browser.

If you’re writing client side code, you’re definitely working with JavaScript. JavaScript wasn’t a fun experience for me. I can’t pinpoint why, but I think it’s less about the language, and more about the ever changing JS ecosystem and the lack of help I had at the job.

I do like how React simplifies UI building and how easy it is to use it correctly. I wish I liked JS enough as a language to really appreciate React and write more toy projects with it. Testing UI changes is just a quick refresh on your favorite browser.

Full-stack really mostly means frontend. It can mean anywhere from writing application server code to pixel-pushing CSS to building highly responsive client-side apps.

Mobile

I was a "mobile" software engineer from 2016 to 2018. I was working mostly on Android, and our code was mostly Java with a sprinkle of Kotlin.

Android version fragmentation sucked. I think at any given time, the latest Android version would have 10% adoption, the second latest with 3%st, third latest with 50%, 10% for the rest. Some things may work on one version but not the other. Testing what worked and didn’t can be very time consuming as you’d have to compile the app each time. (This isn’t completely true, with Android Studio you can use "Instant Run" to see changes right away. But instant run isn’t very consistent in my experience) Imagine having to test on 5 devices for each change you do!

I found documentation for Android APIs to be nicely detailed. There are defacto libraries every Android project uses, some of them are: Dagger (dependency injection), JUnit (unit testing), Espresso (UI testing) and Retrofit (networking).

Gradle is powerful, but I never put in the effort to completely learn it. I think it’s a good build tool, but I only have make to compare it with :)

You can write a simple mobile app easily, but eventually you want to consider more Android versions, cater to more people with low-end phones, make your app use less memory / CPU cycles, or cache data from network calls. I guess this sort of applies to web as well, but these constrains are more important with native apps.