>>11546974>well I have been told that, to become a good programmer, I need good foundations with Algorithms and Data structures.True, but learning "Algorithms and Data structures" for the sake of it, in my honest opinion, doesn't serve much purpose. You get to understand various aspects of it (which is necessary, of course), but it doesn't map to real-world applications that well.
I'd suggest learning some simple high-level language like Python in parallel with C, just to get a feeling for what those "data structures" actually represent. Python has a lot of built in data-structures that are fairly well-accepted in general software engineering practice ("lists" aka arrays, "tuples" aka immutable arrays, "dicts" aka maps and so on). Doing C on the side will allow you to gain greater perspective on why are those "simple" constructs so powerful and expressive, and will give you a framework for when you actually start writing C code, so you don't (badly) reinvent everything from scratch.
Of course, reinventing everything is necessary for true understanding, but reinventing from SCRATCH, without watching all the current progress, is just an exercise in futility. People have spend decades researching those exact topics, and learning those might save you an enormous amount of otherwise wasteful effort.
TL;DR
While learning C, get a taste of other languages:
>Pythonfor general useful ideas about easy-to-use useful data structures
>javascriptjust to get a feeling on why event loops are useful and how they work in practice
>C++to give you perspective on how powerful metaprogramming (aka compile-time code generation by an algorithm) can be
>Goto give you an idea of how old programming practices are not the-end-of-all, and how some hacky stuff can become really useful in practice (for example, goroutines are a perfect example of hacky shit that works really well)
---
Or just learn LISP instead of all that. Every good programming practice started with LISP, anyway.