C and C++ are quite similar. I reccomend either. Mostly because you would learn more about the internal structure of the computer than with most other compiled languages, and, with the use of some ASM, nothing is possible, and even without it, almost anything is possible.
Remember, object oriented practices are bad when you split a logical piece of code into half a dozen object functions just because that is how it's done. If the split has no purpose, does not speed up the code, and does not make it easier to understand, then why do it? (Future modular compatibility IS a purpose, "becuz it be OOP gud practize" is not. Every coding practice has a reason behind it, and should only be used where that reason actually applies. GOTO is not evil, but 99% of the time, the same functionality(and same output code) comes from an if, a while, a break, a continue..., but that doesn't mean that a GOTO must NOT be used, just that it should only be used by people who fully understand how they could damage the stack with it, and only where it's use would actually be CLEARER. Maybe it would work in a complex switch() for movement between cases where fall-through alone isn't enough, but such cases are rare...)
Above all, in any language, understand the why behind the coding practice so that you know when NOT to follow it.