When first starting out, learning programming or a new programming language can be intimidating. Without a traditional education, it's difficult to determine where to start and how to progress your skills that strikes a balance between what you already know and what you don't. We are fortunate today that today there is no shortage of resources on programming and many of the most popular languages. However, "quantity does not equality" definitely applies here, and there are many resources that are not worth the time or money. In many cases I have found this out the hard way. But through this trial and error, I've been keeping track of the best resources I've found that have helped me to make significant strides in becoming a better Python programmer over the past few years. Here, I organize these resources into a progression that I think makes sense, with each resource building off the previous or which introduces a new application area that uses the skills you already have.
I also include a few different non-technical books after the technical section. These books have had a large impact in helping me to get the most out of the technical resources. They cover a few different topics, but together they've provided structure, perspective, and motivation for my studies. I think they're a valuable complement to the technical side, so I include them here as well.
1) Python Crash Course (2nd Edition): A Hands-On, Project-Based Introduction to Programming
This wasn't the first book on Python I read, but I wish it was. It does the best job of explaining the basic concepts of both Python and programming of any book I've found, taking the first half of the book, and then moves into three different project applications using the core concepts. Using real world projects is a great way to learn the material in a way that sticks, while also showing what's possible with the basic skills you've learned. Start here.
After building a foundation with the basics, the next step is to reinforce that foundation by practicing. A lot. Enter HackerRank, a free site dedicated to programmers looking to improve their skills by solving sample problems created by the community. They offer an in browser code editor for the problems, with support for most languages, including Python. At this point, create a free account and make it a habit to dedicate 30 minutes to an hour everyday coding to improve your skills. If you want the best results, do this for at least a month and you'll be amazed at how second nature your programming will become.
3) Real Python Course
The Real Python Course is a collection of materials and video tutorials created by a group of successful Python programmers. The course is split into three smaller courses: an introductory section on Python, the basics of Python web development, and advanced Python web development focused around the Django framework. Most of the introductory section should be review, but it does also include new valuable information such as working with databases, web scraping, and GUI development. The value really starts to kick in with the second course, which covers the foundations of modern web development with Python. The third course dives deeper into advanced Python web development, using Django along with other industry standard web development tools. The core content alone makes the course worthwhile, but what makes the course even more valuable are the insights provided by the authors along the way, not to mention the coverage of both best practices and other web technologies that are commonly implemented in industry projects.
4) Fluent Python
After gaining practical experience, it's time to dive a little deeper into the structure and design of Python. Fluent Python covers a bunch of different topics that can help take your Python skills to the next level. A few topics include coverage of the built-in types, explanation of the Python data model with its many special methods, detailed coverage of its object-oriented features, and concurrency options in the language.
5) Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython
Python has quickly grown over the past decade into one of the most popular languages for data analysis. While this book doesn't cover any of the flashier subjects (such as machine learning), it's a great step for anyone interested in either data analysis or machine learning. Python for Data Analysis is focused on the Numpy and Pandas libraries, which are two of the core libraries that have contributed to Python's popularity in these fields. By becoming proficient in the usage of these libraries, you'll be in great shape to begin diving into more complex application areas.
6) Deep Learning with Python
Deep Learning is one of the most (over?) hyped areas of computer science today. Though it may receive a disproportionate amount of attention, this doesn't change the fact that it's still an interesting and applicable topic to learn about. Python's Keras library makes it as simple as possible to design, train, and apply deep learning models, which has made the language widely popular for this purpose. Deep Learning with Python and Keras author François Chollet does a great job explaining the different types of deep learning models and their common application areas. Rather than just show the models and expect the reader to know how they work, he first gives a primer on the theory behind the models, without diving too deep into complexities, which is a definite plus. Following along with this book you will also get to flex your data manipulation skills that you developed with Python for Data Analysis, as many of the example applications use real world, raw datasets, and before you get into training the models you will first have to prep the data into a usable format.
1) Deep Work: Rules for Focused Success in a Distracted World
Deep Work has influenced the way I study and work the most of any book. The basic premise of the book is that modern society is plagued by distraction, so much that anyone who is able to break through the veil has a significant advantage in work and life. This book details strategies and insights of going deep that anyone can integrate into their own lives to reap the benefits. I can't speak highly enough of this book. If you want to get the most out of your work and studies, give it a read.
2) The Complete Software Developer's Career Guide
The Complete Software Developer's Career Guide is a tome of collected career wisdom by software developer turned entrepreneur, John Sonmez. This book provides the extremely valuable perspective of someone who has made it to the top in the industry. He covers a wide array of topics in the roughly 800 page book, providing valuable insight whether you have experience in the field or are just starting out. He also doesn't try to paint the perfect picture of the industry and provides a lot of real talk regarding the realities within it, which I appreciated. Whether or not you agree with his opinions won't change the fact that he provides tons of practical wisdom for getting started and progressing in the field.
3) So Good They Can't Ignore You: Why Skills Trump Passion in the Quest for Work You Love
The premise of So Good They Can't Ignore You is that if you sit around waiting for passion to spark your dream career, you'll be waiting a long time (if not forever). Instead, Cal Newport argues that passion will come as a by-product of investing time into and becoming skilled in something by practicing deliberately. It's human nature that we tend to like what we're good at, but our skills are by no means static. By investing the time into developing a given skill, you'll eventually develop a confidence relating to it, which will further influence your effort and enjoyment to develop that skill. Over a longer period of time, this dedication to practicing deliberately will inevitably lead you to being more skilled than those who haven't been as dedicated, and you'll start to be, "so good that you can't be ignored."
4) The Second Machine Age: Work, Progress, and Prosperity in a Time of Brilliant Technologies
The Second Machine Age was written by two prominent economists who have an interest in technological impacts. This book details their thoughts and outlooks regarding the current tech revolution we're living through today. It provides great insights to how the world and economies may change over the next few decades. I also found the book to be great motivation for why it's the perfect time to learn programming and to specialize in areas such as data science and machine learning.