I'm a volunteer CS teacher with the TEALS program in Seattle. We taught Snap (based on Scratch) for Intro to CS in our high school class, mostly teenagers 14-16. I like that it gives kids a quick and fun way to see immediate results without being annoyed by syntax errors. I also feel like we should have moved on to Python or JavaScript about halfway through the semester. The kids who are most excited about programming eventually want to learn a "real" programming language that is used in industry. So I think teaching a combination of Scratch and Python (or perhaps JavaScript) makes for a good Intro to CS class.
For the second year, we are teaching AP Computer Science, so we are using Java. I think the students had more fun with animation, simple games, and web development than they have with AP exercises. I find that there are too many concepts involved in teaching Java to make it a good first language, which can be demotivating. Tons of time spent debugging syntax errors as well. While these things are important eventually, some kids get frustrated and give up too early without ever seeing interesting results.