The Art of Writing Software