Any program in the world is typically comprised of either or all of the following characteristics:
- A Logical Sequence (a decent algorithm)
- Selection Structures (if, switch)
- Repetition (Iteration or loops)
Any beginning programmer has to be good at the aforementioned aspects of programming before proceeding to more advanced stuff. It is always recommendable to write your own functions and procedures just in the beginning so that it speeds up logical approach towards solving problems. Once that is done, then you can study data structures! A class (which is the essential unit of OOP) itself is a data structure. Ever wondered why C is taught before C++? Reason is that if one knows the implementation and weakness/disadvantage of struct(record), it will be easier to comprehend and appreciate the importance of using classes.
Although it not a prerequisite to learn a procedural programming first before going into the aspects of OOP. But it is highly recommended to write your own procedures and functions, before one gets rather addicted to reuse pre-built libraries and methods of objects.
One important note here I would always advise for beginning programmers is to stay away from primitive procedural programming languages of the 50's and 60's like FORTRAN, Pascal, COBOL, BASIC, etc. The reason I said that because those languages are all application oriented.They were meant to be there to perform certain things in their respective areas. Secondly, their syntax is also very different from the modern powerful OOP languages of today.
It is always best to start from C or C++! Once you are comfortable in these languages, it won't take much time for you to learn languages like Java, C#, PHP, Drupal, Ruby, etc. These are all object oriented languages.