Title: Principles of Computing
This course introduces fundamental computing principles for students with little to no computing background. To demonstrate these principles, the Python programming language will be used, especially for being characterized with simple, clean, and well-designed basic programming structures. As a result, this will allow students to primarily focus on understanding and applying these principles, without getting bogged down in arcane language details.
To this end, the major principles this course will teach include: (1) an orderly software development process, which encompasses problem analysis, program specification, design, implementation, debugging, testing, and maintenance, (2) programming constructs, which involve conditioning, sequencing, selection, iteration, and recursion, (3) data organization such as lists, tuples, and dictionaries, (4) reduction of code duplication and increase of program modularity using functions and objects, (5) design and implementation of moderately complex programs using object-oriented techniques such as encapsulation, polymorphism and inheritance, (6) use of computational principles in problem-solving like divide and conquer, randomness, and simulation, and (7) classification of computational problems based on complexity and non-computable functions, among others.
To help students hone their programming skills and deepen their understanding of computing principles, the course will include a weekly homework, which involves two types of problems, programming and conceptual. In addition, each student will design, implement, and debug a large programming project by the end of the semester, thus getting the chance to piece together all the principles and skills covered throughout the semester in one solid crucible.