Also a simulator, like freely available LTSpice, can be handy. You can build a PID controller and generate different stimulus (sine, step, pulse signals) with an ease, and put different loads (resistive, capacitive, inductive, combinations of R L C) and see how the control loop behaves. Simulators allow paramteric sweeping, which is a nice feature to study "how changing this parameter will affect loop stability or loop behaviour". Of course, building something is the ultimate breadboard where the theory meets practice.
Ps. Simulator should be considered only as a fast calculator, not a substitute of intelligence. Simulator is a good example of a SISO device ie. s**t in - s**t out. So, if the simulation model is bad, the results will be bad - that is typically easy to detect. If the simulation model is good, the results are typically fine - and the user is happy. Worst yet, it the simulation model is wrong and you do not know that, you may still get results which look good until you build the circuit and face the reality. Simulators are nice to have, but one shouldn't trust them too much.