Expectations from academics and the industry, to have students and employees who are independent and capable of quickly writing code to resolve work-related issues, are growing high. However, teaching and learning programming is certainly not easy and very challenging. Literature shows that a lot of work has been done to improve this. Nonetheless, it is evident that little effect of this work has had impact on the actual practice of teaching and learning of Software Development programming skills. This gap has been addressed in this paper to enhance the teaching and learning process of programming to students. Furthermore, teaching programming literature research has been classified into 3 categories; teaching approach, teaching model and teaching tool. As a result, this paper proposes the following objectives to tackle this problem:Identify what research has found out about how to teach and learn programming and other aspects of Software Development Investigate how and why this research has not been applied to teaching Software Development How more use could be made of it to improve teaching?Finally, an Enhanced Teaching Model (ETM) has been proposed, which combines several teaching approaches and models from literature. In addition, this model uses teaching tools to provide goal-focused exercises, assess students' performance and obtain feedback from the learning community. Last but not least, a discussion about the future work required in order to assess the model and thus improve it.