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.

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

Outline/structure of the Session

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

Learning Outcome

Our hope is that via a Code Jugalbandi session:

  • People programming in different paradigms - functional or array oriented, can see how to approach the same problem in each paradigm.  This also shapes the thoughts differently.  The key take away would be to understand how a particular problem is a natural fit for solutioning in a particular paradigm.
  • Promote learning by comparison and contrast - a natural way for human mind to grasp new things.
  • It can also become a source of inspiration to try out a new languages and paradigms.

Target Audience

Developers interested in FP paradigm and Array oriented paradigm.

Prerequisite

Open mind and know at least one functional programming language.

schedule Submitted 4 weeks ago

Comments Subscribe to Comments

comment Comment on this Proposal

  • Liked Eric Torreborre
    keyboard_arrow_down

    Practical eff monad for micro-services

    Eric Torreborre
    Eric Torreborre
    schedule 5 months ago
    Sold Out!
    45 mins
    Talk
    Advanced

    This talk presents how we use the Eff monad at Zalando to structure a REST microservice. Even when programming with functions, modules and components still matter, and I will present a new approach for dependency injection using the Reader monad (classic) and tree rewriting (what?). Then we will see how to specify more precisely several components (authentication, request to other services and database access) with the Eff monad and support additional concerns like logging or asynchronous execution.

    Once you get the basic idea, the possibilities are endless! Rate limiting is just another component and another set of effects involving time and state, testing becomes really clean and easy.

  • Liked Aaron W Hsu
    keyboard_arrow_down

    Functional Array Funhouse Intensive

    Aaron W Hsu
    Aaron W Hsu
    schedule 1 month ago
    Sold Out!
    480 mins
    Workshop
    Intermediate

    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.

  • 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.

  • Liked Ryan Lemmer
    keyboard_arrow_down

    Haskell Design Patterns

    Ryan Lemmer
    Ryan Lemmer
    schedule 1 month ago
    Sold Out!
    480 mins
    Workshop
    Intermediate

    In this workshop we explore several areas of advances that make up Modern Haskell.

    (This is an experiential workshop, we will code together, and explore ideas together from first principles. You will need GHC 7.10 and up.)

    Patterns for IO

    Experience the 3 styles of IO programming in Haskell, in the order in which they evolved:

    * imperative style (the status quo)
    * Lazy IO and its limitations
    * Iteratee IO, the solution to Lazy IO

    As we compare the different styles, we will pay attention to

    * what controls evaluation
    * space and resource management
    * the relationship between producer and consumer

    From Foldable, Traversable to Lenses

    We follow the evolution of fold and map on lists, to their generalisation over arbitrary types with the Foldable and Traversable type-classes. 

    The Lens library raises Foldable and Traversable to an even higher level of abstraction. We will see how the Lens library gives a unified vocabulary for traversal of arbitrary data structures.

    Functor, Applicative, Arrow, Monad

    These data types fall on a spectrum of power and generality (Functor being the most general, and Monad the most powerful). By experiencing how these types differ in the way they compose, we can gain a clearer understanding of where and how each type may be used.

    Datatype Generic Programming (bonus material)

    This style of Haskell programming is based on a simple technique: instead of defining functions for ad-hoc types, we deconstruct our types into a more fundamental type representation, and then write generic functions against the lower-level type. These generic functions are impervious to changes in the original, higher-level data types.

    We will experience datatype generic programming from first principles, and along the way uncover the key ingredient in the magic sauce called GHC.Generics.

  • Liked Shri Vignesh Balasubramaniam
    keyboard_arrow_down

    Understanding some basic FP constructs by writing a simple Programming Language

    Shri Vignesh Balasubramaniam
    Shri Vignesh Balasubramaniam
    schedule 1 month ago
    Sold Out!
    45 mins
    Demonstration
    Beginner

    What I cannot create, I do not understand - Richard Feynman

    Most of the time, we end up being consumers of a language. Language creation is not something which many of us do as part of our daily job. And as such, we become consumers of using various concepts like types of a language, functions-as-first-class citizens, closures, let expressions, etc. But what are these? What is semantics behind them? And how do language creators enable a language to have these? Once we understand what these mean, we go beyond the language specific implementations and can be true polyglots who can think in terms of these composable abstractions.

    This beginner focussed talk+demonstration hopes to clarify few fundamental concepts by building a language from the ground up. This talk has its foundations in a couple of academic courses which I got to be part of during 2012/2013.

    Using Racket(a variant of Scheme) as a vehicle, a hypothesized programming language (MathL) is introduced with its specifications, syntax, and rules. And slowly this language is built up with more features.The language is realized via an interpreter/executor. [We would not be discussing compilers here].
    Some tests also would be done which would help to verify the language implementation.

     

     

     

  • Liked Abhiroop Sarkar
    keyboard_arrow_down

    Wormholes and teleporting with Transient.

    Abhiroop Sarkar
    Abhiroop Sarkar
    schedule 1 month ago
    Sold Out!
    45 mins
    Talk
    Intermediate

    The transient library in Haskell/Eta composes arbitrary pieces of software in concurrent, parallel and sequential settings using standard Haskell/Eta combinators like applicative, alternative, bind etc. It provides algebraic and monadically composable primitives for concurrency, parallelism, event handling, transactions and multithreading

    It liberates the programmers from dealing with state machines, objects frameworks, routes, configurations and callbacks. Transient expresses business functionalities as compact category theoretical expressions which compose. These compositions are verified during compilation, although the code might be executing in different machines.

    It presents a fresh new approach to programming concurrent and distributed systems.