Many systems are designed to help novices who want to learn programming, but few support those who are not necessarily interested in learning programming. This paper targets the subset of end-user programmers (EUPs) i...
详细信息
Many systems are designed to help novices who want to learn programming, but few support those who are not necessarily interested in learning programming. This paper targets the subset of end-user programmers (EUPs) in this category. We present a set of principles on how to help EUPs like this learn just a little when they need to overcome a barrier. We then instantiate the principles in a prototype and empirically investigate them in three studies: a formative think-aloud study, a pair of summer camps attended by 42 teens, and a third summer camp study featuring a different environment attended by 48 teens. Finally, we present a generalized architecture to facilitate the inclusion of Idea Gardens into other systems, illustrating with examples from Idea Garden prototypes. Results have been very encouraging. For example, under our principles, Study #2's camp participants required significantly less in-person help than in a previous camp to learn the same amount of material in the same amount of time.
Jim Pallas, an artist who pioneered the use of technology in art, collaborated with computer sage Rene Vega and programmer Randy Mims in 1979 to create Century of Light, one of the earliest interactive public sculptur...
详细信息
Jim Pallas, an artist who pioneered the use of technology in art, collaborated with computer sage Rene Vega and programmer Randy Mims in 1979 to create Century of Light, one of the earliest interactive public sculptures. In this article, Pallas describes an earlier struggle to incorporate technology into sculpture, the selection process that led to this, his first public commission and the collaborative process. Sited within a pedestrian mall in downtown Detroit, the sculpture sensed viewers' movements, sounds and light. Unfortunately, the sculpture was located in an ill-conceived plaza. Although the city administration mismanaged the site and allowed the sculpture to be destroyed 25 years later, the electronics and program were rescued and remain intact.
In Word and Object, W.V. Quine dismisses connotations that result from the work of explicating expressions as "don't-cares." This paper traces the history of this phrase to an algorithm that Quine develo...
详细信息
In Word and Object, W.V. Quine dismisses connotations that result from the work of explicating expressions as "don't-cares." This paper traces the history of this phrase to an algorithm that Quine developed in the 1950s, which became important in early computer engineering. computer programmers eventually came to realize that it was in their best interests to abandon the "don't-care" attitude. Similarly, I argue that naturalists who properly appreciate the communal nature of their inquiries have reason to adopt a more careful approach when they propose and evaluate explications.
MODERN SERVER SOFTWARE is demanding to develop and operate: It must be available at all times and in all locations;it must reply within milliseconds to user requests;it must respond quickly to capacity demands;it must...
详细信息
MODERN SERVER SOFTWARE is demanding to develop and operate: It must be available at all times and in all locations;it must reply within milliseconds to user requests;it must respond quickly to capacity demands;it must process a lot of data and even more traffic;it must adapt quickly to changing product needs;and, in many cases, it must accommodate a large engineering organization, its many engineers the proverbial cooks in a big, messy kitchen. What's more, the best computers for these applications-whether you call them clouds, datacenters, or warehouse computers-are really bad. They are complex and unreliable, and prone to partial failures. They have asynchronous interconnects and deep memory hierarchies, and leave a lot of room for operator error.(1) Cloud computing thus forces us to confront the full complexity of distributed computing, where seemingly simple problems require complicated solutions. While much of this complexity is inherent-the very nature of the problem precludes simpler solutions-much of it is also incidental, a simple consequence of using tools unfit for the purpose.
Graphics Processing Units (GPUs) offer potential for very high performance;they are also rapidly evolving. Obsidian is an embedded language (in Haskell) for implementing high performance kernels to be run on GPUs. We ...
详细信息
Graphics Processing Units (GPUs) offer potential for very high performance;they are also rapidly evolving. Obsidian is an embedded language (in Haskell) for implementing high performance kernels to be run on GPUs. We would like to have our cake and eat it too;we want to raise the level of abstraction beyond CUDA code and still give the programmer control over the details relevant to kernel performance. To that end, Obsidian provides array representations that guarantee elimination of intermediate arrays while also using the type system to model the hierarchy of the GPU. Operations are compiled very differently depending on what level of the GPU they target, and as a result, the user is gently constrained to write code that matches the capabilities of the GPU. Thus, we implement not Nested Data Parallelism, but a more limited form that we call Hierarchical Data Parallelism. We walk through case-studies that demonstrate how to use Obsidian for rapid design exploration or auto-tuning, resulting in performance that compares well to the hand-tuned kernels used in Accelerate and NVIDIA Thrust.
PROFESSIONAL PROGRAMMING IS about dealing with software at scale. Everything is trivial when the problem is small and contained: it can be elegantly solved with imperative programming or functional programming or any ...
详细信息
PROFESSIONAL PROGRAMMING IS about dealing with software at scale. Everything is trivial when the problem is small and contained: it can be elegantly solved with imperative programming or functional programming or any other paradigm. Real-world challenges arise when programmers have to deal with large amounts of data, network requests, or intertwined entities, as in user interface (UI) programming. Of these different types of challenges, managing the dynamics of change in a code base is a common one that may be encountered in either UI programming or the back end. How to structure the flow of control and concurrency among multiple parties that need to update one another with new information is referred to as managing change. In both UI programs and servers, concurrency is typically present and is responsible for most of the challenges and complexity. Some complexity is accidental and can be removed. Managing concurrent complexity becomes difficult when the amount of essential complexity is large. In those cases, the interrelation between the entities is complex-and cannot be made less so. For example, the requirements themselves may already represent essential complexity. In an online text editor, the requirements alone may determine that a keyboard input needs to change the view, update text formatting, perhaps also change the table of contents, word count, paragraph count, request the document to be saved, and take other actions. Because essential complexity cannot be eliminated, the alternative is to make it as understandable as possible, which leads to making it maintainable. When it comes to complexity of change around some entity Foo, you want to understand what Foo changes, what can change Foo, and which part is responsible for the change.
From the very earliest days of electronic computing, flowcharts have been used to represent the conceptual structure of complex software systems. In much of the literature on software development, the flowchart serves...
详细信息
From the very earliest days of electronic computing, flowcharts have been used to represent the conceptual structure of complex software systems. In much of the literature on software development, the flowchart serves as the central design document around which systems analysts, computer programmers, and end users communicate, negotiate, and represent complexity. And yet the meaning of any particular flowchart was often highly contested, and the apparent specificity of such design documents rarely reflected reality. Drawing on the sociological concept of the boundary object, this article explores the material culture of software development with a particular focus on the ways in which flowcharts served as political artifacts within the emerging communities of practices of computer programming.
The article presents author's views on political aspects related to life of people in Japan after the earthquake on March 11, 2011. Topics discussed include demolished building of Fukushima Daiichi Nuclear Power S...
详细信息
The article presents author's views on political aspects related to life of people in Japan after the earthquake on March 11, 2011. Topics discussed include demolished building of Fukushima Daiichi Nuclear Power Station, transpacific dimensions of Asian Canadian relations, social production of valuable culture.
This paper presents an approach for the automated debugging of reactive and concurrent Java programs, combining model checking and runtime monitoring. Runtime monitoring is used to transform the Java execution traces ...
详细信息
This paper presents an approach for the automated debugging of reactive and concurrent Java programs, combining model checking and runtime monitoring. Runtime monitoring is used to transform the Java execution traces into the input for the model checker, the purpose of which is twofold. First, it checks these execution traces against properties written in linear temporal logic (LTL), which represent desirable or undesirable behaviors. Second, it produces several execution traces for a single Java program by generating test inputs and exploring different schedulings in multithreaded programs. As state explosion is the main drawback to model checking, we propose two abstraction approaches to reduce the memory requirements when storing Java states. We also present the formal framework to clarify which kinds of LTL safety and liveness formulas can be correctly analysed with each abstraction for both finite and infinite program executions. A major advantage of our approach comes from the model checker, which stores the trace of each failed execution, allowing the programmer to replay these executions to locate the bugs. Our current implementation, the tool TJT, uses Spin as the model checker and the Java Debug Interface NI) for runtime monitoring. TJT is presented as an Eclipse plug-in and it has been successfully applied to debug complex public Java programs. (C) 2013 The Authors. Published by Elsevier Inc. All rights reserved.
暂无评论