Towards C and C++
Tags: codenewbie, beginners, cpp
Published: 2021-07-22 06:02:52

Hi :wave:

This blog is a guide to those who want to jump into the coding world. Of course, C and C++ are not necessarily the starting point if you want to understand the world of coding. However, this journey is oriented according to what I wish I knew when I became an Undergrad in India.

## A Guide to the Guide

This blog will begin with how to understand and efficiently write better code, and has two paths for it. The C Language is more "Variable" Oriented, while C++ is Object Oriented. The Languages are closely linked though, and a newbie will face no problem in transitioning between the two, provided their projects are of a newbie level.

It will then move towards the aspect of Competitive Programming, since it is similar to what a typical Undergrad syllabus holds. Data Structures and Algorithms are really handy to understand the languages, and can lead towards other options. Again, not a necessity but a popular choice.

## Learning C and C++

**Books** would generally be considered a good source to not only learn but as a documentation of ideas and questions also. I would recommend these books by Deitel Publications, as they are really easy to understand and reader friendly, although a bit long winded at occasions.

* [C How To Program](https://1lib.in/book/3430477/7d2732) has really great back exercises. I would recommend to try to reach the 7th Chapter which is about Pointers, a really important part of C. It also has strings and DSA as further discussions.
* [C++ How To Program](https://1lib.in/book/1184372/8b27bc) has a really comprehensive idea about classes and OOPS. Nothing is really skippable in this book to get *really* good in C++, but Chapter 22 should be the end point for a passionate programmer. The exercises might not be too big of a deal though.

Still other book recommendations can be found [here](https://github.com/SrijanSriv/references/blob/master/Readmes/CAndCpp.md#books). These are a basis of changing perspective, and have more or less the same knowledge to grant (maybe quicker but not as solid, the tradeoff depends on the reader).

---
**Videos** would also be considered a great source of knowledge. Here are some.

* [CodeWithHarry](https://www.youtube.com/results?search_query=codewithharry+c+and+c%2B%2B) would probably be the most recommended YouTube channel ever. It has a bunch of videos, from hour long crash courses to playlists full of deep knowledge. You can choose based on your requirement.
* [Neso Academy](https://www.youtube.com/results?search_query=neso+academy+c+and+c%2B%2B) also comes to mind. They mostly have longer but intuitive playlists.

There might not be such complete tutorials like those mentioned above, but if I feel something could be added, [this](https://github.com/SrijanSriv/references/blob/master/Readmes/CAndCpp.md#videos) would contain a reference to them.

---
**Websites** for learning the basics may not be really up for the hype, other than those that branch into DSA as mentioned later. Still, [RosettaCode](http://rosettacode.org/wiki/Category:Programming_Tasks) is a great website to practice efficient coding, since their problems are more lengthy rather than tricky, ideal for new coders. You can cherry pick anything, from the famous [Towers of Hanoi](http://rosettacode.org/wiki/Towers_of_Hanoi) to the basic [100 Doors](http://rosettacode.org/wiki/100_doors). I can surely provide places to check references of functions and headers [here](https://github.com/SrijanSriv/references/blob/master/Readmes/CAndCpp.md#websites).

## Competing Under C and C++

As one learns C/C++, undergrads are usually channeled towards the idea of Data Structures and Algorithms. These can basically be considered efficient and clever ways of handling information, be it just numbers. 

The **books** for this are hence really not a very well versed and established, but there are some like the [Guide to Competitive Programming](https://1lib.in/book/5689722/5c0d1a). It can be studied completely.

---
The **video** aspect of it is really dependent on a particular concept. Other than the C/C++ videos already linked, you can check [here](https://github.com/SrijanSriv/references/blob/master/Readmes/CAndCpp.md#videos) for sure.

---
However, **websites** are where the best content is. You can join sites like:
* [Hackerrank](https://www.hackerrank.com/)
* [GeekforGeeks](https://www.geeksforgeeks.org/)
* and explore the questions at [CSES](https://cses.fi/problemset/)

Some really neat documentation include a [list](https://www.geeksforgeeks.org/fundamentals-of-algorithms/) of algos and a [collection](https://www.codechef.com/certification/data-structures-and-algorithms/prepare) of DSA by CodeChef.

Which leads to the part of Competitive sites. These host regular competitions and are essentially the heart of Competitive Coding. Other than [CodeChef](https://www.codechef.com), there are sites like:
* [Codeforces](https://codeforces.com/)
* [AtCoder](https://atcoder.jp/)
* [HackerEarth](https://www.hackerearth.com/)
* [LeetCode](https://leetcode.com/)

 One can simply register and compete in their bracket with timed and rated contests.

---
**Development** could be considered the ultimate goal of learning to code. From OS to Game Engines, they use C/C++ in some way or the other. It might need a whole blog for itself though, branching into other languages as well.

Maybe soon :eyes: