# Roadmap

## Timeline
Industrial experience like internships and placements are mostly done after completing the 3rd year (during summer breaks). Before applying, students should be well versed in concepts and skills like:
- Data Structure
- Algorithms (solve Leetcode questions)
- Computer science fundamentals
- Web development (Full stack like MERN)
- Extra skills (see below)
- Blockchain (niche specific, can also be AI/ML/Android/others)
### 1st Internship
- When: At the end of 3rd year (summer vacation before the start of 4th year: May-July)
- Duration: 2-3 months
- Searching: Start applying during the last semester of 3rd year (Jan-April)
- Aim: Try to get pre-placement offer or internship for next year
### 2nd Internship (until Graduation)
- When: Last semester of college i.e second semester of 4th year (Jan-July)
- Duration: 5-6 months
- Searching: Start applying during the first semester of 4th year (Aug-Dec)
- Aim: Try to get placement offer
### Placement
- By the end of 2nd internship, students usually get placed.
**NOTE**: When searching for 2nd internship, also start applying for **placements**
## Skills
### Programming Languages
These are all the programming languages that you would be learning, if you are following this roadmap.
- Java
- Javascript/Typescript
- Golang
- Bash
- Solidity
- SQL
### Extra Skills (must haves)
These extra skills are earned throughout the college life and overall career. Try to get to a decent level of proficiency in each of these before the start of **3rd year**. The key to grasp these skills is:
- Learn very basic on how to use them
- Start using them in day-to-day life
- Once gets comfortable, learn their advanced form like their complex use cases, how they work internally etc.
- Keep using them regularly (if can't use, then just go through questions on that topic)
**Skills**:
- Command line interface (CLI) fluency - using Terminal
- Bash scripting (programming language)
- Linux (using Ubuntu)
- Git and Github
- How internet works - web protocols, networking, DNS, URL etc.
- Simple web hosting solutions - Github pages, Cloudflare, Heroku
- Complex cloud computing (AWS or GCP) - Hard and optional
- 10 fingers typing (very much underrated)
### Web Development - Full Stack
Acquiring web development skills is essential for any developer and forms a fundamental part of their toolkit. It is advisable to begin learning these skills as early as the **2nd semester** of your **1st year** and aim to grasp the basics of developing full stack applications by the start of the second year.
While mastering this skill may take several years, focus on establishing a strong foundation and gaining a solid understanding of its basics as a starting point.
- Learn very simple and basic HTML, CSS, Javascript (Javascript for beginner)
- Use *scrimba.com* for learning frontend like [HTML and CSS](https://scrimba.com/learn/htmlandcss), [Javascript](https://scrimba.com/learn/learnjavascript) etc.
- Learn medium Javascript (see [Namastey Javascript by Akshay Saini](https://www.youtube.com/playlist?list=PLlasXeu85E9cQ32gLCvAvr9vNaUccPVNP))
- Learn about servers, clients, IP addresses, port-forwarding, etc.
- Learn NodeJS (follow some YouTube tutorials)
- Build and serve full-stack website using NodeJS and vanilla frontend
- Learn about REST APIs
- Add database like MongoDB to your node application
- Build chat applications with basic Frontend using web-sockets (socket.io)
- Use *scrimba.com* for the below Frontend:
- Learn ReactJS (upgrade Frontend to use ReactJS library instead of simple JS)
- Learn Frontend state managements like Redux, Context APIs etc.
- Build full stack applications (clone or some useful tools)
- Interview questions on MERN stack (MongoDB, ExpressJS, ReactJS, NodeJS)
**BONUS**: Learn chrome debugging (other chrome developer tools), testing frameworks, etc.
### Data Structures
### Algorithms
### Leetcode
### Computer Science Fundamentals
Mastering computer science fundamentals like OOPS, DBMS, OS, and Computer Networks is a long-term endeavor. These skills are essential, evolving areas in technology. Remember, learning is continuous; take thorough notes and retain this knowledge throughout your academic and professional journey. These foundational skills are vital for a successful career in computer science.
- Object Oriented Programming System (OOPS)
- Database Management System (DBMS)
- Operating System
- Computer Networks
### Blockchain
Prior to entering the professional world, it's crucial to choose your specific field of interest, such as Frontend, Backend, Blockchain, AI/ML, or Android Development. Since Web development is a recommended skill for everyone, making Backend or Frontend development a popular and accessible choice for many developers.
Here's a quick list of topics that you may choose in your Blockchain development journey:
- Blockchain basics and high level knowledge
- Decentrallized Application (DApp) Development
- Smart contracts and Solidity (learn from [CryptoZombies](https://cryptozombies.io/en/solidity))
- Integrate smart contract with frontend
- Build sample full-stack DApps (from YouTube or blogs)
- Build some useful full-stack DApp for the community
- Protocal Development
- Learn one of programming language: Golang (easy) or Rust (hard)
- Virtual Machines
- Cryptography (hard)
- Computer Networks (hard)
- Distributed Systems (hard)