Specifying Software: A Hands-On Introduction