What is miniconda and why miniconda?

Miniconda is essentially a mini version of conda.

So what is conda?

Conda is, as I understand it, two things. It is a package distribution system (think of it as apt for Ubuntu or pip for python), as well as a environment management system.

Why conda?

Conda is, essentially a tool that helps managing your packages. A tool is created to solve a n existing problem. I believe you can never understand a tool if you don't understand the problem that the tool is designed to solve. So before I go in about conda, these are the problems I believe conda is trying to solve.

Problem 1: package allocation

I believe this is a common problem for all Windows users. Sometimes, you need a new software on your computer, say winzip. Naturally you'd google winzip download and try to find the least dodgy looking website, before you can unzip a file some thoughtless person sent you.

Have you not wished for some sort of magic where you can tell your computer to "download winzip" and before you realise it's done? A package distribution system does exactly that. It saves you the energy to look for the most up to date distribution on the dodgy internet and everything can be installed by "conda install"

Problem 2: Dependencies

Another common problem, maybe not very common nowadays, but those who have survived the age of XP will remember. You just bought a new game, you installed it on your computer. As you are so ready to give it a go, a error pops up saying it couldn't find a file with a very long and confusing name. Now you go google the error, finds out that you need to have a package (the common ones I can remember are .NET framework, C++ distributions)

Now comes conda, the package distribution system automatically sorts out your dependency so you don't have to face an error and google it and install it and repeat many times. When you install a package with conda, it will also install all the prerequisite packages for you.

Problem 3: Multiple environments

This might be one of the biggest headache beginners in python face.

Remember the python 2.7 you installed on your computer when you started learning python? Remember the python 3.5 you installed when a package requires a python 3? Tried to install numpy using pip but couldn't find it in your python3? Sometimes get a bit paranoid about how many packages you have accumulated in your computer over the years on learning python but never used again?

Or if you are a bit further down the road. You inherit some code written in ancient time and it only works with an ancient distribution of numpy? What do you do? You downgrade your numpy then all of a sudden all the other packages that depends on numpy stopped working, boom.

And conda comes in and save your ass again. This is where the environment manager comes handy. You can have an individual environment for each project you have. A project needs CUDA 11.2 and another needs 10.1? Easy, just put them into different virtual environments. Just conda create env and conda activate env.