Движок, двигатель (англ. engine) - обособленный компонент приложения, реализующий некоторую универсальную часть его функциональности. Ключевая особенность движка - абстракция, независимость от приложения. В движок выносится наиболее общая функциональность с целью повторного использования (code reuse) в других проектах. Вынос функциональности в движок является частным случаем модульности. Родственным понятием является фреймворк - каркас приложения, содержащий типовую функциональность, где специализированный код добавляется методом инверсии контроля. Движок, в отличие от фреймворка, обычно не является каркасом приложения и позволяет программисту самостоятельно решать, в какой последовательности делать вызовы процедур. Тем не менее, игровые фреймворки, особенно крупные, также принято называть движками.
Движок может представлять собой библиотеку исходного кода, статическую или динамическую библиотеку. Последний вариант наиболее универсален, поскольку позволяет использовать движок с различными языками программирования. Архитектурно движок часто делится на фронтенд и бэкенд. Фронтенд в данном случае - пользовательский программный интерфейс (структуры данных и функции, либо, в ООП-языках, классы). Бэкенд - реализация интерфейса, с которой пользователь напрямую не взаимодействует. Она обычно делается заменяемой. Например, графический движок может иметь переключаемые бэкенды на основе Direct3D и OpenGL, тогда как фронтенд является абстрактным и независимым от конкретной низлежащей технологии.