A flexible and systematic teaching framework to develop cognitive skills through programming courses | IEEE Conference Publication | IEEE Xplore