Teaching Software Synthesis: from hardware to software synthesis