{"id":13466215,"url":"https://github.com/EmNudge/watlings","last_synced_at":"2025-03-25T21:31:37.622Z","repository":{"id":187590524,"uuid":"677164306","full_name":"EmNudge/watlings","owner":"EmNudge","description":"Learn WebAssembly by writing small programs!","archived":false,"fork":false,"pushed_at":"2024-03-18T16:32:31.000Z","size":75,"stargazers_count":1627,"open_issues_count":2,"forks_count":42,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-10-29T17:40:49.976Z","etag":null,"topics":["exercises","guide","learning","wasm","wast","wat","webassembly"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EmNudge.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2023-08-10T22:45:26.000Z","updated_at":"2024-10-23T14:48:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"26db9ffc-2dec-4ef4-a031-8d91323bdaae","html_url":"https://github.com/EmNudge/watlings","commit_stats":null,"previous_names":["emnudge/watlings"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmNudge%2Fwatlings","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmNudge%2Fwatlings/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmNudge%2Fwatlings/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmNudge%2Fwatlings/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EmNudge","download_url":"https://codeload.github.com/EmNudge/watlings/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222091985,"owners_count":16929761,"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":["exercises","guide","learning","wasm","wast","wat","webassembly"],"created_at":"2024-07-31T15:00:41.032Z","updated_at":"2024-10-29T18:31:22.390Z","avatar_url":"https://github.com/EmNudge.png","language":"JavaScript","readme":"\n\u003cdiv align=center\u003e\n\n# Watlings\n\nLearn the WebAssembly Text Format  \nby fixing a bunch of small programs!\n\n\u003cbr\u003e\n\n[![Button Roadmap]][Roadmap]\n\n\u003cbr\u003e\n\n![Example Exercise]\n\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n## Usage\n\nThis project uses **[Node 16+]** \u0026 **[NPM]** for compilation and testing.\n\n\u003cbr\u003e\n\nClone the repository and install dependencies with:\n\n```sh\ngit clone git@github.com:EmNudge/watlings.git\ncd watlings\nnpm install\n```\n\nComplete lessons by following the instructions in each exercise within the `exercises` directory.\n\nTest your answer to an exercise with the `start` command:\n\n```sh\nnpm start 001_hello\n```\n\n\u003cbr\u003e\n\nIf you'd like to view the solution to an exercise, use the `show` command:\n\n```sh\nnpm run show 001_hello\n```\n\nTo apply it directly to the exercise, use `solve` instead of `show`:\n\n```sh\nnpm run solve 001_hello\n```\n\n\u003cbr\u003e\n\n### Recommended Editor\n\nWe recommend using **[VSCode]** with the **[WATI]** extension.\n\nThis should provide syntax highlighting, intellisense, and other helpful features as you work through the exercises.\n\n\n### Using Wat2Wasm Directly (Recommended)\n\nTo compile your WAT code, we use **[NPM WABT]**. \n\nFor syntax highlighting and up-to-date builds, you can **optionally** use the official **[WebAssembly Binary Toolkit][WABT]** which will provide you with a `wat2wasm` CLI tool. If it is found on your path as `wat2wasm`, it will be used instead.\n\n*While it is strictly optional, it can help with debugging.*\n\n\n\u003cbr\u003e\n\n## Motivations\n\nI've found just diving in to be the best way to build experience with programming. \n\n**[Rustlings]** \u0026 **[Ziglings]** have both had tremendous returns to my journeys with both languages.\n\nWebAssembly (and by extension WAT) has a more sparse educational landscape than most and I was hoping to fill some of the gaps by building a project with the same sort of structure.\n\n\u003cbr\u003e\n\n## Pedagogical Philosophy\n\nOutlined here are some thoughts on what makes a good teaching experience.\n\n### Typing Over Reading\n\nThe goal is to learn by doing. Comments on each file outline a task and some background. However, a lot about a language can be gleaned by its syntax alone. We should be adding **as little** explanation as possible. \n\nOccasional gaps in knowledge can be filled by consistent exposure to the syntax within different contexts. Certain things can therefore be learned without any mention.\n\nIntroduction text is superfluous. Words add visual noise, so we should be careful with our count. Coding itself should supplement ambiguities in the text.\n\nIf you find a text confusing or too verbose, **please create a discussion post**!\n\n### Create Struggle\n\nStudies have shown that one cannot learn effectively without effort. This applies to practically every domain of knowledge. These projects should be educational, not easy.\n\nThis does not mean we should make the education itself elusive. We should not make learning more difficult, but instead more intentional.\n\nWhen introducing a lot of new syntax, keep the problem scope small, but force the user to read a bit. If the syntax is not new, increase the problem scope. Maybe many variations of the same task.\n\n\u003cbr\u003e\n\n## Credits\n\n- [rustlings](https://github.com/rust-lang/rustlings)\n- [Ziglings](https://github.com/ratfactor/ziglings)\n\n\n\u003c!-----------------------------------------------------------------------------\u003e\n\n[Example Exercise]:https://github.com/EmNudge/watlings/assets/24513691/a777c665-fd13-4422-a570-2d3669b0ee94\n\n[NPM WABT]: https://www.npmjs.com/package/wabt\n[VSCode]: https://code.visualstudio.com\n[WATI]: https://marketplace.visualstudio.com/items?itemName=NateLevin.wati\n[WABT]: https://github.com/WebAssembly/wabt/releases/\n[Node 16+]: https://nodejs.org/en\n[NPM]: https://www.npmjs.com/\n\n[Roadmap]: https://github.com/users/EmNudge/projects/1\n\n[Button Roadmap]: https://img.shields.io/badge/Roadmap-19A974?style=for-the-badge\u0026logoColor=white\u0026logo=openstreetmap\n\n[Rustlings]: https://github.com/rust-lang/rustlings\n[ziglings]: https://github.com/ratfactor/ziglings","funding_links":[],"categories":["Uncategorized","JavaScript"],"sub_categories":["Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FEmNudge%2Fwatlings","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FEmNudge%2Fwatlings","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FEmNudge%2Fwatlings/lists"}