Functional Programming in Javascript

Total Page:16

File Type:pdf, Size:1020Kb

Functional Programming in Javascript Functional Programming in JavaScript Functional Programming in JavaScript LUIS ATENCIO MANNING SHELTER ISLAND For online information and ordering of this and other Manning books, please visit www.manning.com. The publisher offers discounts on this book when ordered in quantity. For more information, please contact Special Sales Department Manning Publications Co. 20 Baldwin Road PO Box 761 Shelter Island, NY 11964 Email: [email protected] ©2016 by Manning Publications Co. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by means electronic, mechanical, photocopying, or otherwise, without prior written permission of the publisher. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in the book, and Manning Publications was aware of a trademark claim, the designations have been printed in initial caps or all caps. Recognizing the importance of preserving what has been written, it is Manning’s policy to have the books we publish printed on acid-free paper, and we exert our best efforts to that end. Recognizing also our responsibility to conserve the resources of our planet, Manning books are printed on paper that is at least 15 percent recycled and processed without the use of elemental chlorine. Manning Publications Co. Development editor: Marina Michaels 20 Baldwin Road Technical development editor: Dean Iverson PO Box 761 Review editor: Aleksandar Dragosavljevic Shelter Island, NY 11964 Project editor: Tiffany Taylor Copy editor: Tiffany Taylor Proofreader: Katie Tennant Technical proofreader: Daniel Lamb Typesetter: Dennis Dalinnik Cover designer: Leslie Haimes ISBN: 9781617292828 Printed in the United States of America 12345678910–EBM–212019181716 To my wonderful wife, Ana. Thank you for your unconditional support and for being the source of passion and inspiration in my life. brief contents PART 1THINK FUNCTIONALLY ..................................................1 1 ■ Becoming functional 3 2 ■ Higher-order JavaScript 23 PART 2GET FUNCTIONAL........................................................55 3 ■ Few data structures, many operations 57 4 ■ Toward modular, reusable code 84 5 ■ Design patterns against complexity 117 PART 3ENHANCING YOUR FUNCTIONAL SKILLS......................151 6 ■ Bulletproofing your code 153 7 ■ Functional optimizations 180 8 ■ Managing asynchronous events and data 205 vii contents preface xv acknowledgments xvii about this book xix PART 1THINK FUNCTIONALLY.......................................1 Becoming functional 3 1 1.1 Can functional programming help? 5 1.2 What is functional programming? 5 Functional programming is declarative 7 ■ Pure functions and the problem with side effects 9 ■ Referential transparency and substitutability 13 ■ Preserving immutable data 15 1.3 Benefits of functional programming 16 Encouraging the decomposition of complex tasks 16 Processing data using fluent chains 18 ■ Reacting to the complexity of asynchronous applications 19 1.4 Summary 22 ix x CONTENTS Higher-order JavaScript 23 2 2.1 Why JavaScript? 24 2.2 Functional vs. object-oriented programming 24 Managing the state of JavaScript objects 31 ■ Treating objects as values 32 ■ Deep-freezing moving parts 34 ■ Navigating and modifying object graphs with lenses 37 2.3 Functions 38 Functions as first-class citizens 39 ■ Higher-order functions 40 Types of function invocation 43 ■ Function methods 44 2.4 Closures and scopes 45 Problems with the global scope 47 ■ JavaScript’s function scope 48 ■ A pseudo-block scope 49 ■ Practical applications of closures 50 2.5 Summary 53 PART 2GET FUNCTIONAL ............................................55 Few data structures, many operations 57 3 3.1 Understanding your application’s control flow 58 3.2 Method chaining 59 3.3 Function chaining 60 Understanding lambda expressions 61 ■ Transforming data with _.map 62 ■ Gathering results with _.reduce 65 Removing unwanted elements with _.filter 68 3.4 Reasoning about your code 70 Declarative and lazy function chains 71 ■ SQL-like data: functions as data 75 3.5 Learning to think recursively 77 What is recursion? 77 ■ Learning to think recursively 77 Recursively defined data structures 79 3.6 Summary 83 Toward modular, reusable code 84 4 4.1 Method chains vs. function pipelines 85 Chaining methods together 86 ■ Arranging functions in a pipeline 87 CONTENTS xi 4.2 Requirements for compatible functions 88 Type-compatible functions 88 ■ Functions and arity: the case for tuples 89 4.3 Curried function evaluation 92 Emulating function factories 95 ■ Implementing reusable function templates 97 4.4 Partial application and parameter binding 98 Extending the core language 100 ■ Binding into delayed functions 101 4.5 Composing function pipelines 102 Understanding composition with HTML widgets 102 Functional composition: separating description from evaluation 104 ■ Composition with functional libraries 107 Coping with pure and impure code 109 ■ Introducing point-free programming 111 4.6 Managing control flow with functional combinators 112 Identity (I-combinator) 112 ■ Tap (K-combinator) 113 Alternation (OR-combinator) 113 ■ Sequence (S-combinator) 114 Fork (join) combinator 115 4.7 Summary 116 Design patterns against complexity 117 5 5.1 Shortfalls of imperative error handling 118 Error handling with try-catch 118 ■ Reasons not to throw exceptions in functional programs 119 ■ Problems with null-checking 121 5.2 Building a better solution: functors 121 Wrapping unsafe values 122 ■ Functors explained 124 5.3 Functional error handling using monads 127 Monads: from control flow to data flow 128 ■ Error handling with Maybe and Either monads 132 ■ Interacting with external resources using the IO monad 141 5.4 Monadic chains and compositions 144 5.5 Summary 150 xii CONTENTS PART 3ENHANCING YOUR FUNCTIONAL SKILLS ..........151 Bulletproofing your code 153 6 6.1 Functional programming’s influence on unit tests 154 6.2 Challenges of testing imperative programs 155 Difficulty identifying and decomposing tasks 155 Dependency on shared resources leads to inconsistent results 157 Predefined order of execution 158 6.3 Testing functional code 159 Treating a function as a black box 159 ■ Focusing on business logic instead of control flow 160 ■ Separating the pure from the impure with monadic isolation 161 ■ Mocking external dependencies 164 6.4 Capturing specifications with property-based testing 166 6.5 Measuring effectiveness through code coverage 172 Measuring the effectiveness of testing functional code 173 Measuring the complexity of functional code 177 6.6 Summary 179 Functional optimizations 180 7 7.1 Under the hood of function execution 181 Currying and the function context stack 183 ■ Challenges of recursive code 186 7.2 Deferring execution using lazy evaluation 188 Avoiding computations with the alternation functional combinator 189 ■ Taking advantage of shortcut fusion 190 7.3 Implementing a call-when-needed strategy 191 Understanding memoization 192 ■ Memoizing computationally intensive functions 192 ■ Taking advantage of currying and memoization 196 ■ Decomposing to maximize memoization 196 Applying memoization to recursive calls 197 7.4 Recursion and tail-call optimization (TCO) 199 Converting non-tail calls to tail calls 201 7.5 Summary 203 CONTENTS xiii Managing asynchronous events and data 205 8 8.1 Challenges of asynchronous code 206 Creating temporal dependencies among functions 207 Falling into a callback pyramid 208 ■ Using continuation- passing style 210 8.2 First-class asynchronous behavior with promises 214 Future method chains 216 ■ Composing synchronous and asynchronous behavior 221 8.3 Lazy data generation 224 Generators and recursion 226 ■ The Iterator protocol 228 8.4 Functional and reactive programming with RxJS 229 Data as observable sequences 229 ■ Functional and reactive programming 230 ■ RxJS and promises 233 8.5 Summary 234 appendix JavaScript libraries used in this book 235 index 239 preface When I was in college and graduate school, my class schedule was focused on object- oriented design as the sole methodology for planning and architecting software sys- tems. And, like many developers, I began my career writing object-oriented code and building entire systems based on this paradigm. Throughout my development career, I’ve learned and followed programming lan- guages closely, not only because I want to learn something cool, but also because I’m intrigued by the design decisions and philosophy that each language fosters. Just as a new language provides a different perspective on how to approach software problems, a new paradigm can achieve the same effect. Although the object-oriented approach continues to be the modus operandi of software design, learning about functional programming will open your eyes to new techniques that you can use on their own or in parallel with any other design paradigm that fits your application. Functional programming has been around for years, but to me it was only a minor distraction. I had heard and read about the benefits of Haskell, Lisp, Scheme, and, more recently, Scala, Clojure, and F# in terms of expressiveness and being highly pro- ductive platforms; even Java, which has traditionally been known as a verbose language, has functional artifacts that make code more succinct. Eventually, the minor distrac- tion became impossible to avoid. And guess what? JavaScript, that object-oriented language everyone uses, can be turned
Recommended publications
  • Comprehending Adts*
    Comprehending ADTs* Martin Erwig School of EECS Oregon State University [email protected] Abstract We show how to generalize list comprehensions to work on abstract data types. First, we make comprehension notation automatically available for any data type that is specified as a constructor/destructor-pair (bialgebra). Second, we extend comprehensions to enable the use of dif- ferent types in one comprehension and to allow to map between different types. Third, we refine the translation of comprehensions to give a reasonable behavior even for types that do not obey the monad laws, which significantly extends the scope of comprehensions. Keywords: Functional Programming, Comprehension Syntax, Abstract Data Type, Generalized Fold, Monad 1 Introduction Set comprehensions are a well-known and appreciated notation from mathematics: an expression such as fE(x) j x 2 S; P(x)g denotes the set of values given by repeatedly evaluating the expression E for all x taken from the set S for which P(x) yields true. This notation has found its way into functional languages as list comprehensions [3, 17, 18]. Assuming that s denotes a list of numbers, the following Haskell expression computes squares of the odd numbers in s. [ x ∗ x j x s; odd x ] The main difference to the mathematical set comprehensions is the use of lists in the generator and as a result. In general, a comprehension consists of an expression defining the result values and of a list of qualifiers, which are either generators for supplying variable bindings or filters restricting these. Phil Wadler has shown that the comprehension syntax can be used not only for lists and sets, but more generally for arbitrary monads [19].
    [Show full text]
  • Functional Languages
    Functional Programming Languages (FPL) 1. Definitions................................................................... 2 2. Applications ................................................................ 2 3. Examples..................................................................... 3 4. FPL Characteristics:.................................................... 3 5. Lambda calculus (LC)................................................. 4 6. Functions in FPLs ....................................................... 7 7. Modern functional languages...................................... 9 8. Scheme overview...................................................... 11 8.1. Get your own Scheme from MIT...................... 11 8.2. General overview.............................................. 11 8.3. Data Typing ...................................................... 12 8.4. Comments ......................................................... 12 8.5. Recursion Instead of Iteration........................... 13 8.6. Evaluation ......................................................... 14 8.7. Storing and using Scheme code ........................ 14 8.8. Variables ........................................................... 15 8.9. Data types.......................................................... 16 8.10. Arithmetic functions ......................................... 17 8.11. Selection functions............................................ 18 8.12. Iteration............................................................. 23 8.13. Defining functions ...........................................
    [Show full text]
  • Histcoroy Pyright for Online Information and Ordering of This and Other Manning Books, Please Visit Topwicws W.Manning.Com
    www.allitebooks.com HistCoroy pyright For online information and ordering of this and other Manning books, please visit Topwicws w.manning.com. The publisher offers discounts on this book when ordered in quantity. For more information, please contact Tutorials Special Sales Department Offers & D e al s Manning Publications Co. 20 Baldwin Road Highligh ts PO Box 761 Shelter Island, NY 11964 Email: [email protected] Settings ©2017 by Manning Publications Co. All rights reserved. Support No part of this publication may be reproduced, stored in a retrieval system, or Sign Out transmitted, in any form or by means electronic, mechanical, photocopying, or otherwise, without prior written permission of the publisher. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in the book, and Manning Publications was aware of a trademark claim, the designations have been printed in initial caps or all caps. Recognizing the importance of preserving what has been written, it is Manning’s policy to have the books we publish printed on acid­free paper, and we exert our best efforts to that end. Recognizing also our responsibility to conserve the resources of our planet, Manning books are printed on paper that is at least 15 percent recycled and processed without the use of elemental chlorine. Manning Publications Co. PO Box 761 Shelter Island, NY 11964 www.allitebooks.com Development editor: Cynthia Kane Review editor: Aleksandar Dragosavljević Technical development editor: Stan Bice Project editors: Kevin Sullivan, David Novak Copyeditor: Sharon Wilkey Proofreader: Melody Dolab Technical proofreader: Doug Warren Typesetter and cover design: Marija Tudor ISBN 9781617292576 Printed in the United States of America 1 2 3 4 5 6 7 8 9 10 – EBM – 22 21 20 19 18 17 www.allitebooks.com HistPoray rt 1.
    [Show full text]
  • The Machine That Builds Itself: How the Strengths of Lisp Family
    Khomtchouk et al. OPINION NOTE The Machine that Builds Itself: How the Strengths of Lisp Family Languages Facilitate Building Complex and Flexible Bioinformatic Models Bohdan B. Khomtchouk1*, Edmund Weitz2 and Claes Wahlestedt1 *Correspondence: [email protected] Abstract 1Center for Therapeutic Innovation and Department of We address the need for expanding the presence of the Lisp family of Psychiatry and Behavioral programming languages in bioinformatics and computational biology research. Sciences, University of Miami Languages of this family, like Common Lisp, Scheme, or Clojure, facilitate the Miller School of Medicine, 1120 NW 14th ST, Miami, FL, USA creation of powerful and flexible software models that are required for complex 33136 and rapidly evolving domains like biology. We will point out several important key Full list of author information is features that distinguish languages of the Lisp family from other programming available at the end of the article languages and we will explain how these features can aid researchers in becoming more productive and creating better code. We will also show how these features make these languages ideal tools for artificial intelligence and machine learning applications. We will specifically stress the advantages of domain-specific languages (DSL): languages which are specialized to a particular area and thus not only facilitate easier research problem formulation, but also aid in the establishment of standards and best programming practices as applied to the specific research field at hand. DSLs are particularly easy to build in Common Lisp, the most comprehensive Lisp dialect, which is commonly referred to as the “programmable programming language.” We are convinced that Lisp grants programmers unprecedented power to build increasingly sophisticated artificial intelligence systems that may ultimately transform machine learning and AI research in bioinformatics and computational biology.
    [Show full text]
  • Functional Programming Laboratory 1 Programming Paradigms
    Intro 1 Functional Programming Laboratory C. Beeri 1 Programming Paradigms A programming paradigm is an approach to programming: what is a program, how are programs designed and written, and how are the goals of programs achieved by their execution. A paradigm is an idea in pure form; it is realized in a language by a set of constructs and by methodologies for using them. Languages sometimes combine several paradigms. The notion of paradigm provides a useful guide to understanding programming languages. The imperative paradigm underlies languages such as Pascal and C. The object-oriented paradigm is embodied in Smalltalk, C++ and Java. These are probably the paradigms known to the students taking this lab. We introduce functional programming by comparing it to them. 1.1 Imperative and object-oriented programming Imperative programming is based on a simple construct: A cell is a container of data, whose contents can be changed. A cell is an abstraction of a memory location. It can store data, such as integers or real numbers, or addresses of other cells. The abstraction hides the size bounds that apply to real memory, as well as the physical address space details. The variables of Pascal and C denote cells. The programming construct that allows to change the contents of a cell is assignment. In the imperative paradigm a program has, at each point of its execution, a state represented by a collection of cells and their contents. This state changes as the program executes; assignment statements change the contents of cells, other statements create and destroy cells. Yet others, such as conditional and loop statements allow the programmer to direct the control flow of the program.
    [Show full text]
  • Functional and Imperative Object-Oriented Programming in Theory and Practice
    Uppsala universitet Inst. för informatik och media Functional and Imperative Object-Oriented Programming in Theory and Practice A Study of Online Discussions in the Programming Community Per Jernlund & Martin Stenberg Kurs: Examensarbete Nivå: C Termin: VT-19 Datum: 14-06-2019 Abstract Functional programming (FP) has progressively become more prevalent and techniques from the FP paradigm has been implemented in many different Imperative object-oriented programming (OOP) languages. However, there is no indication that OOP is going out of style. Nevertheless the increased popularity in FP has sparked new discussions across the Internet between the FP and OOP communities regarding a multitude of related aspects. These discussions could provide insights into the questions and challenges faced by programmers today. This thesis investigates these online discussions in a small and contemporary scale in order to identify the most discussed aspect of FP and OOP. Once identified the statements and claims made by various discussion participants were selected and compared to literature relating to the aspects and the theory behind the paradigms in order to determine whether there was any discrepancies between practitioners and theory. It was done in order to investigate whether the practitioners had different ideas in the form of best practices that could influence theories. The most discussed aspect within FP and OOP was immutability and state relating primarily to the aspects of concurrency and performance. ​ ​ ​ ​ ​ ​ This thesis presents a selection of representative quotes that illustrate the different points of view held by groups in the community and then addresses those claims by investigating what is said in literature.
    [Show full text]
  • Coffeescript Accelerated Javascript Development.Pdf
    Download from Wow! eBook <www.wowebook.com> What readers are saying about CoffeeScript: Accelerated JavaScript Development It’s hard to imagine a new web application today that doesn’t make heavy use of JavaScript, but if you’re used to something like Ruby, it feels like a significant step down to deal with JavaScript, more of a chore than a joy. Enter CoffeeScript: a pre-compiler that removes all the unnecessary verbosity of JavaScript and simply makes it a pleasure to write and read. Go, go, Coffee! This book is a great introduction to the world of CoffeeScript. ➤ David Heinemeier Hansson Creator, Rails Just like CoffeeScript itself, Trevor gets straight to the point and shows you the benefits of CoffeeScript and how to write concise, clear CoffeeScript code. ➤ Scott Leberknight Chief Architect, Near Infinity Though CoffeeScript is a new language, you can already find it almost everywhere. This book will show you just how powerful and fun CoffeeScript can be. ➤ Stan Angeloff Managing Director, PSP WebTech Bulgaria Download from Wow! eBook <www.wowebook.com> This book helps readers become better JavaScripters in the process of learning CoffeeScript. What’s more, it’s a blast to read, especially if you are new to Coffee- Script and ready to learn. ➤ Brendan Eich Creator, JavaScript CoffeeScript may turn out to be one of the great innovations in web application development; since I first discovered it, I’ve never had to write a line of pure JavaScript. I hope the readers of this wonderful book will be able to say the same. ➤ Dr. Nic Williams CEO/Founder, Mocra CoffeeScript: Accelerated JavaScript Development is an excellent guide to Coffee- Script from one of the community’s most esteemed members.
    [Show full text]
  • Programming in HTML5 with Javascript and CSS3 Ebook
    spine = 1.28” Programming in HTML5 with JavaScript and CSS3 and CSS3 JavaScript in HTML5 with Programming Designed to help enterprise administrators develop real-world, About You job-role-specific skills—this Training Guide focuses on deploying This Training Guide will be most useful and managing core infrastructure services in Windows Server 2012. to IT professionals who have at least Programming Build hands-on expertise through a series of lessons, exercises, three years of experience administering and suggested practices—and help maximize your performance previous versions of Windows Server in midsize to large environments. on the job. About the Author This Microsoft Training Guide: Mitch Tulloch is a widely recognized in HTML5 with • Provides in-depth, hands-on training you take at your own pace expert on Windows administration and has been awarded Microsoft® MVP • Focuses on job-role-specific expertise for deploying and status for his contributions supporting managing Windows Server 2012 core services those who deploy and use Microsoft • Creates a foundation of skills which, along with on-the-job platforms, products, and solutions. He experience, can be measured by Microsoft Certification exams is the author of Introducing Windows JavaScript and such as 70-410 Server 2012 and the upcoming Windows Server 2012 Virtualization Inside Out. Sharpen your skills. Increase your expertise. • Plan a migration to Windows Server 2012 About the Practices CSS3 • Deploy servers and domain controllers For most practices, we recommend using a Hyper-V virtualized • Administer Active Directory® and enable advanced features environment. Some practices will • Ensure DHCP availability and implement DNSSEC require physical servers.
    [Show full text]
  • Lab 6: Testing Software Studio Datalab, CS, NTHU Notice
    Lab 6: Testing Software Studio DataLab, CS, NTHU Notice • This lab is about software development good practices • Interesting for those who like software development and want to go deeper • Good to optimize your development time Outline • Introduction to Testing • Simple testing in JS • Testing with Karma • Configuring Karma • Karma demo: Simple test • Karma demo: Weather Mood • Karma demo: Timer App • Conclusions Outline • Introduction to Testing • Simple testing in JS • Testing with Karma • Configuring Karma • Karma demo: Simple test • Karma demo: Weather Mood • Karma demo: Timer App • Conclusions What is testing? Is it important? Actually, we are always doing some kind of testing.. And expecting some result.. And expecting some result.. Sometimes we just open our app and start clicking to see results Why test like a machine? We can write programs to automatically test our application! Most common type of test: Unit test Unit test • “Unit testing is a method by which individual units of source code are tested to determine if they are fit for use. A unit is the smallest testable part of an application.” - Wikipedia Good unit test properties • It should be automated and repeatable • It should be easy to implement • Once it’s written, it should remain for future use • Anyone should be able to run it • It should run at the push of a button • It should run quickly The art of Unit Testing, Roy Osherove Many frameworks for unit tests in several languages Common procedure • Assertion: A statement that a predicate is expected to always be true at that point in the code. -Wikipedia Common procedure • We write our application and want it to do something, so we write a test to see if it’s behaving as we expect Common procedure • Pseudocode: But how to do that in JS? Outline • Introduction to Testing • Simple testing in JS • Testing with Karma • Configuring Karma • Karma demo: Simple test • Karma demo: Weather Mood • Karma demo: Timer App • Conclusions Simple testing: expect library and jsbin Test passed: Test didn’t pass: This is ok for testing some simple functions.
    [Show full text]
  • NOVEMBER 18 • WEDNESDAY Build Stuff'15 Lithuania
    Build Stuff'15 Lithuania NOVEMBER 18 • WEDNESDAY A Advanced B Beginner I Intermediate N Non­Technical 08:30 – 09:00 Registration 1. Alfa Speakers: Registration 09:00 – 09:15 Welcome talk 1. Alfa Speakers: Welcome talk 09:00 – 18:00 Open Space 6. Lobby Speakers: Open Space Sponsors: 4Finance, Devbridge, Storebrand, Visma Lietuva, WIX Lietuva 09:15 – 10:15 B Uncle Bob / Robert Martin @unclebobmartin ­ The Last Programming Language 1. Alfa Speakers: Uncle Bob / Robert Martin For the last 50 years we’ve been exploring language after language. Now many of the “new” languages are actually quite old. The latest fad is “functional programming” which got it’s roots back in the 50s. Have we come full circle? Have we explored all the different kinds of languages? Is it time for us to finally decide on a single language for all software development? In this talk Uncle Bob walks through some of the history of programming languages, and then prognosticates on the future of languages. 10:15 – 10:35 Coffee/tea break 1. Alfa Speakers: Coffee/tea break 10:35 – 11:30 I Dmytro Mindra @dmytromindra ­ Refactoring Legacy Code 5. Theta Speakers: Dmytro Mindra Every programmer has to face legacy code day after day. It might be ugly, it might look scary, it can make a grown man cry. Some will throw it away and try rewriting everything from scratch. Most of them will fail. Refactoring legacy code is a much better idea. It is not so scary when you take it in very small bites, introduce small changes, add unit tests.
    [Show full text]
  • The Best of Both Worlds?
    The Best of Both Worlds? Reimplementing an Object-Oriented System with Functional Programming on the .NET Platform and Comparing the Two Paradigms Erik Bugge Thesis submitted for the degree of Master in Informatics: Programming and Networks 60 credits Department of Informatics Faculty of mathematics and natural sciences UNIVERSITY OF OSLO Autumn 2019 The Best of Both Worlds? Reimplementing an Object-Oriented System with Functional Programming on the .NET Platform and Comparing the Two Paradigms Erik Bugge © 2019 Erik Bugge The Best of Both Worlds? http://www.duo.uio.no/ Printed: Reprosentralen, University of Oslo Abstract Programming paradigms are categories that classify languages based on their features. Each paradigm category contains rules about how the program is built. Comparing programming paradigms and languages is important, because it lets developers make more informed decisions when it comes to choosing the right technology for a system. Making meaningful comparisons between paradigms and languages is challenging, because the subjects of comparison are often so dissimilar that the process is not always straightforward, or does not always yield particularly valuable results. Therefore, multiple avenues of comparison must be explored in order to get meaningful information about the pros and cons of these technologies. This thesis looks at the difference between the object-oriented and functional programming paradigms on a higher level, before delving in detail into a development process that consisted of reimplementing parts of an object- oriented system into functional code. Using results from major comparative studies, exploring high-level differences between the two paradigms’ tools for modular programming and general program decompositions, and looking at the development process described in detail in this thesis in light of the aforementioned findings, a comparison on multiple levels was done.
    [Show full text]
  • On the Cognitive Prerequisites of Learning Computer Programming
    On the Cognitive Prerequisites of Learning Computer Programming Roy D. Pea D. Midian Kurland Technical Report No. 18 ON THE COGNITIVE PREREQUISITES OF LEARNING COMPUTER PROGRAMMING* Roy D. Pea and D. Midian Kurland Introduction Training in computer literacy of some form, much of which will consist of training in computer programming, is likely to involve $3 billion of the $14 billion to be spent on personal computers by 1986 (Harmon, 1983). Who will do the training? "hardware and software manu- facturers, management consultants, -retailers, independent computer instruction centers, corporations' in-house training programs, public and private schools and universities, and a variety of consultants1' (ibid.,- p. 27). To date, very little is known about what one needs to know in order to learn to program, and the ways in which edu- cators might provide optimal learning conditions. The ultimate suc- cess of these vast training programs in programming--especially toward the goal of providing a basic computer programming compe- tency for all individuals--will depend to a great degree on an ade- quate understanding of the developmental psychology of programming skills, a field currently in its infancy. In the absence of such a theory, training will continue, guided--or to express it more aptly, misguided--by the tacit Volk theories1' of programming development that until now have served as the underpinnings of programming instruction. Our paper begins to explore the complex agenda of issues, promise, and problems that building a developmental science of programming entails. Microcomputer Use in Schools The National Center for Education Statistics has recently released figures revealing that the use of micros in schools tripled from Fall 1980 to Spring 1983.
    [Show full text]