This course provides an introduction to computer organization and architecture. Emphasis is placed on understanding the implications of computer hardware, the operating system, and compilation system, on the performance and security of written code. Students learn basic C programming and the IA32 assembly language. Topics covered include basic computer organization, reverse engineering, buffer overflow, pipelining, the memory hierarchy, code optimization, and process creation. Students also gain exposure to topics in concurrency and parallel computing through the POSIX API. In addition to theory, students gain practical real-world experience using tools for profiling and debugging, including Valgrind and GDB. By the end of this programming intensive course, students will understand how the fundamental principles of computer organization impact their ability to write efficient code.