Toggle Home compiler design algorithms data structure operating system software engineering C java OOP