.
675 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # exploring
2 | ---
3 |
4 | This guide was made as a part of my own explorations and curiosities in Computer Science. I used to ask my college seniors, _"What should I do in these 4 years to make them memorable?!"_, _"How do I get a taste of everything?"_. Well, there never was a satisfactory answer and when my turn came to answer these questions, inevitably, neither could I provide the same. This is because the answer is too subjective and we are to lazy to jump into the specifics. This repository is just **one of the approaches to the aforementioned question**. I hope this helps you, the reader, in some way or the other! :)
5 |
6 | I am making this guide **without any purpose of self-profit**. This is to help the future generations of this branch as well as anyone who ever wants to learn! I intend to add various disciplines and their resources with the help of others and then maybe add some _"not-so-useful"_ stuff too in the future.
7 |
8 | I will try to make this README more helpful and informative in the future, and maybe add links to the specific portions of the guide here itself. As of now, this guide only mentions the various CS fields, though, I plan on adding some specifics such as some historic references about CS, trusted guides to programming languages, mastering tools such as Git and.. thats all I can think of right now.
9 |
10 | The guide is located in the `guide.md` file.
11 |
12 | Also, when adding things, please keep the formatting consistent! It will be of great help to me! Keep the information added discrete and not too descriptive.
13 | PS: Please suggest a more apt and crisp name for this repository and its description ;)
14 |
--------------------------------------------------------------------------------
/guide.md:
--------------------------------------------------------------------------------
1 | ### Table of Content
2 | -------------------------------
3 | * [Introduction to CS](#introduction-to-cs)
4 | * [Contributing to Open Source](#contributing-to-open-source)
5 | * [Coding](#coding)
6 | * [C++](#c)
7 | * [Basics to Advanced](#basics-to-advanced)
8 | * [Misc Resources](#misc-resources)
9 | * [Other programming tools and concepts](#other-programming-tools-and-concepts)
10 | * [Cryptography](#cryptography)
11 | * [Computer and Wireless Networks](#computer-and-wireless-networks)
12 | * [High Performance Computing](#high-performance-computing)
13 | * [Quantum Computing](#quantum-computing)
14 | * [Computer Architecture](#computer-architecture)
15 | * [Operating Systems](#operating-systems)
16 | * [Competitive Coding](#competitive-coding)
17 | * [ML/DL](#mldl)
18 | * [Linear Algebra](#linear-algebra)
19 | * [Probability](#probability)
20 | * [Computer Vision](#computer-vision)
21 | * [Natural Language Processing (NLP)](#natural-language-processing-nlp)
22 | * [Reinforcement Learning (RL)](#reinforcement-learning-rl)
23 | * [Implementation](#implementation)
24 | * [General Resources for DL](#general-resources-for-dl)
25 | * [Mobile Development](#mobile-development)
26 | * [Android Resources](#android-resources)
27 | * [Flutter Resources](#flutter-resources)
28 | * [Game Development](#game-development)
29 | * [When you want to make a game](#when-you-want-to-make-a-game)
30 | * [Engines](#engines)
31 | * [Guides](#guides)
32 | * [When you want to learn the in and out of a typical game](#when-you-want-to-learn-the-in-and-out-of-a-typical-game)
33 | * [Making Game Engine](#making-game-engine)
34 | * [Graphic Programming](#graphic-programming)
35 | * [Misc](#misc)
36 | * [Information Security (InfoSec) / Hacking](#information-security-infosec--hacking)
37 | * [How to get into Hacking](#how-to-get-into-hacking)
38 | * [Exploits and pwning](#exploits-and-pwning)
39 | * [Web Security](#web-security)
40 | * [Web Development](#web-development)
41 | ### Introduction to CS
42 | -------------------------------
43 | This section contains the starter pack to understanding Computer Science.
44 | One obviously needs an introduction to the field before picking up an interest.
45 | Sometimes it takes people an year of exploration before they can pick a field of
46 | their choice and it is genuine because everything seems to be gold at the start,
47 | right? I am putting so much emphasis on this section because this may be the most
48 | crucial part of this whole journey, _trying to pick something to work upon_.
49 |
50 | - **[Map of Computer Science](https://youtu.be/SzJ46YA_RaA)**: A detailed video(sort of?) on CS and its disciplines. A must watch
51 | - **[Harvard's CS50](https://www.youtube.com/playlist?list=PLhQjrBD2T382VRUw5ZpSxQSFrxMOdFObl)**: A really good and highly recommended course on introduction to CS. It also provides a hands-on experience to the student.
52 |
53 |
54 | ### Contributing to Open Source
55 | -------------------------------
56 | The phrase you hear the most after coming to IITR is '1 cr ka package pakka' followed by 'Open source mein contribute kar!(*Tr:* Contribute to Open Source!!). So what exactly is Open Source? How to get started in Open Source? You may find tons of definitions online, but here is a ~concise~ and _maybe_ easy to understand version.
57 |
58 | - **Open Source code** is a piece of code/program/application whose code is available online for free. This means that the code is free to use and modify(though there may be certain extra constraints as well which depend on the licence used by the code).
59 |
60 | - Such programs may be developed by a person(s) or organization(s) and is maintained by a community of people who find the software interesting or worth contributing to. Some examples of tools/software falling in the open source category are: Git, Linux, VLC, OpenOffice, dia, etc.
61 |
62 | - Now, the main question is, **How to contribute to Open Source???!!** Mind you, this is a very subjective answer and may vary from person to person, but here it goes. _Generally_, Opn Source communities are very friendly to newcomers and help an enthusiastic learner a lot in getting started with contributions. Many organisations have a `Contributing` or `MyFirstContribution` type of guides which guide a newbie in getting around the code and provide an overview of the contribution process and what counts as contribution and how to start. Here is [Git's](https://github.com/git/git/blob/master/Documentation/MyFirstContribution.txt) guide. Many communities have a slack channel too for communication.
63 |
64 | - **How do I choose an organisation?!** The answer is well _not so simple_. It is totally upto someone which organisation does one have to choose to contribute to. Generally, it depends on which programming language interests you and what are **your** interests. For instance if someone has interests in networks and communication protocols and the like, they _may_ like OpenSSL. It is not necessary to contribute to a big shot organisation for starters. Some known names in Open source whose codebases are well-maintained are:
65 | - OpenSSL
66 | - Git
67 | - CGAL(Computational Geometry and Algorithms Library)
68 | - Kubernetes
69 | - tensorflow
70 | - boost
71 | - OpenCV, to name a few..
72 |
73 |
74 | Also, one can look at the Google Summer of Code Organizations page. I am advising this because it has a ton of organisations, using different types of languages and tools, all at one place.
75 |
76 | - **Why contribute to Open Source?** Because, you get to learn tons of new things! Such organisations have a codebase which spans millions of lines hence this aids in increasing one's capability to connect the dots in a large codebase(which two functions and classes are related to each other etc.) Open source orgs have a **NO bullshit policy**, meaning they don't tolerate people who don't want to learn and are just depending on others to write their code. They are very nitpicky meaning they look at the smallest of the errors possible, ranging from using tabs instead of spaces, to a ill-formed commit message. They provide a genuine opportunity to someone to grow.
77 |
78 | - Though this is not _exactly_ related to open source, but my advice to the reader would be that they try answering to people's questions on StackOverlfow and Reddit because these websites too have a no-bullshit policy and if you try to mess around with them you get downvoted to hell.
79 |
80 | I hope this helps you :)
81 |
82 | ### Coding
83 | -------------------------------
84 |
85 | ### C++
86 | #### Basics to Advanced
87 | - Accelerated C++ by Andrew Koenig: Effective for students starting with C++
88 | - A tour of C++ by Bjarne Stroustrup: Effective for those who wants to revisit C++
89 | - Effective Modern C++ by Scott Meyers: A medium difficulty book expecting a decent grasp over C++. Explains the key features of modern C++.
90 | - C++ Template Metaprogramming by Aleksey Gurtovoy: An advanced book for enthusiasts who wishes to play with type traits and compile time optimizations.
91 | - Modern C++ design by Andrei Alexandrescu: An advanced book for enthusiasts who wants to build massive C++ libraries and wants a standard to help them build.
92 | - Concurrency in Action by Anthony D. Williams: An advanced book for enthusiasts who wants to use the multithreading features introduced in C++11.
93 |
94 | #### Misc Resources
95 | - **[Cherno's C++ series](https://www.youtube.com/watch?v=18c3MTX0PK0&list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb):** Really useful if you're starting with C++.
96 | - **[C++ Annotations](http://www.icce.rug.nl/documents/cplusplus/cplusplus.html):** Can be considered as a manual for C++.
97 |
98 | ### Other programming tools and concepts
99 | - **Free books on goalkicker:** This website contains free reference books on programming languages (such as C, C++, Ruby, Java, etc.), tools such as Git, Powershell and frameworks such as ReactJS, .NET, AngularJS, etc.). Totally worth checking out!
100 |
101 | ### Cryptography
102 | -------------------------------
103 | - **Art of the Problem**: YT Channel
104 | - **[John Hammond](https://www.youtube.com/channel/UCVeW9qkBjo3zosnqUbG7CFw)**: YT Channel
105 | - **Practicing**
106 | - **[Cryptopals]**(https://cryptopals.com/): It is a great website to do challenges on cryptography. The challenges start with some basic string manipulation tasks, but after that they are grouped by theme. In most cases, you first implement something, then break it in several enlightening ways.This is a different way to learn about crypto than taking a class or reading a book.
107 | - **[CryptoHack]**(https://cryptohack.org/): Another fun platform to learn crypto.
108 | - Doing some CTF challenges is also helpful.
109 | - **Courses**
110 | - **[Introduction to cryptography](https://www.youtube.com/watch?v=2aHkqB2-46k)** by Christof Paar
111 | - **Learn Crypto**: Free course on Coursera by Dan Boneh
112 | - **crypto101.io**: Free crypto manual and course
113 |
114 |
115 | ### Computer and Wireless Networks
116 | -------------------------------
117 | - **Computer Networks: A Top-down approach; Kurose & Ross**: A must read book on Computer networks.
118 | - **[NPTEL course on Computer Networks](https://nptel.ac.in/courses/106105081/#) by Prof. Sujoy Ghosh**: A good and detailed course on computer networks.
119 | - **Video** on [Network Coding](https://youtu.be/B0ZcAWEvjCA) and [MIMO](https://youtu.be/cbD4NsZQKYw) **by Art of the Problem**.
120 | - **A glossary of terms used in Telecommunication:** [TelecomABC](http://www.telecomabc.com/)
121 | - **Communication Systems by Linköping University:** A good [channel](https://www.youtube.com/channel/UCOrjRoYJPqGiR1SZvU3xcYQ) I just came across which explains key cellular network concepts.
122 | - **alantalkstech:** Another youtube [channel](https://www.youtube.com/user/alantalkstech)which explains networks concepts _(this may be a bit high level and obsolete (the videos date back to late 2000s so proceed with caution)_.
123 | - **Introductory video on 5G:** A good introductory [video](https://youtu.be/GEx_d0SjvS0) by IEEE on 5G technologies.
124 | - **edX course on 4G:** [Here](https://www.edx.org/course/4g-network-essentials) is the course.
125 | - [Telecome Networking](http://www.eventhelix.com/RealtimeMantra/#Telecom_Networking)
126 | - A good **blog** on [Massive MIMO](https://ma-mimo.ellintech.se/what-is-massive-mimo/)
127 | - To further explore modern cellular networks, reading research papers would be a good start.
128 |
129 | I will be creating a Google Drive link to host variouos books, videos and research papers that I have found. Need some free time for that :)
130 |
131 |
132 | ### High Performance Computing
133 | -------------------------------
134 | - **[ACM IITR's Guide to HPC](https://medium.com/@acmiitr/guide-to-high-performance-computing-b2d9c9a2f77e)**
135 |
136 |
137 | ### Quantum Computing
138 | -------------------------------
139 | **Blog by ACM IITR:** This [blog](https://medium.com/@acmiitr/guide-to-quantum-computing-d9249d400e2) provides a good starter pack on QC.
140 |
141 |
142 | ### Computer Architecture
143 | -------------------------------
144 | This deals with the design of computers, and how their are architected. Really cool if you like knowing how stuff works and so on. [MIT's 6.004](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-004-computation-structures-spring-2017/) is a great place to start.
145 |
146 |
147 | ### Operating Systems
148 | -------------------------------
149 | Super tough and super rewarding if you get it right.
150 | There are different things that one may look for when trying to learn operating systems:
151 | * How to use operating systems: This deals with the interfaces they provide and a good book on this is [The Linux Programming Interface](http://man7.org/tlpi/). It deals with the features that linux provides to the user at the basic level. Really helpful to understand the interfaces that operating systems provide.
152 | * Operating system concepts: This deals with abstract ideas of how operating systems work, their policies and mechanisms, and their role in a computer system. A computer science undergraduate would typically learn this in one of his courses. An excellent book to start off would be [Three Easy Pieces](http://pages.cs.wisc.edu/~remzi/OSTEP/). Try to read Professor Andrew S. Tanenbaum's books as well (He made Minix).
153 | * Operating system development: This deals with making an operating system/components of it. It is arguably the toughest task in Computer Engineering. Doing this is HARD! A good place to start would be the [OsDev wiki](wiki.osdev.org).
154 |
155 |
156 | ### Competitive Coding
157 | -------------------------------
158 |
159 | To start with Competitive Programming there are a few prerequisites. It is highly advisable to first start with these basics(if you have not yet done so) and only then move forward. These include:
160 | • Get familiar with at least one programming language. C++ is highly advisable followed by python. Though you may choose any other language too.
161 | • Understand the needs and implementations of different data structures in the language. For example, in C++ checkout the STL, vectors, maps, sets, lists, stacks, queues etc.
162 |
163 | After this, you should start with the basic problems, the ones having higher acceptance ratio or the ones with many correct submissions, and then move on to tougher problems slowly. It is very necessary to find the best approach for the problem. Don’t get a habit to just submit a working code and then move on to the next problem. Try to analyse your solution and enhance its time and space complexities. Also try to implement any pre-existing algorithm and do not just find brute-force solutions.
164 |
165 | To learn new algorithms, the ‘Introduction to Algorithms by CLRS’ is a very good book. Read the topics that you are willing to learn or need to learn, completely. Try not to skip sub-sections from it and clear any doubts you have. Another source can be http://cp-algorithms.com/. It is a good collection of several important algorithms and their pseudo-code implementations.
166 |
167 | Also, try to focus on one topic at a time in the beginning. For example, if you read about Dynamic Programming, try to solve a few problems on it to get a better understanding of the topic, before moving further. You can read about its different variations and what are its main uses on the go.
168 |
169 | Do not neglect some topics that you consider are trivial. If you have not read the topics formally but have rough ideas about it, you should at least give it a reading. For example, you may have some ideas about Number Theory or Game Theory, but might not know some theorems relating to it, which are in general quite useful. Nevertheless, this can be skipped if you feel confident about the topic.
170 |
171 | The platforms that are highly advisable include:
172 | • Codeforces
173 | • Spoj
174 | • Hackerrank
175 | • Codechef
176 |
177 | In the beginning focus on learning concepts and not improving your contest ratings. This is very helpful and in fact necessary. If you have weak concepts, it may create a huge problem in the longer run. Refrain from focusing on quantity of knowledge over quality.
178 |
179 | These are just a few things to keep in mind as a beginner. You will be able to figure out other things as you move on. All the best! Cheers.
180 |
181 |
182 |
183 |
184 | ### ML/DL
185 | -------------------------------
186 | To start with Deep learning first, you will need to brush off some basic Machine Learning skills. You can do any of the below to get a basic idea about Machine Learning
187 | - **[Machine Learning Coursera](https://www.coursera.org/learn/machine-learning)**: The most popular course on Machine Learning. It explains most of the basic concepts in ML in an easy manner. Highly recommended. Cons - It might come off as a bit boring.
188 | - **[UD120 - Udacity Intro to ML](https://www.udacity.com/course/intro-to-machine-learning--ud120)**: If you find the Coursera ML course boring, try this one. It's illustrative, fast-paced and more implementation focused. Cons- A bit less comprehensive than the Coursera ML course.
189 | - **[Machine Learning Stanford CS229](https://www.youtube.com/watch?v=jGwO_UgTS7I&list=PLoROMvodv4rMiGQp3WXShtMGgzqpfVfbU)**: This is a fairly advanced course on ML. Highly comprehensive, great for a deep-dive into ML fundamentals. Recommended only if you want an advanced knowledge in ML.
190 |
191 | The above courses will give you a brief introduction to ML. After this to begin with DL, we highly suggest reading **[Neural Networks and Deep Learning](http://neuralnetworksanddeeplearning.com/)**. It gives a highly intuitive beginner level introduction to DL. After this it's suggested to do the **[Deep Learning Specialization by Coursera](https://www.coursera.org/specializations/deep-learning)**. A general recommendation would be to read the **[Deep Learning Book by Goodfellow et al.](https://www.deeplearningbook.org/)**. It is the so-called "Bible" of DL and a highly recommended read.
192 |
193 | Now for more advanced knowledge, there is a lot you can do, and honestly, you can never do enough. The field is growing at a mind-numbing rate and its tough to keep track of all the stuff going on. Still here are a few "standard" advanced level things to do:
194 | #### Linear Algebra
195 | - **[Essence of Linear Algebra 3B1B](https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab)**: Do yourself a favour and watch this awesome piece of art. It's the most aesthetically pleasing way Linear Algebra has ever been taught.
196 | - **[Linear Algebra Review and Reference CS229](http://cs229.stanford.edu/section/cs229-linalg.pdf)**: A crisp and easy to understand explanation of the concepts of Linear Algebra you will need in Deep Learning.
197 | - **[MIT OCW 18.06 Linear Algebra](https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/video-lectures/)**: Recommended if you want to deep dive into Linear Algebra. Will teach you pretty much everything you'll ever need in DL. PS. It helps a lot in Quantum Computing as well :P
198 |
199 | #### Probability
200 | - **[Stanford Probability Stat110](https://projects.iq.harvard.edu/stat110/home)**: If you think that probability is only limited to Bayes Rule, watch this and have your mind-blown as the instructor derives results to highly complex problems seemingly out of nowhere leaving you awestruck.
201 |
202 | #### Computer Vision
203 | - **[Stanford Computer Vision CS231n](https://www.youtube.com/playlist?list=PLkt2uSq6rBVctENoVBg1TpCC7OQi31AlC)**: The defacto choice to dive deep into Computer Vision. We'll recommend doing the first seven lectures from the 2016 version and then continuing off to recent year versions for other recent topics.
204 |
205 | #### Natural Language Processing (NLP)
206 | - **[Stanford NLP course CS224n](http://web.stanford.edu/class/cs224n/)**: The defacto choice to dive deep into NLP.
207 |
208 | #### Reinforcement Learning (RL)
209 | - **[RL course by David Silver](https://www.youtube.com/watch?v=2pWv7GOvuf0&list=PLqYmG7hTraZDM-OYHWgPebj2MfCFzFObQ)**: RL course by DeepMind the leading organization in the field. Awesome for an easy introduction to the field.
210 | - **[RL course by UC Berkley](http://rail.eecs.berkeley.edu/deeprlcourse/)**: A relatively more advanced and comprehensive introduction to RL.
211 | - **[Reinforcement Learning: An Introduction](http://incompleteideas.net/book/the-book-2nd.html)**: The Bible of RL. Super comprehensive and highly recommended.
212 |
213 | #### Implementation
214 | - **[Deep Learning with Pytorch by Udacity](https://classroom.udacity.com/courses/ud188)**: To get familiar with PyTorch.
215 | - **[TensorFlow in Practice by Coursera](https://www.coursera.org/specializations/tensorflow-in-practice?utm_source=deeplearningai&utm_medium=institutions&utm_campaign=WebsiteCoursesTFSTopButton)**: To get familiar with Tensorflow.
216 |
217 | #### General Resources for DL
218 | - **[Guide to Deep Learning](https://medium.com/vlgiitr/guide-to-deep-learning-585bfcad0b43)**: A comprehensive Guide to Deep Learning.
219 | - **[Distill](https://distill.pub/)**: Awesome blogs on deep learning with highly interactive visualizations.
220 | - **[Towards Data Science](https://towardsdatascience.com/)**: Collection of premium quality blogs on datascience on medium.
221 | - **[DL topics](https://github.com/vlgiitr/DL_Topics)**: Detailed list of general topics in DL to read about to get a respectable amount of knowledge in the field.
222 |
223 | Aside from all this. Keep on reading blogs on Medium, recent research papers on Google scholar. Follow leading researchers on Twitter and join discussions on Reddit. Keep on contributing to OpenSource Projects or take on a project yourself. Keep on mailing professors or budding startups until someone gives in and offers you a research position. Success in DL is slow but its highly rewarding :P
224 |
225 |
226 |
227 |
228 | ### Mobile Development
229 | -------------------------------
230 | Here's a list of beginner resources for mobile development in **Android** and **Flutter**.
231 | #### Android Resources
232 | - First of all, you must have a basic knowledge of **Java** or **Kotlin** language to get started with Android development.
233 | - Setting up the Android Studio IDE, the most preferable for Android development, is a great option to go ahead. Refer **[here](https://developer.android.com/studio/install)** for installation guides.
234 | - The best resource to refer to for Android developers is **[Official Android Developer documentation](https://developer.android.com/docs)**. It contains every resource you need for Android development.
235 | - Starting with some tutorials or courses that make developing apps from scratch is a great way to start getting deep dive into Android. Here are a few suggestions from me:
236 | - **Android Development for Beginner by Udacity** - A complete beginner-friendly course series by Google for learning basics of the android development.
237 | - **[Android Basics: User Interface](https://www.udacity.com/course/android-basics-user-interface--ud834)** - Learn how the hand-drawn app designs are transformed into layouts in phones.
238 | - **[Android Basics: User Input](https://www.udacity.com/course/android-basics-user-input--ud836)** - Learn how to add interactivity to the apps with some basics of object-oriented programming.
239 | - **[Android Basics: Multiple App Screens](https://www.udacity.com/course/android-basics-multiscreen-apps--ud839)** - Learn how to show multiple screens and add visual changes on touch events.
240 | - **[Android Basics: Networking](https://www.udacity.com/course/android-basics-networking--ud843)** - Learn the basics of networking in Android.
241 | - **[Android Basics: Data Storage](https://www.udacity.com/course/android-basics-networking--ud843)** - Learn how storing data works in mobile applications.
242 |
243 | - **Understand Android Activity Lifecycle**
244 | - **Moving to Single Activity Structure**
245 | - [Single Activity: Why, When, and How on YouTube](https://www.youtube.com/watch?v=2k8x8V77CrU)
246 | - [10 Best Practices for Moving to a Single Activity
247 | ](https://www.youtube.com/watch?v=9O1D_Ytk0xg)
248 | - **Android Lifecycle cheat sheet**
249 | - [Single Activities](https://medium.com/androiddevelopers/the-android-lifecycle-cheat-sheet-part-i-single-activities-e49fd3d202ab)
250 | - [Multiple Activites](https://medium.com/androiddevelopers/the-android-lifecycle-cheat-sheet-part-ii-multiple-activities-a411fd139f24)
251 | - [Fragments](https://medium.com/androiddevelopers/the-android-lifecycle-cheat-sheet-part-iii-fragments-afc87d4f37fd)
252 | - [ViewModels, Translucent Activities and Launch Modes](https://medium.com/androiddevelopers/the-android-lifecycle-cheat-sheet-part-iv-49946659b094)
253 | - **Detailed Guide**
254 | - [Activity Lifecycle official guide](https://developer.android.com/guide/https://www.youtube.com/watch?v=7p22cSzniBMcomponents/activities/activity-lifecycle)
255 |
256 | - **Building maintainable and performant apps**
257 | - Once you have got a basic familiarity with Android Dev, it's highly important to learn about app architecture and start writing your apps in "proper" manner.
258 | - [Android Jetpack: Improving App's Architecture](https://www.youtube.com/watch?v=7p22cSzniBM)
259 | - [Guide to App Architecture](https://developer.android.com/jetpack/docs/guide)
260 | - [Android Architecture Samples](https://github.com/android/architecture-samples)
261 | - [Viewmodels and LiveData patterns and anti-patterns](https://medium.com/androiddevelopers/viewmodels-and-livedata-patterns-antipatterns-21efaef74a54)
262 |
263 |
264 | - **[Google Codelabs for Android](https://codelabs.developers.google.com/android-training/)** - Awesome interactive tutorials that teach you the fundamentals of building Android applications.
265 | - After learning about the basics of the frontend and networking, it's also necessary to take a look at the backend. Implementing a self-made backend might become difficult for the beginner. So, Firebase by Google proves to be a great solution with easy use APIs. It provides all the facilities such as database, cloud messaging, and many more. Here are some resources to get on with Firebase:
266 | - **[Firebase Documentation](https://firebase.google.com/docs/guides)** - A complete step-by-step guide that helps you get started with Firebase.
267 | - **[Tutorial for Firebase implementation](https://www.youtube.com/playlist?list=PLGCjwl1RrtcTXrWuRTa59RyRmQ4OedWrt)** - Complete video series for implementation of Firebase in mobile applications.
268 | - Also, implementing material design is a great way to improve the UI and UX of the app. They make your app look more realistic and enhance user experiences. Here's an excellent resource from Android Team.
269 | - **[Material Design](https://material.io/develop/android/)**
270 | - Some blogs containing short tutorials, tips, and hacks for Android developers.
271 |
272 | - **[Android Developers Official Channel on YouTube](https://www.youtube.com/channel/UCVHFbqXqoYvEWM1Ddxl0QDg)
273 | - **[Vogella Android Tutorials](https://www.vogella.com/tutorials/android.html)**
274 | - **[Android Hive](https://www.androidhive.info/)**
275 |
276 | #### Flutter Resources
277 | - First of all, why learn Flutter if Android is already present? It's a cross-platform UI toolkit that helps developers build apps for Android and iOS from a single codebase.
278 | - It has its own benefits. Some of them are
279 | - **Hot Reload** - Build your code to life in just milliseconds that make development faster.
280 | - **Expressive, beautiful UIs** - Helps to delight the users with great UI with incredibly fast rendering and flexible designs.
281 | - **Native Performance** - Flutter’s widgets incorporate all critical platform differences such as scrolling, navigation, icons, and fonts to provide full native performance on both iOS and Android.
282 | - **[Flutter Docs](https://flutter.dev/docs)**
283 | - It's obvious as in Android, but it is a good and thorough walkthrough of Flutter. Even it gives directions for getting started with Flutter if familiar with any other mobile development environment such as Android, iOS, React Native. Here are the links for the same:
284 | - **[Flutter for Android Developers](https://flutter.dev/docs/get-started/flutter-for/android-devs)**
285 | - **[Flutter for iOS Developers](https://flutter.dev/docs/get-started/flutter-for/ios-devs)**
286 | - **[Flutter for React Native Developers](https://flutter.dev/docs/get-started/flutter-for/react-native-devs)**
287 | - **[Google Codelabs for Flutter](https://flutter.dev/docs/codelabs)** - This provides a guided, hands-on coding experience on building Flutter apps.
288 | - **[Udacity - Build Native Mobile Apps with Flutter](https://in.udacity.com/course/build-native-mobile-apps-with-flutter--ud905)** - This course can be a great start to get know things about Flutter. It is being offered by the Flutter team.
289 | - **[Flutter Widget of the Week](https://www.youtube.com/playlist?list=PLjxrf2q8roU23XGwz3Km7sQZFTdB996iG)** - A video series on youtube each explaining the working of a single widget in Flutter.
290 | - **[Awesome Flutter](https://github.com/Solido/awesome-flutter)** - A GitHub repository with a great list of the best Flutter libraries, tools, tutorials, articles and many more.
291 | - Some good blogs containing short tutorials and latest news about Flutter.
292 | - **[Blogs by Flutter](https://medium.com/flutter-io)**
293 | - **[Medium - Deven Joshi](https://medium.com/@dev.n)**
294 | - Flutter also has a huge community where you can do any discussions, showcases and many more related to Flutter. Here is the list:
295 | - **[Gitter Chat](https://gitter.im/flutter/flutter)**
296 | - **[Flutter Community Slack](https://fluttercommunity.dev/joinslack)**
297 | - **[Reddit - Flutter Dev](https://www.reddit.com/r/FlutterDev/)**
298 | - **[Discord - Flutter Dev](https://discord.gg/N7Yshp4)**
299 | - **[Twitter - Flutter Dev](https://twitter.com/flutterdev)**
300 |
301 | **[Stack Overflow](https://stackoverflow.com/)** - This Q/A platform will most probably answer to any of your problems in the development. If sometimes it misses, **[Google](https://www.google.com/)** is always there to help you!
302 |
303 | I think these are enough resources to get you familiar with the mobile development field, whether it is Android or Flutter!
304 |
305 |
306 | ### Game Development
307 | -------------------------------
308 |
309 | #### When you want to make a game
310 |
311 | 1. Pick up an engine.
312 | 2. Start using it.
313 | 3. Understand the architecture followed by it.
314 | 4. Publish? (completing a game is daunting task)
315 |
316 | ##### Engines
317 |
318 | * Editor based
319 |
320 | * Unity / Unreal (bread and butter engine for indies/AA/AAA studios, GUI based editor)
321 | * Godot (Open Source, kinda new, GUI based editor)
322 |
323 | All three of them have a dedicated forum to ask/answer question. However, for Unity take a look at [Brackeys](https://www.youtube.com/channel/UCYbK_tjZ2OrIZFBvU6CCMiA) and for Godot take a look at [GDQuest](https://www.youtube.com/channel/UCxboW7x0jZqFdvMdCFKTMsQ)
324 |
325 | * Code based
326 |
327 | * Raylib (Great for starting out, beginner friendly)
328 | * Cocos2d-x (Seems small and unpopular but It is **hugely** popular in Asia)
329 | * LibGDX (It is java based, so **GC** is available for help)
330 |
331 | Again, all of them have respective forums to ask/answer questions.
332 |
333 | For Raylib, I would recommend joining their [discord](https://discord.com/invite/VkzNHUE) server to ask questions
334 |
335 | For Cocos2d-x see [Ray's website](https://www.raywenderlich.com/), it is mobile focused so you would find topics related to Android/iOS too. It's hard to find tutorials in English (most of them are in Chinese)
336 |
337 | ##### Guides
338 |
339 | * Besides these specific resources check Mike's website [Games From Scratch](https://www.gamefromscratch.com) especially his [Getting Started Guide](https://www.gamefromscratch.com/page/Getting-Started.aspx) and Game Engine Introduction Series where he setup and review game engines/ framework.
340 | * **r/gamedev** has a detailed [getting started guide](https://www.reddit.com/r/gamedev/wiki/faq#wiki_getting_started)
341 |
342 | #### When you want to learn the in and out of a typical game
343 |
344 | Keep in mind that *video game is just a big while loop*. Everything else is normal everyday programming.
345 |
346 | ##### Making Game Engine
347 |
348 | * The best way to learn the internals. Take a look at [TheCherno's Game Engine Programming Series](https://www.youtube.com/playlist?list=PLlrATfBNZ98dC-V-N3m0Go4deliWHPFwT)
349 |
350 | ##### Graphic Programming
351 |
352 | Programming the graphical aspect of games.
353 |
354 | * Start with [OpenGL](https://learnopengl.com/). Keep your linear algebra in check.
355 | * For Vulkan, check [Khronos Group's starting guide](https://www.khronos.org/blog/beginners-guide-to-vulkan). Although OpenGL is enough for hobbyist and fundamentals, Vulkan is the future. I wouldn't recommend going this far.
356 | * To learn CG from scratch visit [ScratchAPixel 2.0](https://www.scratchapixel.com/) It's the best guide for CG fundamentals.
357 | * [Tiny Renderer](https://github.com/ssloy/tinyrenderer) is a brief version of ScratchAPixel (skipping some concepts like ray tracing).
358 |
359 | ##### Misc
360 |
361 | * When you start spitting *spaghetti code* then [Game Programming Patterns](https://gameprogrammingpatterns.com/) will help. These patterns are useful in general programming too. Bob's [Crafting Interpreters](https://craftinginterpreters.com/) is a gem for programming language development. It's so good that due to lack of section, I am mentioning it here.
362 | * Networking is an interesting part of multiplayer games (most interesting for me), check [Gaffer On Games](https://gafferongames.com/) and [Valve's articles](https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking). These resources are a very high level view of this topic.
363 | * [Gamasutra](https://www.gamasutra.com/) is a website focused in game development. There are many great articles.
364 | * For talks and slides related to this field watch Game Developers Conferences. Their archives [GDC Vault](https://www.gdcvault.com/)
365 | * Join [r/gamedev](https://www.reddit.com/r/gamedev/) to find more guides/articles/news related to this field.
366 |
367 | ### Information Security (InfoSec) / Hacking
368 | -------------------------------
369 |
370 | #### How to get into Hacking
371 |
372 | - [How to get into Hacking: Livestream by Gynvael Coldwind](https://www.youtube.com/watch?v=9I5RAWGWj7I)
373 | - [So you want to get into security: Essay by by Parisa Tabriz](https://www.freecodecamp.org/news/so-you-want-to-work-in-security-bc6c10157d23/)
374 | - [picoCTF](https://picoctf.com/): great beginner friendly CTF, challenges stay online all year round
375 |
376 | #### Exploits and pwning
377 |
378 | - [LiveOverFlow's binary hacking playlist](https://www.youtube.com/playlist?list=PLhixgUqwRTjxglIswKp9mpkfPNfHkzyeN): A good playlist to know about binary hacking as well as C and Linux.
379 | - **pwnable.kr**: Challenges starting from basic programming errors to standard pwnables
380 | - **pwnable.xyz**: Challenges based on easy-to-find vulns and interesting exploits
381 | - **gracker.org**: Nice binary exploitation challenge series. Good for beginners
382 | - **https://dhavalkapil.com/archive/**: Blogs by Dhaval Kapil on some basic/intermediate information security
383 | - **pwnable.tw**: Medium to difficult pwning challenges. Great if you want to try your hands on some real world exploit development.
384 | - [Gynvael Coldwind's youtube channel](https://www.youtube.com/user/GynvaelEN): One of the best channels if you want some good CTF experience, tips and reverse engineering tips too.
385 | - [Murmus CTF youtube channel](https://www.youtube.com/channel/UCUB9vOGEUpw7IKJRoR4PK-A): Channel talking about real world exploit development and 0days.
386 | - [Shellphish how2heap](https://github.com/shellphish/how2heap): This repo contains POCs of the standard and modern heap based exploits and their well-put explanation.
387 |
388 | #### Web Security
389 |
390 | - [Natas Wargame from overthewire](https://overthewire.org/wargames/natas/): Beginner friendly web-security challenges based on various topics, mostly covering php
391 | - [PortSwigger WebSecurity Academy](https://portswigger.net/web-security)
392 |
393 |
394 | ### Web Development
395 | -------------------------------
396 | - There are no prequisite though, but you should have a habit of googling things because on the go you need a heck lot of knowledge about multiple things extending from OOPs to cloud computing to security. Why you need to know about these? Because :
397 | - You want your web app source code to be scalable(as new features are getting added, complexity increases which can only be coped up by following some proper structure and principles).
398 | - You don't want your web app server to go down due to increase in user traffic.
399 | - You don't want your web app to be vulnerable and exploitable.
400 |
401 |
402 |
403 |
404 |
405 | - Start with obvious stuff, HTML and CSS. They may seem a bit boring but they are the core of webdev. So, here are some of the resources:
406 | - This is an introductory [course](https://www.coursera.org/learn/web-development) to web development.
407 | - [W3Schools](https://www.w3schools.com/) is one of the most popular website to learn basics in minutes.
408 | - Next thing to learn is Javascript a.k.a JS. This is used for both frontend and backend work and in fact it's used for non-browser work too. JS is bundled with many principles and structures. You should also know how to use OOPs with JS. So here are some of the great resources:
409 | - [Telusko Javascript Tutorial](https://www.youtube.com/playlist?list=PLsyeobzWxl7qtP8Lo9TReqUMkiOp446cV)
410 | - [Object-oriented Programming in JavaScript: Made Super Simple ](https://www.youtube.com/watch?v=PFmuCDHHpwk)
411 | - [ES6 Javascript: The Complete Developer's Guide](https://www.udemy.com/course/javascript-es6-tutorial/) by Stephen Grider (68 lectures / 6hrs).
412 | - Now once you are done with basics, you are ready to learn some awesome frontend frameworks(I would really urge you to first understand what's difference between these frameworks and normal HTML & CSS, trust me internals are really soothing and beautiful):
413 | - **[ReactJS](https://reactjs.org/)** : When it comes to creating painless and interactive *heavy* UIs, this is the best to opt.
414 | - [React for beginners](https://www.youtube.com/playlist?list=PLC3y8-rFHvwgg3vaYJgHGnModB54rxOk3) by Codevolution.
415 | - [React component, elements and instances](https://medium.com/@dan_abramov/react-components-elements-and-instances-90800811f8ca#.rjx4d6bgw) by Dan Abramov.
416 | - React is incomplete without redux. So do check it out.
417 | - **[Vuejs](https://vuejs.org/)** : Vuejs is really easy to get grasp on, it takes hardly any time to write code in Vue. And best things about Vue are elegant programming style and patterns and massive documentation.
418 | - [Vue documentation](https://vuejs.org/v2/guide/) Trust me, this is really good!
419 | - [VueJs Crash course](https://www.youtube.com/watch?v=Wy9q22isx3U)
420 | - Now, let's hope into backend/server-side stuffs. For a beginner, it's always good to start with [NodeJs](https://nodejs.org/en/) because you have already learnt Javascript(I hope you followed my prior steps :P) before, so it will be very easy to catch up new concepts. Nodejs is JavaScript runtime environment that lets developers write command line tools and server-side scripts outside of a browser. Here are some of the resources with which you can get started:
421 | - [Nodejs internals(Must read)](https://medium.com/softup-technologies/node-js-internals-an-introduction-to-nodes-runtime-and-architecture-d6ec295c05ab)
422 | - [Nodejs course](https://www.youtube.com/watch?v=fBNz5xF-Kx4&list=PLillGF-RfqbZ2ybcoD2OaabW2P7Ws8CWu) by Brad Traversy.
423 | - **[Django](https://docs.djangoproject.com/en/3.0/)**: Django is one of the most customisable and user friendly production level web application backend.
424 | - [Tutorial](https://docs.djangoproject.com/en/3.0/intro/) the documentation itself provides a great tutorial series.
425 | - [REST framework](https://www.django-rest-framework.org/tutorial/quickstart/) django's implementation to build RESTful APIs without any hassle.
426 | - **[Flask](https://flask.palletsprojects.com/en/1.1.x/)**: Flask is framework to build lighwieght backends swiftly in Python.
427 | - I think these are enough to pave your way through the **basics** of web developement.
428 |
429 |
--------------------------------------------------------------------------------
/intern/ACM-IITR-intern.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/periperidip/exploring/aed3378c822887409addb4a52067bc8300931a50/intern/ACM-IITR-intern.pdf
--------------------------------------------------------------------------------
/intern/get-an-intern.md:
--------------------------------------------------------------------------------
1 | # What is an intern?
2 |
3 | Quoting from here:
4 |
5 | > a [period](https://dictionary.cambridge.org/dictionary/english/period
6 | > "period") of
7 | > [time](https://dictionary.cambridge.org/dictionary/english/time
8 | > "time") during which someone
9 | > [works](https://dictionary.cambridge.org/dictionary/english/works
10 | > "works") for a
11 | > [company](https://dictionary.cambridge.org/dictionary/english/company
12 | > "company") or
13 | > [organization](https://dictionary.cambridge.org/dictionary/english/organization
14 | > "organization") in
15 | > [order](https://dictionary.cambridge.org/dictionary/english/order
16 | > "order") to get
17 | > [experience](https://dictionary.cambridge.org/dictionary/english/experience
18 | > "experience") of a
19 | > [particular](https://dictionary.cambridge.org/dictionary/english/particular
20 | > "particular")
21 | > [type](https://dictionary.cambridge.org/dictionary/english/type
22 | > "type") of
23 | > [work](https://dictionary.cambridge.org/dictionary/english/work
24 | > "work"):
25 |
26 | For on-campus interns, you work for about 2.5 months in the company which recruits you and try to contribute to their work and maybe even work on some new technologies. The companies coming for a recruitment drive range from established ones like Google, Microsoft, Adobe, Oracle to new-age startups. The recruitment drive not only sees tech companies but various banks and research organisations such as Goldman Sachs, Sprinklr, Société Générale, etc.
27 |
28 | # How are interns hired?
29 |
30 | Companies have various ways of hiring tailored to the requirements of the interns they want. Some recruit directly, based on the grades of the students, some host coding tests, some have a mixed bag of questions. I will try to be as unfiltered as possible with the things I state.
31 |
32 | The general pattern is:
33 |
34 | 1. A test which includes coding questions, aptitude, CS
35 | questions, etc.
36 | 2. Multiple interviews rounds depending on the company.
37 |
38 | Since the pattern may change every year depending on the conditions, I will not mention it explicitly for each company. Though here are some trends related to a few companies:
39 |
40 | 1. Google: Always shortlists for interviews via resume.
41 | Your CG and competitive programming background will matter.
42 | There is no point of any other achievements.
43 |
44 | 2. Adobe: Has many of its divisions come to campus for recruitments.
45 | It also reaches out to the top 5 students of CSE for a direct offer.
46 | You can also give a test for it and get selected.
47 |
48 | 3. Microsoft: Considered a relatively easy company to crack
49 | as compared to the big guns which come in the first couple
50 | of weeks.
51 |
52 | 4. Companies which come in the later weeks (in the 3rd or 4th week
53 | and after) have relatively easy coding questions and also focus
54 | on the resume of the student. This does not mean that one should
55 | expect easy coding questions from them. Another thing to note
56 | is that their tests are not solely focused on coding but
57 | also contain aptitude, math and CS questions.
58 |
59 | Another reason why I did not get into the testing and interviewing experience of these companies is that they vary from year to year. For instance: This year (2020), Adobe did not directly recruit the top 5 DRs. Microsoft placed minimum CG criterion of 8 (which was 7) hence made the recruitment process more challenging.
60 |
61 | I obviously cannot give you false hope by stating anything inaccurate so I will be brutally honest with the things I mention. One thing to keep in mind is that about 70% of the companies will have a CG criterion on them (generally 7; I have seen a few 6.5 and 8 as well), so be prepared for that. The exceptions to the CG criteria are Google, Amazon, Adobe, JPMorgan Chase & Co., Goldman Sachs, to name a few.
62 |
63 | Therefore, it is self-evident that you should try to improve your grades no matter what else you do apart from that. A CG is 7.5+ will make you eligible to sit in the tests for 80-85% of the companies. So you have two semesters to make things better.
64 |
65 | But if you have a low-grade point, the other way you can compensate is by honing your competitive programming skills. However, remember that when your scores in a test tie with someone else, the tiebreaker will be the CG.
66 |
67 | # How to prepare for interns?
68 |
69 | ACM IITR provided with a great [list](ACM-IITR-intern.pdf) of resources which you can refer to here. Now that you have some help, you now need a roadmap for the preparation:
70 |
71 | ### When to start?
72 |
73 | Starting as early as possible will increase the chances of getting a well-paying intern (good payment $\not\propto$ good work BTW, totally depends on the company). But since people have other engagements such as GSoC/Outreachy (I highly recommend these), projects, etc., starting a year before may not be possible.
74 |
75 | Going by the experiences of my friends who now have great interns, the best time to start will be the end of the 3rd semester (*, i.e.*, after the end sems).
76 |
77 | For those who have the above-mentioned engagements, you might need to work just a bit harder (or choose an org/project which has very little work). And most probably, you will not be able to start even after the midsems of 2-2 since that time is the peak for GSoC (you have to start writing your proposal at that time). So, if you plan on taking up a project or getting into these competitions, try to cover some ground when you are free, *, i.e.*, in the winter break after 2-1 end sems.
78 |
79 | If for some reason, you did not start then, do not worry, the summer vacations after 2-2 will help you cover the lost ground though you will have to work quite hard for that.
80 |
81 | ### What to study?
82 |
83 | The best places to prepare for interns are InterviewBit and GeeksforGeeks. I suggest you save LeetCode for the placements ;)
84 |
85 | Start doing InterviewBit from topic 0: "Time Complexity" and keep going **sequentially**. Do **NOT** try to skip topics (something I tried to do and found no luck doing it). InterviewBit has a couple of broken and incomplete questions, so ignore them if you come across any. It will be tough, to begin with; the main problem you will face is that you will not be able to figure out how to come up with an approach for the question. You will be able to get that "feel" that this is how you want to approach but won't be able to come up with a concrete solution. That is OK; that is one thing you will face for quite a handful number of questions, and the only solution to this problem is practice. It is OK to look at the solution to the problem if you are stuck for 15-20 minutes or so. With time it will all start to click and become comfortable.
86 |
87 | Apart from IB, this [link](https://www.geeksforgeeks.org/must-do-coding-questions-for-companies-like-amazon-microsoft-adobe/) contains a significant number of HOTS (Higher Order Thinking Skills; I did not make this term up, learnt this in class 8th) questions. Try attempting them to know what's up.
88 |
89 | ### What if I started late and was not able to do much?
90 |
91 | I know this situation very well. I too started very late (in the third/fourth week of the interns when every big one had recruited; I had some other plans and did not want to sit for on-campus interns). In such a situation, try to get a good grasp of these topics:
92 |
93 | - Sorting techniques: Bubble, Quick, Insertion, Selection, Merge and Heap Sort.
94 | - Tree traversals: BFS and DFS.
95 | - Attempt at least one question from each bucket of the following topics:
96 | - Arrays
97 | - Strings
98 | - Trees
99 | - Maps
100 | - Hashing
101 |
102 | If time allows, then also try to attempt:
103 | - Two Pointers
104 | - Math
105 |
106 | And keep doing some questions from the link mentioned above. Since there is a time crunch, you cannot write the code for every problem, therefore think of the approach and cross-check it. You can do this even when doing any mundane activity such as having dinner.
107 |
108 | ### What if I did all of the above and have nothing to do?
109 |
110 | If you reach this stage, then it is great! But, do not ease out in such a case else your skill to solve questions will start to diminish. In such a case, try doing the "Medium" and "Hard" questions from LeetCode of the topics you like. Do the [puzzles](https://www.interviewbit.com/puzzles/) section of IB, or from [GFG](https://www.geeksforgeeks.org/puzzles/). This will keep you entertained. If your thirst still isn't satisfied, then take part in CodeChef contests.
111 |
112 | ### Any other thing to keep in mind?
113 |
114 | Even if you are not well versed with the coding part, and have not done much yet appear for an interview or are giving a test, be as cool-minded as possible. Do not think of the result or panic if you do not understand anything. Try re-reading the questions and solve them at a slow pace. Even if you might not get shortlisted, you still will gain some experience.
115 |
116 | Now a couple of things specific to tests and interviews.
117 |
118 | #### Tests
119 |
120 | There is a high chance that the questions will repeat, *, i.e.*, you may encounter a problem from IB, LC or GFG. Therefore, the approaches should be on your tips. I am not asking you to memorise questions, but some questions have unique approaches which one may not be able to come up with on the spot (for instance Longest Palindromic Substring in [`O(n)`](https://www.geeksforgeeks.org/kmp-algorithm-for-pattern-searching/)). Try revising the approaches of some pet questions such as 0/1 Knapsack, LPS, print left side of tree etc. It will save you some time in the exam. The thing is that many questions are based on the fundamental questions only and use approaches very similar to these questions.
121 |
122 | #### Interviews
123 |
124 | I cannot stress enough number of times that you have to stay calm during an interview. Do **NOT** try to break the ice with the interviewer, let him do so. Follow the lead of the interviewer and reciprocate the energy he is giving away. Do **NOT** be very frank with him if he is reserved, it may come off as rude and overconfident.
125 |
126 | Go in with the mindset that many companies are coming ahead and not securing an intern in this company won't cause harm. Some good soft skills go a long way, trust me when I say this. Also, try to have a good resume and be well versed with the achievements/projects/PORs you state in the resume. A good resume will make you stand out among a herd of other candidates. I mean, you came to college to learn a lot of things (not limited just to your degree) and your work in these four years will determine the start of your career and maybe even help you get a headstart over others.
127 |
128 | ---
129 | I feel that I have mentioned plenty of things now and I am intentionally avoiding some stuff since that kind of things one should experience to learn better ;)
130 |
131 | On an ending note, please maintain good spirits with your friends and maintain a healthy competition instead of trying to bring each other down. Even a little bit of support goes a long way and leads to great friendships and life satisfaction. I cannot credit my friends enough for helping me through these tough times, knowing that I started stuff late due to my own mistakes and helping me despite having their recruits to look after. Many of the tips I have written above are bits of advice from my good friends.
132 |
133 | I hope now you get the idea of how things will be. Best of luck! I hope this helps you in some way or the other.
134 |
135 |
--------------------------------------------------------------------------------
/research/how-to-research-project.md:
--------------------------------------------------------------------------------
1 | # Research Projects
2 | Research projects are a special sort of projects which may last anywhere from 3 months to a whole year or beyond. They invlove researching on a particular topic/field either individually or under a professor or under an organisation. I will talk about those done under a professor or an organisation and how to go about them. Both of them involve similar procedures so a single writeup will do I guess.
3 |
4 | ## Benefits of Research Projects
5 |
6 | They provide many benefits for instance:
7 |
8 | - Deeper knowledge in a field
9 | - More contacts you make through the party you're doing
10 | the project under.
11 | - Possibility of publishing a research paper in your UG;
12 | something which is of immense value in the real world.
13 | - Getting a good idea of how research is done; something
14 | which will change your work habits and your outlook on
15 | many things.
16 |
17 | I will not talk about more because that is not the purpose of this guide.
18 |
19 | ## How to get one?
20 |
21 | ### Professors from your college
22 |
23 | To start a research project you need to approach a professor. Mail them first that you want to take up a project under them. Do mention a little about your interests. Be polite please.
24 | 
25 |
26 | If I remember correctly, I asked a friend of mine to write the mail introducing us, so this isn't the first mail. Though, he backed out of the project after the first meeting so it is practically _my_ first introduction. I hate to use "_PS_" but I don't know why i used it above.
27 |
28 | After a couple of meetings with the professor, you will be allotted a project to perform. You may be doing it alone or with a group (depends on the project).
29 |
30 | It is important to note that such mails are generally very short as compared to the ones in the latter category because you generally know the professor here by face or by talking since they belong to your own institution.
31 |
32 | ### Professors from foreign universities
33 |
34 | You may also approach professors from foreign universities for a project. You need to mail them the same way too but your mail will be a bit more verbose now. It will be divided into the following parts (paragraphs rather):
35 |
36 | - **Your brief introduction**: Who you are, what you study, where you study. Try to keep this concise and not make it an autobiography.
37 | - **Your interests**: Keep them relevant to the project. Do not cite interests like playing the Piano or reading books. Talk about the field. What you like, what projects you have done/doing, what you like about them. You may break this para into two for more readability.
38 | - **What work of the professor have you gone through**: Cite a couple of his papers, maybe the recent ones or the ones accepted in great conferences (this does not guarantee that it was great work, but you have to write something so..). Writing what you loved about them would be great! Now not cite more than otherwise it may seem like you are lying. It is okay if you want to cite just one; in that case, do write something about why you liked it or just state something relevant to it.
39 | - **Close the email now**: Write an ending remark, something like: "I have attached my resume for your perusal", "Looking forward to your reply", etc.
40 |
41 | Please remember to attach your resume. Keeping the email crisp is key. A professor skims through your mail or rather his TA (Teaching Assistant) or RA (Research Assistant) reads the mail and decided if it is worth informing to the professor. Half of the things you wrote may not even be read, remember that.
42 |
43 | 
44 |
45 | _Though this mail is for a research internship, the same email with similar contents can be written for a research project._
46 |
47 | The second paragraph could have been shorter and more concise. The overall language could have been better. I wrote this mail in February 2019, so I guess the timing was a bit bad, especially for a Professor in China. Note that such small things like timing also matter. If I were to write such a mail in today's times, it would be far better than this and more concise since now I am aware of how professors read a mail.
48 |
49 | ---
50 | A thing worth mentioning here is that foreign projects may seem very lucrative because, "foreign". But this does not guarantee a good project or a good mentoring from the professor's side please keep this in mind. Doing a project from your own university enables you to physically meet the professor and discuss your problems and findings.
51 |
52 | Both have their own pros and cons, there is nothing wrong with doing a project in your own college, and nothing glorifying in doing the same from abroad. The main takeaway is that how much knowledge you are able to gain. This may sound very cheeky but is very true in today's times when all people care about is bragging and showing off their hollow knowledge to others.
53 |
54 | I hope this helps you in some way or the other!
55 |
56 |
--------------------------------------------------------------------------------
/research/mail-foreign.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/periperidip/exploring/aed3378c822887409addb4a52067bc8300931a50/research/mail-foreign.png
--------------------------------------------------------------------------------
/research/mail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/periperidip/exploring/aed3378c822887409addb4a52067bc8300931a50/research/mail.png
--------------------------------------------------------------------------------