we discuss the main models of computation,
the basic types of architectures,
and language features needed to specify systems.
We also give an overview of a generic methodology for
designing systems, that include software and hardware
parts, from executable specifications.