Somebody wants to develop applications for his cell phone in Java. He does not know programming and he does not know Java. Should he start learning Java on his cell phone or would he better off learning how to program Java on his PC?
I don't see any particular reason that using a mobile device API would be any worse than learning Java on a PC. But an environment on a desktop that uses simulation of the mobile might be a good way to work. Note that programming for the phone is different from programming on the phone. The latter is probably restricting (small screen, terrible keyboard, ...).
A more direct, rather than a more circuitous route to a goal might be good, actually. But if the goal is Java generally, with its wider API, then programming on a phone would be limiting.
Also, programming on the desktop with emulators may ease the porting problem so that the code runs on more than one phone. The iPhone doesn't support Java, for example, but a desktop environment might, in principle, be able to translate for that device.
But note that I don't do this myself.
Should he start learning Java on his cell phone or would he better off learning how to program Java on his PC?
These aren't your only options.
IMVHO, Java, especially Android, has a pretty steep learning curve. I would recommend starting with something like Processing to learn the fundamentals, and then I would use those fundamentals to transition to core (desktop) Java. When you have a good grasp on that, then I'd move to more advanced topics like mobile development.
Since you've tagged your post with curriculum-design, here's how I would design a curriculum. I would split it up into at least 3 different courses:
- Course 1: Intro to Programming. Use Processing to introduce the fundamentals: functions, variables, loops, control flow.
- Course 2: Advanced Programming. Use Java to introduce OOP, inheritance, data structures, algorithms. (In the US I believe this is the standard AP CS class?)
- Course 3: Mobile Development. (After course 2 you can branch out into many topics, not just mobile development.)
That's my two cents, but I know other people approach it from other directions. For example I know many folks teach web development first. And Google has at least one curriculum that uses Android to teach the fundamentals.
The question of how to learn the fundamentals of CS has been asked here a few times before, so I'd recommend starting with a search. Here are a few posts to get you started:
- How to teach a person to enjoy programming?
- Programming language for teenagers
- Order to Teach Topics in an Intro Programming Class
- Explain to someone that programming isn't just all “if”s and “else”s
- Programming languages specifically designed for beginners
- Using Processing as an entry point in an Introductory Course
There are many potential paths through computer science education, and I think the best thing you can do is try a few out and see which one works best for you.
Also, like Buffy said, you probably don't want to program on a cell phone. Even if you're programming a mobile app, you're almost always programming on a computer, and then exporting the app to a phone.
Shameless self-promotion: I've written a series of tutorials that take you from Processing all the way through core Java and onto web development and Android, available at HappyCoding.io.
I presently teach an app building course at high school. I did a lot of research as to what platform to use to build the apps. For Android Android Studio is the big gun. It uses Java. AS has a killer learning curve and requires nice computers. I am not good at Java (I teach Python) and the school has junk for computers. Keep digging. I found Thunkable. Flat learning curve and runs great on junk. The kids can actually build decent apps for both iPhone and Android. If your goal is to teach Java then building apps is the hard way to go.
In my opinion learning to develop apps as a first step seems to have a quite steep learning curve. Maybe start with console applications first and get into programming slowly but steadily! Don't try flying to the moon when you don't even have a paper plane!
And of course Buffy mentioned a lot of important points as well.
I think there is a subtle point missing from the concept of programming. When you stop to think about it, teaching someone to write an app for Android or iOS is not just programming in Java.
Small steps make long journeys. Writing apps may be the goal but first you would need to have a foundation in Java. Then you can build on that by learning the Android API. In reality, what you are really doing is writing an extension to the android OS. Here is how I see things…
"APP" EXTENDS "ANDROID" EXTENDS "JAVA" EXTENDS "C" EXTENDS "ASSEMBLY" EXTENDS "MACHINE CODE" EXTENDS "HARDWARE" EXTENDS "HUMAN"
To learn Java I think it would be easire to start someplace that does not require the odd (to a new person) expanation to take a bunch of steps not related directly to Java in order to learn Java.