<h3>Student's Opinion</h3>

<p>Not a definitive answer by any means, but thought that I might add what I have learnt... </p>

<p>I am 16, but first got exposed to block-coding at the age of 9. While I continued with more advanced forms and still make use of them (notably, LEGO Mindstorms), I grew out of block-coding very soon, and progressed to what one may call "real"-er programming languages.  </p>

<p>That said, I'm the head of the programming/computer club at my school and have noticed that students who were first exposed to <a href="https://scratch.mit.edu/" rel="noreferrer">scratch</a> (A block-coding language developed by MIT which it taught at junior-middle school at my school) pick up "real" programming languages quickly, since all the basic concepts are already known to them.</p>

<p>While teaching my juniors JS or C++ I'll often compare a concept to its equivalent in Scratch. That said, the obvious disadvantage is that scratch is <em>basic</em>, and doesn't cover advanced concepts (return codes, arguments, etc.)</p>

<p>Scratch and MIT App Inventor are very similar, and both are taught to my juniors at school, and students generally appear to enjoy these.</p>

<p>However, it <em>is</em>, indeed boring to those who have already had experiences with programming, and this is a problem to which you really should find a solution if you wish to move ahead with GUI-based programming languages in your curriculum.</p>

CC BY-SA 3.0
2017-12-27T15:21:28.790Z
2017-12-27T15:21:28.790Z
undo
<p>Often beginners don't know where to begin when given an assignment. They may stare at a blank screen with a blank look. Once they start typing they may make many errors and become frustrated. </p>

<p>Block based languages can help with this as they normally have a UI that shows all of the options that are available at a given moment. The UI itself serves as a prompt for what might be added to that nasty blank screen. It also provides things such as correct spelling and correct nesting of elements as well as (possibly) giving error highlighting and correcting as well as pretty-printing. </p>

<p>Block based languages need not be especially limited. I have built and used such systems that create and show a textual version of the program and it can be in a real language or in some subset suitable for beginners. The user can, for example, create Java classes, methods, statements, including structured statements, etc. It is challenging, though not impossible to build such as system that gives complete access to the standard libraries as well as the complete language. </p>

<p>Such systems can keep a structured form of the program (e.g. a parse tree) as the internal structure and can therefore produce the output in various formats such as text and structure diagrams. This is relatively easy to do as the user enters structures directly. </p>

<p>Additionally, such a tool can be used to storyboard an application, creating the class structure with key methods and then take its output, which can be just text, into a more full featured IDE. </p>

<p>One of the problems that novices have with learning programming is that, too often, they are asked to write when they have never read any interesting programs. Reading good programs is a good way to help people understand program structure and good style. But few courses are taught that way. A block-based tool is, in my mind, a sort of intermediate point between the extremes of reading little before writing and reading a lot first, since the available options are visible and it is difficult to make a low-level (lexical or syntactical) mistake. </p>

<p>Finally, such systems are normally (though not always) built in such a way that the learner can get near immediate feedback from the execution, with compilation, etc. handled automatically. If the program being written is graphical in nature this can be a big motivator. </p>

CC BY-SA 3.0
2017-12-27T23:38:27.420Z
2017-12-27T23:38:27.420Z
Buffy
<p>The main attraction of block-based programming languages is that they expose users to the fun aspects of programming (creativity and design) without requiring them to deal with the less fun aspects (such as syntax and obscure errors). This enables students who might have dropped out of an introductory C++ course to get a taste of programming, both to expand their understanding of the world around them (since they use programs every day) and to motivate some of them to learn text-based languages when they hit the limits of block-based languages.</p>

<p>Some disadvantages of block-based languages:</p>

<ul>
<li>They are not as accessible as text-based languages to students with visual and motor disabilities.</li>
<li><a href="https://cseducators.stackexchange.com/questions/860/how-do-i-convince-my-students-that-visual-programming-is-real-programming">Some students think that they are not really programming</a>. (<a href="https://cseducators.stackexchange.com/a/877/283">I disagree.</a>) I encourage you to explicitly address these misconceptions.</li>
</ul>

<p>Don't assume that students who have seen other programming languages will be bored. Creating phone apps is hard, so the ability to do that may be of interest to them. If they are extremely advanced, you can encourage them to contribute to App Inventor, which is open source.</p>

<p>Disclaimer: I was part of the App Inventor team and am co-author of <a href="http://www.appinventor.org/book2" rel="noreferrer">a book about App Inventor</a>. I have taught App Inventor at the college-level (to non-majors).</p>

CC BY-SA 3.0
2017-12-27T16:48:30.423Z
2017-12-27T16:48:30.423Z
Ellen Spertus
<p>I'm thinking about teaching App Inventor to students who have just begun their adventures in the programming field. MIT's App Inventor is based on block-coding, where the user designs the UI and then designs their functionality with block coding. However, it has so much more potential than traditional drag-and-drop languages as mentioned in an article I found on this website (<a href="https://cseducators.stackexchange.com/questions/2777/placement-of-app-inventor-in-high-school-cs-curriculum">Placement of App Inventor in high school CS curriculum</a>). I think it's a great way to get students started on learning how to program (basics of coding and how to work out solutions), but I'm afraid it also might be a bit dull for those who already have had some experience with other programming languages. </p>

<p>What are some advantages and disadvantages of teaching block coding?</p>

CC BY-SA 3.0
2017-12-27T00:57:08.937Z
Welcome to [cseducators.se]! You might be interested in looking at some other questions in [tag:block-based-programming]. They cover some of the advantages and disadvantages of teaching block based programming. Also, are you asking about App Inventor specifically, or block coding generally?
thesecretmaster
CC BY-SA 3.0
2017-12-27T01:24:58.280Z
What is the age and grade level you will be teaching?
Guy Coder
CC BY-SA 3.0
2017-12-27T05:19:04.497Z
Thanks for the link. I'm asking about App Inventor specifically. The audience would be elementary-school and some middle school students (3rd - 7th grade).
Kyle P
<block-based-programming><app-inventor>
Advantages and Disadvantages of Teaching Block-coding Languages Such As MIT's App Inventor?
# Advantages and Disadvantages of Teaching Block-coding Languages Such As MIT's App Inventor?

(Asked by: username_0 on 2017-12-27)

I'm thinking about teaching App Inventor to students who have just begun their adventures in the programming field. MIT's App Inventor is based on block-coding, where the user designs the UI and then designs their functionality with block coding. However, it has so much more potential than traditional drag-and-drop languages as mentioned in an article I found on this website ([Placement of App Inventor in high school CS curriculum](https://cseducators.stackexchange.com/questions/2777/placement-of-app-inventor-in-high-school-cs-curriculum)). I think it's a great way to get students started on learning how to program (basics of coding and how to work out solutions), but I'm afraid it also might be a bit dull for those who already have had some experience with other programming languages.

What are some advantages and disadvantages of teaching block coding?

**Tags:** block-based-programming, app-inventor

> **Comments:**
> **username_1**: Welcome to [cseducators.se]! You might be interested in looking at some other questions in [tag:block-based-programming]. They cover some of the advantages and disadvantages of teaching block based programming. Also, are you asking about App Inventor specifically, or block coding generally?  
> **username_2**: What is the age and grade level you will be teaching?  
> **username_0**: Thanks for the link. I'm asking about App Inventor specifically. The audience would be elementary-school and some middle school students (3rd - 7th grade).  

---

## 3 answers

### Answer by username_5 on 2017-12-27. Score: 5 | Accepted answer

The main attraction of block-based programming languages is that they expose users to the fun aspects of programming (creativity and design) without requiring them to deal with the less fun aspects (such as syntax and obscure errors). This enables students who might have dropped out of an introductory C++ course to get a taste of programming, both to expand their understanding of the world around them (since they use programs every day) and to motivate some of them to learn text-based languages when they hit the limits of block-based languages.

Some disadvantages of block-based languages:

* They are not as accessible as text-based languages to students with visual and motor disabilities.
* [Some students think that they are not really programming](https://cseducators.stackexchange.com/questions/860/how-do-i-convince-my-students-that-visual-programming-is-real-programming). ([I disagree.](https://cseducators.stackexchange.com/a/877/283)) I encourage you to explicitly address these misconceptions.

Don't assume that students who have seen other programming languages will be bored. Creating phone apps is hard, so the ability to do that may be of interest to them. If they are extremely advanced, you can encourage them to contribute to App Inventor, which is open source.

Disclaimer: I was part of the App Inventor team and am co-author of [a book about App Inventor](http://www.appinventor.org/book2). I have taught App Inventor at the college-level (to non-majors).


---

### Answer by username_3 on 2017-12-27. Score: 5

### Student's Opinion

Not a definitive answer by any means, but thought that I might add what I have learnt...

I am 16, but first got exposed to block-coding at the age of 9. While I continued with more advanced forms and still make use of them (notably, LEGO Mindstorms), I grew out of block-coding very soon, and progressed to what one may call "real"-er programming languages.

That said, I'm the head of the programming/computer club at my school and have noticed that students who were first exposed to [scratch](https://scratch.mit.edu/) (A block-coding language developed by MIT which it taught at junior-middle school at my school) pick up "real" programming languages quickly, since all the basic concepts are already known to them.

While teaching my juniors JS or C++ I'll often compare a concept to its equivalent in Scratch. That said, the obvious disadvantage is that scratch is *basic*, and doesn't cover advanced concepts (return codes, arguments, etc.)

Scratch and MIT App Inventor are very similar, and both are taught to my juniors at school, and students generally appear to enjoy these.

However, it *is*, indeed boring to those who have already had experiences with programming, and this is a problem to which you really should find a solution if you wish to move ahead with GUI-based programming languages in your curriculum.


---

### Answer by username_4 on 2017-12-27. Score: 2

Often beginners don't know where to begin when given an assignment. They may stare at a blank screen with a blank look. Once they start typing they may make many errors and become frustrated.

Block based languages can help with this as they normally have a UI that shows all of the options that are available at a given moment. The UI itself serves as a prompt for what might be added to that nasty blank screen. It also provides things such as correct spelling and correct nesting of elements as well as (possibly) giving error highlighting and correcting as well as pretty-printing.

Block based languages need not be especially limited. I have built and used such systems that create and show a textual version of the program and it can be in a real language or in some subset suitable for beginners. The user can, for example, create Java classes, methods, statements, including structured statements, etc. It is challenging, though not impossible to build such as system that gives complete access to the standard libraries as well as the complete language.

Such systems can keep a structured form of the program (e.g. a parse tree) as the internal structure and can therefore produce the output in various formats such as text and structure diagrams. This is relatively easy to do as the user enters structures directly.

Additionally, such a tool can be used to storyboard an application, creating the class structure with key methods and then take its output, which can be just text, into a more full featured IDE.

One of the problems that novices have with learning programming is that, too often, they are asked to write when they have never read any interesting programs. Reading good programs is a good way to help people understand program structure and good style. But few courses are taught that way. A block-based tool is, in my mind, a sort of intermediate point between the extremes of reading little before writing and reading a lot first, since the available options are visible and it is difficult to make a low-level (lexical or syntactical) mistake.

Finally, such systems are normally (though not always) built in such a way that the learner can get near immediate feedback from the execution, with compilation, etc. handled automatically. If the program being written is graphical in nature this can be a big motivator.


---

