If you are into challenges, do a project, something that you want or need, less useful but good nonetheless: copy something.
If you are into movies:
- A movie suggestion engine: Get data from IMDB, then input your favorite movies and movies you watched, fetch related movies with good rating that you didn't watch yet.
- Maybe a movie watchlist? A list of movies you watched and your reviews, and movies you wanna watch
If you are into books:
- Watch/Monitor amazon prices/deals. They are always changing, so write something that watches prices every hour or everyday of books in your wishlist and send you an email if there's a good deal. Or plot the prices changing overtime, so you can guess when is the best time to buy it.
If you are into cryptocurrencies:
- Learn how to extract data from blockchain. Information is public, no?
- Or monitor prices directly from the exchanges
Daily tasks automation:
- How about renaming all files in a directory? Maybe replacing all whitespaces with "-"?
- How about some image processing? Apply common filters to photos using some Python library.
If you are NOT into challenges and wanna learn the easy way, just the syntax and do nothing relevant or interesting. Online resources should be enough:
I think knowing C is essential if one wants to write high-performance code. A lot of C++ programmers don't even know the difference between stack and heap memory because all the C++ tools work well enough for most purposes without knowing such things. On the other hand, it is quite annoying having to write, say, a hash map from scratch if you're only using pure C. So I say a combination of C and C++ is the real deal.
Personally, I use Python more than any other programming language; however, it is not my favorite. My favorite is Haskell because it is, if you learn it how it ought to be learned, just monoidal category theory, which appeals to me as I am a mathematician.
RPG/400 (Report Program Generator).
If you come from a non-mainframe background (like me), it's really hard to get used to.
But once you write a few RPG programs and see them run on an AS/400, you'll wonder why you ever used any other language.
Then you realise that RPG and similar languages are only for mainframe-style machines, and then you understand why there are so many hundreds of languages for Windows/*nix/Mac personal computers.
Then you try to do on those languages what you saw in RPG.
Every time you try to imitate one aspect of RPG, everyone calls your code a work of genius.
I once came across a screen saver that was written in assembler. The guy who wrote it, wrote it originally in C, and then decided to re-write it in assembler. He wrote that it ran at about 10 times the speed of the C version, and that you could expect the same kinds of performance increases if you write anything in assembler.
But then, you're effectively writing the compiled code yourself. So you can really optimise it well, or screw it up.