How would your make your programs easier to write, inherently parallel, and have high performance across GPUs and CPUs? How about a development methodology that makes agile programming look sluggish and unreliable? How about shrinking the size and complexity of your code base by an order of magnitude, while increasing performance by an order of magnitude? This intensive workshop is designed to demystify the strange and special world of array programming like you may never have seen it before. Iverson-style array programming terrifies some and amazes others, but no one can argue with the results in areas such as finance, energy, education, or medical research. New research has made array programming scalable across a wide array of parallel hardware architectures. Often renowned for remarkably short, concise code that does a tremendous amount, the area of production level, array programming is an often misunderstood area. This workshop will bring you through a whirlwind of array programming concepts by example and case study, opening up the curtains on the original interactive functional programming language in its modern incarnation. You will learn how you can make use of this sometimes mystical world, with an emphasis on the concepts and how to integrate these concepts into a practical, targeted development methodology and ecosystem for maximizing productivity and leveraging the benefits of notational thinking to their full effect. The goal is to let you keep the magic and fun of programming alive while you use that magic for your benefit in the real world.

 
3 favorite thumb_down thumb_up 0 comments visibility_off  Remove from Watchlist visibility  Add to Watchlist
 

Outline/structure of the Session

  • Introduction
  • Array Basics
  • Learn by Example(s)
  • Scaling (Human and Machine)
  • Integrating Array Programming (Direct Development, etc.)

This workshop proposes to cover the following concepts:

  • Foundational Array Programming concepts
  • Fundamental building blocks of array programming
  • Notational Thinking
  • Traditional to Array programming technique equivalencies
  • Idioms, “phrases,” and patterns that scale array thinking
  • Exploratory and data-driven programming
  • Direct Development as a methodology for leveraging array programming

Learning Outcome

  • How to use tools for exploring arrays
  • How to compile and target array programs to GPUs and CPUs
  • Real-time debugging and exploratory programming with arrays
  • Integrating direct development

Target Audience

Developers interested in parallel computing

Prerequisite

I’d divide the resources attendees need to study up before the workshop into theoretical and practical.

Practical resources would include things like the John Scholes YouTube videos on APL, such as “Game of Life in APL” or “Sudoku Solver in APL”. There’s TryAPL which has a set of tutorials for learning the basics of APL. You can also download a free copy of the “Mastering Dyalog APL” book that contains a section at the beginning covering dfns, which is a good read.

To get a bit of background on myself and my work there is the following YouTube video where I describe the architecture of an APL compiler written in APL. This was spawned by a Hacker News discussion and contains a lot of “theory crafting” to ponder. It should provide a lot of fodder for the workshop.

The description of that video contains links to the Hacker News discussions.

I’ve mentioned above, but the following papers are also excellent reading:

“Notation as a Tool of Thought” by Kenneth Iverson “Out of the Tar Pit” by Ben Moseley and Peter Marks

Of course, if you don’t prepare, then that’s fine too. ?? However, the more you read up and get some of your own ideas to think about first, the more you’ll get out of the workshop.

schedule Submitted 4 weeks ago

Comments Subscribe to Comments

comment Comment on this Proposal

  • Dhaval Dalal
    Dhaval Dalal
    Morten Kromberg
    Morten Kromberg
    schedule 4 weeks ago
    Sold Out!
    45 mins
    Demonstration
    Beginner

    In Indian classical music, we have Jugalbandi, where two lead musicians or vocalist engage in a playful competition. There is jugalbandi between Flutist and a Percussionist (say using Tabla as the instrument). Compositions rendered by flutist will be heard by the percussionist and will replay the same notes, but now on Tabla and vice-versa is also possible.

    In a similar way, we will perform Code Jugalbandi to see how the solution looks using different programming languages and paradigms.  This time the focus of code jugalbandi will be on solutioning in two different paradigms - functional programming and array-oriented paradigm.   

    During the session, Morten and Dhaval will take turns at coding the same problem using different languages and paradigms. There would be multiple such rounds during the Jugalbandi.

  • Debasish Ghosh
    Debasish Ghosh
    schedule 1 week ago
    Sold Out!
    45 mins
    Experience Report
    Intermediate

    Using a programming language that supports first class functional programming doesn’t necessarily imply that the code you write is functional. Functional programming has the nice properties of being compositional - you design smaller abstractions and then reuse them to build larger ones. You use the power of algebraic properties that these abstractions offer to build larger elements of your model out of smaller ones.

     However often we find that many code bases designed in a functional programming language are inherently imperative, especially when you are using a multi-paradigm language like Scala or Java. There’s nothing wrong with imperative code, but it lacks the niceties of expression based composition that makes reasoning about your code so much easier. Also assignments used in imperative code are inherent side-effects that are best avoided (or at least minimized) in an expression oriented language.

     In this session I will discuss some of my experiences of mining imperative code and refactoring them into functional patterns. You will be surprised to see how much functional goodness can be derived through functional thinking. Algebraic structures like Monoids, Monads and Kleislis are just buried within the reams of imperative statements crying to come out. In an exercise of half an hour we will liberate them and see how the code quality improves from the point of view of modularity, compositionality and simplicity.

  • Liked Roger Hui
    keyboard_arrow_down

    Proofs, Derivations, Tests

    Roger Hui
    Roger Hui
    schedule 1 month ago
    Sold Out!
    45 mins
    Talk
    Intermediate

    John Hughes and Mary Sheeran in Why Functional Programming Matters [0] list “algebra as a litmus test” as one of the four salient features of functional programming, and Ken Iverson in Notation as a Tool of Thought [1] lists “amenability to formal proof” as one of the five important characteristics of notation. Using the language APL, we prove the correctness of some programs, derive simplifications, and illustrate design validation and program test techniques for functional programs.

    [0] Hughes, John, and Mary Sheeran, Why Functional Programming Matters, Code Mesh, London, 2015-11-02 to -04.

    [1] Iverson, Kenneth E., Notation as a Tool of Thought, Communications of the ACM, volume 23, number 8, 1980-08.