Title
Gradually Learning Programming Supported by a Growable Programming Language
Abstract
Learning programming is a difficult task. Such difficulties depends on the chosen programming language and the exposure to the single programming concept. Mainstream programming languages such as Java, C and C++ are the most popular. But their innate complexity and the complexity of their tools risk to divert students' attention from the key point of learning appropriate programming techniques in general. Students that approach learning programming tend to focus on learning the programming language since it looks more practicable. The prominent issue lies within the core components of these languages: each programming language consists of many different features-such as control flow, variable definition, and so on-, each bound to a different group of constructs of the language. Due to their strict intertwining, the students are forced to keep up with a considerable quantity of unknown constructs and concepts since the beginning. This issue aggravates if we consider that many of these constructs are not meant to be fully explained until much further in the course, or worse, never. Also support tools, as IDEs, do not help the teacher in the compartmentalization of the programming concepts since they provide the students with code skeletons to fill without considering any language restriction. Teaching basic and advanced programming courses taught us that students tend to confuse the learning of programming with the learning of the programming language. The students try to master the programming language by learning any tiny little detail of it; in the hope that such details hide an easy solution to the proposed assignments. Evidently, this approach promotes the wrong belief that to learn programming means to learn the programming language instead of the correct thinking that programming is a matter of being able to solve problems independently of the used programming language. Problem solving is typically taught by examples and this approach seconds the misbelief th- students have about what programming is. The solution to a problem is often presented as an already cooked algorithm written in the programming language of choice. Hardly the teacher has the time during his lesson to present the mind process to get to such a solution, since he is already busy in describing the syntactic constructs used in the program, what they do, and all the possible variants the language proposes. Students that still have to tune up their programming skills are disoriented by this approach: they understand what the program does but they cannot either cook their own solution or adapt the proposed solution to a different context. More pre-cooked solutions they get and more difficult for them becomes to separate the programming language from the problem solving. At the very end, students rarely get acquainted to the full-extent of the programming language they use, and they feel disoriented when facing problems that slightly divert from those presented in the lectures. Even smarter students maintain a solving approach based upon few constructs that they master at the best, which often is not the most effective approach. This is a more evident side-effect when the learner is exposed to the whole language since the beginning and without any constraints on what construct to use in solving a given problem. Training students to problem solving means to let them fully explore what they have at their hands, sometimes addressing them to different solution strategies. But if the tool is too complex, the exploration requires too much time that the students steal from thinking about the problem. Sometimes the only way to get students to experiment something is to force them in that direction by limiting the choice to a particular group of language constructs. Some extreme positions include to delay the coding and thus the learning of the language. In our opinion, this could help the students to focus on problem solving but coding and all the other aspects re
Year
DOI
Venue
2016
10.1109/TETC.2015.2446192
International Computer Software and Applications Conference
Keywords
Field
DocType
Teaching of programming,gradual learning,modular development of programming languages,modularity
Functional logic programming,Fifth-generation programming language,Second-generation programming language,Programming language,Programming paradigm,Computer science,Inductive programming,First-generation programming language,Third-generation programming language,Programming domain
Journal
Volume
Issue
ISSN
PP
99
2168-6750
Citations 
PageRank 
References 
0
0.34
0
Authors
2
Name
Order
Citations
PageRank
Walter Cazzola153350.41
Diego Mathias Olivares2181.33