Понятная и хорошая библиотека идет с читабельной докой и стопятистами примерами. А системную как правило и так помнишь на память.Мне приходится как правило гуглить чтобы понять какого насыпать синтаксического сахару если он сыпется неочевидным образом. В сях очень много таких нелогичностей.
Самый простой (правда несколько притянутый за уши, но тем не менее) пример. Обращение к структуре по имени и через разыменовывание указателя. Если на алгольном языке мне достаточно знать что разыменовывание указателя делается через ^, взятие адреса через @ а обращение к полю структуры или юниона через . то я не грея голову пишу ptr^.field когда разыменовываю указатель, и foo.field когда обращаюсь в адрес. Или @foo^.field если мне хочется странного, но это по крайней мере все равно очевидно, логично и всегда так а не иначе, вне зависимости от контекста. Надо два указателя разыменовать ptrptr^^.field. Надо три - ptrptrptr^^^.field.
А на сях тех-же самых синтаксис выходит разный, и я, зная, что указатель разыменовывается через * а обращение к полю через . внезапно должен писать ptr->field разыменовывая указатель и foo.field обращаясь в символическое имя (чудны дела твои господи). Двойной указатель будет уже *ptrptr->field, а не, внезапно, ptrptr->->field как бы можно было логически предположить. Интуитивность такой записи за гранью добра и зла. То есть вместо того чтобы помнить два правила которые применимы везде я должен помнить уже три которые применимы каждое в своем случае, причем там где двух по идее вполне достаточно. А голова то не резиновая, а это самый простой пример который только удумать можно.
Когда существует куча одинаковых но разных правил, употребимых в одинаковых, но разных контекстах, тогда и приходится ломать голову как правильно покрошить из них нужный винегрет, и гуглить на предмет того, как же блин там коран то это учит делать в данном конкретном случае.
Хотя мож я просто дурак и у меня в голове ничего не держится =)