There are two types of tasks that can be added after a theoretical part of a topic. These types include comprehension and application problems.
Comprehension problems ensure that students grasp the important information included in the topic. In these tasks, we usually ask about the concepts previously mentioned in the theoretical part. Generally, with comprehension problems, we try to stick to the following guidelines:
- Questions should include only concepts covered by the current topic and its prerequisites;
- Tasks should be clear and concise;
- Task descriptions and task options should have uniform style;
- Some of the problems might be selected as the Problem of the day, so tasks should still be understandable without the context of the topic.
There are several types of the comprehension problems at Hyperskill (you can click each item in the list to see the example):
- multiple choice problems;
- matching problems;
- sorting problems;
- short answer problems (a string as an answer);
- number problems.
Multiple choice problems consist of a question and several options with one or more correct and a few incorrect answers (which are also known as distractors). We recommend using from 3 to 7 alternative options (4 to 5 is optimal) and avoid vague or contradictory answers.
Matching problems provide students with two columns of matching elements. This type of task is perfect for finding maximum or minimum values of different data types, for "translating" something from a programming language to normal English, for matching terms with definitions, and so on.
Sorting problems require students to put the options in the correct order. For example, it can be jumbled lines of code, a priority order, or a set of values, which can be sorted from the lowest to the highest.
Short answer problems requires students to type out an answer to the question. With this kind of task, we can ask students to fill in a term, an expression, a tag, a version number, and so on.
Number problems ask students to make calculations and then enter a single decimal answer with the specified precision.
Application problems are designed to help learners apply their knowledge directly to practice. The level of abstraction of some topics is so high that it is hard to imagine how this information can be used in real life, so it might be a little tricky to distinguish comprehension problems from the application ones.
A comprehension task may ask you: "What does compilation mean?" Here, you're just being tested on whether you remember the definition or not. Meanwhile, an application task may ask you: "Choose pieces of code that won't compile." That is, you have to apply the knowledge that you've received while reading a topic, not just remember some terms or definitions.
There are several types of the application problems at Hyperskill (you can click each item in the list to see the example):
Coding problems execute solution on the server and enforce memory and time limits. These are one of the most complex types of problems on our platform. Usually, the first thing to do when creating coding problems is to specify the user input data and then – the result of the program execution. That’s where test cases come in. The submitted solution will be tested on every test case. For each test case, the solution should not exceed given time and memory limits. Also, there should be at least 1 and at most 100 test cases.
Parsons problems are complete programs or snippets of code where the lines of the program are mixed up. This task asks the students to arrange the lines in the correct order. Also, the students should pay attention to indentations.
HTML & CSS challenges ask students to write the structure and style of an HTML document. Learners fill out the HTML and CSS fields to see their code shown in the Result window. Afterwards, we use DOM selectors to check the submission.
Math problems require students to write some mathematical expressions like as the answer. We usually use math problems to test the knowledge of important formulas or to allow the students to draw some conclusions themselves. We use simpy library to handle the matching.