Most programming languages are designed to be applied imperatively i.e. the programmer has to lay down the sequence of steps to be taken to modify the input to the required output. This lends itself quite naturally to algorithmic thinking.
On the flip side, declarative design is built around the idea of states and static descriptions.
Each of these approaches has its merits and demerits but any good developer will know which to use when.