├── LICENSE ├── README.md ├── hello.py ├── python-developer-roadmap.png └── python-developer-roadmap.xml /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Erdem Özgen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Python Developer Roadmap 2 | 3 | > Roadmap to becoming a [Python](https://www.python.org/) developer in 2022-2023: 4 | Below you can find a chart demonstrating the paths that you can take and the libraries that you would want to learn to become a Python developer. I made this chart as a tip for everyone who asks me, "*What should I learn next as a Python developer?*" 5 | 6 | ## Disclaimer 7 | 8 | > The purpose of this roadmap is to give you an idea about the landscape. The road map will guide you if you are confused about what to learn next, rather than encouraging you to pick what is hype and trendy. You should grow some understanding of why one tool would be better suited for some cases than the other and remember hype and trendy does not always mean best suited for the job. 9 | 10 | 11 | ## Give a Star! :star: 12 | 13 | If you like or are using this project to learn or start your solution, please give it a star. Thanks! 14 | 15 | ## Roadmap 16 | 17 | ![Roadmap](./python-developer-roadmap.png) 18 | 19 | 20 | ## TODO: 21 | * Add Microservices 22 | * Good to Know Libraries 23 | * Add API Clients 24 | * Add extra subtree for data process and data manipulation 25 | 26 | 27 | 28 | ## Resources 29 | 30 | 1. Prerequisites 31 | 32 | - [Python](https://docs.python.org/3/tutorial/index.html) 33 | - [Python Modules](https://docs.python.org/3/tutorial/modules.html) 34 | - [SQL](https://www.w3schools.com/sql/default.asp) 35 | 36 | 2. General Development Skills 37 | 38 | - Learn GIT, create a few repositories on GitHub, share your code with other people 39 | - Know HTTP(S) protocol, request methods (GET, POST, PUT, PATCH, DELETE, OPTIONS) 40 | - Don't be afraid of using Google, [Power Searching with Google](http://www.powersearchingwithgoogle.com/) 41 | - Read a few books about algorithms and data structures 42 | - Learn about implementation of a basic Authentication 43 | - Solid principles, architectural & design patterns, ecc 44 | - Basics of software testing (unit, integration, e2e) 45 | 46 | 3. CLI Tools 47 | 1. [google/python-fire](https://github.com/google/python-fire) 48 | 2. [click](https://click.palletsprojects.com/en/8.0.x/) 49 | 50 | 4. Web Frameworks + Routers 51 | 52 | 1. [Flask](https://flask.palletsprojects.com/en/2.0.x/) 53 | 2. [Django](https://www.djangoproject.com/) 54 | 55 | 56 | 5. Databases 57 | 58 | 1. Relational 59 | 1. [SQL Server](https://www.microsoft.com/en-us/sql-server/sql-server-2017) 60 | 2. [PostgreSQL](https://www.postgresql.org/) 61 | 3. [MariaDB](https://mariadb.org/) 62 | 4. [MySQL](https://www.mysql.com/) 63 | 64 | 2. Cloud Databases 65 | - [CosmosDB](https://docs.microsoft.com/en-us/azure/cosmos-db) 66 | - [DynamoDB](https://aws.amazon.com/dynamodb/) 67 | 3. Search Engines 68 | - [ElasticSearch](https://www.elastic.co/) 69 | - [Solr](http://lucene.apache.org/solr/) 70 | - [Sphinx](http://sphinxsearch.com/) 71 | 4. NoSQL 72 | - [MongoDB](https://www.mongodb.com/) 73 | - [Redis](https://redis.io/) 74 | - [Apache Cassandra](http://cassandra.apache.org/) 75 | - [RavenDB](https://github.com/ravendb/ravendb) 76 | - [CouchDB](http://couchdb.apache.org/) 77 | 78 | 6. ORMs 79 | 80 | 1. [Django ORM](https://docs.djangoproject.com/en/3.2/topics/db/queries/) 81 | 2. [SQLAlchemy](https://www.sqlalchemy.org/) 82 | 3. [Extra](https://www.fullstackpython.com/object-relational-mappers-orms.html) 83 | 7. Caching 84 | 85 | 1. [Memcached](https://pypi.org/project/python-memcached/) 86 | 2. Distributed Cache 87 | 1. [Redis](https://github.com/redis/redis-py) 88 | 2. [Memcached](https://pypi.org/project/python-memcached/) 89 | 90 | 8. Logging 91 | 92 | 1. Log Frameworks 93 | - [Delgan/loguru](https://github.com/Delgan/loguru) 94 | - [Coloredlogs](https://github.com/xolox/python-coloredlogs) 95 | - 96 | 2. Log Management System 97 | - [Sentry.io](http://sentry.io) 98 | - [Loggly.com](https://loggly.com) 99 | 3. Distributed Tracing 100 | - [Jaeger](https://www.jaegertracing.io/) 101 | 102 | 9. Real-Time Communication 103 | 1. [SignalPy](https://pypi.org/project/SignalPy/) 104 | 2. [Socket.IO](https://python-socketio.readthedocs.io/en/latest/) 105 | 106 | 10. API Clients 107 | 108 | 1. REST 109 | 110 | 2. [GraphQL](https://graphql.org/) 111 | 112 | 113 | 11. Good to Know 114 | 115 | 1. Machine Learning 116 | 1. [NLTK](https://www.nltk.org/) 117 | 2. [TensorFlow](https://www.tensorflow.org/) 118 | 3. [Keras](https://keras.io/) 119 | 4. [PyTorch](https://pytorch.org/) 120 | 5. [Scikit-Learn](https://scikit-learn.org/) 121 | 6. [Pandas](https://pandas.pydata.org/) 122 | 7. [Numpy](https://numpy.org/) 123 | 124 | 125 | 126 | 12. Testing 127 | 128 | 1. Unit, Behavior, Integration Testing 129 | 1. [Pytest-mock](https://pypi.org/project/pytest-mock/) 130 | 2. [Testify](https://github.com/stretchr/testify) 131 | 3. [Robot](https://robotframework.org/#/) 132 | 4. [Pytest](https://docs.pytest.org/en/6.2.x/) 133 | 5. [Doctest](https://docs.python.org/3/library/doctest.html) 134 | 6. [Pytest-bdd](https://docs.pytest.org/en/6.2.x/) 135 | 7. [Cucumber](https://cucumber.io/docs/installation/python/) 136 | 8. [Dockertest](https://github.com/ory/dockertest) 137 | 2. E2E Testing 138 | - [Selenium](https://github.com/tebeka/selenium) 139 | - [Endly](https://github.com/viant/endly) 140 | 141 | 13. Task Scheduling 142 | 143 | - [scedule](https://schedule.readthedocs.io/en/stable/) 144 | - [Advanced Python Scheduler](https://apscheduler.readthedocs.io/en/3.x/) 145 | 146 | 14. MicroServices 147 | 148 | 1. Message-Broker 149 | - [RabbitMQ](https://www.rabbitmq.com/tutorials/tutorial-one-go.html) 150 | - [Apache Kafka](https://kafka.apache.org/) 151 | - [ActiveMQ](https://github.com/apache/activemq) 152 | - [Azure Service Bus](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview) 153 | 2. Building message-driven 154 | - 155 | 3. Frameworks 156 | 157 | 4. RPC 158 | 159 | 15. [Python-Patterns](https://refactoring.guru/design-patterns) 160 | 161 | ## Wrap Up 162 | 163 | If you think the roadmap can be improved, please do open a PR with any updates and submit any issues. Also, I will continue to improve this, so you might want to star this repository to revisit. 164 | 165 | Idea from : [Go developer roadmap](https://github.com/Alikhll/golang-developer-roadmap) 166 | 167 | ## Contribution 168 | 169 | The roadmap is built using [Draw.io](https://www.draw.io/). Project file can be found at `python-developer-roadmap.xml` file. To modify it, open draw.io, click **Open Existing Diagram** and choose `xml` file with project. It will open the roadmap for you. Update it, upload and update the images in readme and create a PR (export as png with 400% zoom and minify that with [Compressor.io](https://compressor.io/compress)). 170 | 171 | - Open a pull request with improvements 172 | - Discuss ideas in issues 173 | - Spread the word 174 | -------------------------------------------------------------------------------- /hello.py: -------------------------------------------------------------------------------- 1 | # Says Welcome to Python Developer Roadmap Users 2 | def welcome(): 3 | """ Function print outs welcome to python developer roadmap """ 4 | print("Welcome to Python Developer Roadmap") 5 | 6 | def goodLuck(): 7 | """ Function print outs finishing sentence """ 8 | print("Good luck, Have fun and DO NOT FORGET PRs ARE WELCOME") 9 | 10 | 11 | if __name__ == "__main__": 12 | welcome() 13 | goodLuck() -------------------------------------------------------------------------------- /python-developer-roadmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ErdemOzgen/Python-developer-roadmap/217d745f06d978a95083a2a88951030488326412/python-developer-roadmap.png -------------------------------------------------------------------------------- /python-developer-roadmap.xml: -------------------------------------------------------------------------------- 1 | 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 --------------------------------------------------------------------------------