{"id":13594435,"url":"https://github.com/alexmojaki/futurecoder","last_synced_at":"2025-05-14T15:05:18.885Z","repository":{"id":37000545,"uuid":"231656051","full_name":"alexmojaki/futurecoder","owner":"alexmojaki","description":"100% free and interactive Python course for beginners","archived":false,"fork":false,"pushed_at":"2025-04-24T17:50:37.000Z","size":12517,"stargazers_count":1352,"open_issues_count":69,"forks_count":148,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-05-13T09:09:20.755Z","etag":null,"topics":["education","learning","learning-by-doing","python"],"latest_commit_sha":null,"homepage":"https://futurecoder.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexmojaki.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-01-03T19:59:26.000Z","updated_at":"2025-05-11T09:49:49.000Z","dependencies_parsed_at":"2023-12-15T09:48:47.498Z","dependency_job_id":"0a22fb42-01bc-4b65-b422-bef7d08bc4c6","html_url":"https://github.com/alexmojaki/futurecoder","commit_stats":{"total_commits":1451,"total_committers":17,"mean_commits":85.3529411764706,"dds":"0.20330806340454854","last_synced_commit":"c86b99ca3883e0b1c91a021b845cbc436f9c74d2"},"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexmojaki%2Ffuturecoder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexmojaki%2Ffuturecoder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexmojaki%2Ffuturecoder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexmojaki%2Ffuturecoder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexmojaki","download_url":"https://codeload.github.com/alexmojaki/futurecoder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254168718,"owners_count":22026206,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["education","learning","learning-by-doing","python"],"created_at":"2024-08-01T16:01:33.465Z","updated_at":"2025-05-14T15:05:18.834Z","avatar_url":"https://github.com/alexmojaki.png","language":"Python","readme":"\u003cp align=\"center\"\u003e\n      \u003ca href=\"https://github.com/alexmojaki/futurecoder/blob/master/LICENSE.txt\"\u003e\u003cimg src=\"https://img.shields.io/github/license/alexmojaki/futurecoder?style=flat\" alt=\"MIT license\" align=\"left\"\u003e\u003c/a\u003e\n      \u003ca href=\"https://github.com/alexmojaki/futurecoder/actions\"\u003e\u003cimg src=\"https://github.com/alexmojaki/futurecoder/workflows/CI/badge.svg\" alt=\"Tests status\" align=\"left\"\u003e\u003c/a\u003e\n      \u003cimg src=\"homepage/static/logo/bordered2.png\" width=\"300px\" height=\"300px\" alt=\"logo\"\u003e\n      \u003ca href=\"https://saucelabs.com\"\u003e\u003cimg src=\"https://opensource.saucelabs.com/images/opensauce/powered-by-saucelabs-badge-gray.png?sanitize=true\" alt=\"Testing Powered By SauceLabs\" align=\"right\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003e\u003ccode\u003efuturecoder\u003c/code\u003e\u003c/h1\u003e\n\nThis is a 100% free and interactive course for people to teach themselves programming in Python, especially complete beginners at programming.\nIt is carefully designed to reduce frustration and guide the user while still ensuring that they learn how to solve problems.\nThe goal is for as many people as possible to learn programming.\n\nYou can try it out here: https://futurecoder.io/\n\n**Please consider [contributing](how_to_contribute.md) or [donating](https://opencollective.com/futurecoder)!**\n\nAlternatively, [come have a chat on slack](https://join.slack.com/t/futurecoder/shared_invite/zt-tp8cmwra-CbdEeX9u3k1VyoMLDupAeQ).\n\n## Features\n\nFor a fuller demonstration and explanation, [watch this video](https://www.youtube.com/watch?v=un1BrrV57PA\u0026feature=youtu.be).\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\nThe course is a fully interactive 'book' which requires the user to run code in the provided editor or shell to\nadvance:\n    \u003c/td\u003e\n  \u003c/tr\u003e\n    \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\n\n![full](images/full.png)\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\nThis requires a mixture of solving problems or simply typing and running provided code. In the latter case, the\nuser is often kept engaged by being asked to predict the output in a simple multiple choice question:\n    \u003c/td\u003e\n    \u003ctd\u003e\nThe code at each step is checked automatically. If\nneeded, the student can get small hints to gradually guide them to the solution:\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n\n![predict_output](images/predict_output.png)\n    \u003c/td\u003e\n    \u003ctd\u003e\n\n![hints](images/hints.png)\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\nIf they're still really stuck, they can reveal the solution bit by bit:\n\u003c/td\u003e\n\u003ctd\u003e\n\nOr in some cases solve a *Parsons problem* instead, where they have to put a shuffled solution in the correct\norder:\n\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n\n![solution](images/solution.png)\n\u003c/td\u003e\n\u003ctd\u003e\n\n![parsons](images/parsons.png)\n\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n\n\u003ctd\u003e\nTracebacks are more helpful than usual, with several enhancements:\n\n- Highlighting the exact operation that failed, not just the line, using [executing](https://github.com/alexmojaki/executing)\n- Tables of local variables and simple expressions evaluated by [pure_eval](https://github.com/alexmojaki/pure_eval)\n- Suggestions for fixes provided by [DidYouMean](https://github.com/SylvainDe/DidYouMean-Python)\n- Beginner friendly explanations provided by [friendly-traceback](https://github.com/aroberge/friendly-traceback) (shown when hovering over the little `i` icon)\n- Showing multiline statements in full thanks to [stack_data](https://github.com/alexmojaki/stack_data) without showing unnecessary extra lines\n\n\u003c/td\u003e\n\u003ctd\u003e\nCommon mistakes can be caught and pointed out to the student. This includes specific checks in some steps as well as linting tailored for beginners.\n\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n\n\u003ctd\u003e\n\n![traceback](images/traceback.png)\n\u003c/td\u003e\n\u003ctd\u003e\n\n![executing](images/messages.png)\n\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n\nSeveral debuggers are provided, including [snoop](https://github.com/alexmojaki/snoop)...\n    \u003c/td\u003e\n    \u003ctd\u003e\n\n[...birdseye...](https://github.com/alexmojaki/birdseye)\n    \u003c/td\u003e\n  \u003c/tr\u003e\n    \u003ctr\u003e\n    \u003ctd\u003e\n\n![snoop](images/snoop.png)\n    \u003c/td\u003e\n    \u003ctd\u003e\n\n![birdseye](images/birdseye.png)\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\n\n...and [Python Tutor](http://pythontutor.com/)\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd colspan=\"2\"\u003e\n\n![pythontutor](images/pythontutor.png)\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Running locally\n\n1. Fork this repo, `git clone` it, and enter the top-level `futurecoder` folder.\n2. Install Python 3.12.1 and [poetry](https://python-poetry.org/docs/#installation).\n3. Run `poetry install` to install Python dependencies.\n4. Run `./scripts/generate.sh`. This will generate various static files from Python used by the frontend and run some tests. Repeat this step whenever you change Python files.\n5. In the `frontend` folder:\n    1. Install `node`. We recommend using version 16.17.1 (lts/gallium) but there are no known issues with other versions.\n\n    2. Run `npm ci` to download dependencies.\n\n    3. Run `npm run build` and then copy `service-worker.js` from the `course` folder to the `public` folder. The service worker is used by [sync-message](https://github.com/alexmojaki/sync-message) to handle `time.sleep` and reading from stdin (e.g. `input()`) in Python. If you want to enable caching (not a good idea when developing), set the environment variable `REACT_APP_PRECACHE=1` when building.\n\n    4. Run `npm start` to start the frontend development server.\n6. Go to http://localhost:3000/course/\n\nTo learn more about the system, see the [contributing guide](how_to_contribute.md).\n\n## Controls\n\nTo explore the course more freely:\n\n1. Click the hamburger menu icon in the top left.\n2. Click Settings.\n3. Turn Developer mode on.\n4. This should give you two red buttons floating at the bottom of the screen. They change the currently active step, so you can move forward without having to complete exercises or backwards to test a step again.\n","funding_links":["https://opencollective.com/futurecoder)!"],"categories":["Python"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexmojaki%2Ffuturecoder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexmojaki%2Ffuturecoder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexmojaki%2Ffuturecoder/lists"}