2,391 research outputs found
Teaching programming with computational and informational thinking
Computers are the dominant technology of the early 21st century: pretty well all aspects of economic, social and personal life are now unthinkable without them. In turn, computer hardware is controlled by software, that is, codes written in programming languages. Programming, the construction of software, is thus a fundamental activity, in which millions of people are engaged worldwide, and the teaching of programming is long established in international secondary and higher education. Yet, going on 70 years after the first computers were built, there is no well-established pedagogy for teaching programming.
There has certainly been no shortage of approaches. However, these have often been driven by fashion, an enthusiastic amateurism or a wish to follow best industrial practice, which, while appropriate for mature professionals, is poorly suited to novice programmers. Much of the difficulty lies in the very close relationship between problem solving and programming. Once a problem is well characterised it is relatively straightforward to realise a solution in software. However, teaching problem solving is, if anything, less well understood than teaching programming.
Problem solving seems to be a creative, holistic, dialectical, multi-dimensional, iterative process. While there are well established techniques for analysing problems, arbitrary problems cannot be solved by rote, by mechanically applying techniques in some prescribed linear order. Furthermore, historically, approaches to teaching programming have failed to account for this complexity in problem solving, focusing strongly on programming itself and, if at all, only partially and superficially exploring problem solving.
Recently, an integrated approach to problem solving and programming called Computational Thinking (CT) (Wing, 2006) has gained considerable currency. CT has the enormous advantage over prior approaches of strongly emphasising problem solving and of making explicit core techniques. Nonetheless, there is still a tendency to view CT as prescriptive rather than creative, engendering scholastic arguments about the nature and status of CT techniques. Programming at heart is concerned with processing information but many accounts of CT emphasise processing over information rather than seeing then as intimately related.
In this paper, while acknowledging and building on the strengths of CT, I argue that understanding the form and structure of information should be primary in any pedagogy of programming
What’s Motivation Got to Do with It? A Survey of Recursion in the Computing Education Literature
One of the most challenging topics for both computing educators and students is recursion. Pedagogical approaches for teaching recursion have appeared in the computing education literature for over 30 years, and the topic has generated a significant body of work. Given its persistence, relatively little attention has been paid to student motivation. This article summarizes results on teaching and learning recursion explored by the computing education community, noting the relative lack of interest in motivation. It concludes by briefly discussing an approach to teaching recursion is appealing for students interested in web development
Student Monks – Teaching Recursion in an IS or CS Programming Course Using the Towers of Hanoi
Educators have been using the Towers of Hanoi problem for many years as an example of a problem that has a very elegant recursive solution. However, the elegance and conciseness of this solution can make it difficult for students to understand the amount of computer time required in the execution of this solution. And, like many recursive computer programs, students often find it difficult to follow a trace of the solution. Research in computer education has shown that active learning exercises achieve positive educational results. In line with this research, an active learning exercise was employed in the classroom to assist students in gaining a better understanding of the recursive solution to the Towers of Hanoi problem. This demonstration can be used in an introductory IS or CS programming class, independent of the language used. The demonstration involves using student volunteers, who, in the demonstration, are referred to as “monks,” a reference to the original problem that had monks moving the golden rings in the Towers of Hanoi. An anonymous student survey revealed that students felt strongly that the demonstration helped them better understand recursion, and that the demonstration was a good use of class time. In addition, an analysis of a small sample of students’ computer programs following the demonstration, suggests that there may be pedagogical benefits to use of the student monk demonstration
A Case Study in Refactoring Functional Programs
Refactoring is the process of redesigning existing code without changing its functionality. Refactoring has recently come to prominence in the OO community. In this paper we explore the prospects for refactoring functional programs. Our paper centres on the case study of refactoring a 400 line Haskell program written by one of our students. The case study illustrates the type and variety of program manipulations involved in refactoring. Similarly to other program transformations, refactorings are based on program equivalences, and thus ultimately on language semantics. In the context of functional languages, refactorings can be based on existing theory and program analyses. However, the use of program transformations for program restructuring emphasises a different kind of transformation from the more traditional derivation or optimisation: characteristically, they often require wholesale changes to a collection of modules, and although they are best controlled by programmers, their application may require nontrivial semantic analyses. The paper also explores the background to refactoring, provides a taxonomy for describing refactorings and draws some conclusions about refactoring for functional programs
A discrete invitation to quantum filtering and feedback control
The engineering and control of devices at the quantum-mechanical level--such
as those consisting of small numbers of atoms and photons--is a delicate
business. The fundamental uncertainty that is inherently present at this scale
manifests itself in the unavoidable presence of noise, making this a novel
field of application for stochastic estimation and control theory. In this
expository paper we demonstrate estimation and feedback control of quantum
mechanical systems in what is essentially a noncommutative version of the
binomial model that is popular in mathematical finance. The model is extremely
rich and allows a full development of the theory, while remaining completely
within the setting of finite-dimensional Hilbert spaces (thus avoiding the
technical complications of the continuous theory). We introduce discretized
models of an atom in interaction with the electromagnetic field, obtain
filtering equations for photon counting and homodyne detection, and solve a
stochastic control problem using dynamic programming and Lyapunov function
methods.Comment: 76 pages, 12 figures. A PDF file with high resolution figures can be
found at http://minty.caltech.edu/papers.ph
Use of proofs-as-programs to build an anology-based functional program editor
This thesis presents a novel application of the technique known as proofs-as-programs.
Proofs-as-programs defines a correspondence between proofs in a constructive logic
and functional programs. By using this correspondence, a functional program may be
represented directly as the proof of a specification and so the program may be analysed within this proof framework. CʸNTHIA is a program editor for the functional
language ML which uses proofs-as-programs to analyse users' programs as they are
written. So that the user requires no knowledge of proof theory, the underlying proof
representation is completely hidden.
The proof framework allows programs written in CʸNTHIA to be checked to be
syntactically correct, well-typed, well-defined and terminating.
CʸNTHIA also embodies the idea of programming by analogy — rather than starting
from scratch, users always begin with an existing function definition. They then apply
a sequence of high-level editing commands which transform this starting definition into
the one required. These commands preserve correctness and also increase programming
efficiency by automating commonly occurring steps.
The design and implementation of CʸNTHIA is described and its role as a novice
programming environment is investigated. Use by experts is possible but only a sub-set of ML is currently supported. Two major trials of CʸNTHIA have shown that
CʸNTHIA is well-suited as a teaching tool. Users of CʸNTHIA make fewer programming errors and the feedback facilities of CʸNTHIA mean that it is easier to
track down the source of errors when they do occur
How functional programming mattered
In 1989 when functional programming was still considered a niche topic, Hughes wrote a visionary paper arguing convincingly ‘why functional programming matters’. More than two decades have passed. Has functional programming really mattered? Our answer is a resounding ‘Yes!’. Functional programming is now at the forefront of a new generation of programming technologies, and enjoying increasing popularity and influence. In this paper, we review the impact of functional programming, focusing on how it has changed the way we may construct programs, the way we may verify programs, and fundamentally the way we may think about programs
Supporting Programming by Analogy in the Learning of Functional Programming Languages
This paper examines the difficulties in learning new programming languages and addresses ways to overcome these difficulties. In particular, we concentrate on the functional programming language ML. ML is increasingly being used for teaching and research. It has many features such as recursion, pattern matching and typing that present problems for the novice programmer. We have implemented a program editor,
- …