11 research outputs found

    Teaching programming with computational and informational thinking

    Get PDF
    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

    Assess Applicability of the Functional Programming Paradigms in Embedded Hardware

    Full text link
    Programming in embedded lighting domain is commonly done using the C language with the Object Oriented programming paradigm at Philips Lighting. However applying that paradigm in combination with the low-level language like C creates a conceptual gap between the requirements and design and actual implementation. This results in reduced source code readability and maintainability. Functional programming paradigm was expected to alleviate this problem by reducing the gap and enhancing readability. A proof of concept was built on an advanced, IP-connected, digital LED driver (Power over Ethernet) device. The actual code was inspired by the rule-based decision engine concept developed by EnLight.Based on the hardware specifications of the device, the existing code to communicate with, and adherence to the functional paradigm, Lua was chosen to build the proof with. The implementation of the decision engine was altered to exploit characteristics of functional programming, such as representing actions as functions rather than as an enumeration value, using the common filter function to replace loops, and many more.The proof of concept was able to run in the device. It was also relatively more readable and maintainable. However, it was slightly slower, less memory efficient, and less capable in dealing with low-level problems such as garbage compared to the engine in C language

    Tietojenkäsittelytieteellisiä tutkielmia : Talvi 2018

    Get PDF

    E-EDD: integración en Eclipse del depurador declarativo para Erlang EDD

    Get PDF
    El presente trabajo tiene como finalidad el proporcionar una interfaz de depuración declarativa de fácil uso e interacción para programadores Erlang. La idea viene promovida por el desarrollo inicial del proyecto Erlang Declarative Debugging (EDD) a cargo de Rafael Caballero, Enrique Martín-Martín, Adrián Riesco y Salvador Tamarit, quienes llevan tiempo trabajando en la investigación y la implementación de diversas técnicas para la depuración declarativa. Su campo de trabajo es un proyecto que incluye una serie de algoritmos que, en conjunto, ofrecen una herramienta de depuración declarativa para programas Erlang. El presente trabajo tiene, por tanto, el objetivo de enriquecer dicha herramienta, además de intentar una mayor divulgación. Para ello, es necesario conseguir un mayor acercamiento a los desarrolladores y motivarles a hacer uso de la herramienta desde una perspectiva menos abstracta, permitiendo así que su uso pueda estar presente durante las fases de desarrollo. De aquí nace la idea de Eclipse-EDD (E-EDD), un proyecto desarrollado en tecnología Eclipse, que es un IDE de gran aceptación, versatilidad y potencia ya que, mediante el desarrollo de plugins, permite que puedan integrarse extensiones a la herramienta con la finalidad de adaptarla a las necesidades especificas de los usuarios. E-EDD permitirá dar una visión alternativa a los programadores Erlang (en lo que a la depuración se refiere) respecto a la forma de depuración tradicional muy presente en los lenguajes imperativos como el uso de breakpoints, ya que la inspección de variables no tiene sentido en la programación funcional. Por tanto, lo que se ofrece con el presente proyecto es mejorar la usabilidad de EDD mediante una herramienta gráfica que mejore la experiencia del usuario en las arduas labores de depuración declarativa, además de buscar promover su uso y aceptación ofreciendo un entorno simple y amigable

    Implementation of action semantics in coq

    Get PDF
    Formal Semantics is a topic of major importance in the study of programming language design. Action semantics is a recently developed framework for the specification of formal semantics which allows understandable, modular and reusable semantic descriptions of programming languages. Action laws are algebraic properties of primitive actions and action combinators which can be used to prove the existence of semantic equivalence between pairs of constructs, expressions etc. of programming language. This thesis endeavours to show how action semantics can be formalised computationally by reporting on the representation of the kernel of action notation in CAML. CAML is a functional language whose type systems allow the user to define his/her own data structures. It allows the definitions of functions manipulating these data structures with the security provided by strict type verification. The representation of the kernel in the specification language of the Coq development system is also outlined. The Coq system is an implementation of the Calculus of Inductive Constructions and provides goal-directed tactic-driven proof search. The proof engine of the Coq system is then used to prove various action laws

    An investigation of nondeterminism in functional programming languages

    Get PDF
    This thesis investigates nondeterminism in functional programming languages. To establish a precise understanding of nondeterministic language properties, Sondergaard and Sestoft's analysis and definitions of functional language properties are adopted as are the characterizations of weak and strong nondeterminism. This groundwork is followed by a denotational semantic description of a nondeterministic language (suggested by Sondergaard and Sestoft). In this manner, a precise characterization of the effects of strong nondeterminism is developed. Methods used to hide nondeterminism to in order to overcome or sidestep the problem of strong nondeterminism in pure functional languages are defined. These different techniques ensure that functional languages remain pure but also include some of the advantages of nondeterminism. Lastly, this discussion of nondeterminism is applied to the area of functional parallel language implementation to indicate that the related problem and the possible solutions are not purely academic. This application gives rise to an interesting discussion on optimization of list parallelism. This technique relies on the ability to decide when a bag may be used instead of a list

    A hierarchy of languages, logics, and mathematical theories

    Get PDF
    We present mathematics from a foundational perspective as a hierarchy in which each tier consists of a language, a logic, and a mathematical theory. Each tier in the hierarchy subsumes all preceding tiers in the sense that its language, logic, and mathematical theory generalize all preceding languages, logics, and mathematical theories. Starting from the root tier, the mathematical theories in this hierarchy are: combinatory logic restricted to the identity I, combinatory logic, ZFC set theory, constructive type theory, and category theory. The languages of the first four tiers correspond to the languages of the Chomsky hierarchy: in combinatory logic Ix = x gives rise to a regular language; the language generated by S, K in combinatory logic is context-free; first-order logic is context-sensitive; and the typed lambda calculus of type theory is recursively enumerable. The logic of each tier can be characterized in terms of the cardinality of the set of its truth values: combinatory logic restricted to I has 0 truth values, while combinatory logic has 1, first-order logic 2, constructive type theory 3, and categeory theory omega_0. We conjecture that the cardinality of objects whose existence can be established in each tier is bounded; for example, combinatory logic is bounded in this sense by omega_0 and ZFC set theory by the least inaccessible cardinal. We also show that classical recursion theory presents a framework for generating the above hierarchy in terms of the initial functions zero, projection, and successor followed by composition and m-recursion, starting with the zero function I in combinatory logic This paper begins with a theory of glossogenesis, i.e. a theory of the origin of language, since this theory shows that natural language has deep connections to category theory and since it was through these connections that the last tier and ultimately the whole hierarchy were discovered. The discussion covers implications of the hierarchy for mathematics, physics, cosmology, theology, linguistics, extraterrestrial communication, and artificial intelligence

    Vers une ingénierie flexible pour le traitement de l'information

    Get PDF

    Vers une nouvelle ingénierie de l'information

    Get PDF
    corecore