This document presents an elementary and unified approach to program correctness through the algorithmic language DHL. It aims to unify Hehner's recursive predicative programming theory with Dijkstra's iterative style without higher-order logic. The document defines basic concepts of Hehner's predicative programming theory, special specification notations, and refinements. It also outlines an algorithmic scheme for Dijkstra's guarded commands and definitions for user-defined functions and implemented expressions in a programming language.