A convolutional neural network applies the same small filter at every position of an input, so it learns a pattern once and recognises it anywhere. It solves the parameter explosion that a fully connected layer would suffer on an image, where each pixel would need its own weight. It exists because locality and translation invariance are true of images and largely untrue of language, which is why vision and language ended up with different architectures.
ViT splits an image into fixed-size patches, embeds each as a token, and processes the sequence with an ordinary transformer. It solves the problem that convolutional architectures bake in assumptions about locality that a large enough model does not need. It exists because it showed that the architecture which won in language transfers to vision once there is enough data, which removed the main reason the two fields had different toolkits.