MASTER OF SCIENCE IN TECHNICAL EDUCATION 
(COMPUTER SCIENCE AND ENGINEERING)

Challenges Faced by Students Towards Learning Computer Programming Courses in Uganda Universities

BY

Mukasa Abubakari . J . Mubiru
Student No: 153605
MScTE (CSE)
	
Supervisor: Dr. Md. Abu Raihan
Associate Professor, TVE Department

DEPARTMENT OF TECHNICAL AND VOCATIONAL EDUCATION ISLAMIC UNIVERSITY OF TECHNOLOGY (IUT)                                 DHAKA, BANGLADESH

NOVEMBER, 2017

Challenges Faced by Students Towards Learning Computer Programming Courses in Uganda Universities

BY

Mukasa Abubakari . J . Mubiru
Student No: 153605
MScTE (CSE)

	
 A Thesis Submitted in Partial Fulfillment of the Requirements for the award of
Master Degree of Science in Technical Education with Specialization in (Computer Science and Engineering)

DEPARTMENT OF TECHNICAL AND VOCATIONAL EDUCATION (TVE) ISLAMIC UNIVERSITY OF TECHNOLOGY (IUT)  
 ORGANISATION OF ISLAMIC COOPERATION (OIC)
BOARD BAZAR, GAZIPUR-1704, DHAKA-BANGLADESH   
                            
NOVEMBER, 2017

RECOMMENDATION OF THE BOARD OF EXAMINERS 
The thesis titled “Challenges Faced by Students Towards Learning Computer Programming Courses in Ugandan Universities” submitted by Mukasa Abubakari J. Mubiru, Student No. 153605, Academic Year 2016-2017 has been found satisfactory and accepted as partial fulfillment of the requirement for the degree of Master of Science in Technical Education (CSE).
                               
BOARD OF EXAMINERS

Dr. Md. Abu Raihan                                                                  			          Chairman 
Associate Professor      								         (Supervisor)                                             
Department of Technical and Vocational Education (TVE) 
Islamic University of Technology (IUT) 
Gazipur, Bangladesh 

Prof. Dr. Che Kum Clement       	                                                            	                       Member       
Professor									        (Ex-officio)
Head of Department of Technical and Vocational Education (TVE)		 	         
Islamic University of Technology (IUT)  
Gazipur, Bangladesh 

Dr. Md. Shahadat Hossain Khan                                                  			         Member
Assistant Professor             	 	 	 	 	 	 	 	 
Department of Technical and Vocational Education (TVE) 
Islamic University of Technology (IUT)  
Gazipur, Bangladesh 

Prof. Dr. Mohsin Uddin                                                                 			         Member 
Professor                                                    
Bangladesh Open University
Board Bazar - Gazipur, Bangladesh 

DECLARATION
This is to certify that the work presented in this thesis is the outcome of the investigation carried out by Mukasa Abubakari J. Mubiru under the supervision of Dr. Md. Abu Raihan in the Department of Technical and Vocational Education (TVE), Islamic University of Technology (IUT). Gazipur, Bangladesh. I hereby declared that this thesis or part of it has not been submitted to any other institution of learning for any award (Degree or Diploma).

 
			
Dr. Md. Abu Raihan		Mukasa Abubakari J. Mubiru	
Supervisor and Associate Professor        
Department of Technical and Vocational Education (TVE) 
Islamic University of Technology (IUT) Gazipur, Bangladesh 
		Student No. 153605 
Academic Year: 2015-2017 	

DEDICATION
I dedicated this work to my parents, brothers, sisters and friends. May the almighty Allah count the support they have been rendering to me upon their heavenly treasures, AMEEN!

ACKNOWLEDGEMENT
First and foremost, I thank the almighty Allah (S.W.A) for giving me the wisdom, strength and health to complete the course and the final thesis successfully. I acknowledge the effort of my supervisor Dr. Md. Abu Raihan, Associate Professor and Professor. Dr. Che Kum Clement the head of TVE department for their vital suggestions, criticisms, contributions and encouragement throughout the programme, which enabled me, cross over the hurdles. 
Furthermore, I owe invaluable appreciation to my beloved family, my late father Mubiru Bakali and my late mother Zaituna Namilimo Mubiru for their parental support and guidance may Allah (S.W.A) grant them Jannah. Moreover, my appreciation go to my mothers Mrs.Kabugho Gertrude and Eyiri Hadijah for kind treatment and encouragement. Many thanks to my uncles Sheikh Shaban Ramadhan and Hajji Hattibu Ssemuwemba Rashid who were always there for me in whatever situation; may Almighty Allah (S.W.A) rewards you abundantly.
Special thanks go to my brothers, sisters and friends most especially Dr. Nsubuga Muhamad, Nsubuga Juma, Nansubuga Halima and Namutebi Sarah for their endless support and motivation. 
Finally, I convey my deep gratitude to Mr. Adam A. Alli for his overwhelming guidance, support, and suggestion in the actualization of this thesis. Likewise, I will not forget to acknowledge the effort of my course mates, colleagues especially Ugandan Community at Islamic University of Technology (IUT-2017) for their support and encouragement.

ABSTRACT
Computer programming is a core components important to the curriculum of Computer Science & Engineering, Information Technology, Electronic Electrical Engineering, Software Engineering and other studies, Programming is also required in most of the fields of study including Science, Mathematics, and Engineering at tertiary levels. However, the subject is considered, complex, difficult and classified as part of the seven major challenges in computing education. In this research, a study was conducted to investigate challenges faced by students towards learning computer programming courses in Uganda Universities. The main objective of this study was: Identify the major challenges facing students while learning Computer Programming Courses in Uganda Universities. This thesis consist of five (5) chapters, in chapter 1: an introduction has been given, chapter 2: consist the literature review, Chapter 3: consist of methodology, chapter 4: consist of analysis whereas chapter 5: concludes to the thesis with findings and recommendation. The study involved 105 respondents from student’s population of final year students in three(3) universities looking at computer science domain only. In specific from Computer Science & Engineering, Information Technology, and Software Engineering. During the study, we mapped out their opinions of learners by considering programming skills, methods used in teaching and how to improve the learning of the subject. As results, we point out from statistical analysis that the majority of the respondents has low opinion to identification of the major challenges facing students while learning computer programming. On the other hand, the majority of the respondents disagreed that the methods most teachers follow in teaching computer programming courses need to be changed. In addition, majority of students agreed that practical lessons, hands-on projects were very helpful for them to learn programming. The major factor influencing students’ ability to programming that lecturers do not provide enough content. Finally, the researcher provided means on the how to improve on the learning of computer programming courses.

Table of Contents
RECOMMENDATION OF THE BOARD OF EXAMINERS……………………... i
DECLARATION……………………………………………………………………. ii
DEDICATION…………………………………………………………………….... iii
ACKNOWLEDGEMENT………………………………………………………….. vi
ABSTRACT………………………………………………………………………….v
LIST OF TABLS………………………………………………………………….... vi
LISTS ACRONYMS………………………………………………………………... ix
CHAPTER ONE: INTRODUCTION……………………………………………………...… 1                                                                                                                 
1.1	Background of the study......................................................................................... 1
1.2	Statement of the problem........................................................................................ 2
1.3	Objective of the study……………………………………………………………. 2
1.4	Significance of the study………………………………………………………… 2
1.5	Delimitation of the study………………………………………………………… 3
1.6	Definition of terms……………………………………………………………….. 3
CHAPTER TWO: REVIEW OF RELATED LITERATURE……………………………... 4
2.0	Introduction………………………………………………………………….…… 4
2.1	Challenges in Learning Computer Programming…..………………………….… 4
2.1.1	Characteristics of Novice Programmers………………………………….….. 6
2.2	Different Aspect of Programming……………………………………………….. 7
2.3	Object-Oriented vs Procedural Approaches………………...…………………… 9
2.4	Learning Theories Related to Learning of Computer Programming….. …...…... 11
2.4.1	Constructivism…………………………………...………………………….. 11
2.5	Position of Programming Subject in the Curriculum……………………………. 11
CHAPTER THREE: METHODOLOGY…………………………………………….15
3.0 Introduction............................................................................................................ 15 
3.1 Research Design..................................................................................................... 15
3.2 The Research Participants………...………………………………………….….. 15
3.3 Research Tools …………………………………………………………………...16
3.5 Data Collection Procedure.................................................................................... 17
3.7 Data analysis Precedure.........................................................................................17
3.10 Ethical consideration…………………………………………………………... 18
CHAPTER FOUR: ANALYSIS AND DATA INTERPRETATION….………....... 19
4.0 Introduction……………………………………………………………………... 19
4.1 Demographic Data….………………….……………………………………… .. 19
4.2 Analysis on the challenges facing students while learning computer programming………………………………………………………………………………………………….………20
4.3 Analysis on the methods most teachers follow in teaching computer 
Programming courses …………………………………………………………………………………….……..25
4.4 Analysis on how to improve learning computer programming…………………….……29
CHAPTER FIVE……….……………………………………………………………34
DISCUSSION OF FINDING, CONCLUSION AND RECOMMENDATION….… 34
5.0 Introduction……………………………………………………………………... 34
5.1 Discussion of findings…………………………………………………………... 34
5.1.1 Findings on the Challenges Facing Students while Learning 
Computer Programming Courses………………………………………..34
5.1.2 The Methods Most Teachers Follow in Teaching Computer 
Programming Courses…………………………………………………………….......35
5.1.3 How to Improve Learning Computer Programming Courses……………...…...36
5.2 Implication of the Research…………………………………...….….38
5.3 Conclusion……………………………………………………………………….. 39
5.4 Recommendation…………………………………………………………….…... 39
5.5 Suggestion for Further Studies…………………………………………………....40
References………………………………………………………………..….….….... 41
Appendix ……………………………………………………………………...…...... 45

LIST OF TABLES
Table 3.1: Showing Distributions Sample Details …………………..……….….…. 16
Table 3.2: Five (5) Point Likert Scale ……………………………..…………..…… 
Table 3.3: Interpretation of weighted average based on five point Likert scale....…. 18
Table 4. 1: Demographic information ………………………..………………….…. 19 
Table 4.2: Analysis on the challenges facing students while learning computer programming courses using Likert scale ………………………………………….... 20
Table 4.3: Analysis on the methods most teachers follow in teaching computer programming courses …………………………………...………………………….. 25
Table 4.4: Analysis on how to improve learning computer programming courses ... 29

ACRONYMS 

ABBREVIATION			        ACRONYM 	
ICT				-	Information and Communication Technology
CP 				-	Computer Programming
SPSS				-	Statistical Package for the Social Sciences 
UNCHE			-	Uganda National Council for Higher Education
HCI				-	Human Computer Interaction 
c2				-	Chi Square Test
c2 o 				-	Chi Square Critical Value
c2 c				-	Chi Square Observed Value
W.M				-	Weighted Mean
UCE				-	Uganda Certificate of Education
UACE				-	Ugandan Advanced Certificate of Education
ISP				-	Internet Service Provider
CSE                                        -           Computer Science & Engineering
KYU				-	Kyambogo University
IUIU				-	Islamic University in Uganda
BU				-	Busitema University
RENU				-	Research and Education Network of Uganda

CHAPTER ONE
1.0 INTRODUCTION
1.1 Background of the Study
Computer programming skills establish one of the core competencies of a graduate from computer science, computer engineering, information technology and generally, from the engineering discipline. Computer programming courses are alleged as uniquely demanding, characterized by the large amount of exercises that students are projected to practise intensively in order to progress good programming skills and gain experience in debugging (Lam, Chan, Lee, & Yu, 2008). However, students today easily lose interests and enjoyment in learning computer programming, particularly when they experience repetitive failure in practising on their own. There was need to improve the teaching and learning of computer programming thus demands for different care to the factors affecting students’ learning motivation (Law, Lee, & Yu, 2010). 
The development of learning is dynamic in which knowledge acquisition and sharing are shaped by several factors (Govender, 2009; Lau & Yuen, 2009). In count to individual differences, learning motivation and effectiveness of students can be affected by environmental factors, for example the infrastructure, learning approach and social pressure from learning peers (Law, Sandnes, Jian, & Huang, 2009).
If  a student have the skill of computer programming courses, it can be a pleasing career. In recent years the demand for programmers and student interest in programming have grown rapidly, and introductory programming courses have become gradually popular. However Learning to program is difficult. Novice programmers suffer from a broad range of difficulties and shortages. Programming courses are generally regarded as difficult, and often have the highest dropout rates. It is recognised that it takes about 10 years of experience to fit a novice into an expert programmer (Winslow, 1996).
However, learning computer programming was admittedly difficult to students pursuing a computer science (CS) degree and to any other engineering courses. To teach in the introductory programming classes is also excessively difficult and they have high abrasion and a low success rate (Morrison & Newman, 2001). Due to the growing number of students offering introductory computer programming courses and inadequate teaching resources, students are not ready to get individualized attention and may learn the material poorly (Anderson & Skwarecki, 1986).
1.2	Statement of the Problem
In order to fill the above stated gap, this study was aimed to identify the students’ challenges towards learning computer programming in Uganda Universities.
1.3 General Objective
At the end of the study, the researcher aimed at finding out the challenges facing university students towards learning computer programming courses in Uganda universities.
1.3.1 Specify Objectives
The following Objectives were specifically used to guide the study. 
i.	Identify the major challenges facing students while learning Computer Programming Courses in Ugandan Universities.
ii.	Identify the methods most teachers follow in teaching Computer Programming Courses in Ugandan Universities.
iii.	Identify how learning Computer programming course can be improved in Uganda Universities.
1.4	Significance of the study 
i.	The finding is meant to be effective for lecturers and students in the domain by devising an efficient way for learning computer programming. 
ii.	 The study has great importance to a policy makers and lecturers in helping them to acquire the efficient techniques required to be used in teaching computer programming in the study area.
iii.	The results of the study is meant to bridge the abstraction that exist in computer programming whereby motivating the students to understand and like programming like other course of studies. 

1.5 Delimitations
The research is restricted to identify the challenges facing students towards learning computer programming courses, checking on techniques used by their lecturers while delivering the content to the students and how can learning Computer programming course be improved in Ugandan Universities. The study was conducted in Uganda, because of limited time frame,  the data was collected from three (3) higher institutions of higher learning in Uganda namely, Islamic University in Uganda (IUIU), Busitema University (BU) and Kyambogo University (KYU).  
1.6 Assumptions
The researcher assumes computer programming courses should be one of the best among the courses to be passed higher and the extent to which it’s applied varies from one lecturer to another. 
1.7 Definition of Terms
The researcher has defined the following definition for the study.
Higher Education in Uganda: The Uganda National Council for Higher Education (UNCHE) is a semi-autonomous government regulatory agency, responsible for the regulation of higher education in Uganda, the third-largest economy in the East African Community. UNCHE is also responsible for provision of guidance in the establishment of institutions of higher education and the provision of assurance that quality and relevant education is delivered, by the licensed institutions. (Nsibambi, 2014).
Learning: Is the processing and assimilation of what we hear, see or experience that alters or improves our knowledge, skills and attitudes.
Learning Computer Programming: (often simply called  programming or coding): is the craft of writing a set of commands or instructions that can later be compiled and/or interpreted and then inherently transformed to an executable that an electronic machine can execute or "run". Programming requires mainly logic, but has elements of science, mathematics, engineering, and many would argue art.
Skill: is a type of work or activity which required special training and knowledge.

CHAPTER TWO
REVIEW OF RELATED LITERATURE
2.0 Introduction
In this chapter, various studies relating to the challenges and solutions in learning computer programming in education, the Universities under study were observed. The emphasis is on novice programmers that are beginning their programming studies as reviewed. The main aim is to identify the gap needed to be addressed and the methodologies used by different authors in addressing related studies.
The approach which is common first in computer programming education is to teach the students the basics of a programming language and then guide students towards effective strategies for the complete programming process. However, the learning of the basic concepts is often emphasized; these form the basis for building more advanced skills.
Codewitz project (Byrne & G., 2001)  aims at adopting the learning of the basic concepts and structures by creating dynamic visual learning materials for students. Therefore to create effective visualizations and educational strategies for their use, it is necessary to review the research previously published in the field.
2.1 Challenges in learning Computer Programming
Learning to program is commonly measured to be difficult, and programming courses often have high dropout rates. It has even been said, that it takes about 10 years for a novice to become an expert programmer (Soloway, 1989). However many educational research has been carried out to identify the characteristics of novice programmers and to study the learning process and its influences to the different aspects of programming. Lately also differences between procedural and object-oriented education approaches have been studied, as Java, C# and C++ have become common educational languages. 
According to (Pollack & Scherz, 2003), the most referred method in programming among novice students is that of “bricolage”: Students develop programs in the computer, and likely to skip the phases of analysis and design. They develop their programs slowly by testing them on different examples of input. Novice students practicing “bricolage” are unable of explaining and modifying their algorithms (Kolikant & Pollack, 2004). In the link with this practice, novice programmers come up with mental or cognitive problems and wrong ideas about computing that make it difficult to understand the functioning of programs or the creation of algorithms. Misunderstandings can be recognised to the fact that students perhaps interpret computer programming as communication among humans (Dagdilelis, Satratzemi, & Evangelidis, 2004). 
 According to (M. Ben-Ari, 2001), Misunderstandings are difficult to change, unless students attain a model of a computer. 
For solving learning difficulties, educators apply learning theories to computer programming, in particular the constructivist learning theory (M. Ben-Ari, 2001; Exton, 2002; Gibbs, 2000; Gonzalez, 2004; Hadjerrouit, 2006; Lui, Kwan, Poon, & Cheung, 2004; Mead et al., 2006; Sajaniemi & Kuittinen, 2005; Wulf, 2005). They said that novice students need to build a valid model of a computer in order to compact with the difficulties of learning programming. Furthermore, the expertise in programming requires the acquisition of higher-order thinking skills, such as analysis, design, analogical thinking, reuse, evaluation, and reflection.
Currently, however, few educators systematically apply constructivism to the learning of computer programming (Berglund, Daniels, & Pears, 2006). As outcome, constructivist learning strategies to computer programming are only beginning to emerge.
Finally, involvements with blended learning models, which blend face-to-face learning and Web-based systems or similar software, are gradually becoming an attractive option as new innovative technologies become progressively available (Bonk & Graham, 2006). Nevertheless, uniting face-to-face learning with advanced information technologies cannot provide effective teaching and efficient solutions for learning, unless blended learning is designed in combination with effective learning strategies and approaches (De Luca, Beckmann, De Stefano, Matthews, & Smith, 2006). Currently, however, blended learning solutions to the programming problem are still in their early stages (Dodero, Fernández, & Sanz, 2003). This is not sufficient to draw general conclusions about the effect of blended learning on computer programming.
As a result, even if some progress has been made in solving some learning problems using learning theory and information technologies, the problems and troubles associated with the learning of computer programming remain to be researched. Some educators believe that the solving of the problems associated with the learning of computer programming requires a major change from old-style instructional methods to constructivist learning environments and situated learning (M. Ben-Ari, 2001; Wulf, 2005), commonly because computer programming is measured as a skill that students prerequisite to acquire through an active building process. Furthermore, according to (McDougall & Boyle, 2004), computer programming is fundamentally social activity as good programs are developed not in separation; instead they involve interaction with other people. Programming skills and techniques are learnt from a wide variety of sources; many of them are not classroom based.
We will now explore these issues more closely.
2.1.1 Characteristics of novice programmers
By novice programmer we mean one who lacks the knowledge and skills of programming experts. Many different separating factors have been studied in the literature and were also reviewed by Robins et al. (Rist, 1996). The novices are one who appears to be with limited surface knowledge of programs and generally approach programming "line by line" rather than at the level of bigger program structures. Novices don’t put in enough time in planning and testing code, and when essential, they try to correct their programs with small local fixes instead of more thoroughly reformulating programs (Kölling, 1996). The knowledge of novices inclines to be context specific rather than general (Kessler, 1989), and they also often fail to fix correctly the obtained knowledge. Actually, an average students does not like much progress in an introductory programming course (Kölling, 1996). This was also noticed by the study of McCracken et al. (Mayer & Dyck, 1989), who noticed serious shortages in student's programming skills in introductory courses.
Milne and Rowe (McCracken & Almstrum, 2001) studied in their survey the difficulties of C++ programming by piloting a web-based questionnaire for both students and teachers. However the evident results shows that students rated having less difficulties than gathered from teachers' answers. This was obvious result from the fact that students trust themselves that they have understood the subject, but teachers see the remaining shortages in programming course-works and examinations. This chains the empirical observations of many teachers; programming novices often fail to recognize their own shortages.
Also the performance among students is being affected by their personal properties. Therefore, no literature found on significant differences in learning that is caused by categories like nationality or gender but general intelligence and science or m mathematical abilities appear to be associated to success at learning to program (Bruce-Lockhart, 2000; University, 2017). Through the programming course, various student behaviours in challenging a problematic situation can be recognized. 
According to Perkins (Papert, 1989) named two main types: movers and stoppers.
“In problematic situation stoppers simply stop and abandon all hope of solving the problem on their own, while movers keep trying, modifying their code and use feedback about errors effectively. There are also extreme movers, "tinkerers", who cannot track their program, make changes more or less randomly, and like stoppers do not progress very much in their task”.
“All in all, there are effective and ineffective novices, i.e. students who learn without excessive effort and those who do not learn without inordinate personal attention according to (Rist, 1996)”. Naturally, students' personal learning strategies and motivation affect their success in learning programming strategies. Robins et al. (Rist, 1996) stated that "Given that knowledge is (assumed to be) uniformly low, it is their preexisting strategies that initially distinguish effective and ineffective novices". Practices and prior knowledge can also be a major source of errors, especially when trying to transfer a step-by-step problem-solving solution directly from a natural language into a program (Bonar, 1989). The differences between the programming language and a natural language can easily cause problems.
For example, some novices have understood that the condition in a "while" loop needs to apply continuously rather than it is tested once per iteration.
2.2 Different aspects of programming
Learning programming contains several activities, e.g., learning the language features, program design, and program comprehension. Typical approach in textbooks and programming courses is to start with declarative knowledge about a particular language. However, studies show that it is important to bring also other aspects to the first programming courses. 
Several common deficits in novices' understanding of specific programming language constructs are presented in Soloway and Spohrer (Rowe, 2000) and collected also by Pane and Myers (Naps & Almstrum, 2003). For example, variable initialization seems to be more difficult to understand than updating or testing variables. Bugs with especially loops and conditionals are common, and actions that take place "behind the scene", like updating loop variables in "for" loops, are difficult for students. Students have often many misconceptions in their understanding or implementing of recursion. Interestingly, novices were noticed to be more successful at writing recursive functions after learning about iterative functions, but not vice versa (Kay et al., 2000). Expressions that are syntactically close to each other or mean different things in different contexts cause often practical difficulties, e.g. "123" and 123, or word "static" in C language. The survey by Milne and Rowe (McCracken & Almstrum, 2001) showed that pointers seem to be very problematic, both according to the students and teachers. It was suggested that for this reason also dynamic memory allocation, reference parameters and other issues that need understanding of memory contents and pointers ranked high in the difficulty ratings. Also many other complex language features, like templates, casting, polymorphism and function overloading were considered difficult in the survey.
However, the main source of difficulty does not seem to be the syntax or understanding of concepts, but rather basic program planning (Rist, 1996). It is important to distinguish between programming knowledge and programming strategies (project, 2017). A student can learn to explain and understand a programming concept, e.g., what does a pointer mean, but still fails to use it appropriately in a program. Winslow (Soloway, 1989) noticed that students may know the syntax and semantics of individual statements, but they do not know how to combine these features into valid programs.
Even when they know how to solve the problem by hand, they have trouble translating it into an equivalent computer program. To help students to learn both concept knowledge and strategies for their use, Deek et al. (Davies, 1993) developed a problem-solving approach for a programming course. In their approach, language features were introduced to students only in the context to specific problems, little by little. This was shown to have positive effects on students' course results and their programming confidence. More discussion on problem-based learning in computer science courses can be found in Kay et al. (Committee, 2017).
Students have often great difficulties in understanding all the issues relating to the execution of a program. Du Boulay (Elenbogen & B.R. & McDonald, 2000) stated that "... it takes quite a long time to learn the relation between a program on the page and the mechanism it describes." Students have difficulties in understanding that each instruction is executed in the state that has been created by the previous instructions. He stated that there should be a simple "notional machine”, which simplifies the language and the machine so that all the program transformations can be visible. For example, LOGO language is an example of this kind of approach (Pane, 1996), and was commonly used in 80's in introductory programming education. It is based on the fact that all the instructions concern moving a turtle that is drawing on a display, thus making the program state and transformations clearly visible.
However, nowadays most of the universities are required to teach programming languages that are at least close to those used in the industry, and only rarely it is possible to select the approach for an introductory programming course based only on pedagogical reasons.
There is often little correspondence between the ability to write a program and the ability to read one. Programming courses should include them both. In addition, some basic test and debugging strategies should be taught (Soloway, 1989). Robins et al. (Rist, 1996) suggest that one more issue that complicates the learning of programming is the distinction between the model of the program as it was intended, and the model of the program, as it actually is. There are often mistakes in the design and bugs in the code. Also in working life, programmers face daily the need to understand a program that is running in an unexpected way. This requires an ability to track code to build a mental model of the program and predict its behaviour. This is one of skills that could be developed by emphasizing program comprehension and debugging strategies in the programming courses.
2.3 Object-oriented vs. procedural approaches
One of the claims for object-oriented approach has been that it is the natural way of conceptualizing real-world problems. However, studies do not seem to support that (Rist, 1996). Rest even suggests that object-oriented programming adds the complexity of class structure to a procedural system (Perkins & Hobbs, 1989). Therefore, teachers using object-oriented approaches should not think that object orientation is particularly easy for students, or that using OO from the very beginning relieves the teacher from teaching procedural programming issues.
Wiedenbeck et al. (Satratzemi & V. & Evagelidis, 2001) studied students' comprehension of procedural and object-oriented small programs. They used programs that were functionally similar, but written either in Pascal/C or C++. Students in two comparison groups studied the programs and then answered questions that tested their understanding of different features and states of the program. The results showed that the distributed nature of control flow and "hidden" actions (e.g. constructor or destructor calls) made it more difficult for novices to form a mental representation of an OO program than of a corresponding procedural program. The class structure of the OO program made it a bit easier to understand program entities (Sajaniemi & Kuittinen, 2003), but especially program flow and data flow issues were easier to understand from a procedural program.
The study by Milne and Rowe (McCracken & Almstrum, 2001), recognized some concept difficulties relating to especially object-oriented paradigm. Both students and teachers considered constructors, virtual functions, and function overriding in inheritance among the most difficult issues in object-oriented programming. Interestingly, students saw virtual functions as only moderately difficult as opposed to teachers who considered them as the second biggest problem among the concepts listed in the survey. Also, several respondents that were teaching an OO language stated that they believe that OO languages should only be approached once the student has a thorough grounding in procedural programming.
Barr et al. (Barr & S., 1999) investigated student programming errors in object-oriented Blue environment.
Blue language and environment (Kurland & Pea, 1989) is especially designed to ease students' learning of object oriented paradigm with a simple language syntax and graphical support for classes and objects.
However, also they noticed that students had more problems with higher-level object-oriented areas than syntax and style. Their findings support the already mentioned superficial approach typical for novice programmers; students could point out syntax and indentation errors in a given program but did not notice serious logical errors. This was also noticed in the inability of creating meaningful comments for the programs, often students just wrote a comment verbally describing the operation of a single code statement.

2.4 Learning theories related to learning of computer programming 
In the literature review, the pedagogic theories used mostly in relating to learning computer programming were constructivism, which actually integrates several various learning theories. The purpose of teaching students computer programming should not only be to teach them understanding of computer science and related fields. Programming environments can help students to “analyse, organize, express and evaluate” their thoughts while solving a problem (Fessakis, Gouli, & Mavroudi, 2013). According to (Jun Zhang, 2001), knowing more about learners’ metacognitive, strategic knowledge could help when teaching them second language skills. In his study, students’ second language reading ability and their second language proficiency levels interacted with their metacognitive awareness. According to the research results of (Fessakis et al., 2013), student’s problem solving method seem to be often trial and error- method. They are solving the problem step by step. Some of the students however use planning ahead- method. They are planning 1-3 steps or programming commands ahead before implementing the function. Some students can plan the whole problem solving procedure ahead before implementing it and this requires advanced metacognitive skills. The evidence that some of the students already have this skill and others have it partially suggests that learning problem solving skills through games truly is beneficial. (Fessakis et al., 2013)
2.4.1 Constructivism 
Constructivist learning is founded on learners’ active participation in problem solving and critical thinking towards relevant learning activity. Learners are "constructing" their own knowledge by trying out approaches based on their earlier knowledge. They try to integrate their new ideas to prior knowledge. (Boyer, Langevin, & Gaspar, 2008; Duncan, Bell, & Tanimoto, 2014; Kanselaar, 2002) have noticed the connection between educational theory (constructivism) and programming. They are writing about the relationship between new constructivist apprenticeship techniques meant to improve programming pedagogy and student self-direction. They are highlighting that the nature of programming is creative and requires thinking outside the box, find alternative answers to their own in problem solving situations. This is seen as a perquisite for becoming a genuine programmer with higher cognitive skills. (Fessakis et al., 2013) identify the same beneficial connection of computer programming and higher order thinking besides just improvement in algorithmic problem solving skills. Programming education should also be meaningful compared with the competence and developmental level of learners. Haden (2006) is pointing out that if the first experience in instructional programming course is enjoyable and effective, success in later programming courses can be predicted. 
Dalgerno (1996) have discussed about Vygotsky’s view of knowledge. In constructivism there are various models of knowledge representations that individuals construct. These representations can be equally correct. The main focus of teaching is more guiding the learner to build his/her existing mental models. The knowledge is constructed rather than transferred from teacher to learner. (Dalgerno, 1996.) Majority of people have equal possibilities for knowledge construction via social interaction. According to (Liu & Matthews, 2005), human beings are always searching for the truth, in another words people are curious. The scientific exploration of the truth must be obtained via development of human rationality. (Liu & Matthews, 2005.) Epistemic relativism in Vygotsky’s case can be said to emerge from the metaphysical view that knowledge is a social construction. (Boghossian, 2006.) 
When we are thinking about constructivism from pedagogic viewpoint and also we are interested in learning environments, (Kanselaar, 2002) has proposed that there are eight characteristics that can be used to define constructivist learning environments: 
1. They provide multiple representations of reality. 
2. Multiple representations avoid oversimplification and represent the complexity of the real world. 
3. They emphasize knowledge construction instead of knowledge reproduction. 
4. They emphasize authentic tasks in a meaningful context rather than abstract instruction out of context. 
5. They provide learning environments such as real world settings or case based learning instead of predetermined sequences of instruction. 
6. They encourage thoughtful reflection on experience. 
7. They enable context and content-dependent knowledge construction. 
8. They support collaborative construction of knowledge through social negotiation, not competition among learners for recognition. (Kanselaar, 2002)
In his article, (Kanselaar, 2002) is also highlighting that in education area besides individual, the social perspective is very important. There is a term socio-constructivism for describing this social approach of constructivism.
2.5 Position of Programming Subject in the Curriculum 
Point of view how programming has been positioned as a learning subject. I am pointing out analogies between coding and e.g. mathematics, spoken language and music that could help the understanding about the nature of teaching programming skills to students at schools. 
Shieber (1984) writes about designing of the computer language for linguistic information by designing tools to facilitate communication of linguistic information to computers. In 1984 their aim was to encode linguistic information to computers. Computer languages are a direct result of this need for effective communication with computers. Programming language evolves from denotational semantics to linguistic constructs. For example he is adding linguistic words within computer code and calls it “syntactic sugar". According to Shieber (1984) that allows programming language to conform to a user’s intentions. Shieber (1984) was finding answer for the current interest (1984) in computer science in declarative languages. He wanted to introduce clear semantics designed specifically for encoding linguistic information. 
In the year (2016), high level programming languages have evolved and deployed. A High level programming language may use natural language elements. The function has been developed simply to ease the user of the language. High level abstraction from machine language is typical feature for these languages e.g. Python, PhP and Visual Basic. (Feeley, 2015). 
Sparks & Ganscow (1993) point out that phonology, syntax, and semantic are the areas that are causing the problems in second language learning. Especially if you are a poor reader, you have difficulties with phonology and syntax. In linguistics syntax governs the structure of language. There are also syntactic rules that are common to all spoken languages like the conceptions of subject and object (Branigan, Pickering & Leland, 2000). In programming languages, the term “syntax” is including the vocabulary and grammar of the programming language. The logical meaning of syntax is called semantics. Semantics is trying to evaluate or give description to the syntactically correct sentences. 
While we think about phonology as a linguistic term, which studies systematic organization of sounds in languages, and as we are trying to chase the similarities that would possibly connect linguistic code to programming code, we can give a brief thought for music. One of the characteristics of traditional music notation is that it is made humanly performable (Hudak et. al.,1996). On the other hand programming code is made computer performable but also computer code is made human understandable. Music notation is markup language for “musical code”. In present researchers are programming computers to understand musical code, even to produce algorithm based music by themselves. When trying to make a computer to “understand” music, after describing, transcribing and notating you have to digitalize. 
Due to (Duncan et al., 2014), many concepts in programming are based on concepts from other subjects, such as mathematics and language, so one factor in considering what students can learn is how strong they will be in related subjects. For example, Scratch programming can involve working with a coordinate system and negative numbers, which may be difficult for a younger student to understand. “Many computer-based games incorporate simple computational models involving possibilities of motion and achieving states, or scoring points. The mental models required to understand these games are often abstractions that can be compared with mathematical ideas (e.g., functions: put in this, and that comes out.) This illustrates that the pedagogy can work both ways; computer programming can be used as a vehicle for learning concepts for other subjects and other school- subjects can be used as a “task- framework” for teaching computer programming. (Duncan et al., 2014).

CHAPTER THREE
METHODOLOGY
3.0 Introduction
The focus of this chapter is on the method and the design of the study. The researcher engaged in the work and quantitative research method was used in conducting the study. According to Zulueta & Costales, (2003), view quantitative that each of these objectives is done through the assignment of numerical values to variables and the mathematical analysis of those values. 
3.1 Research Design 
This study was a quantitative in nature and a descriptive survey method was used to investigate the challenges faced by students towards learning computer programming courses. A questionnaire was considered the most appropriate tool as recommended by Johnson in  (Johnson & Christensen, 2008). Simillary (Neuman, 2002) recommended that in a descriptive survey, studies involving beliefs or behaviour it is appropriate to use questionnaire for data collection, because it allows the respondents to easily express their opinion.
3.2 Research participants 
In this study, a purposive sampling was used to select three (3) Universities and stratified random sampling techniques for selecting 45 students from each of the selected Universities in Uganda to make a sample of 135 students, who were final year students from computer science related domain (Computer Science & Engineering, Information Technology, and Software Engineering). However the sample comprised of both male and female students, who participated in providing their views about the findings.

Questionnaires were sent for 135 respondents in three (3) Universities, a total of 105 questionnaire was received back as illustrated in table 3.1 below. 
Table 3.1: Shows Distributions Sample Details in the Three Universities.
S/NO 	Name of the University  	     Status	No. Issued out 	No. Returned 	
1 	Islamic University in Uganda (IUIU) 	     Private (OIC) 	        45	        43 	
2 	Kyambogo University (KYU)	     Public	        45 	        32	
3 	Busitema University (BU)	     Public	        45	        30	
             Total  	       135	       105	
From the table 3.1 above, 77.8% of the questionnaire were retured of 41.0% was from Islamic University in Uganda (IUIU), 30.5% from Kyambogo University (KYU) and 28.6% from Busitema University (BU). 
3.3 The research tools   
Questionnaire was used for collecting data/information from the target population. The questionnaire was divided into two (2) parts with closed-ended questions; the first one involved questions on the demographic data, background characteristics, the second part included the major challenges facing students while learning computer programming courses which the responses, was in the Likert type scale format as seen in the table 3.2 below. 
Table 3.2: Five (5) Point Likert Scale
Likert Scale	Points	
Strongly Agree        (SA)  	5	
Agree                       (A)   	4	
Undecided               (U)	3	
Disagree                  (D)	2	
Strongly Disagree   (SD)	1	

3.4 Data collection procedure 
The questionnaire was designed using Google forms to collect the required data through a shared link between the researcher and the target students. Similarly the same link was also shared with some heads of departments, teachers in the study area so as to administer it to their students. Being a google form, all responses ware received on real time upon the completion of the form by the respondents. And also on behave of the researcher, the research assistants printed and administered some copies of the questionnaire to the offline students. After collecting the data, the research assistants sent back the scnned copies of the administered questionnaire through emailed and whatsapp.
The resulted data collected, was compiled and analyzed using Software known as Statistical Package for Social Sciences (SPSS). A number of studies have used online questionnaires to collect data which have yielded good results (Habibi et al., 2015; Lakhal, Khechine, & Pascot, 2013; Şahin & Uluyol, 2016).
3.5 Data analysis procedure 
Following the quantitative analysis method, data was collected and analyzed from the respondents using the questionnaire and tabulated in the form of the frequencies, percentages and also each table tabulated, follows its detailed interpretation.
Chi square (c2) test and weighted average was used to find out the significance of the differences of data obtained and also the questionnaires was analyzed by weighted average (WA) while SPSS version 20 software was used to do a quantitative analysis. 
To investigate whether the opinions of the respondents were statistically significant or not, Chi square (c2) test was used, the significant value was compared with the critical value at 0.05 level of significance and degree of freedom was calculated as well but the criteria for five Likert scale was interpreted in the table 3.3 below;

Table 3.3: Interpretation of weighted average based on five point likert scale
Weighted Average	Weighted Average Interpretation	
W.A ≥ 4.5	Strongly Agree –SA (5)	
4.5 >W.A ≥ 3.5	Agree – A (4)	
3.5 > W.A ≥ 2.5	Undecided – U (3)	
2.5 > W.A ≥ 1.5	Disagree – D (2)	
1.5 > W.A ≥ 0	Strongly Disagree – SD (1)	

This table shows interpretation of weighted average where by above W.A ≥ 4.5 means that the respondents strongly agree and their opinions have high confidence, 4.5 >W.A ≥ 3.5 means between 4.5 and 3.5 which indicates that responds agree, and 3.5 > W.A ≥ 2.5 indicates respondents opinions are undecided and this is where further analysis using chi square test was important, 2.5 > W.A ≥ 1.5 indicates that the responds disagree with statement and 1.5 > W.A ≥ 0 reveals that they strongly disagree. 
3.6 Ethical considerations 
The selection process of the participants and their participation in this study required the approval of both institutes. The questionnaire was used for data collection which was distributed and collected by the volunteers who had experience in research.  Along with that, the data collection process followed ethical requirements of the Islamic University of Technology Dhaka. Each of the participants’ was given a questionnaire and ample time to fill it voluntarily. These questionnaires were filled while teachers were not teaching in order not to disrupt their regular teaching activities and some received it from their emails. All the participants’ information was reserved as confidential and remained anonymous. Moreover, the study ensured that all the data collected used aliases and participants did not have any influence and link with the aliases.

CHAPTER FOUR
ANALYSIS AND INTERPRETATION OF DATA
4.1 Introduction 
The data collected from the respondents, were tabulated in forms of frequencies and percentages. The tables were separated, and used to explain some of the opinions based on the feedback received from the students about the questions. Chi square (c2) test and weighted average (WA) were calculated and analyzed based on the data collected in form of five point Likert scale using SPSS version 20.
4.2 Responses to the Demographic   
Table 4. 2: Demographic information 
Items	Frequency	%	
Gender	Male	74	70.5	
	Female	31	29.5	
	Total	105	100	
				
Age	18 - 24	50	47.6	
	25 - 29	45	42.9	
	30 - 34	10	9.5	
	Total	105	100	

The above table 4.1 represents the demographic information of the students. Of the total of One hundred and five (105) respondents, 70.5% were males and 29.5% females all drawn from 3 Universities. These participants, most of them are in the age range of 18-24 years old making 47.65% of the participants, then 25-29 years old which is 42.9% and lastly 30-34 with 9.5%.

4.3 Analysis on the challenges facing students while learning computer programming
Table below indicates the data analysis of objective one and its interpretation.
Table 4.2: challenges facing students while learning computer programming 
 (Figures in the parenthesis indicate percentages and f = frequency)
S/N	 Statement	5(SA)	4(A)	3(U)	2(D)	1(SD)	WA	c2	Sig. Val	Df	
1
	Fear of programming course because they are difficult to learn	f	11	18	14	48	14	2.66	44.571	.000	4	
		%	(10.5)	(17.1)	(13.3)	(45.7)	(13.3)					
												
2	Students practice programming on their personal computer.	f	-	4	9	41	51	1.68	61.819	.000	3	
		%	(-)	(3.8)	(8.6)	(39.0)	(48.6)					
												
3	Programming teacher, does not give us enough content in programming	f	4	21	15	44	21	2.46	40.667	.000	4	
		%	(3.8)	(20.0)	(14.3)	(41.9)	(20.0)					
												
4	Students use internet besides the lecture notes and textbooks to learn computer programming courses.	f	1	-	5	51	48	1.62	82.848	.000	4	
		%	(1.0)	(-)	(4.8)	(48.6)	(45.7)					
												
5	The lecture notes prepared by programming teachers, enables the students to enjoy and pass the programming course.	f	3	12	13	53	24	2.21	71.524	.000	4	
		%	(2.9)	(11.4)	(12.4)	(50.5)	(22.9)					
												
6	Students don’t get enough practice time in my programming courses that make it hard for me.  	f	1	14	12	47	31	2.11	62.190	.000	4	
		%	(1.0)	(13.3)	(11.4)	(44.8)	(29.5)					
												
7	Students memorize all the syntax by heart but find it difficult to run them on computer.	f	8	22	22	34	19	2.68	16.381	.003	4	
		%	(7.6)	(21.0)	(21.0)	(32.4)	(18.1)					
												
8	Students enjoy reading computer programming courses using the books in the library.	f	2	24	29	28	22	2.58	23.048	.000	4	
		%	(1.9)	(22.9)	(27.6)	(26.7)	(21.0)					
												
9	Students were not taught programming in secondary school.	f	43	20	33	14	5	3.78	37.810	.000	4	
		%	(41.0)	(19.0)	(21.9)	(13.3)	(4.8)					
												
10	Teachers give students assignments and home work after every programming lesson.	f	7	18	17	41	22	2.50	29.619	.000	4	
		%	(6.7)	(17.1)	(16.2)	(39.0)	(21.0)					
												
11	Students don’t understand computer programming courses when taught by other teachers	f	15	34	25	22	9	3.23	17.429	.002	4	
		%	(14.3)	(32.4)	(23.8)	(21.0)	(8.6)					
												
	Overall Weighted Mean							2.50				

From Table 4.2 above; Statement 1, It was discovered that 10.5% of the respondents strongly agree that they fear programming courses because it is difficult to learn, 17.1% of them agree that programming courses are difficult to learn, 13.3% undecided either it is hard or easy to learn, 45.7% disagreed and 13.3% strongly disagree that programming courses are not difficult to learn. The weighted average is of 2.66 (3.5 > W.A ≥ 2.5), which undecided on the matter that students fear programming courses because it is difficult to learn, meanwhile the Chi square test was performed at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and                                         c2 o (44.571) > c2 c (9.488) shows that the null hypothesis responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to undecided that most of the students fear computer programming courses because are difficult to learn. 
Statement 2; 3.8% of the respondents  agree that students use their personal computer to practice  computer programming courses, 8.6% of them undecided, 39.0% disagree and 48.6% strongly disagree that they don’t use personal computer to practice  computer programming courses . The weighted average is of 1.68 (2.5 > W.A ≥ 1.5) which disagreed that students use their personal computer to practice computer programming courses, meanwhile the Chi square test was performed at df = 3 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (61.819) > c2 c (7.815) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to disagree that students use their personal computer to practice computer programming courses.  
Statement 3; 3.8% of the respondents strongly agree, 20.0% of them agree that teachers don’t give enough content for practicing computer programming courses, 14.3% undecided either the content is enough or not, 41.9% disagreed and 20.0% strongly disagree that teachers don’t give enough content for practicing computer programming courses. The weighted average is of 2.46 (2.5 > W.A ≥ 1.5) which disagreed that teachers don’t give us enough content in programming, also Chi square test was conducted at       df = 4 with significant value of 0.000 which is less than 0.05 level of significance and    c2 o (40.667) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Then the researcher concluded that it was statistically significant to disagree that teachers don’t give enough content for practicing computer programming courses.
Statement 4; This findings indicates that  1.0% of the respondents strongly agree that students use internet besides the lecture notes and textbooks to learn computer programming courses, 4.8% undecided, 48.6% disagree and 45.7% strongly disagree that students use internet besides the lecture notes and textbooks to learn computer programming courses. The weighted average is of 1.62 (2.5 > W.A ≥ 1.5) which disagreed that many students use internet besides the lecture notes and textbooks to learn computer programming courses, meanwhile the Chi square test was performed at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (82.848) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to disagree that many students use internet besides the lecture notes and textbooks to learn computer programming courses.  
Statement 5; This findings indicates that 2.9% of the respondents strongly agree, 11.4% agree that the lecture notes prepared by programming teachers enables the students to enjoy and pass the programming course, 12.4% undecided, 50.5% disagree and 22.9% strongly disagree that the lecture notes prepared by programming teachers enables the students to enjoy and pass the programming course. The weighted average is of           2.21 (2.5 > W.A ≥ 1.5) which disagreed that many students says that the lecture notes prepared by programming teachers does not enables them to enjoy and pass the programming courses, meanwhile the Chi square test was performed at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and                       c2 o (71.54) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to disagree that the lecture notes prepared by programming teachers enables the students to enjoy and pass the programming course.  
Statement 6; This findings indicates that  1.0% of the respondents strongly agree, 13.3.% strongly agree that students don’t get enough practice time in computer programming courses that make it hard for them, 11.4% undecided, 44.8% disagree and 29.5% strongly disagree that students don’t get enough practice time in computer programming courses that make it hard for them. The weighted average is of 2.11 (2.5 > W.A ≥ 1.5) which disagreed that many students don’t get enough practice time in computer programming courses that make it hard for them, meanwhile the Chi square test was performed at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (62.190) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to disagree that students don’t get enough practice time in computer programming courses that make it hard for them.  
Statement 7; 7.6% of the respondents strongly agree, 21.0% agree that students memorize all the syntax by heart but find it difficult to run them on computer, 21.0% undecided, 32.4% disagree and 18.1% strongly disagree that students memorize all the syntax by heart but find it difficult to run them on computer. The weighted average is of 2.68 (3.5 > W.A ≥ 2.5) which undecided that students memorize all the syntax by heart but find it difficult to run them on computer, meanwhile the Chi square test was performed at df = 4 with significant value of .003 which is less than 0.05 level of significance and c2 o (16.381) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to undecided that many students memorize all the syntax by heart but find it difficult to run them on computer.  
Statement 8; 1.9% of the respondents strongly agree, 22.9% agree that students enjoy reading computer programming courses using the books in the library, 27.6% undecided, 26.7% disagree and 21.0% strongly disagree that students enjoy reading computer programming courses using the books in the library. The weighted average is of          2.58 (3.5 > W.A ≥ 2.5) which undecided that students either enjoy reading computer programming courses using the books in the library or not, meanwhile the Chi square test was performed at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (23.048) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to undecided that students enjoy reading computer programming courses using the books in the library.  
Statement 9; This findings depicts that  41.0% of the respondents strongly agree, 19.0% strongly agree that student were not taught computer programming courses in secondary schools, 21.9% undecided, 13.3% disagree and 4.8% strongly disagree that student were not taught computer programming courses in secondary schools. The weighted average is of 3.78 (4.5 > W.A ≥ 3.5) which agreed that student were not taught computer programming courses in secondary schools, meanwhile the Chi square test was performed at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and c2 o  (37.810) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was not statistically significant to agree that student were not taught computer programming courses in secondary schools.  
Statement 10; 6.7% of the respondents strongly agree, 17.1% agree that teachers give students assignments and home work after every programming lesson, 16.2% undecided, 39.0% disagree and 21.0% strongly disagree that teachers give students assignments and home work after every programming lesson. The weighted average is of                       2.50 (3.5 > W.A ≥ 2.5) which undecided that teachers give students assignments and home work after every programming lesson, meanwhile the Chi square test was performed at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (29.619) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to undecided that teachers give students assignments and home work after every programming lesson.  
Statement 11; 14.3% of the respondents strongly agree, 32.4% agree that students don’t understand computer programming courses when taught by other teachers, 23.8% undecided, 21.0% disagree and 8.6% strongly disagree that students don’t understand computer programming courses when taught by other teachers. The weighted average is of 3.23 (3.5 > W.A ≥ 2.5) which undecided that students don’t understand computer programming courses when taught by other teachers, meanwhile the Chi square test was performed at df = 4 with significant value of .002 which is less than 0.05 level of significance and c2 o (17.429) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to undecided that students don’t understand computer programming courses when taught by other teachers.  
4.4 Analysis on the methods most teachers follow in teaching computer programming courses
Table below indicate the data analysis of objective two and its interpretation.
Table 4.3: Methods most teachers follow in teaching computer programming.
(Figures in the parenthesis indicate percentages and f = frequency)
S/N	 Statement	5(SA)	4(A)	3(U)	2(D)	1(SD)	WA	c2	Sig. Val	Df	
1
	Programming teachers are always available for questions after classes.	f	1	11	4	56	33	1.96	102.762	.000	4	
		%	(1.0)	(10.5)	(3.8)	(53.3)	(31.4)					
												
2	Programming teacher always shows keen interest in motivating students to accomplish their programming practical tasks.	f	4	9	12	50	30	2.11	68.381	.000	4	
		%	(3.8)	(8.6)	(11.4)	(47.6)	(28.6)					
												
3	The Programming teacher does not explain beyond the examples in the text books he/she is using.*	f	2	32	19	37	15	2.70	37.048	.000	4	
		%	(1.9)	(30.5)	(18.1)	(35.2)	(14.3)					
												
4	While teaching programming courses, the teacher cite local examples to explain the concept to students.	f	4	9	7	62	23	2.13	110.190	.000	4	
		%	(3.8)	(8.6)	(6.7)	(59.0)	(21.9)	

												
5	Teacher gives students programming projects to submit during the course time.	f	2	3	6	54	40	1.79	112.381	.000	4	
		%	(1.9)	(2.9)	(5.7)	(51.4)	(38.1)					
												
6	Students find some topics interesting when taught by another teacher.	f	1	5	20	40	39	1.94	63.905	.000	4	
		%	(1.0)	(4.8)	(19.0)	(38.1)	(37.1)					
												
7	Teachers assign students into groups while learning programming course*	f	5	9	8	50	33	2.08	74.000	.000	4	
		%	(4.8)	(8.6)	(7.6)	(47.6)	(31.4)					
												
8	Teacher has never ran any code successful in class.	f	34	28	14	14	15	3.50	16.762	.002	4	
		%	(32.4)	(26.7)	(13.3)	(13.3)	(14.3)					
												
9	Programming teacher does not answer students’ question each time asked.*	f	23	26	20	22	14	3.21	3.810	.432	4	
		%	(21.9)	(24.9)	(19.0)	(21.0)	(13.3)					
												
	Overall Weighted Mean							2.38				

From Table 4.3 above; Statement 1, Reveals that 1.0% of the respondents strongly agree that programming teachers are always available for questions after classes, 10.5% agree, 3.8% of them undecided, 53.3% disagreed and 31.4% strongly disagree that programming teachers are always available for questions after classes. The weighted average is of     1.96 (2.5 > W.A ≥ 1.5), this means disagree on the matter that programming teachers are always available for questions after classes, meanwhile the Chi square test was performed at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (102.762) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to disagree that programming teachers are always available for questions after classes.  
Statement 2; Reveals that 3.8% of the respondents strongly agree, 8.6% agree that programming teacher always shows keen interest in motivating students to accomplish their programming practical tasks, 11.4% undecided, 47.6% disagree and 28.6% strongly disagree that programming teacher always shows keen interest in motivating students to accomplish their programming practical tasks. The weighted average is of                    2.11 (2.5 > W.A ≥ 1.5) which disagreed that programming teacher always shows keen interest in motivating students to accomplish their programming practical tasks, meanwhile the Chi square test was performed at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (68.381) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to disagree that programming teacher always shows keen interest in motivating students to accomplish their programming practical tasks.  
Statement 3; 1.9% of the respondents strongly agree, 30.5% of them agree that programming teacher does not explain beyond the examples in the text books he/she is using, 18.1% undecided either programming teacher does not explain beyond the examples in the text books he/she is using or not, 35.2% disagreed and 14.3% strongly disagree that programming teacher does not explain beyond the examples in the text books he/she is using. The weighted average is of 2.70 (3.5 > W.A ≥ 2.5) which undecided that programming teacher does not explain beyond the examples in the text books he/she is using, also Chi square test was conducted at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (37.048) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Then the researcher concluded that it was statistically significant to undecided that programming teacher does not explain beyond the examples in the text books he/she is using.
Statement 4; 3.8% of the respondents strongly agree, 8.6% agree that while teaching programming courses, the teacher cite local examples to explain the concept to students, 6.7% undecided, 59.0% disagreed and 21.9% strongly disagree that while teaching programming courses, the teacher cite local examples to explain the concept to students. The weighted average is of 2.13 (2.5 > W.A ≥ 1.5) which disagreed that while teaching programming courses, the teacher cite local examples to explain the concept to students, also Chi square test was conducted at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (110.190) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Then the researcher concluded that it was statistically significant to disagree that while teaching programming courses, the teacher cite local examples to explain the concept to students.
Statement 5; This finding indicates that  1.9% of the respondents strongly agree, 2.9% strongly agree that teacher gives students programming projects to submit during the course time, 5.7% of them undecided, 51.4% disagree and 38.1% strongly disagree that teacher gives students programming projects to submit during the course time. The weighted average is of 1.79 (2.5 > W.A ≥ 1.5) which disagreed that many teacher gives students programming projects to submit during the course time, meanwhile the Chi square test was performed at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (112.381) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to disagree that many teacher gives students programming projects to submit during the course time.  
Statement 6; 1.0% of the respondents strongly agree, 4.8% agree that students find some topics interesting when taught by another teacher, 19.0% undecided, 38.1% disagreed and 37.1% strongly disagree that students find some topics interesting when taught by another teacher. The weighted average is of 1.94 (2.5 > W.A ≥ 1.5) which disagreed that students find some topics interesting when taught by another teacher, also Chi square test was conducted at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (63.905) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Then the researcher concluded that it was statistically significant to disagree that students find some topics interesting when taught by another teacher.
Statement 7; This findings indicates that  4.8% of the respondents strongly agree, 8.6% strongly agree that teachers assign students into groups while learning programming course, 7.6% undecided, 47.6% disagree and 31.4% strongly disagree that teachers assign students into groups while learning programming course. The weighted average is of 2.08 (2.5 > W.A ≥ 1.5) which disagreed that teachers assign students into groups while learning programming course, meanwhile the Chi square test was performed at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and               c2 o (74.000) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to disagree that teachers assign students into groups while learning programming course.  
Statement 8; This findings depicts that  32.4% of the respondents strongly agree, 26.7% strongly agree that the teacher has never ran any code successful in class, 13.3% undecided, 13.3% disagree and 14.3% strongly disagree that the teacher has never ran any code successful in class. The weighted average is of 3.50 (4.5 > W.A ≥ 3.5) which agreed that the teacher has never ran any code successful in class, meanwhile the Chi square test was performed at df = 4 with significant value of 0.002 which is less than 0.05 level of significance and c2 o (16.762) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to agree that the teacher has never ran any code successful in class.  
Statement 9;  21.9% of the respondents strongly agree, 24.9% of them agree that programming teacher does not answer students’ question each time asked, 19.0% undecided, 21.0% disagree and 13.3% strongly disagree that programming teacher does not answer students’ question each time asked. The weighted average is of                   3.21 (3.5 > W.A ≥ 2.5) which undecided that programming teacher does not answer our question each time we ask, meanwhile the Chi square test was performed at df = 4 with significant value of .432 which is greater than 0.05 level of significance and                    c2 o (3.810) < c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is accepted. Therefore the researcher concluded that it was statistically significant to undecided that programming teacher does not answer students’ question each time asked.  

4.5 Analysis on how to improve learning computer programming
Table below indicate the data analysis of objective two and its interpretation.
Table 4.4: How to improve learning computer programming. 
(Figures in the parenthesis indicate percentages and f = frequency)
S/N	 Statement	5(SA)	4(A)	3(U)	2(D)	1(SD)	WA	c2	Sig. Val	Df	
1
	Students summarizes important points while reading computer programming	f	-	1	2	47	55	1.51	94.581	.000	3	
		%	(-)	(1.0)	(1.9)	(44.5)	(52.8)					
												
2	Any time a student misses programming class, consults his/her class mates or teacher.	f	-	5	2	45	53	1.61	80.257	.000	3	
		%	(-)	(4.8)	(1.9)	(42.9)	(50.5)					
												
3	Students enjoy reading the instructional material prepared by the teacher.	f	-	8	7	48	42	1.82	54.276	.000	3	
		%	(-)	(7.6)	(6.7)	(45.7)	(40.0)					
												
4	Teachers teach programming nicely but students lack computers to lay hands on during practical. 	f	9	15	13	44	24	2.44	37.238	.000	4	
		%	(8.6)	(14.3)	(12.4)	(41.9)	(22.9)					
												
5	Without looking at the codes provided by the teacher or textbooks, Students cannot write a programme that run successfully.	f	9	29	20	41	6	2.94	39.714	.000	4	
		%	(8.6)	(27.6)	(19.0)	(39.0)	(5.7)					
												
6	There are many students in the class, the teacher finds it difficult to go round during laboratory work.	f	9	15	19	40	22	2.51	26.000	.000	4	
		%	(8.6)	(14.3)	(18.1)	(38.1)	(21.0)					
												
7	Students hardly get time for doing practical due to the fact that are always occupied with other courses.	f	6	12	5	40	42	2.05	64.952	.000	4	
		%	(5.7)	(11.4)	(4.8)	(38.1)	(40.1)					
												
8	Students follow programming instructional codes in solving similar programming problems.	f	-	3	16	57	29	1.93	60.905	.000	3	
		%	(-)	(2.9)	(15.2)	(54.3)	(27.6)					
												
	Overall Weighted Mean							2.10				

From Table 4.4 above; Statement 1, It was discovered that 1.0% of the respondents agree that students summarizes important points while reading computer programming, 1.9% undecided, 44.8% of them disagree and 52.8% strongly disagree that students summarizes important points while reading computer programming. The weighted average is of 1.51 (2.5 > W.A ≥ 1.5) which disagreed that students summarizes important points while reading computer programming, meanwhile the Chi square test was performed at df = 3 with significant value of 0.000 which is less than 0.05 level of significance and               c2 o (94.581) > c2 c (7.815) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to disagree that students summarizes important points while reading computer programming.  
Statement 2; 3.8% of the respondents agree that any time a student misses programming class, consults his/her class mate or teacher, 8.6% of them undecided, 39.0% disagree and 48.6% strongly disagree that any time a student misses programming class, consults his/her class mate or teacher. The weighted average is of 1.68 (2.5 > W.A ≥ 1.5) which disagreed that any time a student misses programming class, consults his/her class mate or teacher, meanwhile the Chi square test was performed at df = 3 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (61.819) > c2 c (7.815) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to disagree that any time a student misses programming class, consults his/her class mate or teacher.  
Statement 3; 7.8% of the respondents  agree that students enjoy reading the instructional material prepared by their teacher, 6.7% undecided, 45.7% disagree and 40.0% strongly disagree that students enjoy reading the instructional material prepared by their teacher. The weighted average is of 1.82 (2.5 > W.A ≥ 1.5) which disagreed that students enjoy reading the instructional material prepared by their teacher, meanwhile the Chi square test was performed at df = 3 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (54.276) > c2 c (7.815) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to disagree that students enjoy reading the instructional material prepared by their teacher.  
Statement 4; This findings indicates that  8.6% of the respondents  strongly agree, 14.3% of them strongly agree that teachers teach computer programming nicely but students lack computers to lay hands on during practical, 12.4% undecided, 41.9% disagree and 22.9% of them strongly disagree that teachers teach computer programming nicely but students lack computers to lay hands on during practical. The weighted average is of                 2.44 (2.5 > W.A ≥ 1.5) which disagreed that teachers assign students into groups while learning programming course, meanwhile the Chi square test was performed at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and               c2 o (37.238) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to disagree that teachers teach computer programming nicely but students lack computers to lay hands on during practical.  
Statement 5; 8.6% of the respondents  strongly agree, 27.6% agree that without looking at the codes provided by the teacher or textbooks, students cannot write a programme that run successfully, 19.0% of them undecided, 39.0% disagreed and 5.7% strongly disagree that without looking at the codes provided by the teacher or textbooks, students cannot write a programme that run successfully. The weighted average is of                            2.94 (3.5 > W.A ≥ 2.5) which undecided that without looking at the codes provided by the teacher or textbooks, students cannot write a programme that run successfully, also Chi square test was conducted at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (39.714) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Then the researcher concluded that it was statistically significant to undecided that without looking at the codes provided by the teacher or textbooks, students cannot write a programme that run successfully.
Statement 6; 8.6% of the respondents strongly agree, 14.3% agree that there are many students in the class, the teacher finds it difficult to go round during laboratory work, 18.1% undecided, 38.1% disagreed and 21.0% strongly disagree that there are many students in the class, the teacher finds it difficult to go round during laboratory work. The weighted average is of 2.51 (3.5 > W.A ≥ 2.5) which undecided that there are many students in the class, the teacher finds it difficult to go round during laboratory work, also Chi square test was conducted at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (26.000) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Then the researcher concluded that it was statistically significant to undecided that there are many students in the class, the teacher finds it difficult to go round during laboratory work.
Statement 7; This findings indicates that  5.7% of the respondents strongly agree, 11.4% strongly agree that students hardly get time for doing practical due to the fact that are always occupied with other courses, 4.8% undecided, 38.1% disagree and 40.1% strongly disagree that students hardly get time for doing practical due to the fact that are always occupied with other courses. The weighted average is of 2.05 (2.5 > W.A ≥ 1.5) which disagreed that students hardly get time for doing practical due to the fact that are always occupied with other courses, meanwhile the Chi square test was performed at df = 4 with significant value of 0.000 which is less than 0.05 level of significance and                       c2 o (64.952) > c2 c (9.488) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to disagree that students hardly get time for doing practical due to the fact that are always occupied with other courses.  
Statement 8; 2.9% of the respondents agree that students follow programming instructional codes in solving similar programming problems, 15.2% undecided, 54.3% disagree and 27.6% strongly disagree that students follow programming instructional codes in solving similar programming problems. The weighted average is of                1.93 (2.5 > W.A ≥ 1.5) which disagreed that students follow programming instructional codes in solving similar programming problems, meanwhile the Chi square test was performed at df = 3 with significant value of 0.000 which is less than 0.05 level of significance and c2 o (60.905) > c2 c (7.815) of which the null hypothesis, responses on this statement are not statistically significant, is rejected. Therefore the researcher concluded that it was statistically significant to disagree that students follow programming instructional codes in solving similar programming problems.  

CHAPTER FIVE
DISCUSSION ON FINDINGS, CONCLUSION AND RECOMMENDATIONS
5.0 Introduction
5.1 Discussion on the major findings
Through using students, the sample was selected and the data analyzed related to the challenges faced by students towards learning computer programming courses in Uganda Universities, the findings include the following as stated below:
5.1.1 Findings on the challenges facing students while learning computer programming courses
From table 4.2, the findings reveal that the majority of the respondents have high opinion as indicated by weighted mean of 2.99 on the challenges facing students while learning computer programming. However the factors that have significant impact as per the study include; i) Students fear computer programming, ii) Lack of prerequisite knowledge of computer programming from secondary level to the university, iii) Lack of personal computer for practice, teachers don’t give students enough content in programming,       iv) Students don’t make use of the internet besides the lecture notes and textbooks to learn computer programming,   v) Lack of materials like enough textbooks in the library. Students don’t understand computer programming courses when taught by other teachers, Students memorize all the syntax by heart but find it difficult to run them on computer, Students don’t understand computer programming courses when taught by other teachers, 
Fear of computer programming was one of the least challenge that make learning computer programming difficult to student in Uganda universities. This differs from results of the study by (Lombardo et al., 2012; Rogerson & Scott, 2010) that describes how students personally experience fear whilst learning programming. Fear affects other aspects related to self-confidence, time management, and problem solving skills, all of which are needed in order to succeed. Since our study show that students have low opinion on fear of weighted mean 1.51, fear of computer programming stops to become a challenge in Uganda universities.
Lack of prerequisite knowledge of computer programming skills from secondary level to the university is one of the challenges which cause learning of computer programming difficult to students according to research findings and this differs from finding in the literature by (Y. Ben-Ari, 2001) that Prior Knowledge of the Computer programming is needed and discussed the application of constructivism to computing education, focusing primarily on what could be characterized as a moderate personal constructivism of a cognitivist bent. He emphasizes how constructivism highlights the importance of learners’ prior knowledge for learning, and draws a number of conclusions that “seem to follow directly from constructivist principles.” They include; 
•	Knowledge of the computer is a prerequisite for understanding computing as we know it. 
•	Beginners to computing lack effective models of the computer.
•	Learners necessarily construct knowledge about the phenomena they encounter, for better or worse. 
•	The computer forms an “accessible ontological reality”
Lack of personal computer for practice is one of the challenge also which cause learning of computer programming difficult to students according to research findings.
Teachers give students enough content to practice programming which makes programming hard according to the research findings and this is similar to reports in the literature by (Lam et al., 2008) that computer programming courses are alleged as uniquely demanding, characterized by the large amount of exercises that students are projected to practise intensively in order to progress good programming skills and gain experience in debugging.
Students don’t make use of the internet besides the lecture notes and textbooks to learn computer programming and Lack of materials like enough textbooks in the library which makes programming hard as according to the research findings and this differs from the reported literature by (Park and Biddix, 2008) who notes that the use of the Internet is mainly for social and entertainment purposes since the Internet revolution is not just limited to finding information but also bringing people together. However, it is very obvious that the Internet provides not only social connection and entertainment, but also academic and scientific information as well. Thus, it is vitally important to encourage students to use this invaluable source to get any kind of information they need in their academic studies because the development of the Internet would be meaningless if it is not used appropriately in education. 
5.1.2 The methods most teachers follow in teaching computer programming courses
From table 4.3, the analysis and interpretation of the data was found that the majority of the respondents on the methods most teachers follow in teaching computer programming has high opinion as indicated by weighted mean of 3.14. However the factors that have significant impact on the methods most teachers use as per the study include; i) Teachers are not always available for questions after classes, ii) Lack of teacher’s motivation, iii) Teacher don’t give students projects to submit during the course time, iv) Students find some topics interesting when taught by another teacher, and v) The Programming teacher does not explain beyond the examples in the text books he/she is using.
Teachers are not always available for questions after classes was found to be another major barrier according to the findings. 
Lack of teacher’s motivation was found to be another factor according to the findings and this was reported in the literature by (Law et al., 2009) that in count to individual differences, learning motivation and effectiveness of students can be affected by environmental factors, for example the infrastructure, learning approach and social pressure from learning peers.
Teacher don’t give students projects to submit during the course time was a cause of students finding computer difficult. Findings indicate that most teachers don’t engage students by tasking them to do individual or group projects which makes the student have skills in programming at the end of each programming course.
Lastly students find some topics interesting when taught by another teacher according to the research findings and this was reported in the book by (Stigler & Hiebert, 2009) that underscoring the importance of teaching as the key lever for improving students’ learning, so the passageway through which all education reforms must travel if they are to make it through the classroom door and , ultimately, improve students’ learning. Unless teaching changes, students won’t notice the difference. Many recent policy documents and improvement initiative endorse this view. Considerable attention is now devoted to improving teaching.
5.1.3 How to improve learning computer programming courses.
From data collected, analyzed and interpreted as in table 4.4, we realize that teaching method of computer programming is sufficient in Uganda universities and has no significant impact on how learning computer programming is achieved. The findings reveal that most students have low opinion as indicated by weighted mean of 2.38 on how to improve learning computer programming. However the factors that have significant impact on learning computer programming as per the study include; i) Students don’t summarize important points while reading computer programming, ii) Any time a student misses programming class they don’t consults his/her class mates or teacher, iii) Students don’t read the instructional material prepared by the teacher, iv) Students lack computers to lay hands on during practical, without looking at the codes provided by the teacher or textbooks, v) Students cannot write a programme that run successfully, vi) There are many students in the class, the teacher finds it difficult to go round during laboratory work,   vii) Students hardly get time for doing practical due to the fact that are always occupied with other courses and viii) Students don’t follow programming instructional codes in solving similar programming problems, impact on the way learning computer programming is achieved.
Students don’t summarize important points while reading computer programming: It was found that students don’t consider taking notes while coding as an important issue like writing formulas, algorithm, tracing how a program is executed or noting any debug error which requires note taking technique and make computer programming difficult to learn in an event where note taking is not done well, programing becomes easily to learn 
Any time a student misses programming class, don’t consults his/her class mates or teacher, was found to be another problem according to the findings of this study. This is because the students learning computer programming are many to be handled and followed by teachers, so teacher’s fails to know which student needs help.
Students don’t read the instructional material prepared by the teachers. It was also found that most students don’t read the teachers instructional material and this is a factor that leads computer programming difficult according to the findings. Further, Students don’t follow programming instructional codes in solving similar programming problems is another barrier in the learning computer programming according to the findings.
Students lack computers to lay hands on during practical was found to be another factor according to the findings of this study. This is so because computer are expensive to buy by most students and to maintain them. Also most of the universities have no sufficient laboratories to accommodate all student’s program requirements. For example one university may have 100 students and in the laboratory there is only 20 computers, this is a reason that most students will not have experience on computer programming skills, hence declare that computer programing is difficult to learn. 
There are many students in the class, the teacher finds it difficult to go round during laboratory work and it was found to be another factor according to the findings of this study. This is because the students’ computer ratio is so high in computer programming classes. So in practice, teachers’ needs to divide the students into groups in order students carry hands on practical, hence gaining skills in computer programming. In addition, students hardly get time for doing practical due to the fact that are always occupied with other courses was another factor. Findings indicate that teachers should engage the students by motivating the students and giving them a lot of work for they practice. 
5.2 Implication of the research
i.	The finding is meant to help lecturers to figure out challenges that deter students from effectively learning computer programming. 
ii.	The study has great importance to a policy makers and lecturers in helping them to acquire the efficient techniques required to be used in teaching computer programming.
iii.	The results of the study is meant to bridge the abstraction that exist in computer programming. 

5.3 Conclusions
Computer Programming is not difficult but it is an abstract concepts. It is essential that students should learn concepts of computer programming thoroughly, hence practicing constructivist learning, that is say admitting student centered learning. With proper approaches and materials designed, students’ programming knowledge and skill construction can be directed well by their teachers. However to be successful in computer programming, one should be able to change the abstract problems to a working solution on the computer by doing program coding. For novices, they need to setup of learning strategies to assists them to gain skills in the process of computer programming, this includes notes taking, and consulting with teachers & colleague as well as using online materials to influence the way they program. Secondly a number of challenges faced by students towards learning computer programming have been identified, they include lack of infrastructure & resources, high student computer ratios and less practice time. As a results, this makes a process of learning programming difficult. Conclusively it is recommended that policy be put in place to ease cost of internet and other teaching infrastructures, training student on conceptualizing computer programming through notes taking, designing and tracing computer programs among other helpful tips and lastly universities being vigilant on improve on their own infrastructures.
5.4 Recommendations 
The goals of this research, from research findings and conclusions was to provide recommendations with regard to the challenges faced by students towards learning computer programming courses in Uganda universities. The following recommendations should be put into consideration to play a vital role to advance and improve the skills in computer programming courses in Uganda universities.
1.	The government should introduce computer science as a principle subject with computer programming as a core component at A’ level in secondary schools to allow the students prepare for the computer programming courses at the colleges and universities and later in there career.
2.	Internet infrastructure is available to most of the universities in Uganda through internet service providers (ISP), Research and Education Network of Uganda (RENU) and the Uganda ICT backbone connection. Though the infrastructure is available, the cost of connection and maintenance of internet connection is very expensive for universities and colleges. Government should put up policies to regulate ISP on the cost of internet to educational institution.
3.	 Universities in Uganda should subscribe to high speed internet connection to allow teachers and students to download and upload say YouTube tutorial videos, more content in the line of their teacher’s notes, and visiting many online tutorial website available today on how to learn programming. Some of sites are tutorial points, coursera, w3school and many others, this will improve the competence of students in computer programming.
4.	Apart from online support systems, universities should make online tutorials and social media tools like Facebook, WhatsApp and twitter can be used by teachers to guide students to learn computer programming.
5.	The university should seek for funds to build more computing infrastructures and buy more computers in the laboratory so that each and every student will lay his/her hands on one computer to acquire practical skills.
5.5 Suggestions for further studies
The following has been suggested for further studies:
1.	Gender discrimination in learning computer programming in Uganda universities.
2.	Challenges faced by teachers towards teaching computer programming courses in Uganda Universities
3.	Strategies for motivating teachers to deliver quality instructional materials for the teaching of computer programming in Uganda universities.   

References
Anderson, J. R., & Skwarecki, E. (1986). The automated tutoring of introductory computer programming. Communications of the ACM, 29(9), 842-849. 
Alting, L., & Zhang, H. (1989). Computer aided process planning: the state-of-the-art survey. The International Journal of Production Research, 27(4), 553-585. 
Africa, D. (2017, 23/10/2017). Lack of Computers and Insufficient Training.   Retrieved 23/10/2017, 2017, from https://www.developafrica.org/provide-basic-computer-training-microsoft-office-applications-and-internet
Barr, M., Holden, & S., P., D. & Greening, T. . (1999). An exploration of novice programming errors in an object-oriented environment. SIGCSE Bulletin, 31(4), 42-46. 
Ben-Ari, M. (2001). Constructivism in computer science education. Journal of Computers in Mathematics and Science Teaching, 20(1), 45-74. 
Ben-Ari, Y. (2001). Developing networks play a similar melody. Trends in neurosciences, 24(6), 353-360. 
Berglund, A., Daniels, M., & Pears, A. (2006). Qualitative research projects in computing education research: an overview. Paper presented at the Proceedings of the 8th Australasian Conference on Computing Education-Volume 52.
Bonar, J. S., E. . (1989). Preprogramming Knowledge: A Major Source of Misconceptions in Novice Programmers, in Soloway & Spohrer: Studying the Novice Programmer. 325-354. 
Bonk, C. J., & Graham, C. R. (2006). The handbook of blended learning. San Francisco, CA: Pfeiffer. 
Boyer, N. R., Langevin, S., & Gaspar, A. (2008). Self direction & constructivism in programming education. Paper presented at the Proceedings of the 9th ACM SIGITE conference on Information technology education.
Bruce-Lockhart, M. N., T. (2000). Lifting the hood of the computer: program animation with the Teaching Machine Paper presented at the Proceedings of the Canadian Conference on Electrical and Computer Engineering.
Byrne, P. L., & G. (2001). The effect of student attributes on success in
programming. Paper presented at the Proceedings of the 6th annual conference on Innovation and technology in computer
science education.
Committee, I. L. T. S. (2017). Final LOM Draft Standard.   Retrieved 15/10/2017, 2017, from http://ltsc.ieee.org/wg12/20020612-Final-LOM-Draft.html
Dagdilelis, V., Satratzemi, M., & Evangelidis, G. (2004). Introducing secondary education students to algorithms and programming. Education and Information Technologies, 9(2), 159-173. 
Davies, S. (1993). Models and theories of programming strategy. International Journal of Man-Machine Studies, 39, 237-267. 
De Luca, M., Beckmann, C., De Stefano, N., Matthews, P., & Smith, S. M. (2006). fMRI resting state networks define distinct modes of long-distance interactions in the human brain. Neuroimage, 29(4), 1359-1367. 
Dodero, J. M., Fernández, C., & Sanz, D. (2003). An experience on students' participation in blended vs. online styles of learning. ACM Sigcse Bulletin, 35(4), 39-42. 
Duncan, C., Bell, T., & Tanimoto, S. (2014). Should your 8-year-old learn coding? Paper presented at the Proceedings of the 9th Workshop in Primary and Secondary Computing Education.
Elenbogen, B. S., Maxim, & B.R. & McDonald, C. ( 2000). Yet, more Web exercises for learning C++. Proc. of the 31st SIGCSE Technical Symposium on Computer Science Education SIGCSE Bulletin, 290-294. 
Exton, C. (2002). Constructivism and program comprehension strategies. Paper presented at the Program Comprehension, 2002. Proceedings. 10th International Workshop on.
Feeley, M. (2015). Compiling for multi-language task migration. Paper presented at the ACM SIGPLAN Notices.
Fessakis, G., Gouli, E., & Mavroudi, E. (2013). Problem solving by 5–6 years old kindergarten children in a computer programming environment: A case study. Computers & Education, 63, 87-97. 
Gibbs, D. C. (2000). The effect of a constructivist learning environment for field-dependent/independent students on achievement in introductory computer programming. Paper presented at the ACM Sigcse Bulletin.
Gonzalez, G. (2004). Constructivism in an introduction to programming course. Journal of Computing Sciences in Colleges, 19(4), 299-305. 
Govender, I. (2009). The learning context: Influence on learning to program. Computers & Education, 53(4), 1218-1230. 
Habibi, M., Springer, C., Spence, M., Hansen-Petrik, M., Fouts, H., & Kavanagh, K. (2015). Using Videoconferencing for Lactation Consultation: An Online Survey of Acceptance among a Sample of Mothers in the United States. The FASEB Journal, 29(1 Supplement), 581.585. 
Hadjerrouit, S. (2006). Introductory Java Programming.
Johnson, B., & Christensen, L. (2008). Educational research: Quantitative, qualitative, and mixed approaches: Sage.
Jun Zhang, L. (2001). Awareness in reading: EFL students' metacognitive knowledge of reading strategies in an acquisition-poor environment. Language Awareness, 10(4), 268-288. 
Kanselaar, G. (2002). Constructivism and socio-constructivism. Constructivism and socio-constructivism, 1-7. 
Kay, J., Barg, M., Fekete, A., Greening, T., Hollands, O., Kingston, J. H., & Crawford, K. (2000). Problem-based learning for foundation computer science courses. Computer Science Education, 10(2), 109-128. 
Kessler, C. A., J. (1989). Learning flow of control: recursive and iterative procedures. In Soloway & Spohrer: Studying the Novice Programmer. 229-260. 
Kolikant, Y. B.-D., & Pollack, S. (2004). Community-oriented pedagogy for in-service CS teacher training. ACM Sigcse Bulletin, 36(3), 191-195. 
Kölling, M. R., J. (1996). Blue - A Language for Teaching Object-Oriented Programming. Proc. of the 27th SIGCSE Technical Symposium on Computer Science Education, 190-194. 
Kurland, D., & Pea, R., Clement, C. & Mawby, R. (1989). A Study of the development of programming ability and thinking skills in gih school students. In Soloway & Spohrer: Studying the Novice Programmer. 209-228. 
Lakhal, S., Khechine, H., & Pascot, D. (2013). Student behavioural intentions to use desktop video conferencing in a distance course: integration of autonomy to the UTAUT model. Journal of Computing in Higher Education, 25(2), 93-121. 
Lam, M. S., Chan, E. Y., Lee, V. C., & Yu, Y.-T. (2008). Designing an automatic debugging assistant for improving the learning of computer programming. Paper presented at the International Conference on Hybrid Learning and Education.
Lau, W. W., & Yuen, A. H. (2009). Exploring the effects of gender and learning styles on computer programming performance: implications for programming pedagogy. British Journal of Educational Technology, 40(4), 696-712. 
Law, K. M., Lee, V. C., & Yu, Y.-T. (2010). Learning motivation in e-learning facilitated computer programming courses. Computers & Education, 55(1), 218-228. 
Law, K. M., Sandnes, F. E., Jian, H.-L., & Huang, Y.-P. (2009). A comparative study of learning motivation among engineering students in South East Asia and beyond. International Journal of Engineering Education, 25(1), 144. 
Liu, C. H., & Matthews, R. (2005). Vygotsky's Philosophy: Constructivism and Its Criticisms Examined. International education journal, 6(3), 386-399. 
Lombardo, M. V., Ashwin, E., Auyeung, B., Chakrabarti, B., Lai, M.-C., Taylor, K., . . . Baron-Cohen, S. (2012). Fetal programming effects of testosterone on the reward system and behavioral approach tendencies in humans. Biological psychiatry, 72(10), 839-847. 
Lui, A. K., Kwan, R., Poon, M., & Cheung, Y. H. (2004). Saving weak programming students: applying constructivism in a first programming course. ACM Sigcse Bulletin, 36(2), 72-76. 
Mayer, R., & Dyck, J. V., W. (1989). Learning to program and learning to think: what's the connection? In Soloway & Spohrer: Studying the Novice Programmer. 113-124. 
McCracken, M., & Almstrum, V., Diaz, D., Guzdial, M., Hagan, D., Kolikant, Y.B., Laxer, C., Thomas, L., Utting, I. & Wilusz, T. (2001). A multi-national, multi-institutional study of assessment of programming skills of first-year CS students. SIGCSE Bulletin, 33(4), 125-180. 
Miliszewska, I., & Tan, G. (2007). Befriending computer programming: A proposed approach to teaching introductory programming. Informing Science: International Journal of an Emerging Transdiscipline, 4(1), 277-289. 
McDougall, A., & Boyle, M. (2004). Student strategies for learning computer programming: Implications for pedagogy in informatics. Education and Information Technologies, 9(2), 109-116. 
Mead, J., Gray, S., Hamer, J., James, R., Sorva, J., Clair, C. S., & Thomas, L. (2006). A cognitive approach to identifying measurable milestones for programming skill acquisition. ACM Sigcse Bulletin, 38(4), 182-194. 
Morrison, M., & Newman, T. S. (2001). A study of the impact of student background and preparedness on outcomes in CS I. Paper presented at the ACM Sigcse Bulletin.
Naps, T. L., Rößling, G., & Almstrum, V., Dann, W., Fleischer, R., Hundhausen, C., Korhonen, A., Malmi, L., McNally, M., Rodger, S. & Velázquez-Iturbide, J.Á. (2003). Exploring the role of visualization and engagement in computer science education. SIGCSE Bulletin, 35(2), 131-152. 
Neuman, L. W. (2002). Social research methods: Qualitative and quantitative approaches. 
Nsibambi, C. A. (2014). Vocational Education and Training for Regional Economic Integration: From Ideas to Action. International Journal of Vocational Education and Training, 22(1), 16. 
Pane, J. M., B. . (1996). Usability Issues in the Design of Novice Programming Systms. from http://www.cs.cmu.edu/~pane/ftp/CMU-CS-96-132.pdf
Papert, S. S., C. . (1989). Twenty things to do with a computer. In Soloway & Spohrer: Studying the Novice Programmer. 3-27. 
Perkins, D., Hanconck, C., & Hobbs, R., Martin, F. & Simmons, R. . (1989). Conditions of learning in novice programmers. In Soloway & Spohrer: Studying the Novice Programmer. 261-279. 
Pollack, S., & Scherz, Z. (2003). Supporting project development in CS–the effect on intrinsic and extrinsic motivation. Paper presented at the Eleventh International PEG Conference, St. Petersburg, Russia.
project, C. (2017). CodeWitz Network Web Site. from http://www.codewitz.net/
Rist, R. (1996). Teaching Eiffel as a first language. Journal of Object-Oriented Programming, 9, 30-41. 
Rogerson, C., & Scott, E. (2010). The fear factor: How it affects students learning to program in a tertiary environment. Journal of Information Technology Education, 9. 
Rowe, G., Thorburn, G. (2000). VINCE - an on-line tutorial tool for teaching introductory programming. British Journal of Educational Technology, 31(4), 359-311. 
Şahin, S., & Uluyol, Ç. (2016). Preservice Teachers’ Perception and Use of Personal Learning Environments (PLEs). The International Review of Research in Open and Distributed Learning, 17(2). 
Sajaniemi, J., & Kuittinen, M. (2005). An experiment on using roles of variables in teaching introductory programming. Computer Science Education, 15(1), 59-82. 
Sajaniemi, J., & Kuittinen, M. (2003). Program animation based on the roles of variables. Paper presented at the Proceedings of the 2003 ACM symposium on Software visualization.
Satratzemi, M., Dagdilelis, & V. & Evagelidis, G. (2001). SIGCSE Bulletin, 33(2), 137-140. 
Soloway, E. S., J. (1989). Studying the Novice Programmer
Stigler, J. W., & Hiebert, J. (2009). The teaching gap: Best ideas from the world's teachers for improving education in the classroom: Simon and Schuster.
 Lawrence Erlbaum Associates, Hillsdale, New Jersey, 497. 
University, L. M. (2017). Learning Objects for Introductory Programming.   Retrieved 21/10/2017, 2017, from http://www.unl.ac.uk/ltri/learningobjects/index.htm
Winslow, L. E. (1996). Programming pedagogy—a psychological overview. ACM Sigcse Bulletin, 28(3), 17-22. 
Wulf, T. (2005). Constructivist approaches for teaching computer programming. Paper presented at the Proceedings of the 6th conference on Information technology education.

APPENDIX

STUDENT QUESTIONNAIRE

CHALLENGES FACED BY STUDENTS TOWARDS LEARNING COMPUTER PROGRAMMING COURSES IN UGANDA UNIVERSITIES

Department of Technical and Vocational Education (TVE)
Islamic University of Technology (IUT)
Board Bazar Gazipur 1704, Bangladesh.

Dear Respondents,	
I am a Master student in Technical Education Department (MScTE), with specialization in Computer Science and Engineering (CSE); Islamic University of Technology (IUT) Dhaka – Bangladesh. Being a requirement for the partial fulfilment for the award of the degree of master, I am currently conducting a research on a topic titled: “Challenges Faced by Students towards Learning Computer Programming Courses in Uganda Universities”. Your objective responses will help greatly in the actualization of this study and be highly appreciated. 
The responses provided will be used for the research purpose only and will be treated with strictest confidentiality. 
Thank you 
Mukasa Abubakari J. Mubiru
QUESTIONNAIRE
Section: A (Background Information)
Name of the University: ……………………….……………………………………
Email: ……………………………………………………………………………….
Tick/write your domain:  
      Computer Science & Engineering       Information Technology       Software Engineering  
Others: ……………………………………………………………….……………..
Status:       Student        Others      
Gender: *   Male               Female			
Nationality: * …………………………………………………………………………….……………………………   
INSTRUCTION:  (Section: B)
Using the listed options below, kindly tick (√) the most appropriate choice:

Table: 1
Objective I
The major challenges facing students while learning computer programming are.

S/N	

ITEMS STATEMENT	Strongly Agree (5)	Agree (4)	Undecided (3)	Disagree (2)	Strongly Disagree (1)	
1	I always fear programming course because they are difficult to learn*						
2	I do practice programming on my personal computer.						
3	Our programming teacher, does not give us enough content in programming 						
4	I use internet besides the lecture notes and textbooks to learn programming.						
5	The lecture notes prepared by our programming teacher enables me enjoy and pass the programming course.						
6	I don’t get enough practice time in my programming courses that make it hard for me*  						
7	I memorize all the syntax by heart but find it difficult to run them on computer.						
8	I enjoy reading computer programming courses using the books in our library.						
9	I was not taught programming in my secondary school.						
10	Our teacher give us assignments and home work after every programming lesson.						
11	Any time our programming teacher comes in, I feel like going out for I don’t understand anything he/she is teaching*						

Table: 2
Objective II
The methods most teachers follow in teaching computer programming courses are.

S/N	
ITEMS STATEMENT	Strongly Agree (5)	Agree (4)	Undecided (3)	Disagree (2)	Strongly Disagree (1)	
1	Our programming teacher is always available for questions after classes.						
2	Our programming teacher always shows keen interest in motivating us to accomplish programming practical.						
3	Our programming teacher does not explain beyond the examples in the text books he/she is using.*						
4	While teaching programming course, our teacher cite local examples to explain the concept to us. 						
5	Our teacher gives us programming projects that we submit during the course time.						
6	I find some topics interesting when taught by another teacher						
7	Our teachers assign us to groups while learning programming course*						
8	Our teacher has never ran any code successful in class.						
9	Our programming teacher does not answer our question each time we ask.*						

Table: 3
Objective III

How can learning Computer programming be improved.

S/NO	
ITEMS STATEMENT	Strongly Agree (5)	Agree (4)	Undecided (3)	Disagree (2)	Strongly Disagree (1)	
1	Summarizing important points while reading						
2	Any time I miss programming class much, I consult my class mates or teachers. 						
3	I always enjoy reading the instructional material prepared by the teacher.						
4	Our teacher(s), teaches programming nicely but we lack computers to lay our hands on during practical. 						
5	Without looking at the codes provided by the teacher or textbooks, I cannot write a programme that run successfully.						
6	The fact that there are many students in our class, the teacher finds it difficult to go round during laboratory work.						
7	We hardly get time for doing practical due to the fact that we are always occupied with other courses.						
8	I follow programming instructional codes in solving similar programming problems.