Empathy is definitely good. I think the other thing that has been critical to my classes is cultivating an attitude that errors aren't something to be embarrassed about, they're something to celebrate - especially when you get a new error - it's an opportunity to learn something.
This isn't a skill, exactly, but I've also found that it helps to spend a bit of time teaching them how to identify where/how they're confused. I've loved "The Programmer's Brain: What every programmer needs to know about cognition" for explaining this and I usually assign a chapter to read from it that basically explains the difference between lack of knowledge, lack of information, and lack of processing power. Essentially, lack of knowledge is not understanding what an operator or function's purpose is - essentially, unfamiliarity with the syntax. Lack of information is not understanding the inner workings of a method - the details of how the function works are abstracted away and you have to go digging to find them. Lack of processing power is not being able to keep everything necessary to understand a program in your head long enough to see how code works.