I've been arguing for a while
that the biggest obstacle to wider adoption of higher-level programming techniques is the near-impossibility of debugging things that go wrong. Ned Batchelder's recent post about unhelpful magic
makes the same point: if you can't figure out why your helpful genie has given you a toad instead of a horse, it's not really a very helpful genie. For my money, this is the real Grand Challenge
in computing today.