Answers.Body: <p>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!</p>
  
  <p>And of course Buffy mentioned a lot of important points as well.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-09-23T23:42:40.063Z
Answers.LastActivityDate: 2019-09-23T23:42:40.063Z
Answers.UserDisplayName: csabinho
Answers.Body: <p>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.</p>
  
  <p>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…</p>
  
  <pre><code>"APP" EXTENDS "ANDROID"
        EXTENDS "JAVA"
        EXTENDS "C"
        EXTENDS "ASSEMBLY"
        EXTENDS "MACHINE CODE"
        EXTENDS "HARDWARE"
        EXTENDS "HUMAN"
  
  </code></pre>
  
  <p>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.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-09-27T13:56:19.040Z
Answers.Text: IIRC, Java was written in C++, not that that detracts from your point at all. But are you suggesting that OP begins by studying `"HUMAN"` or `"HARDWARE"`?
Answers.UserDisplayName: Ben I.
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-09-29T00:08:39.117Z
Answers.Text: https://stackoverflow.com/questions/1220914/in-which-language-are-the-java-compiler-and-jvm-written
Answers.UserDisplayName: Joe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-09-29T00:11:10.997Z
Answers.Text: learning to be human is something that is done when you are young but learning how the hardware works, atleast a basic level is required to understand what the practice of programming is in general.
Answers.UserDisplayName: Joe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-09-27T05:07:24.043Z
Answers.LastActivityDate: 2019-10-01T18:37:16.967Z
Answers.LastEditDate: 2019-10-01T18:37:16.967Z
Answers.UserDisplayName: Joe
Answers.Body: <p>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 <em>for</em> the phone is different from programming <em>on</em> the phone. The latter is probably restricting (small screen, terrible keyboard, ...). </p>
  
  <p>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. </p>
  
  <p>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. </p>
  
  <p>But note that I don't do this myself. </p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-09-23T21:16:54.047Z
Answers.Text: Even using ssh with Bluetooth kind the *environment* for programming on the phone is restrictive.
Answers.UserDisplayName: Gypsy Spellweaver
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-09-27T04:50:58.847Z
Answers.Text: as intended. Samsung and your mobile carrier own your phone, you just give it a purpose and pay for it.
Answers.UserDisplayName: Joe
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-09-23T19:06:36.053Z
Answers.LastActivityDate: 2019-09-23T19:06:36.053Z
Answers.UserDisplayName: Buffy
Answers.Body: <blockquote>
    <p>Should he start learning Java on his cell phone or would he better off learning how to program Java on his PC?</p>
  </blockquote>
  
  <p>These aren't your only options.</p>
  
  <p>IMVHO, Java, especially Android, has a pretty steep learning curve. I would recommend starting with something like <a href="https://processing.org/" rel="nofollow noreferrer">Processing</a> 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.</p>
  
  <p>Since you've tagged your post with <a href="/questions/tagged/curriculum-design" class="post-tag" title="show questions tagged &#39;curriculum-design&#39;" rel="tag">curriculum-design</a>, here's how I would design a curriculum. I would split it up into at least 3 different courses:</p>
  
  <ul>
  <li>Course 1: Intro to Programming. Use Processing to introduce the fundamentals: functions, variables, loops, control flow.</li>
  <li>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?)</li>
  <li>Course 3: Mobile Development. (After course 2 you can branch out into many topics, not just mobile development.)</li>
  </ul>
  
  <p>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 <a href="https://appliedcsskills.withgoogle.com/syllabus.html" rel="nofollow noreferrer">curriculum</a> that uses Android to teach the fundamentals.</p>
  
  <p>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:</p>
  
  <ul>
  <li><a href="https://cseducators.stackexchange.com/a/4785/2068">How to teach a person to enjoy programming?</a></li>
  <li><a href="https://cseducators.stackexchange.com/a/4186/2068">Programming language for teenagers</a></li>
  <li><a href="https://cseducators.stackexchange.com/a/2798/2068">Order to Teach Topics in an Intro Programming Class</a></li>
  <li><a href="https://cseducators.stackexchange.com/a/5874/2068">Explain to someone that programming isn't just all “if”s and “else”s</a></li>
  <li><a href="https://cseducators.stackexchange.com/a/173/2068">Programming languages specifically designed for beginners</a></li>
  <li><a href="https://cseducators.stackexchange.com/q/19/2068">Using Processing as an entry point in an Introductory Course</a></li>
  </ul>
  
  <p>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.</p>
  
  <p>Also, like <a href="https://cseducators.stackexchange.com/a/5931/2068">Buffy said</a>, you probably don't want to program <strong>on</strong> 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.</p>
  
  <p>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 <a href="https://happycoding.io" rel="nofollow noreferrer">HappyCoding.io</a>.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-09-25T16:27:45.333Z
Answers.LastActivityDate: 2019-09-25T16:27:45.333Z
Answers.UserDisplayName: Kevin Workman
Answers.Body: <p>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.  </p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-09-27T13:53:05.000Z
Answers.LastActivityDate: 2019-09-27T13:53:05.000Z
Answers.UserDisplayName: Garth Flint
Body: <p>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?</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-09-27T19:15:26.323Z
Comments.Text: ... or start with a different language?
Comments.UserDisplayName: ctrl-alt-delor
Tags: <curriculum-design>
Title: Learning to program a Cell Phone
ThreadText: # Learning to program a Cell Phone
  
  (Asked by: username_0 on 2019-09-23)
  
  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?
  
  **Tags:** curriculum-design
  
  > **Comments:**
  > **username_1**: ... or start with a different language?  
  
  ---
  
  ## 5 answers
  
  ### Answer by username_5 on 2019-09-23. Score: 3 | Accepted answer
  
  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.
  
  > **Comments:**
  > **username_6**: Even using ssh with Bluetooth kind the *environment* for programming on the phone is restrictive.  
  > **username_3**: as intended. Samsung and your mobile carrier own your phone, you just give it a purpose and pay for it.  
  
  ---
  
  ### Answer by username_7 on 2019-09-25. Score: 4
  
  > 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](https://processing.org/) 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](/questions/tagged/curriculum-design "show questions tagged '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](https://appliedcsskills.withgoogle.com/syllabus.html) 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?](https://cseducators.stackexchange.com/a/4785/2068)
  * [Programming language for teenagers](https://cseducators.stackexchange.com/a/4186/2068)
  * [Order to Teach Topics in an Intro Programming Class](https://cseducators.stackexchange.com/a/2798/2068)
  * [Explain to someone that programming isn't just all “if”s and “else”s](https://cseducators.stackexchange.com/a/5874/2068)
  * [Programming languages specifically designed for beginners](https://cseducators.stackexchange.com/a/173/2068)
  * [Using Processing as an entry point in an Introductory Course](https://cseducators.stackexchange.com/q/19/2068)
  
  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 [username_5 said](https://cseducators.stackexchange.com/a/5931/2068), 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](https://happycoding.io).
  
  
  ---
  
  ### Answer by username_8 on 2019-09-27. Score: 2
  
  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.
  
  
  ---
  
  ### Answer by username_2 on 2019-09-23. Score: 1
  
  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 username_5 mentioned a lot of important points as well.
  
  
  ---
  
  ### Answer by username_3 on 2019-09-27. Score: 0
  
  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.
  
  > **Comments:**
  > **username_4**: IIRC, Java was written in C++, not that that detracts from your point at all. But are you suggesting that OP begins by studying `"HUMAN"` or `"HARDWARE"`?  
  > **username_3**: https://stackoverflow.com/questions/1220914/in-which-language-are-the-java-compiler-and-jvm-written  
  > **username_3**: learning to be human is something that is done when you are young but learning how the hardware works, atleast a basic level is required to understand what the practice of programming is in general.  
  
  ---
  
  