What are the pedagogical methods for teaching programming? This is a very objective question. I want to know what are the methods for teaching programing?

I'll provide a parallel example to make this clearer in case this causes any confusion.

I have Portuguese as a native language and I teach English here in my country (therefore I'm an English teacher).

In English teaching there are 3 main methods (over simplified below) of teaching used here.


  Method: Communicative Approach. Author: Noah Chomsky et al. -> Where you expose the student to a simple exercise and words and how to use them and then explains what happened and follow to more advanced exercises based on what is contained in the lesson (or to what you just explained). {It can be done starting with the mother language and then moving to the language one desires to learn as you progress in the classes, or classes can be taught entirely in
  the second language with a special care with the words used for beginners.}
  
  Method: NLP (Neuro Linguistics Programmming). Author: Various -> You expose the student to a simple set of words translated, for instance verbs, and asks  them to translate from their mother language to the language they are learning. Moving on to vocabulary and so on. On each lesson stacking how to use the verbs, vocabulary, expressions and some grammar (usually in this order).
  
  Method: Immersion. Author: Krassner et al -> The student is taught, much like Communicative Approach but classes are done fully in the language and in a place where the person lives a routine with the language. To learn English (or any other language as a matter of fact) like this, according to the method, one would have to live in an English speaking country.


=========================================================================
Edit:
I believe this line is causing a bit of a confusion

I did not meant that Learning a human language is the same as learning a programming language. I'm just saying that, in English language teaching we have methods to do that, as listed above. Does CS have one (or many)?



Continuation of the original text:

-> Part I believe is causing confusion:

So above I believed to have expressed what I meant with "What are the pedagogical methods for teaching programming?" Making a parallel with Teaching English as a Second Language in order to __illustrate__.

I think from here things were well understood. 
Why do I ask this? And what answers I don't expect seeing.

What I see is that people usually say; "In this site, there is a very good teacher, or resources for learning how to code. You can use it." As a way to mirror that, to teach someone or a group how to code instead of pointing to a (or various) method(s)

That is not my question. It is very clear. What are the methods for teaching programming?

====!And not; What are the methods for learning how to code?!========

I hope this can help me, because I haven't really found an answer to this. Or at least not as explicit and detailed as I see in other areas of the teaching world.

I don't need a detailed explanation but if you wish to provide something more elaborated I will be thankful. Nevertheless the method(s) is(are) just fine and what I'm looking for.

Have a great day.

Note: Originally asked in -> https://stackoverflow.com/questions/50586854/what-are-the-pedagogical-methods-for-teaching-programming?noredirect=1#comment88194521_50586854
I'm not sure this is what you are looking for, but from personal experience (and probably in no way 'official' educational paths) :

I gave each approach a name in order to be able to seperate them in case users want to discuss them. 


Frontal Theory: Speak in-class about constructs and syntax, students code at home (exercises). 
Collaborative: students and teacher code together in-class
Guide-and-Release: Introduce them to the topic of coding in-class, then let them complete online-courses (there are lots of websites which provide virtual classrooms with a "control" function for the teacher observing the students' progress.)
Project based: Each student / group of students decide in the beginning what kind of software (scale is up to them/teacher) they want to write / rebuild (e.g. a blogging site / a tic tac toe game in the command console). The teacher helps students research what is necessary for it, how to approach it. Learning progress happens throughout the development. 


@Project based: example for the tic tac toe game: we need input, output, a way to store values, loops. Then start with researching&amp;learning how input/output works in the chosen language. Gradually build up knowledge until the game can be implemented. (Probably my favorite approach, as it focuses on learning how to analzye/break down a problem, solve small instances one at a time and then put components / partial solutions together -  which is coding at its core in my opinion)

Edit: Removed the following approach from above, as it is rather a didactical approach and not on the same "educational level" the previously mentioned - but for completeness, here you go: 


Free Style: Students learn by themselves in-class, the teacher is only available as a "helping hand" if problems come up. (No solution on a silver platter, but rather giving points on where a solution can be found - stackoverflow, documentations etc.)