Answers.Body: <p>If Advanced Placement CS is in their future, then Java is probably the best language choice as it is still used in APCS. There are also a lot of resources for Java development that also permit graphics based insight. The course probably wouldn't be about developing for the web, though. </p>
  
  <p>But because of the APCS link there are a lot of resources intended for novice programmer development. </p>
  
  <p>One resource (Java) that is very useful for such students, and has a lot of project ideas built in to it is <a href="https://www.greenfoot.org/door" rel="nofollow noreferrer">Greenfoot</a>, which uses a rectangular grid to place visual representations of objects and lets them move an interact according to the student program. There is also a dedicated teacher resource for it: <a href="https://greenroom.greenfoot.org" rel="nofollow noreferrer">Greenroom</a>. It has additional greenfoot projects and a forum for discussion. </p>
  
  <p>Otherwise, Python is a pretty good choice for beginners. It has less syntactic load. But the set of resources for novices is a bit more scattered. </p>
  
  <p>But any programming that uses some visual metaphor is better for student understanding than just numeric programming. It needn't be web based, but should be graphical. Games are pretty good for this provided that they aren't just textual. Any simple board game can provide a nice way to visualize what a corresponding program needs to do. </p>
  
  <p>But, one way to avoid the two language issue in web development is to have the students build only the back end or only the front end with you providing the other. It also defines a set goal that students can program toward. The part you build can be in a different language than that used by the students, of course. </p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-07-14T17:44:40.403Z
Answers.Text: Java is a dreadful teaching language (not the worse). It has many problems, including keywords that have to be used before you can teach what they do “`public static void main …`” It also discourages object orientation “`static …main`”. I can't remember all of the other problem, but there are many. I have been teaching a student one-to-one, and I see many problems, because of the language. The last problem was trying to teach interfaces (Java and OO meaning don't match).
Answers.UserDisplayName: ctrl-alt-delor
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-07-14T18:10:05.500Z
Answers.Text: Your opinion is not widely shared. Java is used in APCS and in many, many beginning collegiate courses. Also, see: https://cseducators.stackexchange.com/a/4718/1293
Answers.UserDisplayName: Buffy
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-07-15T08:36:30.697Z
Answers.Text: I 100% agree. However I suspect that it is the answer to “What language is popular in industry?”, or “What language do our instructors know?” and not “What is the best teaching language?”
Answers.UserDisplayName: ctrl-alt-delor
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-02-26T14:37:34.273Z
Answers.Text: You don't actually have to use `public`, `static` or `void` without explaining them first to teach Java. As just one way to avoid it, [BlueJ](https://en.wikipedia.org/wiki/BlueJ) has been free and open source since 2009, and you can use the GUI to create an object and run a method named `main` (or anything else) without making it a proper program entry point. More recently, Java since version 9 comes with the [JShell](https://en.wikipedia.org/wiki/JShell) REPL which can be used in a similar way, though it has no GUI. I have taught Java as a first language, and left `main` until *last*.
Answers.UserDisplayName: kaya3
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-05-28T22:15:56.630Z
Answers.Text: @Buffy The question's title was edited such that the meaning was entirely changed. Is that kosher?
Answers.UserDisplayName: ADJenks
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-05-28T22:22:43.330Z
Answers.Text: @ADJenks, not especially, but others can edit or the OP can reject the change. And it now matches the body of the question better than previously.
Answers.UserDisplayName: Buffy
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-07-09T10:46:51.720Z
Answers.LastActivityDate: 2019-07-09T10:46:51.720Z
Answers.UserDisplayName: Buffy
Answers.Body: <p>There is no better first line-code language than Small Basic.  Lots of nice simple projects for beginners.  Python and especially Java can be very intimidating to beginners and will scare away many kids.  Small Basic is a step up from Scratch.  There are a lot of beginner routes out there to get kids started.  Another excellent language is Alice.  I have my programming students build a scene from Shakespeare using Alice.  If you have access to Lego EV3 robots Small Basic has an extension for them.  There is also an EV3 extension for Visual Studio Code/Python if you want to step up to a more difficult language.  Be careful what you start kids off with.  Throw Python or Java at them you retain maybe 10% of the kids for the next class.  I introduce Python in the 3rd semester.  By then the kids are not intimidated by programming and problem solving techniques.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-07-09T15:38:54.900Z
Answers.Text: What ages do you teach, out of curiosity?
Answers.UserDisplayName: Ben I.
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-07-10T15:02:23.770Z
Answers.Text: 9-12.  Raw beginners to computer geeks that program for fun.
Answers.UserDisplayName: Garth Flint
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-07-09T14:04:05.043Z
Answers.LastActivityDate: 2019-07-09T14:04:05.043Z
Answers.UserDisplayName: Garth Flint
Answers.Body: <p>You might want to consider Visual Basic or Delphi where it is simple to create graphical user interfaces.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-07-13T11:45:37.050Z
Answers.Text: Hello and welcome to [cseducators.se]. Would you mind [edit]ing to add some reasons why you think that those languages are good for this task?
Answers.UserDisplayName: thesecretmaster
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-07-12T17:26:58.907Z
Answers.LastActivityDate: 2019-07-12T17:26:58.907Z
Answers.UserDisplayName: user3344003
Answers.Body: <p>I agree with Buffy that a great way to think about it isn't "language", but "language + library" or "language + provided code".  </p>
  
  <p>David Malan does a masterful job if this in his CS50 course, and anyone can see these labs. Those labe are  impractically large-scale for someone without his <em>staffing</em>, but they give a sense of what is quite exciting.</p>
  
  <p>Buffy's recommendation of Greenfoot is absolutely excellent. I have colleagues who use it this year, and they described it as one of the best pedagogical tools they've ever encountered.</p>
  
  <p>I would also recommend looking into game engines. Unity allows you to create exciting projects from Day 1, and gives you an entry point into C#.  Godot is great if you'd like a more Python-like language.</p>
  
  <p>Finally, remember that these are merely starting points. Once the kids are up and running in the basics of the language (and enjoying themselves), you can take them out of the starting environment in almost any different direction. If you find it interesting, and present it with enthusiasm, they will usually be with you.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-07-09T13:02:48.720Z
Answers.LastActivityDate: 2019-07-09T13:02:48.720Z
Answers.UserDisplayName: Ben I.
Body: <p>I'm teaching introductory programming for high school. Back in the day, when I was starting out, DOS and Unix terminal prompt was normal UI, and console apps would spark kids interest.</p>
  
  <p>Now, on the other hand, kids grow up on the web, and a console program would look quite <em>uninspiring</em>. </p>
  
  <p>On the other hand, I'm not sure if JS (which is <em>the</em> web language) is a good introductory language. It's got a lot of gotchas which can confuse beginners, and I was thinking that a language like Python or Go would be a better introductory language.</p>
  
  <p>On the other hand, they don't have much of a front-end, and I don't want to teach two languages at the same time.</p>
  
  <p>What do people suggest?</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-07-09T02:15:28.270Z
Comments.Text: You may want to look at [this related question](https://cseducators.stackexchange.com/q/93/58) or [this one](https://cseducators.stackexchange.com/q/733/58).
Comments.UserDisplayName: thesecretmaster
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-07-14T17:45:33.247Z
Comments.Text: I like python turtle.
Comments.UserDisplayName: ctrl-alt-delor
Tags: <secondary-education><language-choice>
Title: What is a good introductory language for high school?
ThreadText: # What is a good introductory language for high school?
  
  (Asked by: username_0 on 2019-07-09)
  
  I'm teaching introductory programming for high school. Back in the day, when I was starting out, DOS and Unix terminal prompt was normal UI, and console apps would spark kids interest.
  
  Now, on the other hand, kids grow up on the web, and a console program would look quite *uninspiring*.
  
  On the other hand, I'm not sure if JS (which is *the* web language) is a good introductory language. It's got a lot of gotchas which can confuse beginners, and I was thinking that a language like Python or Go would be a better introductory language.
  
  On the other hand, they don't have much of a front-end, and I don't want to teach two languages at the same time.
  
  What do people suggest?
  
  **Tags:** secondary-education, language-choice
  
  > **Comments:**
  > **username_1**: You may want to look at [this related question](https://cseducators.stackexchange.com/q/93/58) or [this one](https://cseducators.stackexchange.com/q/733/58).  
  > **username_2**: I like python turtle.  
  
  ---
  
  ## 4 answers
  
  ### Answer by username_3 on 2019-07-09. Score: 2
  
  If Advanced Placement CS is in their future, then Java is probably the best language choice as it is still used in APCS. There are also a lot of resources for Java development that also permit graphics based insight. The course probably wouldn't be about developing for the web, though.
  
  But because of the APCS link there are a lot of resources intended for novice programmer development.
  
  One resource (Java) that is very useful for such students, and has a lot of project ideas built in to it is [Greenfoot](https://www.greenfoot.org/door), which uses a rectangular grid to place visual representations of objects and lets them move an interact according to the student program. There is also a dedicated teacher resource for it: [Greenroom](https://greenroom.greenfoot.org). It has additional greenfoot projects and a forum for discussion.
  
  Otherwise, Python is a pretty good choice for beginners. It has less syntactic load. But the set of resources for novices is a bit more scattered.
  
  But any programming that uses some visual metaphor is better for student understanding than just numeric programming. It needn't be web based, but should be graphical. Games are pretty good for this provided that they aren't just textual. Any simple board game can provide a nice way to visualize what a corresponding program needs to do.
  
  But, one way to avoid the two language issue in web development is to have the students build only the back end or only the front end with you providing the other. It also defines a set goal that students can program toward. The part you build can be in a different language than that used by the students, of course.
  
  > **Comments:**
  > **username_2**: Java is a dreadful teaching language (not the worse). It has many problems, including keywords that have to be used before you can teach what they do “`public static void main …`” It also discourages object orientation “`static …main`”. I can't remember all of the other problem, but there are many. I have been teaching a student one-to-one, and I see many problems, because of the language. The last problem was trying to teach interfaces (Java and OO meaning don't match).  
  > **username_3**: Your opinion is not widely shared. Java is used in APCS and in many, many beginning collegiate courses. Also, see: https://cseducators.stackexchange.com/a/4718/1293  
  > **username_2**: I 100% agree. However I suspect that it is the answer to “What language is popular in industry?”, or “What language do our instructors know?” and not “What is the best teaching language?”  
  > **username_4**: You don't actually have to use `public`, `static` or `void` without explaining them first to teach Java. As just one way to avoid it, [BlueJ](https://en.wikipedia.org/wiki/BlueJ) has been free and open source since 2009, and you can use the GUI to create an object and run a method named `main` (or anything else) without making it a proper program entry point. More recently, Java since version 9 comes with the [JShell](https://en.wikipedia.org/wiki/JShell) REPL which can be used in a similar way, though it has no GUI. I have taught Java as a first language, and left `main` until *last*.  
  > **username_5**: @username_3 The question's title was edited such that the meaning was entirely changed. Is that kosher?  
  > **username_3**: @username_5, not especially, but others can edit or the OP can reject the change. And it now matches the body of the question better than previously.  
  
  ---
  
  ### Answer by username_6 on 2019-07-09. Score: 1
  
  There is no better first line-code language than Small Basic. Lots of nice simple projects for beginners. Python and especially Java can be very intimidating to beginners and will scare away many kids. Small Basic is a step up from Scratch. There are a lot of beginner routes out there to get kids started. Another excellent language is Alice. I have my programming students build a scene from Shakespeare using Alice. If you have access to Lego EV3 robots Small Basic has an extension for them. There is also an EV3 extension for Visual Studio Code/Python if you want to step up to a more difficult language. Be careful what you start kids off with. Throw Python or Java at them you retain maybe 10% of the kids for the next class. I introduce Python in the 3rd semester. By then the kids are not intimidated by programming and problem solving techniques.
  
  > **Comments:**
  > **username_7**: What ages do you teach, out of curiosity?  
  > **username_6**: 9-12.  Raw beginners to computer geeks that program for fun.  
  
  ---
  
  ### Answer by username_7 on 2019-07-09. Score: 1
  
  I agree with username_3 that a great way to think about it isn't "language", but "language + library" or "language + provided code".
  
  David Malan does a masterful job if this in his CS50 course, and anyone can see these labs. Those labe are impractically large-scale for someone without his *staffing*, but they give a sense of what is quite exciting.
  
  username_3's recommendation of Greenfoot is absolutely excellent. I have colleagues who use it this year, and they described it as one of the best pedagogical tools they've ever encountered.
  
  I would also recommend looking into game engines. Unity allows you to create exciting projects from Day 1, and gives you an entry point into C#. Godot is great if you'd like a more Python-like language.
  
  Finally, remember that these are merely starting points. Once the kids are up and running in the basics of the language (and enjoying themselves), you can take them out of the starting environment in almost any different direction. If you find it interesting, and present it with enthusiasm, they will usually be with you.
  
  
  ---
  
  ### Answer by username_8 on 2019-07-12. Score: 0
  
  You might want to consider Visual Basic or Delphi where it is simple to create graphical user interfaces.
  
  > **Comments:**
  > **username_1**: Hello and welcome to [cseducators.se]. Would you mind [edit]ing to add some reasons why you think that those languages are good for this task?  
  
  ---
  
  