# Learning Programming/Python I know there are a lot of resources, tools, courses, etc. online on how to learn Python, but here, I will just mention some of the best personal resources that really helped me a lot. ## A) **CS50 by Harvard, edX** - CS50 is a set of introductory courses to Computer Science (short form - **CS**), Computer Programming (short form - **CP**), etc. It has many different variations of courses, like CS applied in Business, Law, AI, Web Dev, etc. Check out all the courses here: https://www.edx.org/cs50 1. **CS50x** : **It's one of the best and most famous CS course in the world.** You get to learn a lot of things and strengthen your basics very well. Just see the reviews, course structure, assignments, etc. Its just absolutely fantastic for beginners and advanced learners both. Unfortunately, in India, fundamental CS and CP concepts is not taught conceptually well. That's why **I highly highly recommend** you to do this course to gain the fundamentals starting from 0. So even if you know some things in CS and CP, I still recommend this course. https://www.edx.org/course/introduction-computer-science-harvardx-cs50x 2. **CS50P** : Now, that your basic CS and CP is clear, you can move to learning Python conceptually and properly. https://www.edx.org/course/cs50s-introduction-to-programming-with-python *Note*: CS50x is for general CS. CS50P is specifically only for Python. Read this paragraph, written by the instructors, to know the difference between CS50x and CS50P: > Whereas CS50x itself focuses on computer science more generally as well as programming with C, Python, SQL, and JavaScript, this course, aka CS50P, is entirely focused on programming with Python. You can take CS50P before CS50x, during CS50x, or after CS50x. But for an introduction to computer science itself, you should still take CS50x! 3. **CS50AI** : We all know AI and ChatGPT is the next big thing. So why not strengthen your Python skills by learning some basics of AI? https://www.edx.org/course/cs50s-introduction-to-artificial-intelligence-with-python *Note*: In order to learn AI/ML, there are many other good beginner sources (like Andrew Ng on Coursera). I just pointed out CS50AI as a good way to develop your Python skills while learning AI basics. If you want to learn AI/ML/DL in more depth, check out the resources in the below link: https://github.com/IvLabs/resources - *tl;dr:* **Do the 3 CS50 courses, CS50x, CS50P, CS50AI**, in order to clear your CS and CP fundamentals, and most importantly, *learn true logic building and algorithmic thinking for problem solving.* ## B) **Other Resources** 1. **Corey Schafer, YouTube** : Just as CS50x is very popular for an intro to CS, Corey's playlist is **one of the most popular playlists to learn proper Python upto a very good level**, with some advanced concepts too. Highly recommended! https://www.youtube.com/playlist?list=PL-osiE80TeTskrapNbzXhwoFUiLCjGgY7 2. **Python for Research, edX** : I personally found this short course to be quite good. Even if you don't want to do the videos, I would still highly **recommend solving the assignments** as they are very good for logic building in Python. https://www.edx.org/course/using-python-for-research I would recommend this if you already know a different programming language well and if you want to learn basic Python super quickly. 3. **Image Processing, IvLabs**: You can check out the recording of IvLabs' Image Processing Workshop (NIT Nagpur's AI and Robotics Club). It's nothing heavy, takes only 3-4 hours, and are just basics that every Python user should know. Workshop Resources: https://drive.google.com/drive/folders/1gjQvMNhoAQF2yzHbBvDYaLw2C1vIqO4Z Workshop Recordings: https://drive.google.com/drive/folders/1qohh9lKK1GPt-qq4PJQfvQGhM3KX227L?usp=sharing Note: There are 2 folders that you can see inside the "Workshop Resources" folder: "Python Basics" and "Image Processing". Within the "Python Basics" folder, you will find a very comprehensive GDoc called **"READ-ME FIRST"**, written by Fauzan, and a PDF called "Common Errors in Python". **Make sure to read those**, they cover very important stuff that beginners normally don't know! 4. **OOPS with Python** : This is a very well taught course to learn OOPS and core libraries in Python (like Pandas, Matplotlib, etc.). Even if you don't want to do the videos (you should still do it!), I would still highly **recommend solving the assignments** atleast as they are very good for logic building in Python. If not that also, **make sure that you atleast do the final project**. It's quite challenging, you learn a lot, and can also add it in your CV. OOP Resources: https://drive.google.com/drive/folders/15R3Zs3XcPvWzmbjQ71QRW3x97G6s8Laj?usp=sharing OOP Assignments: https://drive.google.com/file/d/1ivPqq5ipyvZUa7qATNR0VFN8ii8bs_jf/view?usp=sharing ***Page 18 is final project*** Playlist: https://youtube.com/playlist?list=PL5iYb15dK9jBAiviDJgH3L2jsC5ZmSwsM ## **C) Things to keep in mind** 1. Knowing Python concepts is one thing, but navigating around the other non-coding part is another thing. i) Read my post, **Tech Stuff** - it has **Python setup options** and other important tech tips. Knowing how to setup Python properly is very very important. https://hackmd.io/CVAwFCGhTOuHpfB3UBo4NQ ii) Make sure to read the 2 documents mentioned in point B3. 2. Learning Python concepts is one thing, knowing how to implement it is another thing. This is why you have to, have to, **solve and code by yourself**. i) While learning Python, make sure to solve the assignments as mentioned in points B2 and B4. ii) After you are done learning all the basics, you should make a project by yourself, from scratch. Perhaps the best beginner project is to make your own, simple implementation of the **2048 game**. If you have time, do the "final project" also, as in B4. iii) Also, check this GitHub repo out (can be done while or after learning Python): https://github.com/practical-tutorials/project-based-learning#python 3. The above is just to learn Python. If you want to learn more advanced things in the field of programming, you have to learn Data Structures and Algorithms, aka, DSA. **Abdul Bari's course on Udemy** is one of the most famous to learn DSA concepts (he teaches programming from scratch for absolute beginners): https://www.udemy.com/course/datastructurescncpp/ 4. Apart from the above, you should also go to platforms such as Hackerrank, Leetcode, GfG, etc. and practice problems. They have questions for all types of levels, be it the most basic ones, or advanced ones too. You can also take part in the code contests that take place on these platforms to develop your Competetive Coding skills, so you can solve problems efficiently in a shorter time frame. 5. This might go a bit against the whole point of the post for learning Python, but if you really want to learn Programming the right way, its 100% recommended to learn C/C++ first, and then graduate to Python. This will make you think more algorithmically and also make you much more robust while learning other programming languages. So yes, do learn atleast the basics of C/C++! ## **D) Possible Roadmap** 1. If you have a lot of time, and want to **learn Python as conceptually and properly** as possible: C1 -> A1 -> A2 -> B1 + C2i) -> B3 -> B4 -> C2ii) -> A3 (optional) Note: If you know another programming language well, you can skip A1 and A2 in the above roadmap. However, note that I still recommend even experienced coders to do A1. 2. If you have very limited time, or just want to learn Python basics fast: C1 -> (A2 or B2) -> C2ii) Note: If you know another programming language very well, do B2, or else, do A2. Also, you might see that I have suggested only some amount of formal learning, and have instead majorly focused on project learning by implementing the 2048 game in Python. I hope the above helps you guyz in your Python learning journey, it sure did help me. Once again, there are many great resources out there, so feel free to do your own research. I have only written the ones that I am personally endorsing. All the best! ### Bonus - [Here](https://hackmd.io/@70HhYl1ZRgeQ9ODSznZZwA/Sy4lstpmK) is a compilation of all the posts I have made so far. - [This folder](https://drive.google.com/drive/u/0/folders/1i2Kxl2UnnKrMXVCBSduK1kDJNDsVA2Ci) has the resources to my content writing workshop - PPT, recording, and other material. Do have a look! - Why and how to start reading, and some [book recommendations](https://hackmd.io/eixiFmuDRvWNChITjoUJsA). - Some helpful [tech stuff](https://hackmd.io/CVAwFCGhTOuHpfB3UBo4NQ) - Python setup options and other important tech tips. - Some great [Graphic Designing Resources](https://hackmd.io/ptpXUgf-T_2MRMfyvPuovw) for both beginners and skilled ones. - [Here](https://hackmd.io/yzaUjVRpRem_jvcQXoLD4w), I have put up methods and resources to improve your writing skills, and overall English fluency, and book recommendations. Check it out! ### P.S. - With your programming skills now sorted, you can do *a lot* of stuff. But perhaps one of the most important ways is to use it to contribute towards bettering society. Check this course out from MIT - [Data Analysis for Social Scientists](https://mitxonline.mit.edu/courses/course-v1:MITxT+14.310x/). Social Data Science is a huge field and I implore you to explore it! - To improve this post, any and all suggestions are welcome :)