Nejlepší nástroj je beztak vlastní hlava. :-). Někde se věci chovají jako objekty - chceme vyspecifikovat interface (klidně implicitně duck-typingem) a závisí na každém objektu (třídě) jak ten interface implementuje.
Jindy máme pole dat a z něj potřebujeme dostat transformacemi (funkcemi) to, co nás zajímá. A ve většině případů je to něco mezi. Ideální je umět myslet oběma (všemi) způsoby a použít ten, ve kterém je konkrétní část programu čitelnější a udržovatelnější. Někdy je to i o explicitním versus implicitním přístupu k problému, implicitní často usnadňuje zobecnění, zatímco explicitní často usnadňuje verifikaci správnosti kódu.