A distinctive feature of software‐defined networking (SDN) is a logically centralized control plane realized using multiple physical controllers. The placement of the controllers, the so‐called controller placement problem (CPP), is a crucial design issue. It influences network performance parameters such as latency, flow setup time, network availability, load balance of the controllers, and energy consumption. In this article, we illustrate the formulation of these CPP objectives. We categorize the CPP design solutions as either static or adaptive. In adaptive CPP, the solutions proposed dynamically adapt to the number of controllers required and the switch to controller mapping to varying network traffic. We further differentiate adaptive CPP as wired or wireless. The optimization strategies adopted by the papers are analyzed and grouped into five categories: exact, heuristic, meta‐heuristic, clustering, and game theory. The merits and demerits of each approach are discussed. In conclusion, we outline the research challenges worth investigating.