We will present a general methodology, the heterogeneous multi-scale method (HMM), for the efficient numerical simulation of problems with multiple scales. The method relies on an efficient coupling between the macroscopic and microscopic models. In case when the macroscopic model is not explicitly available or invalid, the microscopic solver is used to supply the necessary data for the macroscopic model. Scale separation can be exploited to considerably reduce the complexity of the microscopic solver. Besides unifying several existing multiscale methods such as the ab initio molecular dynamics, quasi-continuum methods, projective methods for stiff systems, HMM also provides a methodology for designing new methods for a large variety of multiscale problems. We will discuss applications to problems such as homogenization, dislocation dynamics, crack propagation, and complex fluids.