An introductory textbook on software specifications suitable for programming students with some background in discrete mathematics and logic. The author adopts a unique ''hands-on'' approach presenting basic concepts in the context of numerous small programming examples. Topics include assertional notations state diagrams grammars and regular expressions.