53 research outputs found
Gradually learning programming supported by a growable programming language
Learning programming is a difficult task. The learning process is particularly disorienting when you are approaching programming for the first time. As a student you are exposed to several new concepts (control flow, variable, etc. but also coding, compiling etc.) and new ways to think (algorithms). Teachers try to expose the students gradually to the new concepts by presenting them one by one but the tools at student's disposal do not help: they provide support, suggestion and documentation for the full programming language of choice hampering the teacher's efforts. On the other side, students need to learn real languages and not didactic languages. In this work we propose an approach to gradually teaching programming supported by a programming language that grows---together with its implementation---along with the number of concepts presented to the students. The proposed approach can be applied to the teaching of any programming language and some experiments with Javascript are reported
A virtual robot solution to support programming
Computer programming is a valuable skill. But learning programming is sometimes difficult, time-consuming, even frustrating. In this context, there is a need for new approaches to help in the process of learning programming. Here it is presented a solution based on a virtual robot with progressive system and supported in a generic and portable language. Those features answer to some needs. First, the virtual robot allows for certain level tangibility to the results. Then, the implementation as a progressive system allows for the support of the learning process. Finally, the use of a generic and portable language allows for the installation of the system on many platforms.info:eu-repo/semantics/acceptedVersio
Gradual Grammars: Syntax in Levels and Locales
Programming language implementations are often one-sizefits-all. Irrespective of the ethnographic background or proficiency of their users, they offer a single, canonical syntax for all language users.
Whereas professional software developers might be willing to learn a programming language all in one go, this might be a significant barrier for non-technical users, such as children who learn to program, or domain experts using domain-specific languages (DSLs).
Parser tools, however, do not offer sufficient support for graduality or internationalization, leading (worst case) to maintaining multiple parsers, for each target class of users.
In this paper we present Fabric, a grammar formalism that supports: 1) the gradual extension with (and deprecation of) syntactic constructs in consecutive levels (“vertical”), and, orthogonally, 2) the internationalization of syntax by translating keywords and shuffling sentence order (“horizontal”). This is done in such a way that downstream language processors (compilers, interpreters, type checkers etc.) are affected as little as possible.
We discuss the design of Fabric and its implementation on top of the LARK parser generator, and how Fabric can be embedded in the Rascal language workbench. A case study on the gradual programming language Hedy shows that language levels can be represented and internationalized concisely, with hardly any duplication. We evaluate the Fabric library using the Rebel2 DSL, by translating it to Dutch, and “untranslating” its concrete syntax trees, to reuse its existing compiler. Fabric thus provides a principled approach to gradual syntax definition in levels and locales.</p
Choosy and Picky: Configuration of Language Product Lines
Although most programming languages naturally share several language features, they are typically implemented as a monolithic product. Language features cannot be plugged and unplugged from a language and reused in another language. Some modular approaches to language construction do exist but composing language features requires a deep understanding of its implementation hampering their use. The choose and pick approach from software product lines provides an easy way to compose a language out of a set of language features. However, current approaches to language product lines are not sufficient enough to cope with the complexity and evolution of real world programming languages. In this work, we propose a general light-weight bottom-up approach to automatically extract a feature model from a set of tagged language components. We applied this approach to the Neverlang language development framework and developed the AiDE tool to guide language developers towards a valid language composition. The approach has been evaluated on a decomposed version of Javascript to highlight the benefits of such a language product line
Open Programming Language Interpreters
Context: This paper presents the concept of open programming language
interpreters and the implementation of a framework-level metaobject protocol
(MOP) to support them. Inquiry: We address the problem of dynamic interpreter
adaptation to tailor the interpreter's behavior on the task to be solved and to
introduce new features to fulfill unforeseen requirements. Many languages
provide a MOP that to some degree supports reflection. However, MOPs are
typically language-specific, their reflective functionality is often
restricted, and the adaptation and application logic are often mixed which
hardens the understanding and maintenance of the source code. Our system
overcomes these limitations. Approach: We designed and implemented a system to
support open programming language interpreters. The prototype implementation is
integrated in the Neverlang framework. The system exposes the structure,
behavior and the runtime state of any Neverlang-based interpreter with the
ability to modify it. Knowledge: Our system provides a complete control over
interpreter's structure, behavior and its runtime state. The approach is
applicable to every Neverlang-based interpreter. Adaptation code can
potentially be reused across different language implementations. Grounding:
Having a prototype implementation we focused on feasibility evaluation. The
paper shows that our approach well addresses problems commonly found in the
research literature. We have a demonstrative video and examples that illustrate
our approach on dynamic software adaptation, aspect-oriented programming,
debugging and context-aware interpreters. Importance: To our knowledge, our
paper presents the first reflective approach targeting a general framework for
language development. Our system provides full reflective support for free to
any Neverlang-based interpreter. We are not aware of any prior application of
open implementations to programming language interpreters in the sense defined
in this paper. Rather than substituting other approaches, we believe our system
can be used as a complementary technique in situations where other approaches
present serious limitations
Estructura y herramientas para un curso inicial sobre programación orientada a objetos
Presentamos un proyecto sobre enseñanza de la Programación Orientada a Objetos (POO), en el que se estudian tanto las posibles estructuraciones de un curso inicial sobre POO, como las herramientas a utilizar en el mismo. Partimos de las dificultades que los docentes asociados al proyecto notamos en el dictado de cursos desde hace más de 10 años, y de la literatura existente sobre el tema.
Se formalizó una estructura de curso en cuatro etapas, y se desarrolló un lenguaje y entorno de programación didácticos que acompañan la secuencia sugerida. El entorno incluye facilidades avanzadas de edición, una consola interactiva, soporte para tests de ejecución automática, generación automática de diagramas, errores de codificación adecuados a estudiantes iniciales que aparecen mientras se tipea, entre otras características.
Estos resultados se utilizan en cursos de 5 universidades nacionales desde 2015. También hemos presentado nuestros resultados en eventos nacionales e internacionales. Actualmente estamos trabajando en distintas direcciones con el objetivo de que otros docentes puedan incorporar los resultados de nuestro trabajo.
Hay un tesista de doctorado, uno de licenciatura, y dos becarios estudiantes colaborando en el proyecto.Eje: Innovación en Sistemas de Software.Red de Universidades con Carreras en Informátic
Estructura y herramientas para un curso inicial sobre programación orientada a objetos
Presentamos un proyecto sobre enseñanza de la Programación Orientada a Objetos (POO), en el que se estudian tanto las posibles estructuraciones de un curso inicial sobre POO, como las herramientas a utilizar en el mismo. Partimos de las dificultades que los docentes asociados al proyecto notamos en el dictado de cursos desde hace más de 10 años, y de la literatura existente sobre el tema.
Se formalizó una estructura de curso en cuatro etapas, y se desarrolló un lenguaje y entorno de programación didácticos que acompañan la secuencia sugerida. El entorno incluye facilidades avanzadas de edición, una consola interactiva, soporte para tests de ejecución automática, generación automática de diagramas, errores de codificación adecuados a estudiantes iniciales que aparecen mientras se tipea, entre otras características.
Estos resultados se utilizan en cursos de 5 universidades nacionales desde 2015. También hemos presentado nuestros resultados en eventos nacionales e internacionales. Actualmente estamos trabajando en distintas direcciones con el objetivo de que otros docentes puedan incorporar los resultados de nuestro trabajo.
Hay un tesista de doctorado, uno de licenciatura, y dos becarios estudiantes colaborando en el proyecto.Eje: Innovación en Sistemas de Software.Red de Universidades con Carreras en Informátic
Estructura y herramientas para un curso inicial sobre programación orientada a objetos
Presentamos un proyecto sobre enseñanza de la Programación Orientada a Objetos (POO), en el que se estudian tanto las posibles estructuraciones de un curso inicial sobre POO, como las herramientas a utilizar en el mismo. Partimos de las dificultades que los docentes asociados al proyecto notamos en el dictado de cursos desde hace más de 10 años, y de la literatura existente sobre el tema.
Se formalizó una estructura de curso en cuatro etapas, y se desarrolló un lenguaje y entorno de programación didácticos que acompañan la secuencia sugerida. El entorno incluye facilidades avanzadas de edición, una consola interactiva, soporte para tests de ejecución automática, generación automática de diagramas, errores de codificación adecuados a estudiantes iniciales que aparecen mientras se tipea, entre otras características.
Estos resultados se utilizan en cursos de 5 universidades nacionales desde 2015. También hemos presentado nuestros resultados en eventos nacionales e internacionales. Actualmente estamos trabajando en distintas direcciones con el objetivo de que otros docentes puedan incorporar los resultados de nuestro trabajo.
Hay un tesista de doctorado, uno de licenciatura, y dos becarios estudiantes colaborando en el proyecto.Eje: Innovación en Sistemas de Software.Red de Universidades con Carreras en Informátic
- …