In my daily work, I enjoy supporting middle school and high school Computer Science (CS) teachers in the Sacramento Region.  CS education is gaining a lot of attention in California - new standards are being developed, a K-12 implementation plan is on the horizon, and many curriculum and education technology providers have created cutting-edge instructional materials that are free or inexpensive to obtain.  With regard to student engagement and content mastery, I have observed successes and challenges in CS classrooms.

While syntax-based programming languages are industry standard, they aren't necessarily the most effective way to teach introductory CS concepts.  For example, a student learning the idea of a conditional in Java, may understand the relationship of an if-then statement but may be missing a } in the syntax.  Without proper syntax, the program won't compile and the student will receive negative feedback - even if he or she is understanding the conditional.  Block-based languages, while not industry standard, eliminate pesky typos and allow students to visualize the program they are building.  For Android, one would program in Java (or Kotlin).  However, MIT's AppInventor2 allows for students to build a working application with writing a single line of code.  Block-based languages enable more students to master CS concepts.

On a related note, CS can be more engaging when a physical computing device is involved.  In addition to working with my Android phone, I have spent some time with the BBC's micro:bit.  For $15, students can interact with a device that loaded with features.  Want to engage a student when discussing variables?  Teach a lesson that allows them to change the color of an LED that is embedded in a 5x5 array on the front of the device.  Using the web-based, block-based language, students can physically interact with CS concepts they are learning.  This is a critical component to mastery.