For efficient detailed aerodynamic or aeroacoustic designs as well as optimal active flow control, the use of adjoint approaches is an essential ingredient. Using adjoint methods, one is able to compute the gradients needed for sensitivity-based optimization and control methods with a numerical effort independent from the number of design or control variables. The principal ideas underlying adjoint approaches will be presented, we discuss their implementation, and their efficiency will be demonstrated by several design and control examples in CFD and CAA.