Programming
Programming is the thing which we are going to learn from the different steps. We are not going to discuss how to become a developer or engineer. We are simply discussing how to become a Programmer. Cool, right! The first step to becoming a programmer is to learn to code but here we move one step ahead we learn to think like a programmer along with the coding. There is a lot of confusion between people to choose a programming language. My best suggestion is to don't stick to one programming language. Always try to learn more. But for the beginning, the goal is to learn enough.
Think like a Programmer using PYTHON
Here most of you have a question in mind about why we should start with Python. There are lots of Programming languages in-universe but as a beginner, you should prefer Python. This is the language that is easy to understand, easy to learn, easy to code. We are just learning, "How to think like a programmer?". We have to learn concepts like Composition, fence post problem.
These are the topics you have to cover in Python:
- Introduction
- Input/Output
- Operators
- Data Type
- Control Flow
- Functions
- Object-Oriented Programming (OOPs)
- Exception Handling
- Python Collection
- Advance Python
- OS module
- Functional Programming
- Meta-Programming
- Multi-threading
- Socket
- NumPy
- Pandas
Resources
- Code In Place Stanford University
- CS106A
- Geeks For Geeks
- Python For Everyone
- YouTube
- Python Book
- Think Like Programmer
Modern Programming in OOP design using C++
Why C++, if I learn one language why should I learn another language. Yes, you are right but most the programmer do the same mistake. They hated to learn a new programming language. But here we are trying to become a programmer but without OOPs programming is incomplete. Yes, python is also an OPP language but here we learn the more effective ways. C++ is a super-fast programming language and this is an amazing language for competitive programmers. Competitive Programming is a contest or according to Wikipedia it a among one of the major games. In this contest, programmers try to solve a problem through programming. As I started my programming journey with C++ and I just fall in love with programming this only reason was C++. Then I choose to learn Java but due to so much complexity and lengthy coding, I start hating programming. Then I got Python and my life runs smoothly.
These are the topics you have to cover in C++:
- Basics
- Basic Input / Output
- Operators
- Arrays
- Strings
- Functions
- Pointers & References
- Object-Oriented Programming (OOPs)
- Constructors & Destructors
- Exception Handling
- File Handling
- Standard Template Library (STL)
- C++ Library
- C++ Advance
- User-Defined Literal
- Placement new operator
- Advanced C++ with boost library
- Copy-and-Swap Idiom
- Zombie and Orphan Processes
- Lambda expression
- C++ | Signal Handling
- Preventing Object Copy in C++
- Command-line arguments in C++
- C++ in Competitive Programming
- Writing C/C++ code efficiently in Competitive programming
- Useful Array algorithms in C++ STL
- searching in fork()
- Data Type Ranges and their macros
- Cin-Cout vs Scanf-Printf
- getchar_unlocked() – faster input in C/C++ for Competitive Programming
- C qsort() vs C++ sort()
- Middle of three using minimum comparisons
- Check for integer overflow on multiplication
- Generating Test Cases (generate() and generate_n()
Resources
- Geeks For Geeks
- YouTube
- Introduction to C++
- Advance Programming in C++
- Crash Course Book
- Primer Book
Data Structure
A data structure is a particular way of organizing data in a computer so that it can be used effectively. It is used to store data so perfectly so that the time and space complexity of the program gets reduced or as least as it can be. This is an essential step to become a programmer. Most Programmers just get stopped after learning to program but if you want to solve the problem effectively and efficiently then you have to learn it with full attention.
These are the topics you have to learn to become a better programmer:
- Array
- Linked List
- Stack
- Queue
- Binary Tree
- Binary Search Tree
- Heap
- Hashing
- Graph
- Matrix
- Misc
- Expression Tree
- Treap (A Randomized Binary Search Tree)
- Ternary Search Tree
- Interval Tree
- Implement LRU Cache
- Sort numbers stored on different machines
- Find the k most frequent words from a file
- Given a sequence of words, print all anagrams together
- Tournament Tree (Winner Tree) and Binary Heap
- Decision Trees – Fake (Counterfeit) Coin Puzzle (12 Coin Puzzle)
- Spaghetti Stack
- Data Structure for Dictionary and Spell Checker?
- Cartesian Tree
- Cartesian Tree Sorting
- Sparse Set
- Centroid Decomposition of Tree
- Gomory-Hu Tree
- Advanced Data Structure
- Advanced Lists
- Segment Tree
- Trie
- Binary Indexed Tree:
- Suffix Array and Suffix Tree
- AVL Tree
- Splay Tree
- B Tree
- Red-Black Tree
- K Dimensional Tree
Resources
Algorithms
The algorithm is the real thing in programming through which we solve the problem. The algorithm is the way by which we solve the problem through programming or coding. The most important and last step to becoming a great programmer. The person whose algorithm skill is great is the real programmer. The algorithm is not negligible in any dimension. If you go for development or engineering this will the most essential part of your job without this computer or information or technology world is nothing.
These are the topics you have to learn in algorithms:
- Analysis of Algorithms
- Searching and Sorting
- Greedy Algorithms
- Dynamic Programming
- Pattern Searching
- String Algorithms
- Backtracking
- Divide and Conquer
- Geometric Algorithms
- Mathematical Algorithms
- Bit Algorithms
- Graph Algorithms
- Randomized Algorithms
- Branch and Bound
Resources
- Grokking Algorithms
- Grokking Artificial Intelligence Algorithms
- Book
- Algorithm Stanford University
- Geeks For Geeks
Contests
- Code Gladiators
- ICPC
- FaceBook Hacker Cup Page
- Google Hash Code
- Google Code Jam
- Google KickStart
- Code Agon
- Top Coder
System Design
Systems design is the process of defining the architecture, product design, modules, interfaces, and data for a system to satisfy specified requirements. Systems design could be seen as the application of systems theory to product development. These are the topics you have to learn:
- Fundamentals of System Design
- Introduction
- What Are Design Fundamentals?
- Client-Server Model
- Network Protocols
- Storage
- Latency And Throughput
- Caching
- Proxies
- Load Balancers
- Hashing
- Relational Databases
- Key-Value Stores
- Specialized Storage Paradigms
- Replication And Sharding
- Leader Election
- Peer-To-Peer Networks
- Polling And Streaming
- Configuration
- Rate Limiting
- Logging And Monitoring
- Publish/Subscribe Pattern
- MapReduce
- Security And HTTPS
- API Design
- System Design Architecture
- Design a Code-Developement System
- Design LeetCode
- Design a StockBroker
- Design FaceBook News Feed
- Design Google Drive
- Design Reddit API
- Design Netflix
- Design Uber API
- Design Slack
- Design Airbnb
- Design WhatsApp
- Design Discord
- Design Google Search API
- Design LearnBay.io
- Design AlgoExpert
- Design Google Calender
- Design Zoom
Resources
Practice
- HackerRank
- LeetCode
- InterviewBits
- CodeChef
- CodeForces
- HackerEarth
- Top Coder
- TCS CodeVita
- ProjectEuler+
- TechGig
NOTE: None of the above links are affiliated, sponsored, or promoted.