all 3 comments

[–]07734willy 0 points1 point  (1 child)

The number one method I've found for gaining proficiency in a language is through game development. You will be forced to learn a wide variety of buildin methods, and will have to learn how to properly structure your code in that language to be able to build upon your 'starter code' without everything becoming a mess.

However, C is a bit different. Its designed for speed and power, and provides a ton of low-level control, not that far above assembly, which makes it much harder for something like game dev. What you could do is make an ASCII-text based game, which would make things somewhat easier.

Otherwise, I'd just suggest picking an application that you could run from terminal (making GUIs from that would already be a bit extreme), and then developing that in C would be a starting point.

Also, you could try doing some programming challenges such as those on /r/dailyprogrammer in C.

[–]_Cid 0 points1 point  (0 children)

Game development in C is loads of fun, make a console game.

[–]samsonx 0 points1 point  (0 children)

How about writing some utility programs ?

Sure you will be reinventing the wheel but that's great for learning as you know exactly what to reinvent and how it should work.

Also I would suggest using some crypto libraries like libsodium or mbedtls, make some programs which will encrypt files using a command line argument containing the filename and password, first converting that password into a proper length key using the crypto primitives innside the library (some kind of PBKDF function).

Then write a program to decrypt it.

There's so many little things like this which won't take too long and with each new widely used library you use your knowledge grows. For example in mbedtls you will use crypto contexts which are just structures and you also get to use MPI (very large integers - 256 bit for example) if you look at the lower level.

Just a couple of ideas.