There, I said it... but before you hunt me out of the village, let me elaborate.
The way picture editing software sharpens images, is by generating a blurred
or smoothed version of the picture and then calculating all the differences
to the original picture pixels. It then multiplies the differences by a constant
factor based on your settings. The product is then added to the blurred picture
pixels, resulting in a sharper image than the original.
Now, if you take a normal piece of source code and run it through an obfuscator
you kinda get a blurred version of the source code.
My thesis is, that if you look at the differences of the original and the obfuscated code
and enhance the differences, you get self explanatory code.
What does an obfuscator do with f.book(p) ?
So the sharper version of the code would be:
My rules of thumb are:
1. Make short functions ( one task per function )
2. give function and parameter names explanatory names
3. don't be afraid to refactor if you find a limitation in your code
4. Read Java Concurrency in Practice