Among programmers and even common people in general, I feel there’s an implicit consensus that ‘difficult is good’. I got this idea when reading a book review, where the reviewer had implied that the book was worth reading because it was difficult.

Words are dangerous things if misused. Especially as experiences are subjective, and words reflect those experiences. So you and I might both use the word ‘difficult’, yet our subjective understanding of the term might vary too much to even be considered the same word.

Worse, my experiences might change so much that I would see the word difficult differently with time. I remember when I was a teenager I used to sell books in very dangerous conditions–conditions that might have ended my young life–while there were no guarantees I or my family would survive the night without the food bought with the money generated from the sales because it was difficult to make sales.

I used to think that was difficult, but when now in my mid-forties, I have been through so much that by way of contrast, my childhood experiences seem benign. So the definition of what difficult means is subject to updates even in subjective terms.

Back to the point raised, then, it is impossible to argue that difficult is good just because it has different meanings given different contexts. What kind of difficult is good, then?

Or is it good at all, regardless of the meaning gleaned from some experience?

My contention is that difficult is something that needs to be overcome, and because of this, never a desirable. If you write code that is difficult to read or refactor, then that is a problem. If a book teaches complex stuff in a difficult way, there is a problem hiding somewhere.

Regardless of complexity level, difficulty represents a barrier that is there due to some lack. I believe it is possible to assess complexity using simple, easy means; that is why simplicity is elegant. In other words, elegance is achieved when the complex is stripped off its difficulties.