I'm not a very verbal person (I'm more into numbers and actually writing out code) so I find that the most challenging part about programming is memorizing definitions and explaining concepts.
For example, polymorphism. The definition I have committed to memory is "it's a feature that allows multiple classes to have members with the same name but different functionality."
I don't know how good of a definition is. My guess is that it's very poor and a lot of programmers will object.
The thing is, I have known for many many years that if you have, say, a class named Father, a class named Son, and a class named Daughter, and both Son and Daughter inherit from Father, then Son and Daughter are considered Father types. Then you can declare two variables of type Father, initialize one by creating a new instance of the Son class, and initialize the other one by creating a new instance of the Daughter class. Now you have two variables of type Father, whose classes can have members with the same name but different functionality. So when you call an instance method using the name of one of those Father type variables, you may get different functionality depending on whether that Father type is also a Son type or a Daughter type.
That's a very long explanation that relies on too many examples and frankly, even ignoring the fact that I'd probably lose my train of thought several times during the explanation, I don't think I would impress anyone during an interview if I were to give that answer, not to mention that the interviewer would probably have a field day poking holes through my explanation.
So it boils down to ignoring the fact that I think I can write clean, syntactically correct code, and just concentrate on memorizing verbal information.
That's the thing I don't like about programming.
(You might say that reciting definitions is not programming, but you need to be able to do it if you want to get hired work as a programmer.)
Does anyone else feel the same way?