Apart from the usual advice to "start working on a patch to learn the internals," which is not as easy to do because it's a mature product and most of the low-hanging fruits have been reaped, I'd also suggest checking the extensions shipped with the main source tree under $top/contrib.
Each one is self-contained and usually works with a subset of the internals.
Some good ones: pageinspect, pg_buffercache, pg_prewarm, pg_statstatements, pg_walinspect