Grant Proposal: Create a complete course of the Perl 6 programming language

9 Comments

The Grants Committee has received the following grant proposal for the March/April 2019 round. Before the Committee members vote, we would like to solicit feedback from the Perl community on the proposal.

Review the proposal below and please comment here by March 22nd, 2019. The Committee members will start the voting process following that.

A Complete (Interactive) Perl 6 Course with Exercises

  • Name

    Andrew Shitov

  • Amount Requested

    USD $9,996

Task: Create a complete course of the Perl 6 programming language.

Abstract

I want to create a complete course with exercises covering all aspects of Perl 6. It will be aimed at everyone who is familiar with programming. The goal is to make a course that you can use in self-studying or use as a platform in the class.

Target audience

Perl 6 is a language that many people find extremely attractive. The efforts of our activists during recent years show that there are people from outside of the Perl community who also want to start learning Perl 6.

There are two groups of potential users: those with and without Perl 5 background. As Perl 6 significantly differs from Perl 5, both target groups can benefit from a single Perl 6 course.

Unique points

How this is different from what already exists: vast online documentation, books, etc.? The proposed course is a step-by-step flow that begins from simple things, which makes it different from the documentation. Unlike the books, the main focus will be on having small lessons with many exercises. There are also a few video lectures and introductions, but again with very little homework. Neither I want to have an extended version of the documentation (see, for example, learn-perl.org/en/Operators as an example of the tutorial with long lists of features).

My idea is aligned towards interactive courses such as perltuts.com (not completed for Perl 6) and www.snakify.org/en that I used myself to learn and teach Python.

Content

The course contains approximately 15 sections (roughly following the chapters of "Perl 6 Deep Dive"). Each section includes 15-40 lessons. Each lesson covers a single topic (such as accessing array elements or using different variants of multi-methods, or a regex quantifier, or an element of concurrent code) and includes 2-4 exercises with displaying correct solutions on request.

Timeline and deliverable chunks

The project needs about six months to complete all 15 sections; independent sections can be published earlier, upon completion.

The work is divided in four parts. The first three parts are about content, the fourth is to make it interactive.

  1. Materials and exercises for the chapters devoted to the aspects of Perl 6 as a general programming language (thus, variables, functions, file operations, object-oriented programming, etc.).

  2. Chapters about regular expressions and grammars.

  3. Everything else. This part covers topics such as concurrent, functional, and reactive programming, etc. In other words, everything that is beyond the general programming language from point 1.

  4. Implement the exercises from the three above parts as interactive online pages.

The result of the first three parts is a GitHub repository with lessons in Markdown format.

Interactivity

We will need to host it on a subdomain of perl6.org and/or link at the Resources page of the site. The technical implementation should use JJ's docker image to spawn a compiler for each user. I suggest postponing the question of who pays for the hosting. Potentially we can re-use perltuts's engine. In a minimal form, exercises do not have to be really interactive so that we can gain both time and money on programming the server side.

Additionally or alternatively, this course can be ported to sites such as stepik.org (but with no video lectures), where they host interactive tutorials for other programming languages. If we choose this way, it will still require a lot of work under Chunk 4 from the above list.

About me

I am a Perl 6 enthusiast since around 2000, have/had run a few Perl 6 blogs: perl6.ru, perl6.online, wrote three Perl 6 books, spoke with Perl 6 talks at different events including FOSDEM 2019 and organised a number of events dedicated to the Perl programming languages.

Financial

The requested amount is US$2499.00 per each of the four parts, thus US$9996 in total.

9 Comments

I support this proposal. His recent short perl6 book us excellent

As an author of a Perl 6 book, I want to say that Andrew has written several good books on Perl 6, including the first one published on the subject after the release of a production-ready MoarVM/Rakudo Perl 6. He is undoubtedly qualified for the project he is proposing. I support his project and I am ready to offer him help if he has some use for it.

I vote to support Andrew's proposal. I have two of his books (with the third on order awaiting completion). His latest, "Perl 6 Deep Dive," is a showcase of his expertise that has really helped stretch my Perl 6 skills. As an advocate for Perl 6 in my comunity, I look foward to using his work on this project if it is approved.

I find Andrew's books informative and clear. I'm sure he can do an excellent job on a Perl6 course, and the more we can do to introduce programmers to P6 advanced features, the better.

I'm convinced that the committee should strongly reject this proposal, with a recommendation to resubmit it in the next round after the proposed work is discussed with the community and tweaked accordingly.

This is not the first time when a grant proposal is submitted with absolutely zero feedback from the community, and I strongly believe that this shouldn't be the norm. I highly recommend to make it a requirement for submitters to discuss their proposals with the community *before* submitting them (e.g. a proposal to change the compiler should be discussed with compiler devs, and a proposal to create a documentation resource should be discussed with the documentation team).

In general, I see that the proposal has some good intentions and some of its outcomes will be valuable, so I hope the future proposal in the next round will be accepted. However, the current one is completely disconnected from existing efforts, and in fact puts burden of maintaining it on others. Resubmission in the next round is the only way.

So, the plan of this proposal is to create a separate resource from scratch (independent from the docs), and to solve some problems (e.g. code execution) for that separate website. However, here is the vision of the documentation repo:

> “I want p6doc and docs.perl6.org to become the No. 1 resource to consult when you want to know something about a Perl 6 feature, be it from the language, or built-in types and routines. I want it to be useful to every Perl 6 programmer.”

And we've been working hard on making this true. Yet, this proposal suggests to create a *separate* website, completely ignoring the fact that the lack of code execution on the docs website is a known issue and could be resolved if the proposed course was integrated with the docs. Also, the documentation already provides some tutorials, and in fact lacks some good quality ones (which this proposal could have helped with). I can't imagine how could it be justified (the proposal doesn't explain) to have a separate website and how it would not be confusing to the end users. We already have an example of that (https://examples.perl6.org/ vs https://docs.perl6.org/), and let me tell you it's not a good one.

Consider this. We have a page called “Functions and functional programming in Perl 6” https://docs.perl6.org/language/functions. Yet according to this proposal there will be a page like “Functional programming” https://course.perl6.org/Part3/Functional_programming. Why?

In fact, almost everything that was listed in this document (variables, functions, file operations, object-oriented programming, regular expressions and grammars, concurrent and functional programming) is already present in the docs in a form of a separate page on that topic or as a tutorial. Did the submitter completely not notice that that page exists: https://docs.perl6.org/language.html ? And if not, I would like to know how this duplicated effort is justified, and what's the plan for the existing pages (Are we removing them? Are we transforming them into something else?)

When discussing this on #perl6-dev, some suggested that this work can be merged into the docs later if needed. Yet I don't understand why somebody should be able to do grant work that someone else will later need to clean up and integrate into what we've been working on (for free, of course!). It's not an easy task, even the conversion from markdown to pod6 will be an issue.

We should take a step back on this one and consider how this work will fit into the bigger picture. I believe great things can be done here by Andrew, but it's not going to work unless we discuss the plan first.

Note that I'm not asking for more work to be done. In fact, I'm saying that the submitter should do *less* work by integrating their efforts into the existing documentation infrastructure. Moreover, if the adjusted proposal works out, we will probably need less documentation grants in the future.

Looking forward to discussing this further. There are at least two options to get in touch:

1. #perl6 and #perl6-dev channels on freenode, great for quick discussions
2. Alternatively, file an issue on https://github.com/perl6/doc/issues and describe what you want to do, people will provide feedback in the comments.

At first, I considered supporting Andrew's grant proposal since I've enjoyed and greatly benefited from Andrew's work but reading AlexDaniel's reply swayed my mind. I think AlexDaniel makes some great and valid points. It's undeniable that the proposal has great intentions behind it but it immensely diverges from the current efforts of the community members working with the documentation and the community's vision for the documentation at large.

I'm quite sure that with some input and feedback from the community, the resulting revised proposal will certainly benefit the community.

At first, I considered supporting Andrew's grant proposal since I've enjoyed and greatly benefited from Andrew's work but reading AlexDaniel's reply swayed my mind. I think AlexDaniel makes some great and valid points. It's undeniable that the proposal has great intentions behind it but it immensely diverges from the current efforts of the community members working with the documentation and the community's vision for the documentation at large.

I'm quite sure that with some input and feedback from the community, the resulting revised proposal will certainly benefit the community.

I've read carefully Aleks-Daniel Jakimenko-Aleksejev's and fully appreciate Aleks-Daniel's arguments. I also agree that the P6 documentation is great (and I may add that it has improved considerably over the last four or fives years).

However, it seems to me that Andy is proposing something else. Right now, the official P6 documentation is mainly reference documents, which means something rather complete which may be quite difficult to understand for a P6 beginner, because a beginner may be overwhelmed by details that are important but somewhat blur the message. My understanding if that Andy is proposing a very different kind of documentation, probably with a more pedagogical aim: he used the word "course," and I don't think that such a course would compete with the official documentation, just as, for P5, Learning Perl probably doesn't really compete with the Camel book. I think we need BOTH reference material (such as the official P6 docs) and some tutorials or more training-oriented material.

To pick up on the example provided, the official P6 Functions documentation is a very good and very useful document, but, IMHO, it's definitely not a document (let alone a "course") on functional programming.

Having said that, I think that Aleks-Daniel's answer is very useful, because it definitely can help Andy to clarify his target and mindset. I hope that the discussion proposed will help define what we need and what Andy can supply. Indeed, the debate may be very useful.

Let me clarify what is already said in the proposal.

I am willing to create a *course* (not a documentation), which is primarily intended to be read in order from page 1 to the last page. It is aimed to those, who are not familiar with Perl 6 and want to go through all the features of the language from the simplest to the most advanced.

The second target group is an offline class where the course can be used as a teaching material. You just follow it, and you are happy with the order of topics, and as soon as the lesson turns from theory to practice, here you are: you have a list of problems to solve in the class or at home.

I prepared and ran a few classes, e.g. https://github.com/ash/python-tut or https://github.com/ash/cpp-tut and know how important it is to have the tasks ready. In my case, I was preparing the exercises myself, and I know how painful it is when you don't have a good and balanced textbook that you can simply follow.

Comparing the course with the documentation is like learning Perl by understanding problems from the Perl Cookbook instead of reading Learning Perl.

Interactive additions to run the code in the browser is a nice modern plus but not the primary goal.

Leave a comment

About TPF

The Perl Foundation - supporting the Perl community since 2000. Find out more at www.perlfoundation.org.

About this Entry

This page contains a single entry by Coke published on March 16, 2019 10:15 PM.

February report of the Perl 6 Development Grant of Jonathan Worthington was the previous entry in this blog.

Grant Proposals Mar/Apr 2019 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Pages

OpenID accepted here Learn more about OpenID
Powered by Movable Type 6.2.2