On programming theory