- Authors: Kit Barton (LLVM Foundation, IBM Canada, @kbarton)
- Andreas Bergen (University of Toronto, Mississauga, @AndiB)
- Chris Bieneman (LLVM Foundation, Microsoft, @beanz)
- Mike Edwards (LLVM Foundation, Modular, @sqlbyme)
Overview
This proposal is the work of four authors (named above) who spent time
discussing challenges faced by sponsors of the LLVM Foundation, contributors to
LLVM, and educators. This captures collected ideas from hours of brainstorming
and discussion. As the proposal moves toward action, community feedback and
participation is crucial to make this effort successful.
The next section of the document describes our foundational understanding of the
challenges this proposal attempts to address, and the later sections contain
concrete proposals for action. The last section contains action items for the
authors and readers who wish to support these efforts.
Background
As the applications of compiler technology expand and compilers themselves grow
increasingly complex, the demand for skilled compiler engineers continues to
grow. Employers are struggling to fill roles and are increasingly hiring
inexperienced engineers and investing in on-the-job training.
Many factors limit employers’ abilities to bring on inexperienced engineers.
These factors include:
- Sourcing candidates with interest and relevant background.
- Balancing training candidates with achieving organizational goals.
Some amount of on-the-job training is expected and even desirable, however
having candidates with some background in compilers or related technology can
reduce the onboarding costs of new employees. This is even more significant if
the experience is with LLVM itself. Hiring new employees with even basic
compiler or LLVM experience can free up additional mentoring resources to
support hiring additional candidates.
Today new candidates may be introduced to compiler engineering in university
computer science curriculums. While many of those courses can be interesting and
valuable, they often focus on parsing and general text processing problems.
While there is no doubt that a firm grasp of these aspects of a compiler are integral
to its functioning, they are not the parts of compilers where most compiler
engineers spend most of their time.
Having a comprehensive compiler course that focused on more broad applications
of compiler technologies, like JITs, language productivity tools, IR
optimizations, and code analysis, as well as related topics like language
runtimes, debuggers, and linkers would be immensely valuable toward training
high quality candidates in a broad array of skills useful to professional
compiler engineers.
Enhancing Existing Resources
Our shortest term goals are to engage community volunteers in improving
existing resources. The goal of this first phase is to provide accessible and
up-to-date English-language documentation, tutorials and other reference
materials via llvm.org.
Inventory Existing Resources
One of the challenges in this effort is the absence of a catalog of existing
resources. Knowing what resources exist, the topics those resources cover and
whether or not they are accurate and up-to-date is a foundational step. This
inventory will be scoped to only include resources hosted or distributed via
LLVM Foundation-sponsored sources.
Those sources include, but are not limited to:
- LLVM Channel on YouTube.
- The LLVM Project Blog.
- LLVM and sub-project documentation hosted on llvm.org.
Creating this inventory is a large amount of work, but it can be distributed
across a team of volunteers with each individual contributing as much or as
little as their preference and availability allow.
Creating an inventory and surveying the resources will be driven using Google
Forms to allow community participation in reviewing and classifying resources.
Having an inventory of the existing resources is a key step to other community
goals.
Building an On-Ramp
Once the existing resources are inventoried the community can begin building an
onboarding track of resources. These resources should be geared to guide an
individual with C++ programming experience through LLVM’s software architecture,
developer and contribution process, and into advanced topics around LLVM
components.
This onboarding resource will be hosted on llvm.org,
separate from the per-project documentation and will serve as a launching point
into the other resources. The goal of creating an onboarding resource is not to
produce new documentation parallel to the existing documentation sources, but
rather to create a guided path through existing resources.
Creating New Resources
The second phase of the outreach initiative is targeted at expanding our base of
resources and bringing LLVM into Universities to meet students where they are.
This work will require more significant volunteer effort or funding from the
LLVM Foundation or sponsor organizations.
Filling Gaps
As the onboarding track is filled out, there will be gaps in the topics
currently covered in the existing resources. Volunteer support will then be
solicited to fill the gaps by producing written and video documentation. Videos
can be filmed either at LLVM Foundation hosted events or with the support of the
LLVM Foundation at times and places convenient to the creator.
Filling gaps will require both time from individuals to generate new resources
or update existing ones, and potentially funding from the LLVM Foundation to
create additional resources.
University Speaker Series
In order to bring students into the project it is important to meet them where
they are. The program will focus on building a presence for LLVM on campuses
around the world. The initial form of this program will use volunteer speakers
that will be matched with professors and student organizations at universities
near them.
Long-term Investments
Up to this point the proposal has focused around efforts that primarily require
volunteer effort. Volunteer-driven progress will have limits. This section
captures ideas that will require sustained financial investment. The last
subsection in this section proposes avenues of funding which the LLVM Foundation
could pursue.
Localization of Resources
One of the challenges with localizing resources is the cost of high-quality
translation. One-time costs like subtitling recorded videos are easier to
manage than ongoing costs like maintaining translated versions of
llvm.org and the per-project documentation sites.
It is crucial to the community’s prioritization of inclusivity that some
localized resources are available. Starting with the on-ramp resources described
in the first section, and branching out across all our documentation this will
be a concerted long-term investment that will require substantial financial
funding.
Developing an Open Source LLVM-based Curriculum
Reaching students where they are is key. Many prominent universities have
provided open source or public courses for computer science topics. Although
many of those courses are focused on beginner-level computer science topics the
open source nature of compiler development makes it ideal for an open source
curriculum.
Building a full and comprehensive compiler curriculum complete with an open
source textbook, exercises, and lesson plans would be a huge step to bringing
LLVM into classrooms.
As with resource localization, this cannot be a one-time investment. LLVM
changes rapidly as does the field of compiler engineering. The large funding
required to build the curriculum and resources must be coupled with a long-term
funding plan to keep the resources up-to-date.
Funding Big Investments
The ideas described in the subsection above all require dedicated paid resources
to complete. A separate proposal for funding large investments is in progress.
The authors will be proposing to the LLVM Foundation creation of grant and
scholarship programs. The structure of the programs will provide concrete goals
associated with the funding.
Taking Action
Author’s Next Steps
- Collecting lists of volunteers and educators.
- Giving a talk at the LLVM Developer Meeting on this RFC.
- Collect Community Feedback.
- Hosting a round table at the LLVM Developer Meeting to collect feedback.
- Collecting feedback from community members not at the Dev meeting.
- Working with the LLVM Foundation to secure funding.
Reader’s Next Steps
- If you want to volunteer, fill out our Google Form!
- Give us feedback here, at the Dev Meeting, via Discord, IRC, or email.