Giving expressive, meaningful, coherent and readable names to the entities used all the time in programming languages (variables, functions, procedures, classes, methods, etc) is an incredibly challenging task that in general doesn't seem to be acknowledged as such.