Why APL is a language worth knowing

location_city Online schedule Mar 25th 04:00 - 04:45 PM IST place Zoom people 54 Interested

“A language that doesn't affect the way you think about programming, is not worth knowing.” ― Alan Perlis, in “Epigrams in Programming”

Following Alan Perlis's words, this talk will show why APL is a language worth knowing. In other words, I will devote the talk to showcasing characteristics of APL that are likely to, on the one hand, influence the way you use other programming languages, and, on the other hand, understand concepts of computer science.

By listening to this talk, I hope to convince you that learning a language that is radically different from all the other languages you know isn't harmful. Learning a language that is radically different from all other languages you know won't scatter your knowledge or spread your brain too thin. In fact, learning a language that is radically different from all other languages you know will cement your programming  knowledge, helping you build bridges between topics you didn't even know were connected.

To drive my point home, we take a closer look at two characteristics of APL: the fact that Boolean values are represented by the integers 0 and 1, and the fact that APL is an array-oriented language. In studying these two things, we draw connections to the traditional if statement and to list comprehensions, deepening our understanding of those.

 
 

Outline/Structure of the Talk

  1. Welcome, introduction, and setting the stage (5 min)
  2. What is APL (5 min)
  3. The relationship between Boolean values and the integers 0 and 1 (10 min)
    1. Boolean values in APL (3 min)
    2. Data-driven conditionals (7 min)
  4. Array-oriented programming and list comprehensions (15 min)
    1. Scalar functions in APL (5 min)
    2. List comprehensions as data transformation expressions (10 min)
  5. Conclusion (3 min)
  6. Q&A (5 min)

Learning Outcome

There are practical and philosophical takeaways:

  • on the practical side, attendees are expected to
    • learn techniques to get rid of some if statements (or conditional expressions) in their code, and
    • understand list comprehensions are expressions that typically put the focus on the data transformations that are taking place;
  • on the philosophical side of things, I hope to convince you that learning a language that is radically different from all the other languages you know isn't harmful, it won't scatter your knowledge, and it won't spread your brain too thin. In fact, learning a language that is radically different from all other languages you know will cement your programming knowledge, helping you build bridges between topics you didn't even know were connected.

Target Audience

Curious individuals who are looking to deepen their understanding of computer science and programming.

Prerequisites for Attendees

Attendees, above all, should be highly curious individuals.

In terms of programming knowledge, no APL knowledge is required.

For a couple of the examples given, attendees will be expected to

  • be aware of what a “list comprehension” is (in the sense of Haskell's or Python's list comprehensions); and
  • be familiar with the (often informal) association of the True and False Boolean values with the integers 1 and 0 (respectively).

Video


schedule Submitted 5 months ago

  • Francesco Cesarini
    keyboard_arrow_down

    Francesco Cesarini - Shape future of the Erlang Ecosystem

    20 Mins
    Keynote
    Beginner

    The Erlang Ecosystem Foundation's goal is to grow and support a diverse community, encouraging the continued development of technologies and open source projects based on and around Erlang, Elixir, other BEAM languages and their runtime. In this talk, we will discuss some of the challenges, success stories and plans of some of the most active work groups, let you know how you can get involved, contribute and help influence. 

  • Bruce Tate
    keyboard_arrow_down

    Bruce Tate / Francesco Cesarini - Navigating the loop in water, on land and in programming models

    45 Mins
    Keynote
    Intermediate

     Loops are among the most critical programming constructs. These features shape core ideas about programming in the Erlang ecosystem; from how languages work to how programming features interact with other code and the outside world. How systems scale and are resilient. They are also metaphors for the way we think, build things, and grow. In Erlang and Elixir, loops define servers that form reliable, fault tolerant and scalable services. This keynote will explore Elixir and Erlang's approach to concurrency with a nautical adventure called the Great Loop.

  • Naresh Jain
    keyboard_arrow_down

    Naresh Jain - Important Announcements and Updates

    Naresh Jain
    Naresh Jain
    Founder
    Znsio
    schedule 3 months ago
    Sold Out!
    15 Mins
    Keynote
    Beginner

    We'll go over important updates and announcements. If you've any questions about the conference, like how do I get the videos, etc. this session will help you answer all those questions. So don't miss it.

  • Naresh Jain
    keyboard_arrow_down

    Naresh Jain - Welcome and Conference Overview

    Naresh Jain
    Naresh Jain
    Founder
    Znsio
    schedule 3 months ago
    Sold Out!
    20 Mins
    Keynote
    Beginner

    Welcome Address and Functional Conf Overview. Here you will get al the important details you need about the conference. So don't miss it.

  • Richard Feldman
    keyboard_arrow_down

    Richard Feldman - The Essence of Functional Programming

    Richard Feldman
    Richard Feldman
    Head of Technology
    NoRedInk
    schedule 5 months ago
    Sold Out!
    45 Mins
    Keynote
    Beginner

    This talk dives into the origins of functional programming, going all the way back to where the term was first introduced, to see how it evolved over time into our modern understanding of what FP essentially involves.

  • Dean Wampler
    keyboard_arrow_down

    Dean Wampler - Lessons Learned from 15 Years of Scala in the Wild

    Dean Wampler
    Dean Wampler
    Director of Engineering
    IBM Research
    schedule 5 months ago
    Sold Out!
    45 Mins
    Keynote
    Advanced

    Scala 3 was introduced last year. It introduced significant changes to the language, many of which were motivated by the lessons learned from the past 15 or so years of actual use in many open-source and commercial applications.

    I'll explore these lessons and how Scala 3 addresses them. Many revolve around the pros and cons of implicits. Also, changes to the type system make it more "regular", robust, and expressive. Finally, the new, optional, and controversial "Python-like" syntax promotes even more brevity. It also acknowledges how influential and pervasive Python has become across our industry.

    But there are many practical areas where future work is required, many of which are larger than the scope of Scala itself. We still live in "dependency hell". We still use too many obsolete idioms that hide accidental complexity, rather than forcing us to fix it. What should we do about these issues? 

  • Bryan Hunter
    keyboard_arrow_down

    Bryan Hunter - Distributed Elixir (lessons from HCA Healthcare’s project Waterpark)

    Bryan Hunter
    Bryan Hunter
    Enterprise Fellow
    HCA Healthcare
    schedule 5 months ago
    Sold Out!
    45 Mins
    Keynote
    Intermediate

    At HCA Healthcare, we built Waterpark– a continuously available, geographically distributed, high velocity Enterprise Integration Platform. We built it from scratch in Elixir. Elixir and the ErlangVM are very powerful tools. Need to model millions of things? No problem. Need processes to self-heal when things break? No problem. Need to model millions of things that self heal on computers scattered across a continent? Hmmm… for that you’ve got some work to do, but in Elixir that work is very doable and fun. In this nuts-and-bolts session, we will discuss the distributed computing bits that are in-the-box with Elixir and what is missing. We will cover the missing bits that we built and “why”. Topics include: hashing functions, distributed process registries, the mailroom pattern, server topology, leader election, consensus, actor replication and recovery, and hot code loading. 

  • Michael Snoyman
    Michael Snoyman
    VP, Engineering
    FP Complete
    schedule 5 months ago
    Sold Out!
    45 Mins
    Talk
    Intermediate

    Many of us in the functional programming community believe that FP is a significant improvement over object oriented programming, arguably the dominant programming paradigm today. That of course begs the question: how did an inferior paradigm grab so much mindshare and market share and rise to prominence? I'm going to tell the story a bit differently, exploring a different take on the strengths of OOP, and how that affects those of us who advocate for functional programming.

  • Nikhil Barthwal
    keyboard_arrow_down

    Nikhil Barthwal - Implementing Event-Driven Microservices architecture in Functional language

    Nikhil Barthwal
    Nikhil Barthwal
    Sr. Software Engineer
    Facebook
    schedule 5 months ago
    Sold Out!
    45 Mins
    Tutorial
    Intermediate

    Web services are typically stateless entities, that need to operate at scale at large. Functional paradigm can be used to model these web services work and offer several benefits like scalability, productivity, and correctness. This talk describes how to implement Event-Driven Microservices in functional programming languages with examples in F#.

    Immutability allows infinite scalability as it eliminates the need to worry about a mutex, a lock, or a race. As functional code is much more terse compared to object-oriented code, it provides productivity benefits. Its strict typing makes writing correct code easy as mismatches of types are caught at compile time.

    The objective of the talk is to show how to create a scalable & highly distributed web service in F#, and demonstrate how various characteristics of functional paradigm captures the behavior of such services architecture very naturally.

  • 20 Mins
    Talk
    Beginner

    Some people even say names don't matter. While it is widely held that good naming is one of the most important aspects of programming, is there such a thing as an objectively good name?

    As part of a discussion of the philosophy of programming, we'll look at what are the real aims of naming things well, and what considerations we should have in mind when discussing them. We'll have a look at alternatives and what they bring that names do not.

  • Dave Yarwood
    keyboard_arrow_down

    Dave Yarwood - Clojure through the lens of music

    Dave Yarwood
    Dave Yarwood
    Senior Software Engineer
    Kevel
    schedule 4 months ago
    Sold Out!
    45 Mins
    Talk
    Intermediate

    You may be familiar with what map, filter, and reduce do. But have you ever heard how these functions sound?

    The Alda language is centered around the idea that music can be represented as data. alda-clj is a Clojure library that maps Clojure data structures to the music theory concepts in the Alda language, including notes and chords. The library serves as an interface that takes Clojure code as input and produces music as output.

    In addition to the basic functions that you will find in the standard libraries of most functional programming languages, Clojure's standard library offers a wealth of interesting and useful functions that facilitate working with immutable data. In this talk, we will explore the Clojure standard library by applying interesting functions like cycle, mapcat, partition and reductions to transform data that represents music. Using the alda-clj library, we will not only see the result of each function call, we will also hear the results and observe how they can help us understand how each function works.

  • Simon Thompson
    keyboard_arrow_down

    Simon Thompson - Language-independent refactorings through language-specific rewrites

    45 Mins
    Talk
    Intermediate

    Programming language may share much in common, but each language has its own particular syntactic and semantic features. For example, a function application in Haskell can be an operator section, while in Erlang it can be an application of the apply function. This talk presents generic, language-independent refactoring schemes that are realised in each language by a particular set of rewrites, and is illustrated by examples from Erlang, Haskell and OCaml.

  • Aaron Hsu
    keyboard_arrow_down

    Aaron Hsu - DSLs, Architecture, and Structural Design in APL, 3 ways.

    Aaron Hsu
    Aaron Hsu
    Computer Researcher
    Dyalog Ltd.
    schedule 9 months ago
    Sold Out!
    45 Mins
    Talk
    Intermediate

    Beginning functional and APL programmers often express confusion about how to structure large software projects or larger pieces of code. Both APL and FP have a tendency to highlight their low-level features and de-emphasize system architecture patterns. This can leave programmers with a strong sense of how to write a set of small functions, but with less confidence or skill in designing, recognizing, and implementing more cohesive implicit system architectures that hold these lower level functions together. System architectures serve as a method for constraining the overall design of a system to give direction and focus to lower level implementation requirements. Especially in APL, where system architecture is often best implemented implicitly, it behooves the programmer to understand the ramifications of architecture and to implement them in their own systems. This talk unpacks a number of these "architecture level" questions within the framework of the APL programming language by exploring the same topic through 3 different architectural approaches, each of which has a very distinct flavor, presentation, and impact on the resulting source code. Particular attention is paid to the question of domain-specific languages, their design, and how they can interact with APL as tools for architectural exploration and guidance in APL source trees. 

  • Allister Beharry
    keyboard_arrow_down

    Allister Beharry - The Z3 SMT solver and functional programming

    Allister Beharry
    Allister Beharry
    Open-source developer
    Freelancer
    schedule 9 months ago
    Sold Out!
    45 Mins
    Demonstration
    Advanced

    Satisfiability modulo theories (SMT) solvers are extremely powerful tools that are indispensable in a number of applications of functional programming from mathematical analysis and optimization to computer security to program verification. SMT solvers allow you to determine if certain logical and mathematical formulas are satisfiable or (just as importantly) unsatisfiable in the context of theories like real arithmetic or set theory, and can provide definitive answers to commonly encountered programming problems involving logic, arithmetic, equations, and constraints.

    Z3 is one of the most popular SMT solvers available today with APIs available for many different programming languages. Although Z3 is most commonly used from Python, functional languages like F# provide powerful metaprogramming facilities that make it very easy to translate F# code and expressions to Z3 expressions without the need for custom types or operators.

    This presentation describes how the Z3 solver can be used from F# via quotations to quickly and easily solve common programming problems from Boolean formula satisfiability to arithmetic expression equality to linear programming to verifying fragments of source code.

  • Ben Evans
    keyboard_arrow_down

    Ben Evans - Do We Really Do FP in Java?

    Ben Evans
    Ben Evans
    Senior Principal Engineer
    Red Hat
    schedule 5 months ago
    Sold Out!
    45 Mins
    Talk
    Beginner

    Many Java developers believe that FP arrived in Java 8, with the addition of first-class lambda expressions and the Streams API. But is this really true? In this talk, Ben Evans will talk about what FP really is, examine whether Java can really be said to be FP or not - and consider whether things have improved with more recent versions, as well as some possibilities of how we could have done things differently (in another world).

  • Aditya Athalye
    keyboard_arrow_down

    Aditya Athalye - n ways to FizzBuzz in Clojure

    20 Mins
    Demonstration
    Beginner

    FizzBuzz is back in fashion! Everybody is doing it again (and again, and again). So I figured why should I miss out on the action?

    Why not use (and abuse) as many features as possible, of my favourite FP language Clojure, to FizzBuzz in as many ways as I can possibly muster?

    Why not up the ante by leaking the four other ways I discovered so far? And why not make it harder on myself by committing to spectacular public failure if I can't find more? Why. Not?!

    So here we are...

    (def range-of-fizzbuzzees (range 1 101))

    (def fizbuzz map)

    (= (fizzbuzz canonical-fizbuzzer
                 range-of-fizzbuzees)
       (fizzbuzz or-fizbuzzer
                 range-of-fizzbuzees)
       (fizzbuzz juxt-fizbuzzer
                 range-of-fizzbuzees)
       (fizzbuzz lookup-fizbuzzer
                 range-of-fizzbuzees)
       (fizzbuzz (fn [f n] (f n))
                 cyclical-fizbuzzer
                 range-of-fizzbuzees))

    The chase has begun! Who knows what will happen?

    (Edit: 2022-03-05: Well. What happened was demofail due to networkfail.

    But, Plan B is live... the blog post is up with even more detail than the talk (see also, links below)).

  • Dhananjay Nene
    keyboard_arrow_down

    Dhananjay Nene - Snippets from an algorithmic trading system in Kotlin

    45 Mins
    Talk
    Intermediate

    This talk will introduce the audience to algorithmic trading, the design of an algorithmic trading system, and various snippets written in Kotlin that fulfil specific tasks that collectively contribute towards a full trading system. The rough sketch will be as follows

  • Shakthi Kannan
    keyboard_arrow_down

    Shakthi Kannan - Fast and Curious: Benchmarking (Multicore) OCaml

    Shakthi Kannan
    Shakthi Kannan
    Senior Software Engineer
    Tarides
    schedule 9 months ago
    Sold Out!
    20 Mins
    Experience Report
    Beginner

    An oft overlooked aspect of programming language development process is benchmarking. While popular CI/CD tools such as Azure pipelines, Gitlab CI, Circle CI, Drone.io and Github Actions are regularly used for continuous testing and deployment, there is a dearth of such tools for continuous benchmarking. This is because benchmarking well is challenging due to the care needed to choose appropriate benchmarks, the complexity of modern OSes and hardware that makes it hard to obtain reproducible results, and a powerful dashboard needed to surface resultant metrics in a useful manner that can be explored interactively by the developer.

    For benchmarking the compiler of the OCaml [1] programming language, we have developed Sandmark [2]. Sandmark is a (a) suite of well chosen benchmarks aimed at exercising different performance axes including CPU, memory and IO (b) a tool to run the benchmarks, building the compiler and its dependencies under varying configuration settings and (c) a dashboard [3] to interactively explore the results of the benchmark runs. Sandmark was originally developed for supporting the Multicore OCaml [4] project, which aims to add native support for concurrency and parallelism to OCaml, and has undergone significant improvements since the initial release [5]. 

    We have learnt several useful lessons in building a continuous benchmarking infrastructure that we would like to share in this talk, which may benefit developers who work on projects where performance is critical. In this talk, I will describe the Sandmark tool, illustrate the quirks of modern OSes and hardware and how we overcame them, highlighting useful takeaways for setting up continuous benchmarking for your own projects.

    References:

    [1] OCaml: https://ocaml.org/
    [2] Sandmark: https://github.com/ocaml-bench/sandmark
    [3] sandmark-nightly: https://github.com/ocaml-bench/sandmark-nightly
    [4] Multicore OCaml: https://github.com/ocaml-multicore/ocaml-multicore/
    [5] Tom Kelly. Benchmarking the OCaml compiler: our experience, OCaml Workshop 2019, https://icfp19.sigplan.org/details/ocaml-2019-papers/3/Benchmarking-the-OCaml-compiler-our-experience

  • Quy Dai Nhan Thai
    keyboard_arrow_down

    Quy Dai Nhan Thai / Christopher Anand / Curtis D'Alves - Build and solve type-safe optimization models

    45 Mins
    Demonstration
    Intermediate

    Mathematical optimization has vast applications, e.g., image processing, machine learning. It has a huge impact on the current state of computer science and software engineers.


    Solving optimization problems involves many challenges. First, we need to build and encode the models correctly. Second, almost all useful models are computationally expensive and we need to speed them up. Finally, we need to be able to feed the model to optimization solvers to get the final numerical results.

    Fortunately, we find that Haskell, with its powerful type system and abstraction power, is perfect for this type of problem.

    We introduce HashedExpression, a Haskell-embedded domain-specific language that allows us to build and solve optimization problems. It provides users with a type-safe, correct-by-construction interface that uses Haskell type-level programming to express constraints on correctness which the compiler uses to flag many modeling errors as type errors (at compile time).


    The library implements symbolic expressions with the "hash consing" technique to achieve common subexpression elimination. We will show how using monadic type class instances help us abstract away details of the underlying lookup table and implement symbolic reverse-mode differentiation on top of it.


    For high-performance purposes, we generate low-level C/C++ code for symbolic expressions and provide bindings to open-source optimization solvers such as Ipopt or L-BFGS-B.

  • Sudha Parimala
    keyboard_arrow_down

    Sudha Parimala - OCaml Platform in 2022

    Sudha Parimala
    Sudha Parimala
    Software Engineer
    Tarides
    schedule 9 months ago
    Sold Out!
    45 Mins
    Demonstration
    Beginner

    OCaml - a functional programming language from the ML family, recently celebrated its 25th year. For a language to be around for that long is an achievement in itself. Furthermore, people are actively working on adding exciting features to the language and its ecosystem.

    Thanks to efforts from various developers and maintainers, the OCaml developer platform has come a long way and continues to evolve at a rapid phase. My talk will cover all the existing tooling that makes a OCaml developer's life easy.

    The talk will demonstrate end-to-end state-of-the-art developer tooling, right from installing a OCaml compiler, using VSCode and vscode-ocaml-platform which provides IDE like features, to publishing a library and its documentation.

help