Educational Products: New Features for Course Creators

JetBrains’ Educational Products now support Java, Kotlin, and Python. Technically, all the educational features are implemented as a special EduTools plugin, so you have a choice of IDEs to use – IntelliJ IDEA, Android Studio, or PyCharm – in your learning and teaching. One of the major advantages of making a plugin for us as developers is the freedom to share new features. No matter what release stages our IDEs are on, we can update the plugin anytime and let you try all the freshly baked features while they are still hot from the oven.

Last week, we updated the EduTools plugin to version 1.5 and want to tell you about some major features you can now try.

Open a course as an educator
Group lessons into sections
Create tasks with dependent answer placeholders
Write task descriptions, with full IDE support

To get the plugin update, choose Help | Check for Updates (for Windows or *NIX) or <Your IDE> | Check for Updates (for macOS) on the main menu:Screen Shot 2018-05-16 at 14.23.24

Open a course as an educator

When creating a new course, it is often much easier to start with some existing course as a template rather than creating everything from scratch. If you’ve chosen Educator as your primary role, you can now open any available course in the editor mode.

For example, you can choose our Kotlin Koans course to take a closer look at all the code tasks and tests. Go to Browse Courses from the Welcome Screen, find the Kotlin Koans course, and click the (brand new) arrow icon next to the Join button:Screen_Shot_2018-05-16_at_14_29_34_1

The IDE will create a local copy of the course, with all the source files available to dig into and customize:Screen Shot 2018-05-16 at 14.36.44

Group lessons into sections

So far, every course created with an IDE has been structured as a list of lessons, with each lesson containing some tasks. Now, you can group lessons into sections.

Let’s go back to the copy of Kotlin Koans course we’ve just created and rearrange it a little. Let’s say we want to add a new Intro section to the course and add a Hello, World! first lesson to it. To create a new section, right-click the course and select New -> Section:Screen Shot 2018-05-16 at 14.52.35

Then drag the new section to the top of the course:Screen Shot 2018-05-16 at 14.55.56

Now we can create a new Hello, World! lesson: right-click Intro and select New -> Lesson:Screen Shot 2018-05-16 at 14.58.38Screen Shot 2018-05-16 at 15.05.16

You can also drag lessons from one section to another.

Create tasks with dependent answer placeholders

If you want to give learners an opportunity to work with the same code fragment and reuse code they have already written in previous tasks, you will be glad to know there is now a way to do so.

In the course we’ve been working with in this post, we have a simple Hello, world! task. Learners should make the start  function return “OK”:Screen Shot 2018-05-16 at 15.17.20

This is a very simple first task that traditionally proves to the learner that their environment is working. It also shows some simple function syntax. What if we want to add one more step and show the learner some simple variable syntax as well? We can also familiarize the learner with the idea that even a simple program may be written in multiple ways, all producing the same result.

So, as a first task, we’ll ask the learner to make the function return “OK”:

As a second task, we want them to change the code and make the function return the value of an extracted String variable:

Note that in the second task, we want to reuse the string value “OK” from the first task. Let’s see how we can implement this.

We have already created the new Hello, World! lesson in our new course. We are going to have the first task of the new Hello, World! lesson be exactly the same as an existing Hello, world! task in the original Kotlin Koans course. So we drag the existing Hello, world! task to the new Hello, World! lesson:Screen Shot 2018-05-16 at 14.59.32

Then we rename it to task1 (select Refactor -> Rename in the task’s right-click menu):Screen Shot 2018-05-16 at 15.33.33

We also need to create a task2 (New -> Task from the lesson’s right-click menu) in this lesson, and then add the code with the string variable to the task file:Screen Shot 2018-05-16 at 15.46.08

The test will be the same, because the start function should still return “OK”.

Now we need to add placeholders to task2. We will have two placeholders there, but the first one should depend on the placeholder from the task1, because it has the code we want to reuse. Let’s create it first:Screen Shot 2018-05-16 at 15.53.31

Now we need to add a dependency. Right-click the answer placeholder and select Answer Placeholder -> Add Dependency:Screen Shot 2018-05-16 at 15.54.03

We also need to write the full path <section name>#<lesson name>#<task name>#<task file>#<placeholder number> for the placeholder from the task1:Screen Shot 2018-05-16 at 15.55.04

Now let’s create the second placeholder:Screen Shot 2018-05-16 at 15.55.31

Finally, it’s time to check how this all looks from the learner’s perspective. We make a course preview (right-click the course and select Course Creator -> Create Course Preview) and choose the learner’s look.

From their point of view, the first task looks the same as it did in the original Kotlin Koans course:Screen Shot 2018-05-16 at 16.06.23

But there is also the second task, which notifies the learner they should solve task1 first:Screen Shot 2018-05-16 at 16.10.12

When the first task is solved…Screen Shot 2018-05-16 at 16.25.26

…the dependent placeholder in the second task is automatically replaced with the right answer, so the learner can focus on the second placeholder:Screen Shot 2018-05-16 at 16.25.46

Write task descriptions, with full IDE support

Writing task descriptions is a major part of creating a course. We want you to be able to do this part of your work while having all the possibilities and power that our IDEs can offer. That’s why you can now edit task descriptions right in the editor, with all the HTML code completion and other IDE features available, including instant preview on the Task Description panel.

Let’s get back to our course and add a description to task2. Go to Task Description panel and click the Edit button:Screen_Shot_2018-05-16_at_16_33_13

This will open task.html for editing:Screen Shot 2018-05-16 at 16.35.36

Note that you can rename this file to task.md if you want to use Markdown instead of HMTL:Screen Shot 2018-05-16 at 16.47.12

Any changes in the file are immediately reflected on the Task Description panel.

Our work on all of these new features is still in progress. We’re going to improve and polish them, but we need your feedback to go in the right direction! Please give them a try and leave a comment here, or tweet at us. Thanks!

The Educational Products Team

This entry was posted in Education. Bookmark the permalink.

6 Responses to Educational Products: New Features for Course Creators

  1. bilak says:

    Hi,
    is there way how to create course with other language than java and kotlin?

    Thanks

    • Tatiana Vasilyeva says:

      Hi!

      Java, Python, and Kotlin are supported at the moment. What language are you interested in?

      • bilak says:

        It’s not language but more likely tool. I’m interested in creating courses for liquibase or flyway.

        thanks

        • Tatiana Vasilyeva says:

          What IDE features could be used in this kind of courses? Are there any of them in DataGrip? It’s quite an interesting idea to make EduTools also compatible with DataGrip. Though we haven’t thought about it in the first place. With a more detailed use case, we can come up with something for databases as well, I think.

          • bilak says:

            For example with liquibase and xml configuration you can use at least xml editor and also execute existing configuration against some database configuration which you can have configured inside IDE. If you need more info contact me directly we can discuss it.

            • Tatiana Vasilyeva says:

              Thanks! I will get back to you. I need to talk to DataGrip team and investigate a little bit first.

Leave a Reply to Tatiana Vasilyeva Cancel reply

Your email address will not be published. Required fields are marked *