This course introduces you to the discipline of Computer Science. It is not, as many people think, a course on how to use computers! The course covers all the areas of the discipline, starting from algorithms and their efficiency, then moving to the actual machine, Boolean logic, and the main hardware components. The course then moves to software, from machine language to assembly and high level language programming. Following, we will discuss other topics, such as compilers, models of computation and others. The lab component of the course consists of a software simulation package with practical exercises for each chapter.