There are two areas where blocks are driving me crazy, compared with writing code:
1. Managing moderately complex mathematical expressions is unwieldy. Even something simple like:
Math.sqrt((Math.pow((actor1.getX() - actor2.getX()), 2) + Math.pow((actor1.getY() - actor2.getY()), 2)))
ends up as a fairly wide blog of nested blocks. And if you want to change one of the plus or minus signs in the middle of an expression? Forget it. It's easier to just build the whole thing from scratch. In a traditional programming language, you just change the plus into a minus. If the values in your expression come from lists, things are even worse.
2. No local variables. This is a pretty big one, especially given point #1. There's no straightforward way to store intermediate results of expressions in local variables to improve readability, forcing you to either add attributes (which may not be needed elsewhere and just clutter up your behavior) or resort to defining custom blocks, which is a time consuming process where some errors can't be corrected.