Introduction to the intellectual enterprises of computer science and the art of programming. This course teaches students how to think algorithmically and solve problems efficiently. Topics include abstraction, algorithms, data structures, encapsulation, resource management, security, software engineering, and web programming. Languages include C, Python, and SQL plus HTML, CSS, and JavaScript. Problem sets are inspired by the arts, humanities, social sciences, and sciences. The course culminates in a final project. Designed for concentrators and non-concentrators alike, with or without prior programming experience. Two-thirds of CS50 students have never taken CS before. In CS50x Tehran we have adapted all the contents of this course to our language.