A data type (or “type”) is simply a classification of the attributes of the data that we are entering into the program. In a computer, you have the RAM (random access memory) and the CPU (Central Processing Unit), when you write a program which manipulates data, you need to classify what that data will look like so the ram may store it efficiently and the CPU will be able to use it correctly. You wouldn’t want your computer to try to perform a computation on the wrong data types (multiplying an integer by a string for example.) In even more extreme cases where you are using composite typed data such as an object, you can run into even worse problems without a static type system or dynamic type inference (the compiler infers what the data is during runtime.)
A very simple way of understanding a type is to talk about material things in the real world. For example, if we think about apples and bananas, we know that they both have a specific and distinct set of characteristics despite them both being a type of fruit. We can reason about apples and bananas individually as apples and bananas respectively or we can reason about both of them as fruit together. If we then try to start reasoning about something that isn’t a fruit, apple, or banana; say we throw a bunch of trucks into our collective pile of things; it becomes much harder for us to reason about all of the objects together.
Ultimately, the problem occurs because there are no categories like “fruit” that can cover all three of these items anymore except for extremely general and useless categories such as objects, items, or matter etc. As human beings, we can dynamically assign a “type” or category to everything that we encounter in our world. In English, at least, we are constantly using a mixture of static types and type inference to define data we encounter from day to day.