Competetive Coding Resources

Where do I start learning how to code?

If you're looking to learn how to code, this is the ONLY article you will ever have to read. So bookmark this page and use it as a reference anytime you're starting out on a new topic, or want to quickly go through all the good tried and tested resources available online.

This article is for you if,

- You've decided you want to learn how to code and want to know where to start? 

- you know a bit of coding and want to find good  resources to practice and learn?

- you're an expert coder and want to have a reference to refresh your basics?

    - Offline IDE

2. Basic Learning Path
    - Learning the basics of Code
        - Variable
        - Data Types
        - Operators
        - Keywords
        - Conditionals
        - Loops
    - Learn a Language
        - Python
        - C++
        - Java
    - Data Structures
        - Basics
            - Arrays
            - Matrix
            - Linked List
        - Intermediate
            - Stacks
            - Queues
            - Trees
            - Hash Table
        - Advanced
            - Heap
            - Trie
            - Graph
    - Algorithm
        - Searching
        - Sorting

6. Coding Channels to Follow

7. Coding Books to Read

1. Getting Started : Setting up your IDE

One of the first things to when you start out coding is to set up your IDE. An IDE (Integrated Development Environment) in-short is an application where you write your code on so that you can easily read the code you've written and quickly build,run and test out your code.

However, setting up some of these IDEs can be a pain when you are starting out especially if they involve the setting up of environment variables.

So what you can do instead is use an online IDE. Thus you can begin to actually code right away without going through the hassles of setting up an IDE.

Online IDE

Following is a list of good online IDEs depending on what language you are using. Try out your code here if you find it difficult to set up the environments for different IDEs.

1. IDEone

It is one of the best online IDEs available out there that supports most of the programming languages. Its features include,

- the  ability to share your code as a link
- setting code execution time limit
- ability to enter standard input and adding notes 

2. Geeksforgeeks IDE

This IDE supports - C, C++, C++14, Java, Perl, PHP, Python, Python 3, Scala, HTML and JS. It also supports multiple file creations with toggle options.

3. CodeChef IDE

This is another good IDE that supports multiple file creations with toggle options. It supports C, C++, Java, Python, Haskel, and a whole host of other IDEs.

4. Tutorialspoint IDE

This IDE supports a lot of features. One good feature is the ability to create entire projects instead of just stand alone files. Some other features this IDE supports are -

- Allows forking projects
- You can set different themes and modify the font size to choose your taste
- show and hide line numbers
- ability to set command line execution parameters

5. OnlineGDB

This is a simple IDE that supports most of the popular programming languages along with VB, Swift, Pascal, R, and Rust.

Offline IDE

While online IDEs are good way to get started quickly, it is definitely worth the time to learn how to setup an IDE on your own computer. Here's a good article with video explanation on how to set up an IDE

The following is a list of IDEs I have personally used and a brief summary of each,


1. PyCharms

PyCharms is an amazing IDE to work with especially if you are using python. You can create full-fledged corporate level projects with easy version control. Make sure you have downloaded and installed python before you install this IDE.


2. Sublime Text

Sublime text is another really good IDE with auto-complete support for most of the popular coding languages. One really good feature is the minimized view of your code you get on the side of the editor for easy navigation through long pieces of code. Sublime is a highly customizable IDE with a well developed feature set.



Eclipse is a good IDE especially if you are building Java Applications or  Web Based Application. It also provides an IDE to run C++ and PHP programs. Another good feature is that Framework integration like Junit and TestNG and other plugins can be done easily. 


4.  Visual Studio

Visual Studio is an IDE developed by Microsoft. It supports over 30+ coding languages and allows for GUI development and other cross platform development. Some really good features of this IDE are Regex Search, Multi-item Clipboard, Incremental Search and the creation of Task-list.


5. Atom

Atom is more of a text editor than an IDE because it doesn't support some key IDE elements like source code editor and build automation. However it is so highly hack-able and customizable that it makes a good choice none the less.

2. Basic Learning Path

Now that you have your coding environment setup, its time to learn the basic elements of code. Here I have set up a 4 step learning path to cover all grounds starting from the very basics.

Learning the basics of Code

This first section covers the key concepts that are common to any programming language. These are concepts that would be used throughout your code and form the building blocks of any code.

> Variables

When writing a computer program, you need some elements to store data and hold information. Now the data being stored can change over time. Thus the elements need to be such that they can VARY as and when the data changes. Such elements are called variables. Variables are elements that can store data and can be referenced and modified throughout the code.

A variable typically has 3 components -
    1. A name
    2. A value
    3. A memory address

Now lets take a look at each of these components. As the name suggests the name of a variable is used to identify each variable. It can be anything and depending on the language you are using there are some rules on what characters or words you can use as variable names. Each variable holds some value or data. This data, is stored on the computer in the form of addressable memory blocks. In order to access the information stored in the variables we need to have the memory address of the data being stored to be able to reference and modify that data.

An example of a variable would be as follows,

                                    var_1 = 100

Here, the name of the variable is 'var_1'. This variable is holding data that indicates a value of 100. In order to be able to use the data we need the memory address of variable so that we can locate it in the computer memory.

     & var_1 = 10101011 (some memory address denoted in binary)

Note : The ampersand here denotes the memory address of the variable. The notation for 'memory address of' will be an '&' throughout its usage in this article.

For a more detailed understanding on variable here's a detailed article from Launch School that explains the concept in much depth.

> Data Types

The data stored by the variables can be of different types. A variable can store a number, some text, a character and various other forms of data. Now how does the computer come to know what type of variable is stored by which variable?

Here's where data types come in. Data types like the name suggests enable the computer to identify the TYPE of DATA being stored in different variables.

Different coding languages have different kinds of data types. For a brief overview of the data types available in python, C and java you can check out this article.

Lets take a look at some of the commonly used data types that are used in most programming languages,

    1.  Boolean

This is the simplest of all data types. A boolean type can hold only 2 values : TRUE or FALSE. Computers don't understand information like you and I. A computer understands just 2 states : 1 and 0 or ON and OFF or HIGH and LOW. This 2 state system that the computer understands is called the BINARY system. The binary system is essential the language that the computer speaks and understands.

An example of a boolean variable would be this,

        boolean var1 = TRUE

This tells the computer that, the variable named var1 is of boolean data type and hence can hold only 2 values : either TRUE or FALSE.

    2. Integer

Integer in computer science has the same meaning as it does in mathematics. An integer data type is used to stored whole numbers. It can have positive, negative or zero values but cannot be a fraction or a decimal. Depending on the coding language used, the range of values that can be stored in this data type varies.

An example of an integer data type would be,

        int var2 = 100

This tell the computer that, the variable var2 is of type int (integer) and is storing a value of 100.

    3. Character

This data type is usually used to store a single character element. This character could be an alphabet, a number, or any special character like /, &, $ and so forth.

An example of a character data type would be,

        char var3 = 'a'

This tells the computer that, the variable var3 is of type char (character) and is storing a value of 'a'. 

    4. String

The string data type is used to store text which is usually a group of characters or words separated by spaces. A string data type ends with a null character to indicate the end of a string.

An example of the string data type would be,

        String var4 = "This is a string"

This tells the computer that, the variable var4 is of type String and is holding the text "This is a string". 

    5. Float

This is similar to the integer type in the sense that this data type is also used to store numbers. It is different from the Integers data type however as it is used to store decimal numbers and call be used to store both positive and negative real numbers including integers.

An example of the Float data type would be,

        float var5 = 1.23

This tells the computer that the variable named var5 is of type Float and has a value of 1.23.

    User Defined Data Types

Apart from these 5 basic types you can create your own custom data-types to store more complex forms of data called user-defined data types. For example lets assume you want to have a data type called studentRecords to store the students' name, roll number and sex.

In order to create a data type of this type lets take for example in C, we can use a user defined data-type structure.

An example would be,

     struct studentRecord {
         int rollno;
         String name[100];
         bool sex;

This tells the computer to create a new data type of type studentRecord, that is made up of 3 fundamental data types namely integer (roll number), string (name) and boolean (sex). 

> Operators

Computer science borrows a lot of concepts from math. One such concept is operators. Operators are symbols used to process one or more variables and produce a resulting value based on the operations performed.

There are various categories of operators. Lets take a look at the three main categories of operators,

    1. Arithmetic Operators 

These are the operators that allow us to perform arithmetic with numeric values. 

For example, lets take two integer type variables a and b,

The following are the arithmetic operators we can use with them to get a desired result,

a + b (add the values of a and b) 
a - b (subtract the value of b from the value of b)
a * b (multiply the values of a and b) 
a / b (divide the value of a by the value of b and return the quotient) 
a % b (divide the value of a by the value of b and return the reminder) 

    2. Relational Operators

These operators are used to make comparison between variables. Based on the evaluated result, they return either a TRUE or a FALSE value.

some key relational operators are,

a == b : This operator is used to check if the two variables being compared are equal or not. It will return a boolean TRUE value if equal and a boolean FALSE value if not-equal.

Note : This operator should not be confused with the '=' operator, which is an assignment operator. 

a > b : The greater than symbol operator is used to check if the first value is greater than the second value. It will return a boolean TRUE value if the value of a is greater than b and a boolean FALSE value if otherwise.

a < b : The lesser than symbol operator is used to check if the first value is greater than the second value. It will return a boolean TRUE value if the value of a is lesser than b and a boolean FALSE value if otherwise.

Check out this community press link to read up on other relational operators.

    3. Logical Operators

These operators are used to get a definite result based on the combined values of both the the operands (variables) used. Lets take a look at the 3 most common logincal operators,

a && b : This is the logican AND operator, this operator return TRUE only if both a and b have a value of TRUE.

a || b : This is the logican AND operator, this operator return TRUE only if either a or b have a value of TRUE.

!a : The is the NOT operator and is used to result in the negative of the value of a. If the value of a is TRUE, the NOT operator would return a value of FALSE and vice-versa.

> Keywords

Depending on the language you are coding in there will be some words that are reserved and have some special meaning or purpose. These key-words cannot be used as variable names as they have already been reserved with special meanings.
Lets take an example of the long keyword in C. If you add this key word before the data type of int it modifies the meaning of the integer data type. The long key word is used to increase the default range of integer values from -32,768 to +32,767 to -214,743,648 to +214,743,648.

For a full list of keywords in the C language you can refer this link. 

> Conditionals

Conditionals are coding elements that we use to execute different parts of the code depending on some condition. There are two key blocks in a conditional statement : IF and ELSE.

The way we use is by specifying a condition in the IF block. If this condition gets satisfied all the code present under the IF block will get executed. IF the condition is not satisfied, the code present under the ELSE block will be executed.

For example,

    IF (a>b) :
    ELSE :

What this above piece of code tells the computer is that, if the condition that value of 'a' is greater than the value of b is satisfied, then execute the function 'function1()'. Otherwise, execute the function 'function2()'.

> Loops 

When writing code, we often times need to have a mechanism to repeat some task for a certain number of times. That is we need to put the same action in a LOOP for a certain number of times.

There are 3 key components of a loop -

The loop range : 
We need to specify the number of times a task has to be looped. In order to do this we specify a starting value and and ending value through which the loop would be run.

The exit condition :
We need to specify a condition for when the loop should end. This condition must be carefully specified so that it gets matched at-least once and at the end of the loop. Otherwise the loop might keep running infinitely and be stuck in an infinite loop state.

The increment step :
We need to specify the value by which we increment through the loop. This value is used to determine the frequency of the loop match.

There are 2 main types of loops,

    - FOR loop
    - WHILE loop
1. FOR loop

The context of a FOR loop is such : FOR every iteration of this loop till the exit condition is hit, execute the code inside the FOR loop.

An example would be as follows,

for (int i = 0 ; i < ++i)
     //code to be executed 

The above code tells the computer, to do the following :

1. Start the loop and initiate an integer variable 'i' to 0.
2. Check if the value of i is less than 10
3. If it's value is less than 10, execute the code specified inside the FOR loop block
4. Once the loop has been executed, increment the value of i by 1
5. Go on to the second iteration of the loop and repeat through steps 2 to 4 till the condition of i < 10 is no longer satisfied.

2. WHILE loop

The context of a WHILE loop is such : WHILE the condition for the loop is being matched, iterate through the loop. Exit the loop once the looping condition stops being satisfied.

An example would be as follows,

int i=0
while (i<10 font="">
     //code to be executed


It can easily be observed that the WHILE loop functions in pretty much the same way as the FOR loop.

The FOR and the WHILE loops are two ways of achieving the same end goal. The are essentially just ends to a means and can be used at your discretion.

Learn a Language

The second section delineates the importance of learning a programming language in depth. The language you code in is the key tool that you are using to solve a problem. Thus it is very important to have good command on at-least one language. In this article we will discuss the 3 most popular competitive coding languages.

1. Python 

Python is one of the most popular languages in 2020. The best part about python is its sheer easy of use. The syntax is highly intuitive and well documented. There are some fundamental differences between the Python-2 and Python-3 versions but the both versions are equally well documented. You can write short pieces of code to perform complex functions. Python also comes with a large standard library support. 

A hello world program in Python-3 would be as follows,

        print('hello world')

That's it. As is very evident, the code will print 'hello world' as output.

You can download the latest python version here.

2. C++

C++ is the language that runs most of the code in the world. It is so highly used that anyone using any application online would sure be using atleast one application built on C++. Be it the Apple OS or Windows OS, Adobe applications, or google search, C++ is used everywhere.

C++ is efficient and supports high performance. It uses Object Oriented Programming (OOP).

A hello world program in C++ would be as follows,

       using namespace std;

        int main()
         cout<<"hello world";
         return 0;

This code will also print 'hello world' on the output console. To understand this code further, please check out this article.

You can download the latest C++ version here.

3. Java

Java technology is both a programming language and a platform. It is also an Object Oriented Programming language like C++. It is also robust and high level coding language. Java can be used to develop a wide range of applications, like desktop Applications, web and mobile applications,  and robotics.

A hello world program in Java would be as follows,

       class HelloWorld {
            public state void main(String args[]){
                 System.out.println("Hello Java");

The above code prints 'hello world' on the console. To understand this code further, please check out this article.

You can download the latest Java version here.

Data Structure

Data structures are the heart and soul of competitive coding. Data structures are what we use to store and organize data so that we can effectively use them to get the desired results.

The data types we discussed in earlier sections satisfies a similar requirement and hence are rightly called as Primitive Data Structures. The are a primitive form of structuring data into organized units. In this sections we will be looking at the more sophisticated forms of storing and structuring data. 

This section has been divided into 3 parts : Basic, Intermediate and Advanced. Each of these parts comprise of different types of data-structures categorized in the order of increasing difficulty.

> Basic

1. Arrays

Arrays are the simplest data structures. They are used to store large number of similar data types. Imagine you want to store the first names of all the employees in a company. Now, you know that the first name of each individual would be a String. These names all belong to the same type and hence we can use an array to store them. The elements of an array are allocated contiguous memory locations in the computer's memory.

Array Concepts
This article explains the concepts of arrays in much detail along with the explanations of insertion and deletion operations work in an array. It also give details on how to declare an array in python.

This article gives a visual representation of how the memory allocation of arrays works in the computer memory. It also provides a basic example of how to declare an array in Java and ways of accessing the elements of an array.

A matrix in computer science is a essentially just a grid to store data in. An array is basically just a 1 dimensional (1-D) matrix. It is a row of data storing similar data.

A 2 dimensional (2-D) matrix like the name suggests, is a matrix that extends in 2 dimensions. Meaning that it is comprised of multiple rows and columns. A 2-D matrix is thus a grid of similar data being stored.

Like wise we can have multi-dimensional arrays. So a 3-D matrix would be similar to a cube with each block consisting of a data value.

In the previous section, we saw how to form a structure of data stored in contiguous memory locations, which begs the question, "How do we have a structure of data for elements that are not stored in contiguous memory locations?". Here's where linked lists come in. A linked list is a linear data structure which links its elements stored at different (non-contiguous) memory locations as separate objects.

The objects in a linked list have 2 main components - 
        - A data value (the value to be stored)
        - A link (a reference to the memory of the next element in the linked-list)

 The linked list is formed by chaining together these separate objects together using the link component. The link component in the first object points to the second, the second object points to the third and so on and so forth till the end. The link component of the last element points to itself and thereby marking the end of the linked list. The type of linked list explained above is called a singly linked list. We can have different types of linked lists like the double linked list : which has 2 link components and the circular linked list : where the link in the last element points back to the first element of the list instead of itself. 

> Intermediate 

1. Stacks

Stacks are also a form of linear DS which have a bounded order of operations. Imagine a stack of cards. Now imagine this stack of cards is kept in a box with the lid open. This would be a very good representation of the stack data structure. There are 2 main operations we might want to perform on a stack : pushing(adding) an element to the stack or removing(popping) an element from the stack. So the rule of the Stack DS is that you can only remove/add the top most element in stack. Which makes sense, for example in the box containing the stack of cards, if we wish to remove the bottom-most card in the stack, we will have to remove all the other cards on top of that card before we are able to remove the bottom-most card.

The key concept to remember in Stacks is that they follow, Last In First Out (LIFO). What this means, is that the element that was added the last, would be the first to be removed in the order of operations.

Here's a link that shows how to code a stack in C,C++, python, java and C#.

2. Queues

A queue is also a linear data structure like stacks. The only distiguish here is that queues follow the First In First Out (FIFO) principle. Imagine you are waiting in a long queue to get ice-cream. Now the person who's at the front most of the queue would get the ice-cream first and then the second in line and then so on. The person who is last in line will get their ice-cream last. This is the exact same order of operations that the queue follows. The element that was pushed in first would be the first to be popped out.

Here's a link that shows how to code a stack in C,C++, python, java and C#.

Treees are non-linear or heirarchial data structures. In order to understand how the try structure works, imagine you wish to store information about your family-tree, including the relationships between each family member starting with your great-grand father. Consider each person in your family tree as a node. imagine your great-grandfather had 2 children, one of them being your mother. Now imagine your mother has 2 children as well. So keeping this information in mind we will popluate the tree data structure. Your grandfather would be the root node as he is where the family is originating from. There would be 2 nodes drawing down from the root node for your mother and her sister. From your mothers level, there will be 2 further nodes being derived as she too has 2 children. This is how a basic tree DS looks like.

In trees a Binary Tree, is a special kind of tree that can have atmost 2 child nodes.

Here's a link that explains the tree data structure in much detail.
Here's a link that shows how to code a binary tree in C, C#, python and java. 

A hash table is a data structure that is used to perform quick look-up of stored data based on key value pairs. The hash table supports quick information look-up by grouping together similar values under a group.

In order to understand hashing, lets take an example. Suppose you want to count the number of times each alphabet occurs in a given sentence. How do we do this using a hash map? Now a key concept of the hash table data structure is the hash function. The hashing function is the function that decides to which key each value is mapped to.

Coming back to our example of counting the number of each type of alphabet in a sentence, we know that there are 26 alphabets in the english language. so we create a hash table with 26 key indices each set to a value of 0. These 26 key indices represent the 26 alphabets in english. Their initialized value of 0 signifies the count of each alphabet at the starting of the hashing process.

Now as we parse through the sentence charachter by c harachter we will consider each charachter 1 at a time. Imagine the sentence to be 'a ball and a cat'. When we try to store this sentence in a hash table, as we parse through the sentence, we see that the first charachter is 'a'. When the computer sees this, it immidiately increments the value of the key index at the first position to 1, indicating that the number of times 'a' has occured in the string is 1.
Next we parse through the string again and find that the second charahter is 'b'. Hence we increment the value of the key index at position 2 to 1, indicating that the character 'b' has occured once so far.

As we parse further the we see that the third character is again an 'a'. Since this is the second occurance of the alphabet 'a', we increment the value of the key index at the first position to 2 : as 'a' has occured 2 times in the sentence so far.

And like wise will parse through the rest of the string as well giving us a count of the no. of times each alphabet has occurred in the sentence. So if we wish to see the number of times 't' occurs in the sentence, we simply have to go to the key index in the hash table corresponding to 't' and get its value.

Here's an article that tells you how to code the above mentioned solution in C++, python, java, C# and PHP.

> Advanced

A heap is a special type of binary tree that satisfies a special property called the heap property.

Based on the heap property there can be two kinds of heaps : Min Heap and Max Heap.

The heap property is as follows for each :

Min Heap : The value of each node is greater than or equal to the value of its parent with the root having the smallest property. The same property must be true for all sub-trees.

Max Heap : The value of each node is less than or equal to the value of the parent. The greatest value is at the root. The same property must be true for all sub-trees.

Here's a good article on medium that explains heaps in much detail. 

This article explains the operations on a binary heap and its array implementation. 

Here's an article that tells you how to code a heap in C++ and python.

2. Trie 

Trie is a tree like data structure, the provides the primary functionality of retrieving data quickly. The name trie itself comes from the word 're-trie-val'. A popular usage of tries would be in the case of online dictionaries. We know that the words in the dictionary are ordered alphabetically. Let's now take at the logic that tries use to quickly retrieve words based on your keyword search. Similar to a tree, a trie can also stores information in nodes. In the case of a dictionary we will use a trie with each node containing a single alphabet. The root node of the trie would be the first letter of your search keyword. Assume that the word you are searching for is 'prey'. So the trie for this will have information stored such that the root node is 'p'. Now there are a lot of words starting with 'p' in the dictionary. All those words would be a part of the trie as sub-tries. Next, if the second character 'r' is typed in. Now in the trie we will move down the trie to the sub-trie containing 'r'. This reduces the search to words starting with 'pr'. As the third character is entered it moves down the trie to 'e' so we are now looking only at words starting with 'pre' until the final alphabet is entered and we get the word 'prey'.

Here's an article that tells you how to code a trie in C, C++, python, java and C#.

3. Graph

A graph is a non-linear data structure that comprises of two major components : A bunch of data containing object nodes called vertices and the lines of relationship between them called as edges. 

Graphs are used to solve problems involving paths and relations. Let's take an example and understand this further. Imagine there is a sales man who has 5 houses to sell his products to. Now these 5 houses are in 5 different cities. What would be the the shortest path that the salesman can follow such that the he visits all the houses with the shortest distance being traveled?  This example in particular is a popular concept called the traveling salesman problem. In order to find the solution to this problem, we use graphs and a graph traversal algorithm like BFS or DFS to look for the shortest path.

Here's an article that tells you how to code a graph in C, C++, C#, python and java.


Algorithms are methodologies or techniques with definite and well defined steps that can be applied to transmute that data into the desired output. There are different kinds of algorithms that are frequently used to solve problems. In this section we look at some of the most common types of algorithms.

> Searching Algorithms

A basic function that we need in everyday life is the ability to search for a particular element stored in any data structure. There are various ways of doing this search with the algorithms varying in their time and space complexity. Here's a list of some common searching algorithms :

1. Linear Search  
2. Binary Search
3. Jump Search
4. Interpolation Search
5. Exponential Search

> Sorting algorithms

Sorting algorithms, like the name suggests are used to sort the data into a meaningful order like ascending or descending order. In coding we often need to solve problems where we need to sort the data in order to be able to perform further operations on them. That is where sorting algorithms come in. Here's a list of some of the popular sorting algorithms :

1. Bubble Sort
2. Insertions Sort
3. Selection Sort
4. Merge Sort
5. Heap Sort
6. Quick Sort 
7. Shell Sort 

Websites to Practice Coding 

1. TopCoder

TopCoder is like the old-school classics of websites to practice competitive coding on. Some of the worlds best competitive coders like Gennady Korotkevich also use this platform. It has a very good set of problems that are constantly updated from time to time.

An interesting feature is the Single Match Round (SMR) that it offers, where you can compete in a live arena against another coder.
It holds an event called TopCoder Open every year. This competition is sponsored by the top companies in the software world such as Google, Facebook, etc. 

Topcoder uses a rating system to rank its coders. It also offers a platform to connect the best coders in the world to the business willing to hire them.

HackerRank is another great platform to practice on. It has subject-wise question sets for a whole host of topics like, C, C++, Linux Shell, Mathematics and Statistics.

HackerRank offers learning paths like the 'Interview Preparation Kit', '10 Days of Javascript' and '30 Days of Code'. It also offers a hiring portal for business to connect coders to jobs. 

Codeshef is a really good website to practice coding on with problem sets divided into easy, medium and hard. Monthly Cook-offs are conducted which are basically coding contests that allow you to see how you fare against the other top coders competing in the contests.

Hacker Earth is a competitive coding platform that I personally like, especially because of the 'Live Events' functionality it provides. It displays a list of all the coding events, hackathons and hiring challenges taking place at that moment and the ones that are upcoming soon.

A good learning feature in HackerEarth is CodeMonk v2.0 that offers a list of programming topics organized in order of increasing difficulty with checkpoints to track progress. It also offers learning paths in topics like Math and Machine Learning.

Geeksforgeeks is an amazing platform to learn from if you practicing for a job interview. It has an amazing list of questions that are categories specifically by company as well as topics. The explanations for each question is in-depth and well written.

It has a strong community and one good part of the forum is the interview experience articles, where people share their interview experiences in top companies. These articles are well articulated and share from a personal standpoint the experience of interviewing for top software companies.

Courses on Coding

There are lot of online course available that can teach you how to code in much details some of them for free. Here's a list of some good courses on the various online learning platforms.

> FreeCodeCamp 

Like the name suggests, FreeCodeCamp offers free tutorials and certification on a lot of coding topics like, 'Javascript algorithms and data structures', 'Coding interview prep', etc.

> Code Acedemy

1. Learn How to Code
2. Learn C++
3. Linear Data Structures 

> Skill Share

1.Coding for Beginners: You can code! 
2. Programming with Python: Hands-On Introduction for Beginners

Coding Blogs

A blog will give you insight into a singular individuals journey into coding. Following a blog will allow you to develop and understand your own approach to things by looking at and learning from other peoples approaches to solving problems.

Here's a list of coding blogs that I follow,

1. Learn to code with me


3. Coding Horror

Coding Channels to Follow

Some of us learn better visually. There is a plethora of amazing coding channels on YouTube, here are a few you might find interesting or worth a follow,

1. Coding Train : codingtrain channel

2. Siraj Rawal : SirajRawal channel

Coding Books to Read

Books are the fundamentals of learning. There are some books that are considered essential for becoming an expert in coding. Here's a list of some essential books to read,

1. Cracking the Coding Interview

Source - 

Cracking the coding Interview is a masterpiece by Gayle Laakmann McDowell, who's herself worked for software giants like Apple, Google and Microsoft as a software engineer. The book contains over 180 programming questions asked in real interviews. The book also contains 5 proven strategies to tackle algorithmic question that can be applied to solve almost all problems asked in an interview.

2. Computer Science with C++


Source -

These 2 books written by Sumita Arora are enough to give you a strong foundation in C++ concepts. The book contains in much detail, key C++ concepts, coding data structure in C++ and implementing different algorithms in C++.


Post a Comment