Computer programming involves designing, writing, testing, debugging, and maintaining source code to create programs that exhibit desired behaviors. Programming languages are used to write source code, with programming tracing back to ancient mechanical devices. The process requires expertise in many domains, from application knowledge to algorithms. Efficiency, reliability, robustness, usability, portability, and maintainability are important characteristics for evaluating programs.