Vision

When we started out to create projects, we had a vision of what we wanted it to achieve.

Projects should allow learners to take the skills that they have learned and apply them to an end-to-end analysis on a real-world task, using real-world tools and workflows, and showcase their work.

Tasks: projects should be based on real-world content and allow a learner to work on tasks a data scientist is expected to encounter in their daily work. They also need to be end-to-end, allowing the learner to work through the complete data science lifecycle, starting from raw data and ending in interesting insights that can be communicated.

Tools: projects should make use of real-world tools like RStudio, Jupyter Notebooks, Visual Studio, etc. The idea is to make it easier to transition from courses to working on a real-world data science project.

Workflow: projects should allow the user to experience the same workflow that they are likely to encounter while working on a real-world data science project. This implies being able to work locally, installing requirements, working with a version control system, etc.

Showcase: users should be able to showcase their work and build a portfolio of DataCamp projects that they can share with friends, colleagues, and prospective employers.

Projects Interface

The project interface combines a Jupyter Notebook containing the narrative and code for the project, with a sidebar that provides instructions and hints.

Figure 1 | Projects Interface

Every project is broken down into a number of tasks that can be completed by reading the narrative in the notebook and writing code to accomplish the objectives described in the sidebar. The chart below describes the workflow for a project.

Figure 2 | Project Workflow

Narrative

The narrative for every project is fully contained in the Jupyter Notebook and consists of text, code, and outputs that support the story being explored. The narrative starts with text that describes the story and the analysis being explored.

Figure 3 | Narrative

The narrative text is followed by the sample code that provides you with a starting point to tackle the task. Unlike exercises in courses, tasks in projects provide minimal sample code so that you have ample flexibility to write it up from scratch.

Figure 4 | Sample Code

Pedagogy

The sidebar provides you with concrete instructions and hints to accomplish the task at hand. The instructions provide a high-level overview of the task and break it down into a series of steps, often ending with an illustrative output (table, plot, etc.).

Figure 5 | Instructions

Occasionally, you might get stuck on a task and NOT be able to pass the tests despite your best attempt. In such cases, we have you covered with our hints, that will help you get unstuck.

Figure 6 | Hints

Hints will provide you with tips and tricks to complete the task. They will often provide you with references to documentation, articles, and relevant exercises from DataCamp courses. Finally, they might also provide you with scaffolded code that reveals the structure of the solution.

Once you have completed the tasks, you can check your project. This will trigger a series of tests on your code and provide you with feedback on what you need to correct.

Figure 7 | Check Project

DataCamp Advantage

There are different approaches to projects. This section will discuss the USP of projects done on the DataCamp platform, and the advantages it offers to you as a learner.

Clear Separation of Narrative and Pedagogy

An important part of our vision was to let users showcase a finished project seamlessly after they complete it. Hence, we made a deliberate choice to keep the narrative, code, and outputs that support the story, to the notebook, and relegate the pedagogical elements to the sidebar. This keeps the notebook pristine, and devoid of any instructional or pedagogical elements, making it more appropriate to share with a colleague or potential employer.

Flexible Coding Environment with Supervision

Platforms supporting projects usually provide either a fully supervised learning environment, where a coding task needs to be completed exactly to specifications, leaving little flexibility for the end user, or a totally flexible environment, where they can write code in a totally flexible way. The advantage of a supervised learning environment is that it is easy to write tests, but the tests are usually very stringent, making it imperative to provide ample code scaffolding, thereby sacrificing flexibility. Our implementation of projects works around this in a few ways:

While the narrative describes the high-level objectives of the task, the instructions provide a lot of detail into what is expected from the user. The instructions focus on what are the required elements of the output, and also shares output snippets, making it very clear what is to be expected. As the instructions focus on what needs to be done, rather than how it needs to be done, it provides the user with a lot of flexibility in terms of writing code.

The tests are written only to test properties of the user output that are made amply clear in the instructions. This lets the user write code in a very flexible way, while still being able to address the requirements of the task, based on the output requirements that are made explicit in the instructions.

Sometimes, it is hard to complete a task successfully despite having detailed instructions. The only way to proceed in such cases, usually, is to take a peek at the final solution. In our implementation, we explicitly support hints, that nudge the user to the final solution, without having to take a look at the fully completed solution.

If you have not already done so, we would strongly urge you to take projects for a spin. We would recommend that you start with the introductory project in R or Python to familiarize yourself with the interface and the workflow, and then proceed to do others. As always, we would love to get your feedback and suggestions so we can continue to improve the interface and user experience!