# Why do you want to learn Django?
**There is no perfect framework.** If you’ve invested several months into learning Node.js or Serverless web apps and are consider switching, I highly recommend you stay on your current course! Not to say I believe in the sunk cost fallacy, but the fastest way to build apps is to use the technology that you know best. Unless you’re creating services with hundreds of thousands of users, you will be able to build your project no matter what tech you choose.
Remember, for professional development (hobby aside), time is better spent building product rather than learning new tech. Having something to show for your effort is 10x more powerful that being able to explain nuances of a certain tech in a workplace.
\* If you want to work at small startups, many, many, many are now using Node.js/React/Typescript stack. I highly recommend exploring that option if you have the freedom and time to.
## Software Companies using Django
Instagram, National Geographic, Mozilla, Spotify, Pinterest, Disqus, Bitbucket, Eventbrite, Posthog (YC)
## Principles to building products with Django
**Product-first, tech second**
Mock up what you want to build and decide on the features before you start building and then figure out how to build it. This is how jobs are, where you constantly have to learn how to accomplish a task, rather than shape the tasks around your current ability. Too often I see developers that decide which features to build based on their current ability, this fixed-growth mentality will hurt you in the long run. Your goal is to get to a point where you get product requirements on something you haven’t built before and you can go off and build it.
In order to move your life forward, you need to ship products quickly. If it’s a side project, glue it together, if you’re working at a startup, do the minimum amount necessary to get it out the door. Why not spend another few days polishing your code? Because no one might use it. You don’t know the value of a project or feature until someone uses it and adding the polish and sacrificing your time might be a waste of your time.
**Low Effort, High Impact**
In order to move projects quickly to the finish line, you want to map out tasks by effort and impact and do the tasks that require the least effort and have the most impact first. Don’t even bother doing the tasks that are in high effort, low impact.
## What’s Django good for?
**Apps with a lot of data-processing**
Django is great for building web apps with heavy data processing services, AI engines. In my opinion, it’s the best option for creating Saas apps and other info product tools.
It’s got a strong community that’s both very collaborative and loves to help. Most technology problems that you face have already been solved for you and are a few google searches away.
It’s got strong conventions and many resources on best practices to guide you on how to build good software.
## What’s it bad for?
It’s not compatible with anything crypto or web3. Use Rust for your blockchain code and Next.js and Vercel for front end code.
Mobile development in startups is mostly concentrated in React Native these days, big corps use Swift and Java.
**Not enough convention**
If you prefer even more convention than Django, you may want to consider Ruby on Rails. Ruby on Rails has an even faster setup time than Django, though it is less performant.
If you feel that you need a strongly typed language with faster load times, Node.js/React/Typescript may be your weapon of choice. Many YC startups have now adopted this stack. It’s the “millenial/gen-z” stack of choice.
## Start With
[**Django Tutorials**](https://docs.djangoproject.com/en/4.0/intro/tutorial01/) **- skip over templates section**
[**Django Rest Framework**](https://www.django-rest-framework.org/)**,** [**Django CookieCutter**](https://github.com/cookiecutter/cookiecutter-django)
**Use an auth provider like** [**Firebase**](https://firebase.google.com/) **(controversial opinion)**
Django has an amazing library called [django-allauth](https://django-allauth.readthedocs.io/en/latest/installation.html). Great security, strong opinions on convention, and has built-in features like social login, etc. I recommend using an auth provider like [firebase](https://firebase.google.com/) to skip the learning on this if your job doesn’t require it because auth itself is fairly complex and you might sink weeks into learning something that you can abstract away using a service.
**React Tutorials (Skip Typescript)**
Many Django people are learning React but the favorite is still to use the built in templating language. There are many websites that still use django-templates, but with the info that we have now, it’s a decent long-term bet to invest some time into learning React.
New apps being made in Django use Django backend as an api and React SPA to connect to it. You’ll have 2 advantages doing it this way:
1. Job opportunities, most companies are starting with or migrating to React, startups and big corp alike. It is the most popular frontend technology today and still growing at breakneck speed.
2. You can take advantages of the innovation in the React ecosystem, like Tailwind! Furthermore, if you decide that you hate Django (inconceivable!), you can always swap out the backend only and keep the frontend.
**Cronjobs with Celery and Redis**
Celery has a steep learning curve but even large companies use it, so it’s absolutely worth learning.
Don’t waste energy on this decision. Postgres. Next.
**Sample Projects - increased complexity for both Django and React**
* A communal job board app, let anyone submit a job (without creating an account) and display all the jobs in a single page.
* You’ll need a single POST and GET request in your backend and learn how to use React Tables and CSS styling.
* Welcome to deploying Django apps, which are famously a pain. Get through it, make it work, and document the process so you don’t waste time on it again.
* A forum, similar to [indiehackers.com](http://indiehackers.com/), where users can create an account and post links and have conversations.
* You’ll need a few requests in your backend and be able to handle the auth flow. You’ll also need to test your app! Make a few user accounts by yourself and test the flow before inviting your friends to have conversations with you on the app. Write a few tests, mostly integration tests.
* You’ll have to learn how to sanitize data input and make product decisions on how to render text in your forum. How will you handle links, swear words, limit character count, etc.
* Web Scraper with an email notification system.
* In my opinion, python is awesome to build web scrapers on. String parsing and scripting are its strong suit. Scrape some websites on a timer using a cron job and notify people by sending them an email.
* Exercise your creativity on this one, this is an intermediate level project.
**Reuse code as much as possible**
Copy and paste your POST and GET Requests, your React Components, tests, etc.
1. [Simple is Better Than Complex](https://simpleisbetterthancomplex.com/)
2. [Real Python: Python Tutorials](https://realpython.com/)
1. [Dennis Ivy](https://www.youtube.com/channel/UCTZRcDjjkVajGL6wd76UnGg)
2. [Corey Schafer](https://www.youtube.com/channel/UCCezIgC97PvUuR4_gbFUs5g)
4. [Very Academy](https://www.youtube.com/c/veryacademy)
1. [Carlton Gibson](https://twitter.com/carltongibson) (@carltongibson)
2. [Jeff Triplett](https://mobile.twitter.com/webology) (@webology)
Edit: If anyone needs a more [readable version](https://developers.hshidara.com/blog/the-django-beginner-learning-plan-i-wish-i-had/)