Level 2: Applied Expertise

Grading Rubric

Develop an independent coding project accepted for publishing in the Wolfram Function Repository, Wolfram Language Example Repository or Wolfram Language Paclet Repository. Projects must be submitted and published according to the terms of the respective sites, but acceptance by a particular repository alone does not guarantee Level 2 certification. Projects are assessed by the certification team according to the grading rubric below. A project score of 75 or greater will earn Level 2 certification in Wolfram Language programming. If a project cannot be publicly shared, it can be shared with a Wolfram instructor during a certification project presentation session. This certification is available to those who have already earned Wolfram Language Level 1 certification and have either published or presented their coding projects according to program guidelines, paid the stated certification fee and submitted relevant project files (Wolfram Notebook and/or Wolfram Language package source files).

Please see the following for examples of submissions that would be sufficient to earn the submitter Level 2 certification:

## Wolfram Function Repository Submission

Wolfram Function Repository Submission

Note: Begin your submission by going to the Mathematica or Wolfram Desktop menu and selecting File New Repository Item Function Repository Item.

### Definition (30 points)

Definition (30 points)

Write a clear and well-organized definition for your function.

This definition should be appropriately complex (it should not be something like but something substantive).

TimesAdder[x_, y_] := (x + y)*{x, y},

Pay special attention to efficiency—the function does not need to be stripped down to the barest parts for the absolute maximum performance, but you should take care to write it in a way that takes advantage of Wolfram Language's strengths. For example:

Avoid loops; use ideas like listability instead.

Do not make a large number of unnecessary copies of data.

Make clever use of structural transformations where possible.

Ensure that the definition is as human readable as possible. Sufficiently complex definitions always require some judgment about how to balance efficiency, readability and compactness, so please exercise this judgment to the best of your ability.

### Documentation (70 points)

Documentation (70 points)

The definition of a function is clearly a very important part of any Function Repository submission. However, the majority of the points for your Level 2 certification will come from the documentation that you write. This documentation explains to users exactly how your function works, details the intricacies and possibilities of how to use it, demonstrates its most interesting possible applications and even determines whether anybody can find your function in the first place. This is where you can truly demonstrate your proficiency—in being able to explain your work to others in a useful way.

#### USAGE (20 POINTS)

USAGE (20 POINTS)

Basic Usage

Provide simple input examples that explain how the user should make calls to the function.

Details and Options

Explain the default option choices and various behaviors of the function.

Provide any additional details that you think will be relevant to the interested user.

#### EXAMPLES (40 POINTS)

EXAMPLES (40 POINTS)

In each of the following subsections, make sure that each example Input/Output pair is accompanied by text that explains and contextualizes the code.

Basic Examples

Provide several basic usage examples showing the "simplest" operation of your function.

Scope

Provide more complex examples that paint a larger picture of what your function can do.

Options

List all of the options that your function can take and explain what the different values for these options do.

Applications

Explain uses of your function that might intersect with a real-world task that a user might want to perform.

Properties and Relations (Optional)

Inform the user of any additional properties that they should be aware of and any related functions that might help contextualize your function.

Possible Issues (Optional)

Mention any issues that users might run into while using your function. For example:

Maybe your function is computationally intensive and there is no way around this—explain that large inputs may take a long time to evaluate or even run out of memory.

Perhaps a user might expect your function to work with (say) fractional exponents, but it only works for specific cases—explain the limitations and offer suggestions.

Neat Examples (Optional)

Show off something interesting or novel that your function can do that might catch a user's eye.

#### SOURCE AND ADDITIONAL INFO (10 POINTS)

SOURCE AND ADDITIONAL INFO (10 POINTS)

Keywords

List all appropriate keywords so that interested users will be able to easily find your function.

Categories

Select all appropriate categories so that Wolfram can ensure that your function appears in the correct places.

Related Symbols and Resource Objects

Think carefully about which Wolfram Language symbols (e.g. functions) and tutorials/guides/etc. are related to your function.

The list of related resources helps users to build their "vocabulary" and is one of the most important parts of any documentation page.

Citations

Include any relevant citations, e.g. for an algorithm or implementation that you used in your function.

Tests

Show Input/Output test pairs that can be used to ensure that your function is working properly on any given installation or in any particular environment.

Compatibility

Fill out the checklist that specifies the compatibility information for your function.

## Examples, Paclets and Other Projects

Examples, Paclets and Other Projects

Due to the effectively unlimited number of possibilities (in terms of subject matter, scope, formatting and so on), it is not practical to provide a point-by-point breakdown of what is necessary for submissions to the Wolfram Language Example Repository or Wolfram Language Paclet Repository. However, the overall rubric still applies.

### Definition (30 points)

Definition (30 points)

Write clear and well-organized code.

Pay special attention to efficiency—take care to write code in a way that takes advantage of Wolfram Language's strengths. For example:

Avoid loops; use ideas like listability instead.

Do not make a large number of unnecessary copies of data.

Make clever use of structural transformations where possible.

Your examples and code should be appropriately complex (it should not be something like , but something substantive).

TimesAdder[x_, y_] := (x + y)*{x, y}

Ensure that your code is as human readable as possible. Sufficiently complex operations always require some judgment about how to balance efficiency, readability and compactness, so please exercise this judgment to the best of your ability.

### Documentation (70 points)

Documentation (70 points)

The majority of the points for your Level 2 certification will come from your examples and explanations for what your code can accomplish.

Explain exactly how your code works, demonstrate its most interesting possible applications and show how others can use the code in a similar way. This is where you can truly highlight your proficiency—in being able to explain your work to others in a useful way.

Remember to discuss related and/or relevant functions as well as to cite any relevant sources that were useful in your submission.

## Helpful Guidance from the Wolfram Resource System

Helpful Guidance from the Wolfram Resource System