Programming methodologies, their objectives and their nature