I'm not a great programmer, because my career path took a strange turn that took me further and further away from that. That said, when I was learning programming languages, sitting and digging through the syntax was always boring, but getting my hands on books about data structures and algorithms is what made it interesting. Anything I'd recommend would be out of date, but you could probably find books that teach the subject matter using specific languages you're interested in as examples. You'll learn about implementing lists, trees, hashes, graphs as well as the various types of each. It'll give you a good understanding of the languages, as well as the pros cons of the different ways data can be stored, retrieved and sorted. I had a good book that was written entirely as pseudo-code, but I can't remember what it was titled.
the father of a friend of mine always tells him that to learn how to program he has to read code, so one day he showed me the source code of a fps game that the game creators had published.
The game was programmed in C++ but he didn't understand a thing. So digging through the syntax can be boring and useless when you are still getting the grasp of the basics. Once you understand the basics, variables, loops, arrays, methods, classes, parameters...then it's much easier to learn a new language.
The subject related to pseudocode was one of those I passed with flying colours. Well, or at least with more than a good enough score.
OOP is not a good idea, it is usable but with a very narrow scope and inheritance is not a good way to share functionnalities, it is just meant to expose a common interface (in which case you use Interfaces/Abstract classes).
Composition is better than inheritance most of the time, just like arrays are to be favored for storage unless you can prove that another data structure will perform better.
Also note that you should study your data flow given the algorithms you use to pick up your data structure, so start with arrays then change appropriately. (And also group data in AoS to match your data flow or better use SoA which is more versatile but sadly not supported natively in many languages. [I only know of Johnatan Blow's JAY supporting SoA natively])
When it comes to file storage it depends whether you want something fast or convenient, fast would be binary dumping/serializing your data to disk and loading in place, convenient would be whatever the standard library of the language offers if any (but beware the size/performance implications). [XML is always a bad idea, as it stores more meta-data than data, it's just heretical!]
OO has its advantages yes. For UIs they are quite good, afaik. But I have a hard time grasping it, tbh.
The main issue I have with it is that you write the same thing several times the differentiation being the capitals and so on. Say you create a method with 2 parameters.
You name the method and the parameters are int amount DateTime datetime, so you have to write below,
Amount = amount;
DateTime = dateTime;
or
this.amount = amount;
this.dateTime = dateTime;
This just shuts my brain off, and I have a hard time creating classes and methods because of that. I know what this. is, but I keep endlessly repeating words and when you create an object of a class it is the same.
Car car (4964, 400, "QL2830", "Chevrolet", 40000) = new Car();
Same for things like the scanner class in java where you try to get data from a user. Or changing a value of something by reference, or things like that.
It's no surprise I got a very bad grade in what was going to be my favourite subject, programming. Other factors where that my mother had some issues with her sight and that lasted a few months, now she is near blind, and I missed a lot of classes. A good teacher in any subject is also essential, but anyways.., I passed into the present year but I want to learn programming languages that I find fun and interesting.
I read a quote in a YouTube video after searching for the book
@Arwin recommended. And someone said that "there is no point in learning a new programming language if it doesn't change the way you think".
By that the author's quote meant that if you know C# there is no point in learning Java because save the syntax and a few differences like Linq, the way you program is quite similar. But if you go from Java to Haskell, that's a different matter!
For me learning F# is like something I am learning with a beginner's mindset, 'cos alas I never really got into OO programming, for now..