Pazite, ako želiš da naučiš neku paradigmu za programiranje najbolje je da se držiš jezika koji je ograničen na tu paradigmu ili "čist". Za strukturno proceduralno programiranje Pascal je zakon, za funkcionalno Haskell a za objektno Smalltalk (može i Ruby). Npr, ako želiš da naučiš funkcionalno programiranje u nekom "nečistom" funkcionalnom jeziku kakav je npr ML, lako će da ti se desi da nastaviš da programiraš u imperativnom stilu prosto zato što ti je to dozvoljeno. Haskell ti ne dozvoljava da programiraš imperativno i ako koristiš Haskell naučićeš funkcionalno programiranje. Prebaci analogiju na objektno progrmiranje - sa Javom možeš ladno da programiraš proceduralno i da misliš da programiraš objektno. Što se Pythona tiče, u njemu je proceduralno programiranje ne samo moguće nego i lepše od objektnog - ne znam zašto bi iko poželeo da objektno programira u Pythonu
Što se Jave tiče, da dodam da je i inače ne smatram dobrim jezikom za učenje programiranja - objektnog ili inače.