Static typing means less runtime errors as all identifier names and type resolutions are evaluated at compile time. Static typing is fast, as it doesn't have to do string compares and associative hash map lookups at runtime.
Dynamic typing is for toy languages and shell scripting replacement languages.
I concur that OOP teaches bad habits, the way it is taught at most universities and colleges. That's not to say OOP isn't completely invalid, but it's certainly not the great panacea some people like to think it is.
Use C or C++, and avoid overuse of OOP techniques like class polymorphism.