Grant Proposal: A Complete Perl 6 Course with Exercises

The Grants Committee has received the following grant proposal for the May/June 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 June 14th, 2019. The Committee members will start the voting process following that. # A Complete Perl 6 Course with Exercises - Name Andrew Shitov - Amount Requested USD $10,000 _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 familiar with programming. The goal is to make a course that you can use in self-studying or 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 I am willing to create a *course* (not documentation), which is primarily intended to be read in order from page 1 to the last page. It is aimed at 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 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. 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. My idea is aligned towards online courses such as [perltuts.com](http://perltuts.com) (not completed for Perl 6) and [www.snakify.org/en](http://www.snakify.org/en/) that I used myself to learn and teach Python. ## Content The course contains 16 sections. Each section includes 15-30 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 aspect of concurrent code) and includes 2-4 exercises with displaying correct solutions on request. The work is divided into five parts. ### Part 1 1. Basic introduction to Perl 6 and its compiler 1. How to install Rakudo 1. How to run it from console or from a web service such as [glot.io](https://glot.io) 1. Notes on using Unicode 1. Simple input and output 1. Running Perl 6 1. Command-line options 1. Phasers 1. Understanding error messages 1. The MAIN subroutine 1. Variables and data types 1. Types of variable containers in Perl 6 (scalar, arrays, etc.) 1. Understanding Perl 6 containers 1. Integers 1. Strings 1. Date and Time built-in support 1. Other data times 1. Understanding a sequence 1. Operators 1. Types of operators in Perl 6 (infix, prefix, etc.) 1. Overview of operators in Perl 6 1. Meta-operators 1. User-defined operators 1. Data type conversion (e.g., prefix operators "+" or "~", etc.) ### Part 2 1. Control flow 1. Blocks and scoping 101 1. Boolean data type and type casting 1. Conditional checks 1. Loops 1. Block-related phasers (e.g. LEAVE) 1. Other options (e.g., gather, given) 1. Subroutines 1. Creating a subroutine 1. Signature 1. Calling a subroutine 1. Multiple dispatch 1. Multiple MAIN subroutines 1. Nested subroutines 1. Anonymous subroutines 1. Modules 1. Creating modules 1. Using modules 1. Different types of importing ("import", "need", etc.) 1. Introspections 1. Installing modules from web ### Part 3 1. Object-oriented programming 1. Classes in Perl 6 1. Attributes 1. Methods 1. Class methods 1. Subroutines vs methods 1. Inheritance 1. Roles 1. Introspection 1. Input and output 1. Standard input, output, and errors 1. Working with files 1. Working with directories 1. File streams 1. Exceptions 1. The "try" block 1. What is a soft failure 1. The CATCH phaser 1. Exception objects 1. Failure objects 1. Multiple dispatch in handling exceptions 1. Custom exceptions ### Part 4 1. Regexes 1. Literals and character classes 1. Regexp matching 1. Quantifiers 1. Captures 1. Alternations 1. Anchors 1. Forward and backward assertions 1. Adverbs (such as :g etc.) 1. String substitution and replacement 1. Grammars 1. What is a grammar 1. Creating grammars 1. Rules 1. Tokens 1. Grammars vs. classes and inheritance 1. AST (Abstract syntax tree) ("make", "made") 1. Actions 1. Inline actions vs. action class ### Part 5 1. Functional programming 1. Recursion 1. Reduction 1. Higher-order functions 1. Lambdas 1. Data feeds 1. Iterators 1. Lazy and infinite sequences 1. Concurrent programming 1. Junctions 1. Threads 1. Promises 1. Channels 1. Reactive programming 1. Supplies 1. Live and on-demand supplies 1. Understanding "react" 1. Understanding "whenever" 1. Understanding "await" 1. Web programming 1. Making remote connections 1. Simple HTTP client 1. Simple HTTP server 1. Cro 101 ## Timeline and deliverable chunks The project needs about six months to complete all sections; independent sections are published earlier, upon completion. The content will be uploaded to a GitHub repository in Markdown format. ## Licensing The course will be publicly available and will be published and released under the Creative Commons license. It will be allowed for everyone to freely use and modify it, both commercially and not. The course can be used by anyone who want to prepare their own teaching class on Perl 6 and related topics (such as 101, or grammars, or concurrency). The course will contain hints for the trainer of which parts should be used and included in a one-day, three-day or a five-day class. ## Hosting The materials will be submitted to a GitHub repository ([github.com](https://github.com) â€” GitHub is a web-based hosting service for version control using Git) and will be hosted by the GitHub Pages service. For the end user, the course will be accessible online. For the potential future contributors, it will be accessible via pull requests. The Perl Foundation can offer a different place of hosting static files if that will benefit the Perl community. ## About me I am a Perl 5 developer since around 1998 and a Perl 6 enthusiast since around 2000. I have/had run a few Perl 6 blogs: - [Perl6.Ru](https://perl6.ru) - [Perl 6 Online](https://perl6.online) - [Perl 6 One-Liners Advent Calendar 2018](https://perl6.online/category/advent-calendar/) I wrote three Perl 6 books: - [Perl 6 at a Glance](https://deeptext.media/perl6-at-a-glance), which is the first book in the new season of Perl 6 - [Perl 6 Deep Dive](https://www.packtpub.com/application-development/perl-6-deep-dive) - [Using Perl 6](https://deeptext.media/using-perl6), which is a collection of exercises aimed to understand the nature and beauty of Perl 6 I gave a lot of Perl 6 talks at different events including FOSDEM 2019. A couple of the recent talks being: - [Perl 6 as a new tool for language compilers](https://www.youtube.com/watch?v=lwIXF25KJCo) at FOSDEM 2019 - [Creating a compiler in Perl 6](https://www.youtube.com/watch?v=YWTmd4Hdfa4) I prepared and ran a few classes on Perl and other programming languages, including: - [Introduction to Perl 6](http://act.yapc.eu/gpw2018/workshops/perl6-intro.html) at the German Perl Workshop 2018 - [Python 3 3-day course](https://github.com/ash/python-tut) - [Python in 5 days](https://github.com/ash/python-in-5days) - [5-day C++ course](https://github.com/ash/cpp-tut) - [2-day JavaScript course](http://github.com/ash/js-tutorial) There are a lot of exercises and materials prepared specially for Perl 6, including: - [Perl 6 challenges](https://github.com/ash/p6challenges) - [Perl 6 tests](https://github.com/ash/perl6tests) - [Perl 6 assorti](https://github.com/ash/perl6-assorti) - [Perl 6 at a glance](https://github.com/ash/perl6-at-a-glance) - [Migrating to Perl 6](https://github.com/ash/perl5to6) - [Solving Euler problems](https://github.com/ash/projecteuler) I have organises a number of events dedicated to the Perl programming languages. The event map covers 8 countries spanning [the distance of about 10,000 km](https://www.google.com/maps/dir/Riga,+Letland/Vladivostok,+Kraj+Primorski,+Rusland/@44.4701035,44.7978367,3z/data=!3m1!4b1!4m14!4m13!1m5!1m1!1s0x46eecfb0e5073ded:0x400cfcd68f2fe30!2m2!1d24.1051865!2d56.9496487!1m5!1m1!1s0x5fb39cba5249d485:0x186704d4dd967e35!2m2!1d131.8869243!2d43.1198091!3e0) between the most Western and the most Eastern city. Among the events, there are three YAPC::Europe conferences ([YAPC::Europe](http://yapceurope.org) conferences are the biggest annual Perl events in Europe): - [YAPC::Europe 2011](http://act.yapc.eu/ye2011) - [YAPC::Europe 2013](http://act.yapc.eu/ye2013) - [PerlCon 2019](https://perlcon.eu/) ## Financial The requested amount is US$2000 per each of the five content parts, thus US$10,000 in total.

Comments (11)

You got several critical comments on your previous version of this proposal ( http://news.perlfoundation.org/2019/03/grant-proposal-create-a-comple.html ). Could you explain what you did with the criticism, and what is different between the two proposals.



I did read both proposals, and I see several differences, but I like to hear your description of those differences. Also, why this proposal should be received better (and approved) than the previous one.



Just to be clear: I really support your proposal, I think it would be a very good thing to have done. I wonder why I did not do that with the previous one. Maybe I was elsewhere and too busy with other stuff... (sorry about that).



My comments on the Complete course grant



1. Increase the percent of video lectures (it is not clear to me how much of the lessons will be accompanied by video lectures, but i am assuming very little, and the the course is primary textual)



2. Publish the course to coursera or edx



3. If you will publish to coursera, make the code examples, mostly on one domain, for example data mining , or text parsing, this will make the course more attractive, and migh attract people interested in the domain, and dont mind using Perl6 as the tool



There were two main comments by the TPF committee and an extensive (rather aggressive) comment from Alex-Daniel.



In the updated proposal, I clearly answered what can be the simplest and reliable solution about hosting the course (answers complain 1).



I removed interactivity completely. It was a nice addition but if that seems difficult, let's skip it for now. It was never the main dish.



A more detailed structure of the course is given (answers complain 2), and more information about who is proposing it, and what I did for teaching other languages.



By the way, as the proposal was submitted about a month ago, let me add another point: my Instagram Python tutorial got 17.000+ subscribers since its launch in March 2019: https://www.instagram.com/amazing_python3/



Regarding Alex-Daniel's comment, if filtering out the rudeness and aggression, and to address the essence, it is all very simple.



First, the doc.perl6.org project has completely different goals and there is no point to mix it with the course and to claim that the course will be not aligned with the docs.



Second, I am offering *a complete product*. TPF either buys it or not. I am the author, and I take responsibility for the content from A to Z and I am happy to correct the errors found in the final product. What was suggested, is essentially creating a product collectively, where other people tell me what to do (and take no responsibility in the result). In this case, the course is not my product, and I am not willing to sign it.



The criticism was fully ignored.



In the comments I suggested numerous times to get in touch with people, mainly those who work on the documentation. Now, I've been busy during the last month, so correct me if I'm wrong, but as far as I know, no attempts to communicate with others were made. Moreover, I tried to contact Andrew using facebook private messages, but got no reply. The thing is, we now have a problem-solving repo which is a good fit for discussing big work, so I suggested to start a ticket there for some feedback before resubmitting the proposal. Unfortunately, this didn't happen. And then, given that the first grant proposal didn't go very well, I was expecting a draft of this proposal to be posted on IRC first for comments.



So we have a lonely wolf who is unwilling to cooperate with others when it comes to integrating their contributions with the rest of the project. I have no clue why that should get any funding. And I'm kinda pissed that the committee didn't explain that in their first rejection.



Even if we give in to the denial of Andrew and for the moment assume that the documentation is absolutely separate from the proposed work (it's not, both projects are very related even if we decide to keep them separate), still, as we will be maintaining both resources in the future (as I previously mentioned, it will likely be maintained by the same people), some compatibility is required. That is, maybe over time some sentences, paragraphs or even pages will need to be moved between the two projects. Unfortunately, we will have incompatible markup (markdown vs pod6) and even different licenses (Artistic 2.0 vs some Creative Commons license). It's a minor detail that can be easily revised, but at this point it's clear that Andrew will do everything his way without giving a single fuck for the work of others.



"The Perl Foundation can offer a different place of hosting static files if that will benefit the Perl community."



Nowadays there are people who are working on the perl6 infrastructure (rba and maettu), and I'd assume that if this thing somehow gets funded and there's a need to host it, they will provide guidance on how to do that. That's something you could've known if you asked. And you'll definitely need to talk to them about your project so that they make sure your stuff doesn't suddenly disappear. Speaking of whichâ€¦



"The content will be uploaded to a GitHub repository" "For the potential future contributors, it will be accessible via pull requests."



Pretty sure that I'm understanding it right that there's no plan to put it under perl6 organization. So whatever corrections we have to make, we'll need to wait for Andrew to accept them, and then in the end we'll probably fork it because right now it is clear that any cooperation will be difficult.





I wish Andrew luck with their course, but I highly recommend the committee to keep that money for projects that will strengthen the PerlÂ 6 project and its resources as a greater whole.



With the answer of Andrew, I am happy to support the proposal and I hope it gets accepted. Courses like this, with all the material that goes with it, will greatly benefit Perl 6.



+1 from me



Dear Ali,



My proposal is fully about text-based course. The main point here is not only the text but that it is accompanied by exercises and thus it can be used in a class room as a reference to follow.



There are no plans to create any video content here (although it may be a good separate thing produced by other people, and which can based on my materials).



Online course platforms such as Stepic or Coursera were mentioned in the previous version of the proposal as an additional item. Although I do not explicitly highlight it this time, I still think that an interactive variant (where you can type and run the code) will appear one day.



I like your #3 suggestion. I think this can be implementing via tagging the examples and building separate contents pages, where you can see everything related to the given domain.



For starters, I really appreciate the work Andrew is doing for the community. His advent calendar is excellent, the knowledge he's got on Perl 6 is encyclopedic, and he's doing great work with PerlCon. However, I have several reasons to not support this grant proposal.

* First, a course is the kind of thing that can very well be done (and funded) independently. You can send course proposals to Udemy, and even Packt. I did, in fact, submit a Perl 6 course proposal to Packt which was rejected because of my Spanish accent. Andrew will probably have no such problem, since his English is much better than mine. These companies do not, in fact, fund development of the course, so the person has to invest their time and get a delayed return on investment, but still, in the long run the returns will be probably better than an one-time lump payment by the community. This, for me, is the most important obstacle for funding this grant.

* There are priorities in the community. Of course, someone should take care of them and apply for the grant (although I guess TPF can be proactive about it), but right now the whole infrastructure is in disarray, with some sites (design.perl6.org) still down with no perspective to come back up. The rakudo/rakudo repo has 800 issues. perl6/doc 256. The community-maintained modules are slowly decaying, with only some time devoted to them from time to time. The ecosystem is a mess (Alex Daniel's words, not mine, but I kinda agree: https://github.com/perl6/problem-solving/issues/39). We need lots of resources all over, and a course is not going to solve any of them, and might make some of them worse (what when they go after the course to the documentation and find something missing or wrong? What if they raise an issue in rakudo and is not addressed?)

* What will be the objective of the course? If it's to increase the size of the community, I don't think it will fulfill that. If you want to learn Perl 6, there are already many resources available to do so, including a supporting community in the IRC channels or in StackOverflow. Before learning a new language, you need to _want_ to learn it. A bit of marketing (or maybe a lot) is what I think we need, because most of the problems mentioned above could be solved with more human resources.

* Related to that, but not only, a course is only useful insofar it gets you something that tutorials or a book will not: a certificate. It mentions that it's a step by step flow with small lessons with many exercises. But unless you're willing to correct those exercises and give feedback, that's no different from a book. Or a book with accompanying video lessons, if that's what's going to be done. Point is (and this is related to my main point above) without certification, course tutoring or any kind of certification, a course is nothing more than an extended tutorial, and not much more useful than that.



Finally, as a person whose day job is creating and delivering courses, I do have many objections about the course itself. I'll start a different set of bullet points here

* A Perl 6 course shouldn't be addressed to Perl 5 users. The indented target audience is fuzzy, and it's not clear if you need, or need not, have a background in programming, or what kind of background you will need to have. A course needs to have a clear target audience in terms of level and knowledge, as well as amount of time they can devote to the actual course. I don't see that kind of thing in this proposal.

* The structure of the course is "classic" in the sense that it hangs on the syntax, with syntactic groups explained in turn, and starting with the infamous "hello world" (1.4, simple input and output). That's never the best way to learn. Modern languages are not designed to learn the syntax, but to learn the concept and look the syntax up somewhere. Unfortunately, main concepts in this course (like functional programming) are left for Part 5. You can't explain a block (which is essentially a lambda) without explaining first concepts in functional programming (in fact, you can explain no P6 without explaining first functional programming). You can't explain data types (part 1.3) without explaining object orientation, because every object in Perl 6 is object oriented. You can't explain subroutines (part 2.2) apart from data types (part 1.3), because routines are first-class objects in Perl 6 (it's functional). Also, you can't explain the MAIN subroutine (part 1.4) without, well, explaining what's a subroutine (part 2.2). These are just a few examples. The fleshed-out course might have more, or maybe less. But anyway, course design is something that nowadays is based in skills and concepts, and I don't see the concept map or flow explaind here.

* There's a lot of material which would be arguably necessary and which is missing. For instance, testing or creating whole modules for releasing them to the ecosystem. JSON does not seem to receive a single module, and it's needed to understand how to configure almost anything, and it's one of the most used modules in the ecosystem. Smartmatch is also a very important concept and is not receiving any attention, with Junctions (which is also a very important concept) relegated to the last part of the course. Typeclasses are not mentioned (or type smileys). Captures are only mentioned in the context of regexes, not signatures. And so on.



Most of the things I say above are arguable, but their main point is related to what Alex Daniel has said above: a course is a very important thing not to share it with the rest of the community and presenting it as a take it or leave it kind of thing. Even if we all agreed that we need to spend 10K on a course and that you are the right person to create that, we might not agree that *this* is the course, in every aspect of it. Of course, the result of a course after community feedback might be something you might not feel comfortable with, but, again, this is a community-funded project, so you might as well listen to the community before the proposal.



So, unfortunately and as I say at the top, and I'm really sorry, I don't support this grant proposal.



While I applaud Andrew's efforts to publish Perl 6 material (and everyone's effort publishing Perl content), I have trouble understanding what's the added value in comparison with the already published books, including Andrew's.



Several books take several approaches to help a student to learn Perl 6 (summarized here by moritz: https://perl6book.com/). (I even see JJ published a new one on Amazon in the meanwhile (with a low price): https://www.amazon.co.uk/Learning-program-Perl-Getting-programming/dp/1521795789.)



If Andrew's book was commercially published I would probably end up buying it (I have several books), but I don't think this should be done through a grant. Echoing JJ And Aleks-Daniels, the Perl 6 community needs to deal with other problems so it can later welcome a higher volume of new people.



To address something JJ mentioned in his comment.



If you feel there are other items that are worthy of grants, please help them get submitted so we can consider them!



The GC is here to get funding to deserving projects, but we can only consider the ones who have submitted grants.



If you don't think they make sense as a grant (for example maintaining infrastructure), then please reach out to someone (myself included) at TPF to discuss:



https://www.perlfoundation.org/whos-who.html



It seems it was approved - http://news.perlfoundation.org/2019/07/grants-mayjun-2019-votes.html



What I would love to see is a complete video based course on something using Perl6. Something that is to learn X domain, but also you learn Perl6. Lets say writing web crawler, Search engine, distributed database, self driven car or whatever :)



Well said Ali! ++

