Facilitating Students-Driven Learning of Computer Programming with Technology