Duality and Self-Duality in Mathematical Programming