# Roadmap ![](https://hackmd.io/_uploads/B12t6_aGp.png) ## 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)