Make a map (mental or other) of how data flows within an algorithm; what data is being sent around to each function keeping in mind the purpose of the system to visualise how input becomes output.
Use Eclipse (or Sublime, if that's your thing) where possible for proper syntax formatting/highlighting and don't be afraid to modify the code to make it easier to understand, whether it be changing variable names to be more verbose or refactoring chunks of the code to make it more succinct.
As for psuedo code, I personally think it's much more difficult to understand than actual code... I find it easier to translate it into actual code, but you could also even transform it into a flow chart and work from there.