Algorithmic thinking as a prerequisite of improvements in introductory programming courses