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

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

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

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.

> Let me clarify what is already said in the proposal.

Like if I didn't understand your proposal. The issue here is how your work is going to integrate/clash with other projects and people who maintain them. Perl 6 documentation is not just documentation, there are many types of pages and a full course (which is split into chapters) is definitely within that scope.

For example, there's at least one page in the documentation that already has exercises on it. OK, it is not as pretty and not as useful, definitely not coherent and not consistent with the rest of the docs, and I'm sure you will do better and your materials will be great. But I'm hoping to see all that greatness on the docs websites, where some of the (arguably) shitty materials that we have right now will be removed as they become obsolete given the existence of chapters of your course.

To clarify. Go to https://docs.perl6.org/language.html. It has these sections:

At the beginning
Migration guides
Tutorials
General reference
Fundamental topics
Advanced topics

I'm suggesting to add another section named "Course". Can't do it because a course is not documentation? Sue me. Given the current state of things, I'm convinced it belongs right there. We can have slightly different CSS for the course pages if needed, among other tweaks, but starting completely from scratch is clearly not justified.

Now, it seems like you're trying to avoid the burden of thinking about anything else by isolating your proposed course from the rest of the world, which has a different problem. If it is completely isolated, and we can't be linking to it from the docs (because you're saying it is meant to be read from page 1), and given that people who work on the documentation will *still* have to cover and improve the same topics in the docs, and given that the same people will likely have to maintain your course over the years, then IMO the deliverables are simply not worth the requested amount. In fact, the net result may be net negative because we'll end up having to juggle with two projects at the same time.

So please, use the communication channels mentioned above and talk to people. I believe you can do greater things with less effort, as long as you can interact with others and not keep yourself and your work completely isolated. Here's a direct contact: JJ (https://github.com/JJ, "jmerelo" on IRC, one of the top contributors to the doc repo). Pretty sure they'll be able to not only direct you but also assist you with your doings.

I think Andy's proposal is very positive and interesting, and would like to show my support to it, with some additional suggestions and thoughts.

Perl 6 currently has decent online documentation (I would contend that while much of the content is fine, the findability leaves some things to be desired, but that is a discussion for another time). I would love to see a publicly available introductory course that can be used by members in the community specifically for teaching and classroom purposes.

While an online class for self-taught/teaching students are great, I would also love to see that this course material can be used in classrooms, either as a commercial offering or on a volunteer basis.

I think the community needs a proper introductory class for Perl 6, and would love to see that Andy's course could work as a basis for this, by employing a "the first shot is for free" strategy.

To explain what I mean with this, I'd like to propose the following additional requirements for the class.

1. Given that this class material is funded by a TPF grant, it will be published and released under an appropriate commercial-friendly license from the Open Source Initiative or Creative Commons.

2. The class material is made so that anyone in the Perl community (hereafter called "the trainers") can use it freely as a basis for their own introductory class.

3. This course material contains placeholders for "advanced classes hints", so that any trainers can add promotion their own advanced/in-depth classes during their classes.

4. This course material includes links to a perl.org index of trainers that offer advanced classes, including a list of classes, their base of operations, their willingness to travel and contact information.

5. The course material is structured so that it can be offered as either a one-day or a two-day course, e.g. by offering programming tasks and additional examples.

My purpose with these requirements is to eventually make this resource into something that can lead into business opportunities for any trainers that choose to work together with the Perl communities. I believe that such a resource is

I think Andy's proposal is very positive and interesting, and would like to show my support to it, with some additional requirements and thoughts.

Perl 6 currently has decent online documentation (I would contend that while much of the content is great, the findability of it leaves some things to be desired, but that is a discussion for another time). I would love to see a publicly available narrative-driven introductory course to Perl 6 that can be used by old and new trainers in the community specifically for teaching and classroom purposes.

While an online class for self-teaching/autodidact students are great, I believe that the need for course material that can be used in classrooms, either as a commercial offering or on a volunteer basis, is much greater.

I would love to see that Andy's course could work as a basis for such an introductory class, and I would love to see it used for a "the first shot is for free" teaching strategy in our community.

To explain what I mean with this, I'd like to propose the following additional requirements for the class.

  1. Given that this class material is funded by a TPF grant, it will be published and released under an appropriate commercial-friendly license from the Open Source Initiative or Creative Commons.
  2. The class material is made so that anyone in the Perl community (hereafter called "the trainers") can use it freely as a basis for their own introductory class, and that it is published in a way that allows it to be updated and refined by the community as experiences are gathered.
  3. This course material must contain placeholders for "advanced classes foreshadowing", so that any trainers can add promotion their own advanced/in-depth classes during the introductory classes that are based on this material.
  4. The course material must also include links to a perl.org index web page of trainers that offer advanced classes suitable to buy after this class is completed. This index should include the names of the trainers, a list of their classes, their base of operations, their willingness to travel and contact information.
  5. The course material is structured so that it can be offered as either a one-day or a two-day course, e.g. by offering programming tasks and additional examples.

My purpose with these requirements is to eventually have this resource made into something that can lead to business opportunities for any trainers that choose to work together with the Perl communities. I believe that such a resource is badly needed, and having seen what Andrew Shitov can pull off, that he's more that qualified to do so.

If these requirements are acceptable for all the parties involved, I'll gladly endorse Andy's grant request

As an independent learner, I find value in reading course work written as a whole, which leads me on a journey from a single author's perspective. Not every course appeals to me equally, so there is no one solution to speaking to me that is guaranteed to satisfy my interest...some books fail, and others are treasurers, and find myself returning to the personally valuable ones, even after I've progressed to deeper study in the detailed documentation.

I frequently read several author's works and find that I learn different meanings when the same information is presented from their individual perspectives.

I believe that the suggestion for integration with the documentation is also beneficial, and links in an on-line version or footnotes in a printed version to take one to the authoritative section of the Reference Documentation. This is especially valuable because the Reference Documentation stands independently from the implementation.

So I'm hoping that the proposed course is made available, either by TPF funding or otherwise. And that the material is made with cooperation between the course author and the maintainers/improvers of the Documentation. The documentation as a whole improves with a process that incrementally solves shortcomings or clarification forever. Wide discussion and cooperation works well for this goal of precise documentation. It may also work for some authors but others work better independently (with feedback after a draft is shared rather than continuous collaboration).

I usually read a course two or more times, the first time as a self-contained work, and subsequently going on side trips digging into the documentation details as may be of my learning quest on that trip thru the course.

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